From 26af9d5c6da79e3ab6a434e089205e563f7d9986 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 4 Sep 2018 19:53:51 -0700 Subject: [PATCH] Initial commit for 3.0 The altar mostly works. Sigils exist. Orbs exist. Living Armor framework exists. Probably some other things. --- build.gradle | 43 +- gradle.properties | 15 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../bloodmagic/api/BloodMagicPlugin.java | 6 +- .../bloodmagic/api/IBloodMagicAPI.java | 6 +- .../bloodmagic/api/IBloodMagicBlacklist.java | 2 +- .../bloodmagic/api/IBloodMagicPlugin.java | 2 +- .../api/IBloodMagicRecipeRegistrar.java | 11 +- .../api/IBloodMagicValueManager.java | 2 +- .../api/event/BloodMagicCraftedEvent.java | 10 +- .../bloodmagic/api/package-info.java | 2 +- .../compat/jei/BloodMagicJEIPlugin.java | 35 + .../jei/altar/RecipeCategoryAltar.java} | 29 +- .../compat/jei/altar/RecipeWrapperAltar.java | 49 + .../compat/waila/BloodMagicHwylaPlugin.java | 15 + .../compat/waila/DataProviderBloodAltar.java | 40 + .../java/WayofTime/bloodmagic/BloodMagic.java | 123 -- .../WayofTime/bloodmagic/ConfigHandler.java | 93 -- .../alchemyArray/AlchemyArrayEffect.java | 33 - .../AlchemyArrayEffectArrowTurret.java | 243 --- .../AlchemyArrayEffectAttractor.java | 393 ----- .../AlchemyArrayEffectBinding.java | 71 - .../AlchemyArrayEffectBounce.java | 51 - .../AlchemyArrayEffectCrafting.java | 63 - .../AlchemyArrayEffectCraftingNew.java | 58 - .../AlchemyArrayEffectFurnaceFuel.java | 143 -- .../AlchemyArrayEffectLaputa.java | 154 -- .../AlchemyArrayEffectMobSacrifice.java | 233 --- .../AlchemyArrayEffectMovement.java | 74 - .../alchemyArray/AlchemyArrayEffectSigil.java | 39 - .../AlchemyArrayEffectSkeletonTurret.java | 186 --- .../alchemyArray/AlchemyArrayEffectSpike.java | 52 - .../AlchemyArrayEffectTeleport.java | 101 -- .../AlchemyArrayEffectUpdraft.java | 44 - .../alchemyArray/AlchemyCircleRenderer.java | 151 -- .../bloodmagic/altar/AltarComponent.java | 55 - .../bloodmagic/altar/AltarUpgrade.java | 24 - .../WayofTime/bloodmagic/altar/AltarUtil.java | 86 -- .../bloodmagic/altar/BloodAltar.java | 711 --------- .../bloodmagic/altar/ComponentType.java | 27 - .../bloodmagic/altar/IAltarComponent.java | 12 - .../bloodmagic/altar/IAltarManipulator.java | 8 - .../bloodmagic/altar/IBloodAltar.java | 54 - .../api/impl/BloodMagicCorePlugin.java | 156 -- .../api/impl/BloodMagicValueManager.java | 62 - .../bloodmagic/block/BlockAlchemyArray.java | 143 -- .../bloodmagic/block/BlockAlchemyTable.java | 158 -- .../bloodmagic/block/BlockAltar.java | 173 --- .../bloodmagic/block/BlockBloodLight.java | 112 -- .../bloodmagic/block/BlockBloodRune.java | 44 - .../bloodmagic/block/BlockBloodTank.java | 195 --- .../bloodmagic/block/BlockDecorative.java | 20 - .../bloodmagic/block/BlockDemonBase.java | 21 - .../bloodmagic/block/BlockDemonCrucible.java | 102 -- .../bloodmagic/block/BlockDemonCrystal.java | 223 --- .../block/BlockDemonCrystallizer.java | 77 - .../bloodmagic/block/BlockDemonLight.java | 21 - .../block/BlockDemonPillarBase.java | 33 - .../block/BlockDemonPillarCapBase.java | 31 - .../bloodmagic/block/BlockDemonPylon.java | 63 - .../block/BlockDemonStairsBase.java | 27 - .../bloodmagic/block/BlockDemonWallBase.java | 27 - .../block/BlockDimensionalPortal.java | 183 --- .../bloodmagic/block/BlockIncenseAltar.java | 86 -- .../block/BlockInputRoutingNode.java | 53 - .../block/BlockInversionPillar.java | 91 -- .../block/BlockInversionPillarEnd.java | 57 - .../block/BlockItemRoutingNode.java | 39 - .../bloodmagic/block/BlockLifeEssence.java | 66 - .../block/BlockMasterRoutingNode.java | 43 - .../bloodmagic/block/BlockMimic.java | 228 --- .../block/BlockOutputRoutingNode.java | 53 - .../WayofTime/bloodmagic/block/BlockPath.java | 64 - .../bloodmagic/block/BlockPhantom.java | 82 - .../block/BlockRitualController.java | 136 -- .../bloodmagic/block/BlockRitualStone.java | 62 - .../bloodmagic/block/BlockRoutingNode.java | 137 -- .../bloodmagic/block/BlockSoulForge.java | 100 -- .../bloodmagic/block/BlockSpectral.java | 105 -- .../bloodmagic/block/BlockTeleposer.java | 66 - .../WayofTime/bloodmagic/block/IBMBlock.java | 8 - .../bloodmagic/block/base/BlockEnum.java | 98 -- .../block/base/BlockEnumPillar.java | 124 -- .../block/base/BlockEnumPillarCap.java | 73 - .../block/base/BlockEnumStairs.java | 343 ----- .../bloodmagic/block/base/BlockEnumWall.java | 122 -- .../bloodmagic/block/base/BlockInteger.java | 81 - .../block/enums/EnumDecorative.java | 22 - .../block/enums/EnumDemonBlock1.java | 23 - .../block/enums/EnumDemonBlock2.java | 33 - .../block/enums/EnumDemonBlock3.java | 33 - .../block/enums/EnumInversionCap.java | 28 - .../bloodmagic/block/enums/EnumMimic.java | 23 - .../bloodmagic/block/enums/EnumPath.java | 26 - .../block/enums/EnumRitualController.java | 21 - .../block/enums/EnumSubWillType.java | 33 - .../block/enums/EnumSubWillType1.java | 20 - .../block/enums/EnumSubWillType2.java | 20 - .../block/enums/EnumSubWillType3.java | 19 - .../bloodmagic/block/enums/EnumWillWall.java | 33 - .../bloodmagic/client/IMeshProvider.java | 40 - .../bloodmagic/client/IVariantProvider.java | 13 - .../client/gui/GuiAlchemyTable.java | 65 - .../client/gui/GuiBloodMagicConfig.java | 64 - .../bloodmagic/client/gui/GuiHandler.java | 64 - .../bloodmagic/client/gui/GuiHolding.java | 57 - .../client/gui/GuiItemRoutingNode.java | 200 --- .../client/gui/GuiMasterRoutingNode.java | 44 - .../bloodmagic/client/gui/GuiSoulForge.java | 56 - .../bloodmagic/client/gui/GuiTeleposer.java | 42 - .../client/helper/ShaderHelper.java | 182 --- .../client/hud/ConfigEntryEditHUD.java | 39 - .../bloodmagic/client/hud/ElementInfo.java | 39 - .../client/hud/ElementRegistry.java | 148 -- .../bloodmagic/client/hud/Elements.java | 136 -- .../bloodmagic/client/hud/GuiEditHUD.java | 183 --- .../client/hud/element/ElementDemonAura.java | 78 - .../element/ElementDivinedInformation.java | 46 - .../client/hud/element/ElementHolding.java | 85 -- .../client/hud/element/ElementItemStack.java | 23 - .../client/hud/element/ElementSprite.java | 20 - .../client/hud/element/ElementString.java | 36 - .../hud/element/ElementTileInformation.java | 57 - .../client/hud/element/HUDElement.java | 58 - .../bloodmagic/client/key/IKeybindable.java | 8 - .../client/key/KeyBindingBloodMagic.java | 16 - .../bloodmagic/client/key/KeyBindings.java | 96 -- .../mesh/CustomMeshDefinitionActivatable.java | 25 - .../mesh/CustomMeshDefinitionMultiWill.java | 27 - .../mesh/CustomMeshDefinitionWillGem.java | 28 - .../client/render/LayerBloodElytra.java | 53 - .../AttractorAlchemyCircleRenderer.java | 142 -- .../BindingAlchemyCircleRenderer.java | 236 --- .../DualAlchemyCircleRenderer.java | 145 -- .../LowAlchemyCircleRenderer.java | 22 - .../LowStaticAlchemyCircleRenderer.java | 29 - .../MobSacrificeAlchemyCircleRenderer.java | 267 ---- .../SingleAlchemyCircleRenderer.java | 127 -- .../StaticAlchemyCircleRenderer.java | 131 -- .../TurretAlchemyCircleRenderer.java | 280 ---- .../render/block/RenderAlchemyArray.java | 26 - .../client/render/block/RenderAltar.java | 164 -- .../client/render/block/RenderBloodTank.java | 109 -- .../render/block/RenderDemonCrucible.java | 55 - .../client/render/block/RenderFakeBlocks.java | 62 - .../render/block/RenderItemRoutingNode.java | 110 -- .../client/render/block/RenderMimic.java | 20 - .../entity/BloodLightRenderFactory.java | 13 - .../entity/CorruptedChickenRenderFactory.java | 13 - .../entity/CorruptedSheepRenderFactory.java | 13 - .../entity/CorruptedSpiderRenderFactory.java | 13 - .../entity/CorruptedZombieRenderFactory.java | 13 - .../render/entity/MeteorRenderFactory.java | 13 - .../render/entity/MimicRenderFactory.java | 13 - .../render/entity/RenderCorruptedChicken.java | 33 - .../render/entity/RenderCorruptedSheep.java | 31 - .../render/entity/RenderCorruptedSpider.java | 35 - .../render/entity/RenderCorruptedZombie.java | 66 - .../render/entity/RenderEntityBloodLight.java | 38 - .../render/entity/RenderEntityMeteor.java | 41 - .../render/entity/RenderEntityMimic.java | 117 -- .../entity/RenderEntitySentientArrow.java | 108 -- .../render/entity/RenderEntitySoulSnare.java | 39 - .../render/entity/RenderSentientSpecter.java | 110 -- .../entity/SentientArrowRenderFactory.java | 13 - .../entity/SentientSpecterRenderFactory.java | 13 - .../render/entity/SoulSnareRenderFactory.java | 13 - .../entity/layer/LayerAlchemyCircle.java | 82 - .../entity/layer/LayerCorruptedSheepWool.java | 51 - .../layer/LayerCorruptedSpiderEyes.java | 51 - .../client/render/entity/layer/LayerWill.java | 58 - .../render/model/ModelCorruptedChicken.java | 102 -- .../render/model/ModelCorruptedSheep.java | 59 - .../render/model/ModelCorruptedSheep2.java | 46 - .../render/model/ModelCorruptedSpider.java | 166 -- .../client/render/model/ModelMeteor.java | 89 -- .../client/render/model/ModelMimic.java | 136 -- .../bloodmagic/command/CommandBloodMagic.java | 44 - .../command/sub/SubCommandBind.java | 78 - .../command/sub/SubCommandNetwork.java | 183 --- .../bloodmagic/command/sub/SubCommandOrb.java | 107 -- .../bloodmagic/compat/guideapi/BookUtils.java | 62 - .../compat/guideapi/GuideBloodMagic.java | 58 - .../compat/guideapi/book/CategoryAlchemy.java | 154 -- .../guideapi/book/CategoryArchitect.java | 726 --------- .../compat/guideapi/book/CategoryDemon.java | 191 --- .../compat/guideapi/book/CategoryRitual.java | 140 -- .../compat/guideapi/book/CategorySpell.java | 17 - .../compat/guideapi/entry/EntryText.java | 52 - .../guideapi/page/PageAlchemyArray.java | 94 -- .../compat/guideapi/page/PageAltarRecipe.java | 70 - .../page/PageTartaricForgeRecipe.java | 125 -- .../compat/jei/BloodMagicJEIPlugin.java | 121 -- .../AlchemyArrayCraftingCategory.java | 75 - .../AlchemyArrayCraftingRecipeJEI.java | 33 - .../AlchemyTableRecipeCategory.java | 75 - .../alchemyTable/AlchemyTableRecipeJEI.java | 60 - .../compat/jei/altar/AltarRecipeJEI.java | 58 - .../ArmourDowngradeRecipeCategory.java | 93 -- .../ArmourDowngradeRecipeHandler.java | 32 - .../ArmourDowngradeRecipeJEI.java | 34 - .../ArmourDowngradeRecipeMaker.java | 21 - .../jei/binding/BindingRecipeCategory.java | 75 - .../jei/binding/BindingRecipeHandler.java | 31 - .../compat/jei/binding/BindingRecipeJEI.java | 34 - .../jei/binding/BindingRecipeMaker.java | 39 - .../forge/TartaricForgeRecipeCategory.java | 92 -- .../jei/forge/TartaricForgeRecipeJEI.java | 66 - .../compat/waila/BloodMagicHwylaPlugin.java | 42 - .../provider/DataProviderAlchemyArray.java | 55 - .../provider/DataProviderBloodAltar.java | 122 -- .../waila/provider/DataProviderBloodTank.java | 51 - .../waila/provider/DataProviderMimic.java | 57 - .../DataProviderRitualController.java | 80 - .../waila/provider/DataProviderTeleposer.java | 58 - .../compress/AdvancedCompressionHandler.java | 138 -- .../compress/BaseCompressionHandler.java | 91 -- .../compress/CompressionHandler.java | 15 - .../compress/CompressionRegistry.java | 93 -- .../compress/StorageBlockCraftingManager.java | 138 -- ...StorageBlockCraftingRecipeAssimilator.java | 285 ---- .../bloodmagic/core/RegistrarBloodMagic.java | 157 -- .../core/RegistrarBloodMagicBlocks.java | 167 -- .../core/RegistrarBloodMagicItems.java | 311 ---- .../core/RegistrarBloodMagicRecipes.java | 245 --- .../core/data/BMWorldSavedData.java | 58 - .../bloodmagic/core/data/SoulNetwork.java | 255 ---- .../bloodmagic/core/data/SoulTicket.java | 85 -- .../registry/AlchemyArrayRecipeRegistry.java | 350 ----- .../registry/AlchemyTableRecipeRegistry.java | 39 - .../core/registry/AltarRecipeRegistry.java | 215 --- .../LivingArmourDowngradeRecipeRegistry.java | 60 - .../bloodmagic/core/registry/OrbRegistry.java | 62 - .../registry/TartaricForgeRecipeRegistry.java | 39 - .../WayofTime/bloodmagic/demonAura/PosXY.java | 65 - .../bloodmagic/demonAura/WillChunk.java | 60 - .../bloodmagic/demonAura/WillWorld.java | 40 - .../demonAura/WorldDemonWillHandler.java | 178 --- .../entity/ai/EntityAIAttackRangedBow.java | 138 -- .../entity/ai/EntityAIAttackStealthMelee.java | 142 -- .../entity/ai/EntityAIEatAndCorruptBlock.java | 99 -- .../entity/ai/EntityAIFollowOwner.java | 125 -- .../ai/EntityAIGrabEffectsFromOwner.java | 136 -- .../ai/EntityAIHurtByTargetIgnoreTamed.java | 27 - .../entity/ai/EntityAIMimicReform.java | 27 - .../entity/ai/EntityAIOwnerHurtByTarget.java | 50 - .../entity/ai/EntityAIOwnerHurtTarget.java | 50 - .../entity/ai/EntityAIPickUpAlly.java | 154 -- .../entity/ai/EntityAIProtectAlly.java | 98 -- .../entity/ai/EntityAIRetreatToHeal.java | 135 -- .../entity/ai/EntityAIStealthRetreat.java | 96 -- .../ai/EntityAIStealthTowardsTarget.java | 87 -- .../entity/mob/EntityAspectedDemonBase.java | 242 --- .../entity/mob/EntityCorruptedChicken.java | 202 --- .../entity/mob/EntityCorruptedSheep.java | 354 ----- .../entity/mob/EntityCorruptedSpider.java | 202 --- .../entity/mob/EntityCorruptedZombie.java | 185 --- .../entity/mob/EntityDemonBase.java | 304 ---- .../bloodmagic/entity/mob/EntityMimic.java | 327 ---- .../entity/mob/EntitySentientSpecter.java | 486 ------ .../entity/projectile/EntityBloodLight.java | 171 --- .../entity/projectile/EntityMeteor.java | 134 -- .../projectile/EntitySentientArrow.java | 149 -- .../entity/projectile/EntitySoulSnare.java | 43 - .../bloodmagic/event/AddToNetworkEvent.java | 26 - .../bloodmagic/event/AltarCraftedEvent.java | 33 - .../bloodmagic/event/BoundToolEvent.java | 50 - .../bloodmagic/event/ItemBindEvent.java | 35 - .../bloodmagic/event/RitualEvent.java | 133 -- .../event/SacrificeKnifeUsedEvent.java | 35 - .../bloodmagic/event/TeleposeEvent.java | 78 - .../fakePlayer/FakeNetHandlerPlayServer.java | 160 -- .../bloodmagic/fakePlayer/FakePlayerBM.java | 46 - .../bloodmagic/gson/SerializerBase.java | 19 - .../bloodmagic/gson/Serializers.java | 100 -- .../bloodmagic/iface/IActivatable.java | 26 - .../bloodmagic/iface/IAlchemyArray.java | 7 - .../bloodmagic/iface/IAltarReader.java | 9 - .../bloodmagic/iface/IBloodRune.java | 15 - .../iface/ICustomAlchemyConsumable.java | 11 - .../bloodmagic/iface/IDemonWillViewer.java | 11 - .../bloodmagic/iface/IDocumentedBlock.java | 32 - .../bloodmagic/iface/IItemLPContainer.java | 14 - .../bloodmagic/iface/IMultiWillTool.java | 8 - .../bloodmagic/iface/INodeRenderer.java | 8 - .../bloodmagic/iface/IPurificationAsh.java | 11 - .../iface/ISentientSwordEffectProvider.java | 11 - .../bloodmagic/iface/ISentientTool.java | 8 - .../WayofTime/bloodmagic/iface/ISigil.java | 29 - .../bloodmagic/iface/IUpgradeTrainer.java | 15 - .../incense/EnumTranquilityType.java | 12 - .../bloodmagic/incense/IIncensePath.java | 14 - .../incense/ITranquilityHandler.java | 10 - .../incense/IncenseAltarComponent.java | 55 - .../incense/IncenseAltarHandler.java | 92 -- .../incense/IncenseTranquilityRegistry.java | 28 - .../bloodmagic/incense/TranquilityStack.java | 11 - .../inversion/CorruptionHandler.java | 86 -- .../inversion/InversionPillarHandler.java | 193 --- .../item/ItemActivationCrystal.java | 64 - .../bloodmagic/item/ItemAlchemicVial.java | 19 - .../bloodmagic/item/ItemAltarMaker.java | 140 -- .../bloodmagic/item/ItemArcaneAshes.java | 65 - .../bloodmagic/item/ItemBindableBase.java | 34 - .../bloodmagic/item/ItemBloodOrb.java | 123 -- .../bloodmagic/item/ItemBoundAxe.java | 130 -- .../bloodmagic/item/ItemBoundPickaxe.java | 141 -- .../bloodmagic/item/ItemBoundShovel.java | 127 -- .../bloodmagic/item/ItemBoundSword.java | 135 -- .../bloodmagic/item/ItemBoundTool.java | 254 --- .../item/ItemDaggerOfSacrifice.java | 84 - .../bloodmagic/item/ItemDemonCrystal.java | 45 - .../bloodmagic/item/ItemDemonWillGauge.java | 47 - .../WayofTime/bloodmagic/item/ItemEnum.java | 60 - .../bloodmagic/item/ItemExperienceBook.java | 184 --- .../bloodmagic/item/ItemInscriptionTool.java | 107 -- .../bloodmagic/item/ItemLavaCrystal.java | 69 - .../bloodmagic/item/ItemPotionFlask.java | 133 -- .../bloodmagic/item/ItemRitualDiviner.java | 517 ------- .../bloodmagic/item/ItemRitualReader.java | 240 --- .../item/ItemSacrificialDagger.java | 203 --- .../bloodmagic/item/ItemSanguineBook.java | 116 -- .../WayofTime/bloodmagic/item/ItemSlate.java | 49 - .../item/ItemTelepositionFocus.java | 110 -- .../bloodmagic/item/ItemUpgradeTome.java | 112 -- .../bloodmagic/item/ItemUpgradeTrainer.java | 88 -- .../item/alchemy/ItemCuttingFluid.java | 99 -- .../ItemLivingArmourPointsUpgrade.java | 105 -- .../item/armour/ItemLivingArmour.java | 505 ------ .../item/armour/ItemSentientArmour.java | 583 ------- .../item/block/ItemBlockAlchemyTable.java | 67 - .../item/block/ItemBlockBloodTank.java | 78 - .../item/block/ItemBlockDemonCrystal.java | 46 - .../bloodmagic/item/block/ItemBlockMimic.java | 144 -- .../item/block/base/ItemBlockEnum.java | 33 - .../item/block/base/ItemBlockInteger.java | 31 - .../item/gear/ItemPackSacrifice.java | 100 -- .../item/gear/ItemPackSelfSacrifice.java | 125 -- .../item/inventory/ContainerHolding.java | 153 -- .../item/inventory/InventoryHolding.java | 69 - .../item/inventory/ItemInventory.java | 224 --- .../item/routing/IFluidFilterProvider.java | 12 - .../item/routing/IItemFilterProvider.java | 12 - .../item/routing/IRoutingFilterProvider.java | 14 - .../item/routing/ItemFluidRouterFilter.java | 149 -- .../item/routing/ItemNodeRouter.java | 195 --- .../item/routing/ItemRouterFilter.java | 171 --- .../bloodmagic/item/sigil/ItemSigil.java | 40 - .../bloodmagic/item/sigil/ItemSigilAir.java | 71 - .../bloodmagic/item/sigil/ItemSigilBase.java | 61 - .../item/sigil/ItemSigilBloodLight.java | 96 -- .../item/sigil/ItemSigilBounce.java | 22 - .../bloodmagic/item/sigil/ItemSigilClaw.java | 22 - .../item/sigil/ItemSigilCompression.java | 33 - .../item/sigil/ItemSigilDivination.java | 49 - .../sigil/ItemSigilElementalAffinity.java | 25 - .../item/sigil/ItemSigilEnderSeverance.java | 30 - .../item/sigil/ItemSigilFastMiner.java | 52 - .../item/sigil/ItemSigilFilledHand.java | 20 - .../bloodmagic/item/sigil/ItemSigilFrost.java | 21 - .../item/sigil/ItemSigilGreenGrove.java | 96 -- .../bloodmagic/item/sigil/ItemSigilHaste.java | 22 - .../item/sigil/ItemSigilHolding.java | 301 ---- .../bloodmagic/item/sigil/ItemSigilLava.java | 113 -- .../item/sigil/ItemSigilMagnetism.java | 43 - .../item/sigil/ItemSigilPhantomBridge.java | 89 -- .../item/sigil/ItemSigilSuppression.java | 50 - .../item/sigil/ItemSigilTeleposition.java | 160 -- .../item/sigil/ItemSigilToggleable.java | 96 -- .../item/sigil/ItemSigilToggleableBase.java | 59 - .../item/sigil/ItemSigilTransposition.java | 142 -- .../bloodmagic/item/sigil/ItemSigilVoid.java | 114 -- .../bloodmagic/item/sigil/ItemSigilWater.java | 133 -- .../item/sigil/ItemSigilWhirlwind.java | 22 - .../bloodmagic/item/soul/ItemMonsterSoul.java | 121 -- .../item/soul/ItemSentientArmourGem.java | 81 - .../bloodmagic/item/soul/ItemSentientAxe.java | 495 ------ .../bloodmagic/item/soul/ItemSentientBow.java | 496 ------ .../item/soul/ItemSentientPickaxe.java | 494 ------ .../item/soul/ItemSentientShovel.java | 495 ------ .../item/soul/ItemSentientSword.java | 455 ------ .../bloodmagic/item/soul/ItemSoulGem.java | 268 ---- .../bloodmagic/item/soul/ItemSoulSnare.java | 80 - .../item/soulBreath/ItemFlightScroll.java | 327 ---- .../soulBreath/ItemSoulBreathContainer.java | 75 - .../item/types/AlchemicVialType.java | 52 - .../bloodmagic/item/types/ComponentTypes.java | 63 - .../bloodmagic/item/types/ISubItem.java | 19 - .../bloodmagic/item/types/ShardType.java | 25 - .../livingArmour/ILivingArmour.java | 47 - .../bloodmagic/livingArmour/LivingArmour.java | 334 ---- .../livingArmour/LivingArmourHandler.java | 64 - .../livingArmour/LivingArmourUpgrade.java | 90 -- .../bloodmagic/livingArmour/StatTracker.java | 66 - .../LivingArmourUpgradeBattleHungry.java | 71 - .../LivingArmourUpgradeCrippledArm.java | 54 - .../LivingArmourUpgradeDigSlowdown.java | 65 - .../LivingArmourUpgradeDisoriented.java | 63 - .../LivingArmourUpgradeMeleeDecrease.java | 74 - .../LivingArmourUpgradeQuenched.java | 54 - .../LivingArmourUpgradeSlippery.java | 91 -- .../LivingArmourUpgradeSlowHeal.java | 62 - .../LivingArmourUpgradeSlowness.java | 72 - .../LivingArmourUpgradeStormTrooper.java | 59 - .../tracker/StatTrackerArrowProtect.java | 104 -- .../tracker/StatTrackerArrowShot.java | 104 -- .../tracker/StatTrackerCriticalStrike.java | 104 -- .../tracker/StatTrackerDigging.java | 104 -- .../tracker/StatTrackerExperience.java | 104 -- .../tracker/StatTrackerFallProtect.java | 104 -- .../tracker/StatTrackerFireResist.java | 89 -- .../livingArmour/tracker/StatTrackerFood.java | 108 -- .../tracker/StatTrackerGraveDigger.java | 104 -- .../tracker/StatTrackerGrimReaperSprint.java | 111 -- .../tracker/StatTrackerHealthboost.java | 104 -- .../livingArmour/tracker/StatTrackerJump.java | 106 -- .../tracker/StatTrackerMeleeDamage.java | 104 -- .../tracker/StatTrackerMovement.java | 116 -- .../tracker/StatTrackerNightSight.java | 124 -- .../tracker/StatTrackerPhysicalProtect.java | 104 -- .../tracker/StatTrackerPoison.java | 90 -- .../tracker/StatTrackerRepairing.java | 104 -- .../tracker/StatTrackerSelfSacrifice.java | 106 -- .../tracker/StatTrackerSolarPowered.java | 104 -- .../tracker/StatTrackerSprintAttack.java | 104 -- .../tracker/StatTrackerStepAssist.java | 114 -- .../LivingArmourUpgradeArrowProtect.java | 55 - .../upgrade/LivingArmourUpgradeArrowShot.java | 56 - .../LivingArmourUpgradeCriticalStrike.java | 63 - .../upgrade/LivingArmourUpgradeDigging.java | 75 - .../upgrade/LivingArmourUpgradeElytra.java | 51 - .../LivingArmourUpgradeExperience.java | 48 - .../LivingArmourUpgradeFallProtect.java | 55 - .../LivingArmourUpgradeFireResist.java | 69 - .../LivingArmourUpgradeGraveDigger.java | 61 - .../LivingArmourUpgradeGrimReaperSprint.java | 86 -- .../LivingArmourUpgradeHealthboost.java | 69 - .../upgrade/LivingArmourUpgradeJump.java | 63 - .../LivingArmourUpgradeKnockbackResist.java | 67 - .../LivingArmourUpgradeMeleeDamage.java | 69 - .../LivingArmourUpgradeNightSight.java | 77 - .../LivingArmourUpgradePhysicalProtect.java | 55 - .../LivingArmourUpgradePoisonResist.java | 70 - .../upgrade/LivingArmourUpgradeRepairing.java | 73 - .../LivingArmourUpgradeSelfSacrifice.java | 49 - .../LivingArmourUpgradeSolarPowered.java | 79 - .../upgrade/LivingArmourUpgradeSpeed.java | 105 -- .../LivingArmourUpgradeSprintAttack.java | 74 - .../LivingArmourUpgradeStepAssist.java | 55 - .../WayofTime/bloodmagic/meteor/Meteor.java | 106 -- .../bloodmagic/meteor/MeteorComponent.java | 70 - .../meteor/MeteorConfigHandler.java | 162 -- .../bloodmagic/meteor/MeteorRegistry.java | 44 - .../network/BloodMagicPacketHandler.java | 37 - .../network/DemonAuraPacketProcessor.java | 57 - .../ItemRouterAmountPacketProcessor.java | 70 - .../ItemRouterButtonPacketProcessor.java | 74 - .../bloodmagic/network/KeyProcessor.java | 52 - .../PlayerFallDistancePacketProcessor.java | 45 - .../PlayerVelocityPacketProcessor.java | 59 - .../network/SigilHoldingPacketProcessor.java | 48 - .../WayofTime/bloodmagic/orb/BloodOrb.java | 68 - .../WayofTime/bloodmagic/orb/IBloodOrb.java | 10 - .../bloodmagic/potion/BMPotionUtils.java | 137 -- .../bloodmagic/potion/PotionBloodMagic.java | 56 - .../potion/PotionEventHandlers.java | 172 --- .../bloodmagic/proxy/ClientProxy.java | 158 -- .../bloodmagic/proxy/CommonProxy.java | 40 - .../recipe/LivingArmourDowngradeRecipe.java | 151 -- .../recipe/TartaricForgeRecipe.java | 160 -- .../AlchemyTableCustomRecipe.java | 44 - .../AlchemyTableDyeableRecipe.java | 116 -- .../AlchemyTablePotionAugmentRecipe.java | 97 -- .../AlchemyTablePotionRecipe.java | 139 -- .../alchemyTable/AlchemyTableRecipe.java | 201 --- .../registry/ModArmourTrackers.java | 66 - .../registry/ModCorruptionBlocks.java | 16 - .../bloodmagic/registry/ModRecipes.java | 288 ---- .../bloodmagic/registry/ModRituals.java | 22 - .../registry/ModTranquilityHandlers.java | 21 - .../bloodmagic/ritual/AreaDescriptor.java | 495 ------ .../bloodmagic/ritual/CapabilityRuneType.java | 47 - .../ritual/EnumRitualReaderState.java | 8 - .../bloodmagic/ritual/EnumRuneType.java | 64 - .../bloodmagic/ritual/IMasterRitualStone.java | 64 - .../bloodmagic/ritual/IRitualStone.java | 23 - .../WayofTime/bloodmagic/ritual/Ritual.java | 384 ----- .../bloodmagic/ritual/RitualComponent.java | 60 - .../bloodmagic/ritual/RitualManager.java | 148 -- .../bloodmagic/ritual/RitualRegister.java | 49 - .../bloodmagic/ritual/RitualRenderer.java | 12 - .../harvest/HarvestHandlerPlantable.java | 120 -- .../ritual/harvest/HarvestHandlerStem.java | 55 - .../ritual/harvest/HarvestHandlerTall.java | 46 - .../ritual/harvest/HarvestRegistry.java | 105 -- .../ritual/harvest/IHarvestHandler.java | 37 - .../imperfect/IImperfectRitualStone.java | 19 - .../ritual/imperfect/ImperfectRitual.java | 91 -- .../ritual/imperfect/package-info.java | 7 - .../ritual/portal/LocationsHandler.java | 108 -- .../bloodmagic/ritual/portal/Teleports.java | 245 --- .../ritual/types/RitualAltarBuilder.java | 261 ---- .../ritual/types/RitualAnimalGrowth.java | 220 --- .../ritual/types/RitualArmourEvolve.java | 87 -- .../ritual/types/RitualCobblestone.java | 96 -- .../ritual/types/RitualContainment.java | 71 - .../ritual/types/RitualCrushing.java | 293 ---- .../ritual/types/RitualCrystalHarvest.java | 87 -- .../ritual/types/RitualCrystalSplit.java | 190 --- .../ritual/types/RitualEllipsoid.java | 261 ---- .../ritual/types/RitualExpulsion.java | 237 --- .../ritual/types/RitualFeatheredKnife.java | 220 --- .../ritual/types/RitualFelling.java | 110 -- .../ritual/types/RitualForsakenSoul.java | 199 --- .../ritual/types/RitualFullStomach.java | 109 -- .../ritual/types/RitualGreenGrove.java | 277 ---- .../ritual/types/RitualHarvest.java | 142 -- .../ritual/types/RitualInterdiction.java | 73 - .../ritual/types/RitualJumping.java | 82 - .../bloodmagic/ritual/types/RitualLava.java | 297 ---- .../types/RitualLivingArmourDowngrade.java | 208 --- .../ritual/types/RitualMagnetic.java | 162 -- .../bloodmagic/ritual/types/RitualMeteor.java | 143 -- .../bloodmagic/ritual/types/RitualPlacer.java | 104 -- .../bloodmagic/ritual/types/RitualPortal.java | 230 --- .../bloodmagic/ritual/types/RitualPump.java | 108 -- .../ritual/types/RitualRegeneration.java | 185 --- .../bloodmagic/ritual/types/RitualSpeed.java | 184 --- .../ritual/types/RitualSuppression.java | 76 - .../ritual/types/RitualUpgradeRemove.java | 125 -- .../bloodmagic/ritual/types/RitualWater.java | 69 - .../ritual/types/RitualWellOfSuffering.java | 136 -- .../bloodmagic/ritual/types/RitualZephyr.java | 95 -- .../types/imperfect/ImperfectRitualDay.java | 23 - .../types/imperfect/ImperfectRitualNight.java | 24 - .../types/imperfect/ImperfectRitualRain.java | 29 - .../imperfect/ImperfectRitualResistance.java | 25 - .../imperfect/ImperfectRitualZombie.java | 32 - .../bloodmagic/routing/DefaultItemFilter.java | 117 -- .../bloodmagic/routing/IFluidFilter.java | 33 - .../bloodmagic/routing/IFluidRoutingNode.java | 9 - .../routing/IInputFluidRoutingNode.java | 9 - .../routing/IInputItemRoutingNode.java | 9 - .../bloodmagic/routing/IItemFilter.java | 32 - .../bloodmagic/routing/IItemRoutingNode.java | 9 - .../routing/IMasterRoutingNode.java | 17 - .../routing/IOutputFluidRoutingNode.java | 9 - .../routing/IOutputItemRoutingNode.java | 9 - .../bloodmagic/routing/IRoutingFilter.java | 5 - .../bloodmagic/routing/IRoutingNode.java | 26 - .../routing/IgnoreNBTItemFilter.java | 21 - .../bloodmagic/routing/ModIdItemFilter.java | 16 - .../bloodmagic/routing/NodeHelper.java | 21 - .../bloodmagic/routing/OreDictItemFilter.java | 37 - .../routing/RoutingFluidFilter.java | 225 --- .../bloodmagic/routing/TestItemFilter.java | 214 --- .../bloodmagic/soul/DemonWillHolder.java | 81 - .../bloodmagic/soul/EnumDemonWillType.java | 46 - .../WayofTime/bloodmagic/soul/IDemonWill.java | 52 - .../bloodmagic/soul/IDemonWillConduit.java | 18 - .../bloodmagic/soul/IDemonWillGem.java | 27 - .../bloodmagic/soul/IDemonWillWeapon.java | 10 - .../bloodmagic/soul/IDiscreteDemonWill.java | 40 - .../bloodmagic/soul/ISoulBreathContainer.java | 16 - .../soul/PlayerDemonWillHandler.java | 176 --- .../structures/BuildTestStructure.java | 56 - .../bloodmagic/structures/Dungeon.java | 152 -- .../bloodmagic/structures/DungeonRoom.java | 62 - .../structures/DungeonRoomLoader.java | 75 - .../structures/DungeonRoomRegistry.java | 28 - .../structures/DungeonStructure.java | 47 - .../bloodmagic/structures/DungeonTester.java | 82 - .../bloodmagic/structures/DungeonUtil.java | 46 - .../bloodmagic/structures/ModDungeons.java | 26 - .../bloodmagic/teleport/ITeleport.java | 7 - .../bloodmagic/teleport/PortalLocation.java | 90 -- .../bloodmagic/teleport/Teleport.java | 70 - .../bloodmagic/teleport/TeleportQueue.java | 37 - .../teleport/TeleporterBloodMagic.java | 32 - .../bloodmagic/tile/TileAlchemyArray.java | 202 --- .../bloodmagic/tile/TileAlchemyTable.java | 516 ------- .../WayofTime/bloodmagic/tile/TileAltar.java | 190 --- .../bloodmagic/tile/TileBloodTank.java | 80 - .../bloodmagic/tile/TileDemonCrucible.java | 214 --- .../bloodmagic/tile/TileDemonCrystal.java | 211 --- .../tile/TileDemonCrystallizer.java | 157 -- .../bloodmagic/tile/TileDemonPylon.java | 106 -- .../tile/TileDimensionalPortal.java | 41 - .../tile/TileImperfectRitualStone.java | 46 - .../bloodmagic/tile/TileIncenseAltar.java | 160 -- .../bloodmagic/tile/TileInventory.java | 261 ---- .../bloodmagic/tile/TileInversionPillar.java | 532 ------- .../tile/TileMasterRitualStone.java | 411 ----- .../WayofTime/bloodmagic/tile/TileMimic.java | 369 ----- .../bloodmagic/tile/TilePhantomBlock.java | 37 - .../tile/TilePurificationAltar.java | 83 - .../bloodmagic/tile/TileSoulForge.java | 284 ---- .../bloodmagic/tile/TileSpectralBlock.java | 84 - .../bloodmagic/tile/TileTeleposer.java | 138 -- .../bloodmagic/tile/base/TileTicking.java | 55 - .../tile/container/ContainerAlchemyTable.java | 123 -- .../container/ContainerItemRoutingNode.java | 235 --- .../container/ContainerMasterRoutingNode.java | 20 - .../tile/container/ContainerSoulForge.java | 105 -- .../tile/container/ContainerTeleposer.java | 80 - .../tile/routing/TileFilteredRoutingNode.java | 119 -- .../tile/routing/TileInputRoutingNode.java | 73 - .../tile/routing/TileItemRoutingNode.java | 7 - .../tile/routing/TileMasterRoutingNode.java | 490 ------ .../tile/routing/TileOutputRoutingNode.java | 73 - .../tile/routing/TileRoutingNode.java | 176 --- .../WayofTime/bloodmagic/util/BlockStack.java | 68 - .../bloodmagic/util/BooleanResult.java | 24 - .../WayofTime/bloodmagic/util/ChatUtil.java | 227 --- .../WayofTime/bloodmagic/util/Constants.java | 176 --- .../util/DamageSourceBloodMagic.java | 24 - .../bloodmagic/util/GhostItemHelper.java | 56 - .../bloodmagic/util/ItemStackWrapper.java | 113 -- .../WayofTime/bloodmagic/util/StateUtil.java | 37 - .../java/WayofTime/bloodmagic/util/Utils.java | 973 ------------ .../bloodmagic/util/handler/IMCHandler.java | 61 - .../util/handler/event/ClientHandler.java | 398 ----- .../util/handler/event/CraftingHandler.java | 150 -- .../util/handler/event/GenericHandler.java | 438 ------ .../handler/event/LivingArmourHandler.java | 375 ----- .../handler/event/StatTrackerHandler.java | 175 --- .../util/handler/event/WillHandler.java | 166 -- .../util/helper/BindableHelper.java | 49 - .../bloodmagic/util/helper/IncenseHelper.java | 45 - .../bloodmagic/util/helper/ItemHelper.java | 131 -- .../bloodmagic/util/helper/NBTHelper.java | 13 - .../bloodmagic/util/helper/NetworkHelper.java | 168 -- .../bloodmagic/util/helper/NumeralHelper.java | 32 - .../bloodmagic/util/helper/PlayerHelper.java | 49 - .../util/helper/PlayerSacrificeHelper.java | 138 -- .../util/helper/PurificationHelper.java | 33 - .../bloodmagic/util/helper/RecipeHelper.java | 55 - .../bloodmagic/util/helper/RitualHelper.java | 120 -- .../bloodmagic/util/helper/TextHelper.java | 65 - .../com/wayoftime/bloodmagic/BloodMagic.java | 61 + .../bloodmagic/api/impl/BloodMagicAPI.java | 8 +- .../api/impl/BloodMagicBlacklist.java | 6 +- .../api/impl/BloodMagicCorePlugin.java | 174 +++ .../api/impl/BloodMagicRecipeRegistrar.java | 181 +-- .../api/impl/BloodMagicValueManager.java | 62 + .../api/impl/recipe/RecipeAlchemyArray.java | 4 +- .../api/impl/recipe/RecipeAlchemyTable.java | 2 +- .../api/impl/recipe/RecipeBloodAltar.java | 6 +- .../api/impl/recipe/RecipeSacrificeCraft.java | 17 +- .../api/impl/recipe/RecipeTartaricForge.java | 2 +- .../bloodmagic/block/BlockBloodAltar.java | 133 ++ .../bloodmagic/block/BlockBloodRune.java | 19 + .../bloodmagic/block/BlockDemonDecor.java | 33 + .../bloodmagic/block/BlockMundane.java | 37 + .../bloodmagic/block/BlockStairsExtended.java | 36 + .../wayoftime}/bloodmagic/client/Sprite.java | 4 +- .../client/render/TESRBloodAltar.java | 87 ++ .../core/BloodMagicConfiguration.java | 19 + .../bloodmagic/core/RegistrarBloodMagic.java | 41 + .../core/RegistrarBloodMagicBlocks.java | 117 ++ .../core/RegistrarBloodMagicItems.java | 136 ++ .../core/RegistrarBloodMagicLivingArmor.java | 82 + .../core/RegistrarBloodMagicRecipes.java | 41 + .../bloodmagic/core/altar/AltarComponent.java | 37 + .../bloodmagic/core}/altar/AltarTier.java | 147 +- .../bloodmagic/core/altar/AltarUpgrades.java | 71 + .../bloodmagic/core/altar/AltarUtil.java | 153 ++ .../core/altar/IAltarManipulator.java | 13 + .../core/handler/GenericEventHandler.java | 52 + .../core/living/ILivingContainer.java | 54 + .../core/living/LivingEquipmentEvent.java | 64 + .../bloodmagic/core/living/LivingStats.java | 136 ++ .../core/living/LivingStatusWatcher.java | 33 + .../bloodmagic/core/living/LivingUpgrade.java | 125 ++ .../bloodmagic/core/living/LivingUtil.java | 62 + .../bloodmagic/core/network}/Binding.java | 9 +- .../bloodmagic/core/network/BloodOrb.java | 48 + .../bloodmagic/core/network/IBloodOrb.java | 12 + .../core/network/NetworkInteraction.java | 78 + .../bloodmagic/core/network/SNSavedData.java | 81 + .../bloodmagic/core/network/SoulNetwork.java | 140 ++ .../core/recipe/IngredientBloodOrb.java | 11 +- .../recipe/IngredientBloodOrbFactory.java | 6 +- .../bloodmagic/core/type/BloodRunes.java} | 15 +- .../bloodmagic/core/type/ComponentType.java | 14 + .../bloodmagic/core/type/DemonWillType.java | 22 + .../bloodmagic/core/type/SlateType.java | 23 + .../bloodmagic/core}/util/BMLog.java | 18 +- .../bloodmagic/core/util/BooleanResult.java | 20 + .../bloodmagic/core/util/JsonUtil.java | 102 ++ .../bloodmagic/core/util/OrbUtil.java | 24 + .../bloodmagic/core}/util/PluginUtil.java | 16 +- .../core/util/RegistryAddCallbackWrapper.java | 51 + .../core/util/register/IItemProvider.java | 13 + .../core/util/register/IVariantProvider.java | 15 + .../bloodmagic/event/BindingEvent.java | 33 + .../bloodmagic/event/SacrificeEvent.java | 45 + .../bloodmagic/event/SoulNetworkEvent.java | 22 +- .../wayoftime/bloodmagic/guide/Category.java | 36 + .../com/wayoftime/bloodmagic/guide/Entry.java | 29 + .../com/wayoftime/bloodmagic/guide/Guide.java | 34 + .../bloodmagic/guide/page/PageComponent.java | 61 + .../guide/page/PageComponentFiller.java | 8 + .../guide/page/PageComponentImage.java | 32 + .../guide/page/PageComponentItem.java | 14 + .../guide/page/PageComponentRecipe.java | 19 + .../guide/page/PageComponentSmelting.java | 20 + .../guide/page/PageComponentText.java | 50 + .../bloodmagic/guide/test/GuideTest.java | 56 + .../bloodmagic/guide/test/ItemGuide.java | 15 + .../bloodmagic/guide/test/gui/Bookmark.java | 23 + .../bloodmagic/guide/test/gui/GuiGuide.java | 35 + .../wayoftime/bloodmagic/item}/IBindable.java | 26 +- .../bloodmagic/item/ItemAltarBuilder.java | 84 + .../bloodmagic/item/ItemBindable.java | 26 + .../bloodmagic/item/ItemBloodOrb.java | 55 + .../item/ItemDaggerSelfSacrifice.java | 55 + .../bloodmagic/item/ItemLivingArmor.java | 163 ++ .../bloodmagic/item/ItemLivingTome.java | 63 + .../bloodmagic/item/ItemMundane.java | 13 + .../bloodmagic/item/sigil/ISigil.java | 51 + .../bloodmagic/item/sigil/ItemSigil.java | 176 +++ .../bloodmagic/item/sigil/SigilAir.java | 46 + .../item/sigil/SigilDivination.java | 27 + .../bloodmagic/item/sigil/SigilFastMiner.java | 23 + .../bloodmagic/item/sigil/SigilHaste.java | 23 + .../bloodmagic/proxy/ClientProxy.java | 15 + .../wayoftime/bloodmagic/proxy/IProxy.java | 8 + .../bloodmagic/proxy/ServerProxy.java | 4 + .../bloodmagic/tile/TileBloodAltar.java | 268 ++++ .../bloodmagic/tile/base/TileBase.java | 56 +- .../armatures/block/pillar_mid.json | 42 - .../asms/block/inversion_pillar.json | 13 - .../blockstates/activation_crystal.json | 26 - .../bloodmagic/blockstates/alchemic_vial.json | 18 - .../bloodmagic/blockstates/alchemy_array.json | 10 - .../bloodmagic/blockstates/alchemy_table.json | 50 - .../assets/bloodmagic/blockstates/altar.json | 14 - .../bloodmagic/blockstates/altar_maker.json | 16 - .../bloodmagic/blockstates/arcane_ashes.json | 16 - .../blockstates/base_fluid_filter.json | 16 - .../blockstates/base_item_filter.json | 31 - .../bloodmagic/blockstates/blood_altar.json | 19 + .../bloodmagic/blockstates/blood_light.json | 10 - .../bloodmagic/blockstates/blood_orb.json | 41 - .../bloodmagic/blockstates/blood_rune.json | 67 - .../blockstates/blood_rune_acceleration.json | 20 + .../blood_rune_augmented_capacity.json | 20 + .../blockstates/blood_rune_blank.json | 20 + .../blockstates/blood_rune_capacity.json | 20 + .../blockstates/blood_rune_charging.json | 20 + .../blockstates/blood_rune_displacement.json | 20 + .../blockstates/blood_rune_efficiency.json | 20 + .../blockstates/blood_rune_orb.json | 20 + .../blockstates/blood_rune_sacrifice.json | 20 + .../blood_rune_self_sacrifice.json | 20 + .../blockstates/blood_rune_speed.json | 20 + .../bloodmagic/blockstates/blood_shard.json | 21 - .../bloodmagic/blockstates/blood_tank.json | 29 - .../blockstates/bloodstone_brick.json | 20 + .../blockstates/bloodstone_tile.json | 20 + .../bloodmagic/blockstates/bound_axe.json | 21 - .../bloodmagic/blockstates/bound_pickaxe.json | 21 - .../bloodmagic/blockstates/bound_shovel.json | 21 - .../bloodmagic/blockstates/bound_sword.json | 21 - .../bloodmagic/blockstates/component.json | 176 --- .../bloodmagic/blockstates/cutting_fluid.json | 21 - .../blockstates/dagger_of_sacrifice.json | 16 - .../blockstates/decorative_brick.json | 32 - .../bloodmagic/blockstates/demon_brick_1.json | 35 - .../bloodmagic/blockstates/demon_brick_2.json | 88 -- .../blockstates/demon_brick_corrosive.json | 30 + .../demon_brick_corrosive_stairs.json | 225 +++ .../blockstates/demon_brick_destructive.json | 30 + .../demon_brick_destructive_stairs.json | 225 +++ .../blockstates/demon_brick_raw.json | 30 + .../blockstates/demon_brick_raw_stairs.json | 225 +++ .../demon_brick_small_corrosive.json | 19 + .../demon_brick_small_destructive.json | 20 + .../blockstates/demon_brick_small_raw.json | 20 + .../demon_brick_small_steadfast.json | 20 + .../demon_brick_small_vengeful.json | 20 + .../blockstates/demon_brick_steadfast.json | 30 + .../demon_brick_steadfast_stairs.json | 225 +++ .../blockstates/demon_brick_vengeful.json | 30 + .../demon_brick_vengeful_stairs.json | 225 +++ .../blockstates/demon_crucible.json | 14 - .../bloodmagic/blockstates/demon_crystal.json | 146 -- .../blockstates/demon_crystallizer.json | 14 - .../bloodmagic/blockstates/demon_extras.json | 88 -- .../bloodmagic/blockstates/demon_light.json | 38 - .../blockstates/demon_metal_corrosive.json | 20 + .../blockstates/demon_metal_destructive.json | 20 + .../blockstates/demon_metal_raw.json | 20 + .../blockstates/demon_metal_steadfast.json | 20 + .../blockstates/demon_metal_vengeful.json | 20 + .../blockstates/demon_pillar_1.json | 58 - .../blockstates/demon_pillar_2.json | 58 - .../blockstates/demon_pillar_cap_1.json | 57 - .../blockstates/demon_pillar_cap_2.json | 57 - .../blockstates/demon_pillar_cap_3.json | 50 - .../bloodmagic/blockstates/demon_pylon.json | 14 - .../blockstates/demon_stairs_1.json | 100 -- .../blockstates/demon_stairs_2.json | 100 -- .../blockstates/demon_stairs_3.json | 59 - .../blockstates/demon_stone_corrosive.json | 20 + .../blockstates/demon_stone_destructive.json | 20 + .../demon_stone_polished_corrosive.json | 20 + .../demon_stone_polished_destructive.json | 20 + .../blockstates/demon_stone_polished_raw.json | 20 + .../demon_stone_polished_steadfast.json | 20 + .../demon_stone_polished_vengeful.json | 20 + .../blockstates/demon_stone_raw.json | 20 + .../blockstates/demon_stone_steadfast.json | 20 + .../blockstates/demon_stone_vengeful.json | 20 + .../blockstates/demon_tile_corrosive.json | 20 + .../blockstates/demon_tile_destructive.json | 20 + .../blockstates/demon_tile_raw.json | 20 + .../demon_tile_special_corrosive.json | 20 + .../demon_tile_special_destructive.json | 20 + .../blockstates/demon_tile_special_raw.json | 20 + .../demon_tile_special_steadfast.json | 20 + .../demon_tile_special_vengeful.json | 20 + .../blockstates/demon_tile_steadfast.json | 20 + .../blockstates/demon_tile_vengeful.json | 20 + .../bloodmagic/blockstates/demon_wall_1.json | 109 -- .../blockstates/demon_will_gauge.json | 16 - .../blockstates/dimensional_portal.json | 14 - .../blockstates/experience_tome.json | 16 - .../bloodmagic/blockstates/icarus_scroll.json | 21 - .../bloodmagic/blockstates/incense_altar.json | 14 - .../blockstates/input_routing_node.json | 66 - .../blockstates/inscription_tool.json | 42 - .../blockstates/inversion_pillar.json | 51 - .../blockstates/inversion_pillar_end.json | 72 - .../blockstates/item_demon_crystal.json | 36 - .../blockstates/item_routing_node.json | 66 - .../bloodmagic/blockstates/lava_crystal.json | 16 - .../bloodmagic/blockstates/life_essence.json | 4 +- .../bloodmagic/blockstates/living_armour.json | 31 - .../blockstates/master_routing_node.json | 65 - .../assets/bloodmagic/blockstates/mimic.json | 38 - .../bloodmagic/blockstates/monster_soul.json | 36 - .../bloodmagic/blockstates/node_router.json | 16 - .../blockstates/output_routing_node.json | 66 - .../blockstates/pack_sacrifice.json | 16 - .../blockstates/pack_self_sacrifice.json | 16 - .../assets/bloodmagic/blockstates/path.json | 53 - .../bloodmagic/blockstates/phantom.json | 5 - .../blockstates/points_upgrade.json | 16 - .../bloodmagic/blockstates/potion_flask.json | 23 - .../blockstates/ritual_controller.json | 27 - .../blockstates/ritual_diviner.json | 26 - .../bloodmagic/blockstates/ritual_reader.json | 16 - .../bloodmagic/blockstates/ritual_stone.json | 47 - .../blockstates/sacrificial_dagger.json | 26 - .../bloodmagic/blockstates/sanguine_book.json | 16 - .../blockstates/sentient_armour.json | 111 -- .../blockstates/sentient_armour_gem.json | 21 - .../bloodmagic/blockstates/sentient_axe.json | 36 - .../bloodmagic/blockstates/sentient_bow.json | 34 - .../blockstates/sentient_pickaxe.json | 36 - .../blockstates/sentient_shovel.json | 36 - .../blockstates/sentient_sword.json | 36 - .../bloodmagic/blockstates/sigil_air.json | 16 - .../blockstates/sigil_blood_light.json | 16 - .../bloodmagic/blockstates/sigil_bounce.json | 22 - .../bloodmagic/blockstates/sigil_claw.json | 21 - .../blockstates/sigil_compression.json | 21 - .../blockstates/sigil_divination.json | 16 - .../blockstates/sigil_elemental_affinity.json | 21 - .../blockstates/sigil_ender_severance.json | 21 - .../blockstates/sigil_fast_miner.json | 21 - .../bloodmagic/blockstates/sigil_frost.json | 22 - .../blockstates/sigil_green_grove.json | 21 - .../bloodmagic/blockstates/sigil_haste.json | 21 - .../bloodmagic/blockstates/sigil_holding.json | 22 - .../bloodmagic/blockstates/sigil_lava.json | 16 - .../blockstates/sigil_magnetism.json | 21 - .../blockstates/sigil_phantom_bridge.json | 21 - .../bloodmagic/blockstates/sigil_seer.json | 16 - .../blockstates/sigil_suppression.json | 21 - .../blockstates/sigil_teleposition.json | 16 - .../blockstates/sigil_transposition.json | 16 - .../bloodmagic/blockstates/sigil_void.json | 16 - .../bloodmagic/blockstates/sigil_water.json | 16 - .../blockstates/sigil_whirlwind.json | 21 - .../assets/bloodmagic/blockstates/slate.json | 36 - .../bloodmagic/blockstates/soul_forge.json | 14 - .../bloodmagic/blockstates/soul_gem.json | 136 -- .../bloodmagic/blockstates/soul_snare.json | 16 - .../bloodmagic/blockstates/spectral.json | 10 - .../bloodmagic/blockstates/teleposer.json | 17 - .../blockstates/teleposition_focus.json | 31 - .../blockstates/test_spell_block.json | 29 - .../bloodmagic/blockstates/upgrade_tome.json | 16 - .../blockstates/upgrade_trainer.json | 16 - .../assets/bloodmagic/books/architect.xml | 106 -- .../assets/bloodmagic/gui/bookleft.png | Bin 11940 -> 0 bytes .../assets/bloodmagic/gui/jei/alchemy.png | Bin 15723 -> 0 bytes .../bloodmagic/gui/jei/alchemytable.png | Bin 950 -> 0 bytes .../assets/bloodmagic/gui/jei/binding.png | Bin 868 -> 0 bytes .../assets/bloodmagic/gui/jei/soulforge.png | Bin 16429 -> 0 bytes .../assets/bloodmagic/gui/sigilholding.png | Bin 1227 -> 0 bytes .../assets/bloodmagic/gui/teleposer.png | Bin 1276 -> 0 bytes .../assets/bloodmagic/gui/writingtable.png | Bin 2567 -> 0 bytes .../assets/bloodmagic/lang/bg_BG.lang | 85 -- .../assets/bloodmagic/lang/de_DE.lang | 898 ----------- .../assets/bloodmagic/lang/en_US.lang | 961 +----------- .../assets/bloodmagic/lang/en_US.lang_old | 542 ------- .../assets/bloodmagic/lang/fr_FR.lang | 649 -------- .../assets/bloodmagic/lang/it_IT.lang | 181 --- .../assets/bloodmagic/lang/ja_JP.lang | 892 ----------- .../assets/bloodmagic/lang/ko_KR.lang | 194 --- .../assets/bloodmagic/lang/ru_RU.lang | 404 ----- .../assets/bloodmagic/lang/zh_CN.lang | 890 ----------- .../assets/bloodmagic/lang/zh_TW.lang | 404 ----- .../bloodmagic/loot_tables/bm_loot_table.json | 25 - .../models/armor/sacrificearmour_layer_1.png | Bin 728 -> 0 bytes .../armor/selfsacrificearmour_layer_1.png | Bin 1324 -> 0 bytes .../sentientarmour_corrosive_layer_1.png | Bin 2499 -> 0 bytes .../sentientarmour_corrosive_layer_2.png | Bin 2063 -> 0 bytes .../sentientarmour_destructive_layer_1.png | Bin 2446 -> 0 bytes .../sentientarmour_destructive_layer_2.png | Bin 2071 -> 0 bytes .../models/armor/sentientarmour_layer_1.png | Bin 2392 -> 0 bytes .../models/armor/sentientarmour_layer_2.png | Bin 1824 -> 0 bytes .../sentientarmour_steadfast_layer_1.png | Bin 2441 -> 0 bytes .../sentientarmour_steadfast_layer_2.png | Bin 2069 -> 0 bytes .../armor/sentientarmour_vengeful_layer_1.png | Bin 2456 -> 0 bytes .../armor/sentientarmour_vengeful_layer_2.png | Bin 2069 -> 0 bytes .../models/block/blockalchemyarray.json | 6 - .../bloodmagic/models/block/blockblank.json | 17 - .../models/block/blockbloodlight.json | 15 - .../models/block/blockbloodtank.json | 433 ------ .../models/block/blockdemoncrucible.mtl | 11 - .../models/block/blockdemoncrucible.obj | 937 ------------ .../models/block/blockdemoncrystallizer.mtl | 11 - .../models/block/blockdemoncrystallizer.obj | 1359 ----------------- .../models/block/blockdemonpylon.mtl | 11 - .../models/block/blockdemonpylon.obj | 1171 -------------- .../models/block/blockdimensionalportal.json | 15 - .../block/blockdimensionalportalew.json | 15 - .../block/blockdimensionalportalns.json | 15 - .../models/block/blockhellfireforge.mtl | 11 - .../models/block/blockhellfireforge.obj | 899 ----------- .../models/block/blockincensealtar.json | 7 - .../models/block/blockincensealtar.mtl | 11 - .../models/block/blockincensealtar.obj | 650 -------- .../models/block/blockinputroutingnode.json | 7 - .../models/block/blockmasterroutingnode.json | 8 - .../models/block/blockoutputroutingnode.json | 7 - .../bloodmagic/models/block/blockphantom.json | 6 - .../models/block/blockpillarcapeast.json | 17 - .../models/block/blockpillarcapnorth.json | 17 - .../models/block/blockpillarcapsouth.json | 17 - .../models/block/blockpillarcapwest.json | 17 - .../bloodmagic/models/block/blockpillarx.json | 17 - .../bloodmagic/models/block/blockpillarz.json | 17 - .../models/block/blocksoulforge.json | 9 - .../models/block/blockspectral.json | 6 - .../block/{blockaltar.mtl => blood_altar.mtl} | 2 +- .../block/{blockaltar.obj => blood_altar.obj} | 2 +- .../models/block/crystal/crystal1.mtl | 11 - .../models/block/crystal/crystal1.obj | 30 - .../models/block/crystal/crystal2.mtl | 11 - .../models/block/crystal/crystal2.obj | 30 - .../models/block/crystal/crystal3.mtl | 11 - .../models/block/crystal/crystal3.obj | 30 - .../models/block/crystal/crystal4.mtl | 11 - .../models/block/crystal/crystal4.obj | 30 - .../models/block/crystal/crystal5.mtl | 11 - .../models/block/crystal/crystal5.obj | 30 - .../models/block/crystal/crystal6.mtl | 11 - .../models/block/crystal/crystal6.obj | 30 - .../models/block/crystal/crystal7.mtl | 11 - .../models/block/crystal/crystal7.obj | 30 - .../models/block/modelalchemytable.mtl | 11 - .../models/block/modelalchemytable.obj | 1257 --------------- .../models/block/pillar_bottom.json | 184 --- .../bloodmagic/models/block/pillar_mid.json | 294 ---- .../bloodmagic/models/block/pillar_top.json | 184 --- .../routing/modelmasterroutingnodebase.mtl | 11 - .../routing/modelmasterroutingnodebase.obj | 360 ----- .../routing/modelmasterroutingnodecore.mtl | 11 - .../routing/modelmasterroutingnodecore.obj | 66 - .../block/routing/modelroutingnodebase.mtl | 11 - .../block/routing/modelroutingnodebase.obj | 444 ------ .../block/routing/modelroutingnodecore.mtl | 11 - .../block/routing/modelroutingnodecore.obj | 66 - .../block/routing/outputroutingnodecore.json | 20 - .../models/block/routing/routingnodebase.json | 33 - .../models/block/sub/blockaltar.mtl | 12 - .../models/block/sub/blockaltar.obj | 238 --- .../models/block/sub/blocksoulforge.json | 160 -- .../block/sub/blockspellmodifiercore.json | 19 - .../block/sub/blockspellmodifierinput.json | 176 --- .../block/sub/blockspellmodifieroutput.json | 67 - .../bloodmagic/models/bloodaltar-fixeuv.obj | 262 ---- .../assets/bloodmagic/models/bloodaltar.obj | 262 ---- .../bloodmagic/models/item/altar_builder.json | 6 + .../models/item/blood_orb_apprentice.json | 6 + .../models/item/blood_orb_archmage.json | 6 + .../models/item/blood_orb_magician.json | 6 + .../models/item/blood_orb_master.json | 6 + .../models/item/blood_orb_transcendent.json | 6 + .../models/item/blood_orb_weak.json | 6 + .../item/bow/itemsentientbow_corrosive.json | 28 - .../itemsentientbow_corrosive_pulling_0.json | 28 - .../itemsentientbow_corrosive_pulling_1.json | 28 - .../itemsentientbow_corrosive_pulling_2.json | 29 - .../item/bow/itemsentientbow_destructive.json | 28 - ...itemsentientbow_destructive_pulling_0.json | 28 - ...itemsentientbow_destructive_pulling_1.json | 28 - ...itemsentientbow_destructive_pulling_2.json | 29 - .../item/bow/itemsentientbow_pulling_0.json | 28 - .../item/bow/itemsentientbow_pulling_1.json | 28 - .../item/bow/itemsentientbow_pulling_2.json | 28 - .../item/bow/itemsentientbow_steadfast.json | 28 - .../itemsentientbow_steadfast_pulling_0.json | 28 - .../itemsentientbow_steadfast_pulling_1.json | 28 - .../itemsentientbow_steadfast_pulling_2.json | 29 - .../item/bow/itemsentientbow_vengeful.json | 28 - .../itemsentientbow_vengeful_pulling_0.json | 28 - .../itemsentientbow_vengeful_pulling_1.json | 28 - .../itemsentientbow_vengeful_pulling_2.json | 29 - .../models/item/dagger_self_sacrifice.json | 14 + .../item/dagger_self_sacrifice_charged.json | 6 + .../item/dagger_self_sacrifice_creative.json | 6 + .../item/demon_will_crystal_corrosive.json | 6 + .../item/demon_will_crystal_destructive.json | 6 + .../models/item/demon_will_crystal_raw.json | 6 + .../item/demon_will_crystal_steadfast.json | 6 + .../item/demon_will_crystal_vengeful.json | 6 + .../models/item/living_armor_chest.json | 6 + .../models/item/living_armor_feet.json | 6 + .../models/item/living_armor_head.json | 6 + .../models/item/living_armor_legs.json | 6 + .../bloodmagic/models/item/living_tome.json | 6 + .../bloodmagic/models/item/sentient_bow.json | 169 -- .../bloodmagic/models/item/sigil_air.json | 6 + .../models/item/sigil_divination.json | 6 + .../models/item/sigil_fast_miner.json | 14 + .../models/item/sigil_fast_miner_toggled.json | 6 + .../bloodmagic/models/item/slate_blank.json | 6 + .../bloodmagic/models/item/slate_demonic.json | 6 + .../models/item/slate_ethereal.json | 6 + .../bloodmagic/models/item/slate_imbued.json | 6 + .../models/item/slate_reinforced.json | 6 + .../assets/bloodmagic/recipes/_constants.json | 119 -- .../assets/bloodmagic/recipes/_factories.json | 5 - .../recipes/activation_crystal.json | 16 - .../bloodmagic/recipes/alchemy_table.json | 29 - .../assets/bloodmagic/recipes/altar.json | 26 - .../recipes/base_fluid_filter_0.json | 24 - .../recipes/base_item_filter_0.json | 24 - .../recipes/base_item_filter_1.json | 24 - .../recipes/base_item_filter_2.json | 24 - .../recipes/base_item_filter_3.json | 24 - .../blood_rune/blood_rune_acceleration.json | 32 - .../blood_rune/blood_rune_augcapacity.json | 32 - .../recipes/blood_rune/blood_rune_blank.json | 25 - .../blood_rune/blood_rune_capacity.json | 28 - .../blood_rune/blood_rune_charging.json | 32 - .../blood_rune/blood_rune_displacement.json | 28 - .../recipes/blood_rune/blood_rune_orb.json | 29 - .../blood_rune/blood_rune_sacrifice.json | 32 - .../blood_rune/blood_rune_selfsacrifice.json | 32 - .../recipes/blood_rune/blood_rune_speed.json | 28 - .../recipes/blood_tank/blood_tank_0.json | 25 - .../recipes/blood_tank/blood_tank_1.json | 26 - .../recipes/blood_tank/blood_tank_10.json | 26 - .../recipes/blood_tank/blood_tank_11.json | 26 - .../recipes/blood_tank/blood_tank_12.json | 26 - .../recipes/blood_tank/blood_tank_13.json | 26 - .../recipes/blood_tank/blood_tank_14.json | 26 - .../recipes/blood_tank/blood_tank_15.json | 26 - .../recipes/blood_tank/blood_tank_2.json | 26 - .../recipes/blood_tank/blood_tank_3.json | 26 - .../recipes/blood_tank/blood_tank_4.json | 26 - .../recipes/blood_tank/blood_tank_5.json | 26 - .../recipes/blood_tank/blood_tank_6.json | 26 - .../recipes/blood_tank/blood_tank_7.json | 26 - .../recipes/blood_tank/blood_tank_8.json | 26 - .../recipes/blood_tank/blood_tank_9.json | 26 - .../decorative_brick_bloodstone_brick.json | 18 - .../decorative_brick_bloodstone_tile.json | 17 - .../demon_brick_1_brick1_corrosive.json | 18 - .../demon_brick_1_brick1_destructive.json | 18 - .../demon_decor/demon_brick_1_brick1_raw.json | 18 - .../demon_brick_1_brick1_steadfast.json | 18 - .../demon_brick_1_brick1_vengeful.json | 18 - .../demon_brick_2_smallbrick_corrosive.json | 17 - .../demon_brick_2_smallbrick_destructive.json | 17 - .../demon_brick_2_smallbrick_raw.json | 17 - .../demon_brick_2_smallbrick_steadfast.json | 17 - .../demon_brick_2_smallbrick_vengeful.json | 17 - .../demon_brick_2_tile_corrosive.json | 23 - .../demon_brick_2_tile_destructive.json | 23 - .../demon_decor/demon_brick_2_tile_raw.json | 23 - .../demon_brick_2_tile_steadfast.json | 23 - .../demon_brick_2_tile_vengeful.json | 23 - .../demon_brick_2_tilespecial_corrosive.json | 27 - ...demon_brick_2_tilespecial_destructive.json | 27 - .../demon_brick_2_tilespecial_raw.json | 27 - .../demon_brick_2_tilespecial_steadfast.json | 27 - .../demon_brick_2_tilespecial_vengeful.json | 27 - ...demon_extras_polished_stone_corrosive.json | 18 - ...mon_extras_polished_stone_destructive.json | 18 - .../demon_extras_polished_stone_raw.json | 18 - ...demon_extras_polished_stone_steadfast.json | 18 - .../demon_extras_polished_stone_vengeful.json | 18 - .../demon_extras_stone_corrosive.json | 38 - .../demon_extras_stone_destructive.json | 38 - .../demon_decor/demon_extras_stone_raw.json | 38 - .../demon_extras_stone_steadfast.json | 38 - .../demon_extras_stone_vengeful.json | 38 - .../demon_decor/demon_light_corrosive.json | 22 - .../demon_decor/demon_light_destructive.json | 22 - .../recipes/demon_decor/demon_light_raw.json | 22 - .../demon_decor/demon_light_steadfast.json | 22 - .../demon_decor/demon_light_vengeful.json | 22 - .../demon_decor/demon_pillar_1_corrosive.json | 19 - .../demon_pillar_1_destructive.json | 19 - .../demon_decor/demon_pillar_1_raw.json | 19 - .../demon_decor/demon_pillar_1_steadfast.json | 19 - .../demon_decor/demon_pillar_1_vengeful.json | 19 - .../demon_decor/demon_pillar_2_corrosive.json | 23 - .../demon_pillar_2_destructive.json | 23 - .../demon_decor/demon_pillar_2_raw.json | 23 - .../demon_decor/demon_pillar_2_steadfast.json | 23 - .../demon_decor/demon_pillar_2_vengeful.json | 23 - .../demon_pillar_cap_1_corrosive.json | 18 - .../demon_decor/demon_pillar_cap_1_raw.json | 18 - .../demon_pillar_cap_2_destructive.json | 18 - .../demon_pillar_cap_2_vengeful.json | 18 - .../demon_pillar_cap_3_steadfast.json | 17 - .../demon_decor/demon_stairs_1_corrosive.json | 19 - .../demon_decor/demon_stairs_1_raw.json | 19 - .../demon_stairs_2_destructive.json | 19 - .../demon_decor/demon_stairs_2_vengeful.json | 19 - .../demon_decor/demon_stairs_3_steadfast.json | 18 - .../demon_wall_1_brick_corrosive.json | 18 - .../demon_wall_1_brick_destructive.json | 18 - .../demon_decor/demon_wall_1_brick_raw.json | 18 - .../demon_wall_1_brick_steadfast.json | 18 - .../demon_wall_1_brick_vengeful.json | 18 - .../demon_wall_1_large_corrosive.json | 18 - .../demon_wall_1_large_destructive.json | 18 - .../demon_decor/demon_wall_1_large_raw.json | 18 - .../demon_wall_1_large_steadfast.json | 18 - .../demon_wall_1_large_vengeful.json | 18 - .../demon_wall_1_smallbrick_corrosive.json | 18 - .../demon_wall_1_smallbrick_destructive.json | 18 - .../demon_wall_1_smallbrick_raw.json | 18 - .../demon_wall_1_smallbrick_steadfast.json | 18 - .../demon_wall_1_smallbrick_vengeful.json | 18 - .../bloodmagic/recipes/experience_tome.json | 33 - .../bloodmagic/recipes/incense_altar.json | 27 - .../bloodmagic/recipes/lava_crystal.json | 29 - .../bloodmagic/recipes/mimic_nohitbox.json | 27 - .../bloodmagic/recipes/mimic_solidclear.json | 30 - .../bloodmagic/recipes/mimic_solidlight.json | 33 - .../bloodmagic/recipes/mimic_solidopaque.json | 30 - .../bloodmagic/recipes/pack_sacrifice.json | 29 - .../recipes/pack_self_sacrifice.json | 29 - .../recipes/path/path_obsidian.json | 26 - .../recipes/path/path_obsidiantile.json | 26 - .../bloodmagic/recipes/path/path_stone.json | 26 - .../recipes/path/path_stonetile.json | 26 - .../bloodmagic/recipes/path/path_wood.json | 26 - .../recipes/path/path_woodtile.json | 26 - .../recipes/path/path_wornstone.json | 30 - .../recipes/path/path_wornstonetile.json | 26 - .../recipes/ritual_controller_imperfect.json | 24 - .../recipes/ritual_controller_inverted.json | 20 - .../recipes/ritual_controller_master.json | 25 - .../recipes/ritual_controller_master_alt.json | 13 - .../bloodmagic/recipes/ritual_diviner_0.json | 36 - .../bloodmagic/recipes/ritual_diviner_1.json | 26 - .../bloodmagic/recipes/ritual_reader.json | 27 - .../recipes/ritual_stone_blank.json | 26 - .../recipes/ritual_stone_reset.json | 13 - .../recipes/sacrificial_dagger.json | 23 - .../assets/bloodmagic/recipes/soul_forge.json | 25 - .../assets/bloodmagic/recipes/soul_snare.json | 24 - .../assets/bloodmagic/recipes/teleposer.json | 23 - .../recipes/teleposition_focus_2.json | 17 - .../recipes/teleposition_focus_3.json | 17 - .../bloodmagic/recipes/upgrade_trainer.json | 27 - .../bloodmagic/schematics/corridor1.json | 49 - .../bloodmagic/schematics/hallchest1.json | 41 - .../bloodmagic/schematics/rawbuilding1.json | 47 - .../bloodmagic/schematics/schematics.json | 5 - .../bloodmagic/shaders/beam-broken.frag | 10 - .../assets/bloodmagic/shaders/beam.frag | 12 - .../bloodmagic/structures/building1.nbt | 0 .../bloodmagic/structures/corridor1.nbt | 0 .../bloodmagic/structures/hallchest1.nbt | 0 .../textures/blocks/airritualstone.png | Bin 1621 -> 0 bytes .../altar.png => blocks/blood_altar.png} | Bin .../blood_rune_acceleration.png} | Bin .../blood_rune_augmented_capacity.png} | Bin .../blood_rune_blank.png} | Bin .../blood_rune_capacity.png} | Bin .../blood_rune_charging.png} | Bin .../blood_rune_displacement.png} | Bin .../blood_rune_efficiency.png} | Bin .../blood_rune_orb.png} | Bin .../blood_rune_sacrifice.png} | Bin .../blood_rune_self_sacrifice.png} | Bin .../blood_rune_speed.png} | Bin .../textures/blocks/bloodsocket.png | Bin 1609 -> 0 bytes ...oodstonebrick.png => bloodstone_brick.png} | Bin ...loodstonebrick.png => bloodstone_tile.png} | Bin .../bloodmagic/textures/blocks/bloodtank.png | Bin 1064 -> 0 bytes ...ick1_c.png => demon_brick_1_corrosive.png} | Bin ...k1_d.png => demon_brick_1_destructive.png} | Bin ...ngeon_brick1.png => demon_brick_1_raw.png} | Bin ...ick1_s.png => demon_brick_1_steadfast.png} | Bin ...rick1_v.png => demon_brick_1_vengeful.png} | Bin ...ick2_c.png => demon_brick_2_corrosive.png} | Bin ...k2_d.png => demon_brick_2_destructive.png} | Bin ...ngeon_brick2.png => demon_brick_2_raw.png} | Bin ...ick2_s.png => demon_brick_2_steadfast.png} | Bin ...rick2_v.png => demon_brick_2_vengeful.png} | Bin ...ick3_c.png => demon_brick_3_corrosive.png} | Bin ...k3_d.png => demon_brick_3_destructive.png} | Bin ...ngeon_brick3.png => demon_brick_3_raw.png} | Bin ...ick3_s.png => demon_brick_3_steadfast.png} | Bin ...rick3_v.png => demon_brick_3_vengeful.png} | Bin ...ye_c.png => demon_brick_eye_corrosive.png} | Bin ..._d.png => demon_brick_eye_destructive.png} | Bin ...ungeon_eye.png => demon_brick_eye_raw.png} | Bin ...ye_s.png => demon_brick_eye_steadfast.png} | Bin ...eye_v.png => demon_brick_eye_vengeful.png} | Bin ...> demon_brick_pillar_bottom_corrosive.png} | Bin ...demon_brick_pillar_bottom_destructive.png} | Bin ....png => demon_brick_pillar_bottom_raw.png} | Bin ...> demon_brick_pillar_bottom_steadfast.png} | Bin ...=> demon_brick_pillar_bottom_vengeful.png} | Bin ...c.png => demon_brick_pillar_corrosive.png} | Bin ...png => demon_brick_pillar_destructive.png} | Bin ...=> demon_brick_pillar_heart_corrosive.png} | Bin ... demon_brick_pillar_heart_destructive.png} | Bin ...t.png => demon_brick_pillar_heart_raw.png} | Bin ...=> demon_brick_pillar_heart_steadfast.png} | Bin ... => demon_brick_pillar_heart_vengeful.png} | Bin ..._pillar.png => demon_brick_pillar_raw.png} | Bin ... demon_brick_pillar_special_corrosive.png} | Bin ...emon_brick_pillar_special_destructive.png} | Bin ...png => demon_brick_pillar_special_raw.png} | Bin ... demon_brick_pillar_special_steadfast.png} | Bin ...> demon_brick_pillar_special_vengeful.png} | Bin ...s.png => demon_brick_pillar_steadfast.png} | Bin ...g => demon_brick_pillar_top_corrosive.png} | Bin ...=> demon_brick_pillar_top_destructive.png} | Bin ...top.png => demon_brick_pillar_top_raw.png} | Bin ...g => demon_brick_pillar_top_steadfast.png} | Bin ...ng => demon_brick_pillar_top_vengeful.png} | Bin ..._v.png => demon_brick_pillar_vengeful.png} | Bin ..._c.png => demon_brick_small_corrosive.png} | Bin ....png => demon_brick_small_destructive.png} | Bin ...allbrick.png => demon_brick_small_raw.png} | Bin ..._s.png => demon_brick_small_steadfast.png} | Bin ...k_v.png => demon_brick_small_vengeful.png} | Bin ...e_c.png => demon_brick_tile_corrosive.png} | Bin ...d.png => demon_brick_tile_destructive.png} | Bin ...geon_tile.png => demon_brick_tile_raw.png} | Bin ...=> demon_brick_tile_special_corrosive.png} | Bin ... demon_brick_tile_special_destructive.png} | Bin ...l.png => demon_brick_tile_special_raw.png} | Bin ...=> demon_brick_tile_special_steadfast.png} | Bin ... => demon_brick_tile_special_vengeful.png} | Bin ...e_s.png => demon_brick_tile_steadfast.png} | Bin ...le_v.png => demon_brick_tile_vengeful.png} | Bin ..._metal_c.png => demon_metal_corrosive.png} | Bin ...etal_d.png => demon_metal_destructive.png} | Bin ...{dungeon_metal.png => demon_metal_raw.png} | Bin ..._metal_s.png => demon_metal_steadfast.png} | Bin ...n_metal_v.png => demon_metal_vengeful.png} | Bin ..._stone_c.png => demon_stone_corrosive.png} | Bin ...tone_d.png => demon_stone_destructive.png} | Bin ...png => demon_stone_polished_corrosive.png} | Bin ...g => demon_stone_polished_destructive.png} | Bin ...ished.png => demon_stone_polished_raw.png} | Bin ...png => demon_stone_polished_steadfast.png} | Bin ....png => demon_stone_polished_vengeful.png} | Bin ...{dungeon_stone.png => demon_stone_raw.png} | Bin ..._stone_s.png => demon_stone_steadfast.png} | Bin ...n_stone_v.png => demon_stone_vengeful.png} | Bin .../textures/blocks/duskritualstone.png | Bin 1623 -> 0 bytes .../textures/blocks/earthritualstone.png | Bin 1626 -> 0 bytes .../bloodmagic/textures/blocks/empty.png | Bin 143 -> 0 bytes .../textures/blocks/emptysocket.png | Bin 1560 -> 0 bytes .../textures/blocks/etherealopaquemimic.png | Bin 972 -> 0 bytes .../textures/blocks/fireritualstone.png | Bin 1627 -> 0 bytes .../textures/blocks/imperfectritualstone.png | Bin 1598 -> 0 bytes ...ceflowing.png => life_essence_flowing.png} | Bin ...mcmeta => life_essence_flowing.png.mcmeta} | 0 ...ssencestill.png => life_essence_still.png} | Bin ...g.mcmeta => life_essence_still.png.mcmeta} | 0 .../textures/blocks/lightritualstone.png | Bin 878 -> 0 bytes .../textures/blocks/masterritualstone.png | Bin 1529 -> 0 bytes .../blocks/masterritualstone_inverted.png | Bin 724 -> 0 bytes .../textures/blocks/obsidianbrickpath.png | Bin 16086 -> 0 bytes .../textures/blocks/obsidiantilepath.png | Bin 15805 -> 0 bytes .../textures/blocks/phantomblock.png | Bin 1700 -> 0 bytes .../textures/blocks/ritualstone.png | Bin 1502 -> 0 bytes .../textures/blocks/sentientmimic.png | Bin 901 -> 0 bytes .../textures/blocks/shardcluster.png | Bin 891 -> 0 bytes .../textures/blocks/shardclusterbrick.png | Bin 809 -> 0 bytes .../textures/blocks/simpletranscircle.png | Bin 4254 -> 0 bytes .../textures/blocks/solidclearmimic.png | Bin 969 -> 0 bytes .../textures/blocks/solidlightmimic.png | Bin 964 -> 0 bytes .../textures/blocks/solidopaquemimic.png | Bin 961 -> 0 bytes .../bloodmagic/textures/blocks/soulforge.png | Bin 1686 -> 0 bytes .../textures/blocks/spectralblock.png | Bin 15123 -> 0 bytes .../textures/blocks/stonebrickpath.png | Bin 16221 -> 0 bytes .../textures/blocks/stonetilepath.png | Bin 15846 -> 0 bytes .../textures/blocks/teleposer_side.png | Bin 1711 -> 0 bytes .../textures/blocks/teleposer_top.png | Bin 1703 -> 0 bytes .../textures/blocks/waterritualstone.png | Bin 1629 -> 0 bytes .../textures/blocks/woodbrickpath.png | Bin 17848 -> 0 bytes .../textures/blocks/woodtilepath.png | Bin 17780 -> 0 bytes .../textures/blocks/wornstonebrickpath.png | Bin 16299 -> 0 bytes .../textures/blocks/wornstonetilepath.png | Bin 15950 -> 0 bytes .../textures/entities/bloodelytra.png | Bin 3225 -> 0 bytes .../textures/entities/defaultcrystallayer.png | Bin 7231 -> 0 bytes .../entities/energyblastprojectile.png | Bin 623 -> 0 bytes .../textures/entities/explosionprojectile.png | Bin 1463 -> 0 bytes .../textures/entities/fireprojectile.png | Bin 1395 -> 0 bytes .../textures/entities/holyprojectile.png | Bin 1349 -> 0 bytes .../textures/entities/iceprojectile.png | Bin 1189 -> 0 bytes .../textures/entities/lightningprojectile.png | Bin 1210 -> 0 bytes .../textures/entities/mudprojectile.png | Bin 1454 -> 0 bytes .../bloodmagic/textures/entities/nodebeam.png | Bin 260 -> 0 bytes .../textures/entities/overlay/overlay_raw.png | Bin 5132 -> 0 bytes .../textures/entities/soularrow.png | Bin 772 -> 0 bytes .../textures/entities/soularrow_corrosive.png | Bin 783 -> 0 bytes .../entities/soularrow_destructive.png | Bin 771 -> 0 bytes .../textures/entities/soularrow_steadfast.png | Bin 783 -> 0 bytes .../textures/entities/soularrow_vengeful.png | Bin 782 -> 0 bytes .../bloodmagic/textures/entities/specter.png | Bin 213 -> 0 bytes .../textures/entities/waterprojectile.png | Bin 1423 -> 0 bytes .../textures/entities/windgustprojectile.png | Bin 1486 -> 0 bytes .../textures/entities/zombie_raw.png | Bin 7587 -> 0 bytes .../bloodmagic/textures/gui/alchemytable.png | Bin 3428 -> 0 bytes .../bloodmagic/textures/gui/bookcrafting.png | Bin 3756 -> 0 bytes .../bloodmagic/textures/gui/bookfurnace.png | Bin 1664 -> 0 bytes .../bloodmagic/textures/gui/bookleft.png | Bin 11940 -> 0 bytes .../bloodmagic/textures/gui/bookright.png | Bin 8536 -> 0 bytes .../bloodmagic/textures/gui/crucible.png | Bin 1235 -> 0 bytes .../bloodmagic/textures/gui/guitrap.png | Bin 3677 -> 0 bytes .../gui/jei/blood_altar.png} | Bin .../textures/gui/masterroutingnode.png | Bin 94211 -> 0 bytes .../bloodmagic/textures/gui/routingnode.png | Bin 1818 -> 0 bytes .../bloodmagic/textures/gui/soulforge.png | Bin 25888 -> 0 bytes .../gui/{buttons_compat.png => sprites.png} | Bin 18994 -> 19887 bytes .../bloodmagic/textures/gui/teleposer.png | Bin 1464 -> 0 bytes .../gui/thaumcraft/gui_research_back.jpg | Bin 73272 -> 0 bytes .../gui/thaumcraft/gui_research_back_over.png | 0 .../bloodmagic/textures/gui/widgets.png | Bin 25852 -> 0 bytes .../assets/bloodmagic/textures/hud/bars.png | Bin 6558 -> 0 bytes .../items/activationcrystalawakened.png | Bin 15410 -> 0 bytes .../items/activationcrystalcreative.png | Bin 15021 -> 0 bytes .../textures/items/activationcrystalweak.png | Bin 15408 -> 0 bytes .../textures/items/airscribetool.png | Bin 15377 -> 0 bytes .../textures/items/alchemic_liquid.png | Bin 222 -> 0 bytes .../textures/items/alchemic_ribbon.png | Bin 200 -> 0 bytes .../textures/items/alchemic_vial.png | Bin 248 -> 0 bytes .../{altarmaker.png => altar_builder.png} | Bin .../textures/items/ampouleempty.png | Bin 288 -> 0 bytes .../bloodmagic/textures/items/ampoulefull.png | Bin 316 -> 0 bytes .../bloodmagic/textures/items/antiseptic.png | Bin 362 -> 0 bytes .../bloodmagic/textures/items/arcaneashes.png | Bin 550 -> 0 bytes .../textures/items/basemonstersoul.png | Bin 939 -> 0 bytes .../items/basemonstersoul_corrosive.png | Bin 932 -> 0 bytes .../items/basemonstersoul_destructive.png | Bin 938 -> 0 bytes .../items/basemonstersoul_steadfast.png | Bin 931 -> 0 bytes .../items/basemonstersoul_vengeful.png | Bin 938 -> 0 bytes .../textures/items/basiccuttingfluid.png | Bin 359 -> 0 bytes .../textures/items/blackpudding.png | Bin 669 -> 0 bytes .../bloodmagic/textures/items/blanksigil.png | Bin 661 -> 0 bytes ...ebloodorb.png => blood_orb_apprentice.png} | Bin ...agebloodorb.png => blood_orb_archmage.png} | Bin ...ianbloodorb.png => blood_orb_magician.png} | Bin ...asterbloodorb.png => blood_orb_master.png} | Bin ...loodorb.png => blood_orb_transcendent.png} | Bin .../{weakbloodorb.png => blood_orb_weak.png} | Bin .../textures/items/bloodlightsigil.png | Bin 1592 -> 0 bytes .../bloodmagic/textures/items/bloodpack.png | Bin 446 -> 0 bytes .../textures/items/bouncesigil_activated.png | Bin 717 -> 0 bytes .../items/bouncesigil_deactivated.png | Bin 695 -> 0 bytes .../textures/items/boundaxe_activated.png | Bin 522 -> 0 bytes .../textures/items/boundpickaxe_activated.png | Bin 1484 -> 0 bytes .../textures/items/boundshovel_activated.png | Bin 1478 -> 0 bytes .../textures/items/boundsword_activated.png | Bin 1541 -> 0 bytes .../bloodmagic/textures/items/boundtool.png | Bin 1434 -> 0 bytes .../textures/items/bridgesigil_activated.png | Bin 1585 -> 0 bytes .../items/bridgesigil_deactivated.png | Bin 1593 -> 0 bytes .../textures/items/clawsigil_activated.png | Bin 676 -> 0 bytes .../textures/items/clawsigil_deactivated.png | Bin 685 -> 0 bytes .../bloodmagic/textures/items/coagulant.png | Bin 362 -> 0 bytes .../bloodmagic/textures/items/coalsand.png | Bin 454 -> 0 bytes .../textures/items/componentframeparts.png | Bin 667 -> 0 bytes .../items/compressionsigil_activated.png | Bin 747 -> 0 bytes .../items/compressionsigil_deactivated.png | Bin 724 -> 0 bytes .../textures/items/crucibleupgrade.png | Bin 649 -> 0 bytes ...aldagger.png => dagger_self_sacrifice.png} | Bin ....png => dagger_self_sacrifice_charged.png} | Bin .../textures/items/daggerofsacrifice.png | Bin 523 -> 0 bytes .../textures/items/dawnscribetool.png | Bin 15022 -> 0 bytes ...l.png => demon_will_crystal_corrosive.png} | Bin ...png => demon_will_crystal_destructive.png} | Bin ...crystal.png => demon_will_crystal_raw.png} | Bin ...l.png => demon_will_crystal_steadfast.png} | Bin ...al.png => demon_will_crystal_vengeful.png} | Bin .../textures/items/demonbloodshard.png | Bin 698 -> 0 bytes .../textures/items/demonicteleposerfocus.png | Bin 976 -> 0 bytes .../textures/items/demonwillgauge.png | Bin 811 -> 0 bytes .../textures/items/duskscribetool.png | Bin 15430 -> 0 bytes .../textures/items/earthscribetool.png | Bin 15411 -> 0 bytes .../items/elementalsigil_activated.png | Bin 710 -> 0 bytes .../items/elementalsigil_deactivated.png | Bin 697 -> 0 bytes .../textures/items/enhancedteleposerfocus.png | Bin 765 -> 0 bytes .../textures/items/experiencebook.png | Bin 676 -> 0 bytes .../textures/items/explosivepowder.png | Bin 469 -> 0 bytes .../textures/items/firescribetool.png | Bin 15837 -> 0 bytes .../textures/items/fluidrouterfilterexact.png | Bin 681 -> 0 bytes .../bloodmagic/textures/items/goldsand.png | Bin 499 -> 0 bytes .../textures/items/growthsigil_activated.png | Bin 1581 -> 0 bytes .../items/growthsigil_deactivated.png | Bin 1566 -> 0 bytes .../items/harvestgoddesssigil_activated.png | Bin 755 -> 0 bytes .../items/harvestgoddesssigil_deactivated.png | Bin 740 -> 0 bytes .../textures/items/hastesigil_activated.png | Bin 1581 -> 0 bytes .../textures/items/hastesigil_deactivated.png | Bin 1578 -> 0 bytes .../textures/items/icarusscroll_activated.png | Bin 625 -> 0 bytes .../items/icarusscroll_deactivated.png | Bin 622 -> 0 bytes .../textures/items/icesigil_activated.png | Bin 1584 -> 0 bytes .../textures/items/icesigil_deactivated.png | Bin 1587 -> 0 bytes .../bloodmagic/textures/items/information.png | Bin 648 -> 0 bytes .../textures/items/inputroutingfocus.png | Bin 700 -> 0 bytes .../bloodmagic/textures/items/ironsand.png | Bin 509 -> 0 bytes .../textures/items/item_deactivated.png | Bin 1373 -> 0 bytes .../textures/items/itemrouterfilterexact.png | Bin 678 -> 0 bytes .../items/itemrouterfilterignorenbt.png | Bin 682 -> 0 bytes .../items/itemrouterfiltermoditems.png | Bin 681 -> 0 bytes .../items/itemrouterfilteroredict.png | Bin 681 -> 0 bytes .../bloodmagic/textures/items/lavacrystal.png | Bin 1350 -> 0 bytes .../bloodmagic/textures/items/lavasigil.png | Bin 1589 -> 0 bytes .../bloodmagic/textures/items/lifebucket.png | Bin 1369 -> 0 bytes ...livingplate.png => living_armor_chest.png} | Bin ...{livingboots.png => living_armor_feet.png} | Bin ...livinghelmet.png => living_armor_head.png} | Bin ...vingleggings.png => living_armor_legs.png} | Bin .../items/{mailorder.png => living_tome.png} | Bin .../items/mundanelengtheningcatalyst.png | Bin 336 -> 0 bytes .../textures/items/mundanepowercatalyst.png | Bin 342 -> 0 bytes .../bloodmagic/textures/items/neurotoxin.png | Bin 360 -> 0 bytes .../bloodmagic/textures/items/noderouter.png | Bin 492 -> 0 bytes .../bloodmagic/textures/items/plantfibres.png | Bin 781 -> 0 bytes .../bloodmagic/textures/items/plantoil.png | Bin 364 -> 0 bytes .../textures/items/potionflask_outline.png | Bin 457 -> 0 bytes .../textures/items/potionflask_overlay.png | Bin 179 -> 0 bytes .../textures/items/potionflask_underlay.png | Bin 460 -> 0 bytes .../textures/items/reagentaffinity.png | Bin 574 -> 0 bytes .../bloodmagic/textures/items/reagentair.png | Bin 3622 -> 0 bytes .../textures/items/reagentbinding.png | Bin 837 -> 0 bytes .../textures/items/reagentbloodlight.png | Bin 506 -> 0 bytes .../textures/items/reagentbounce.png | Bin 497 -> 0 bytes .../textures/items/reagentbridge.png | Bin 483 -> 0 bytes .../bloodmagic/textures/items/reagentclaw.png | Bin 628 -> 0 bytes .../textures/items/reagentcompression.png | Bin 528 -> 0 bytes .../textures/items/reagentfastminer.png | Bin 595 -> 0 bytes .../textures/items/reagentfrost.png | Bin 3622 -> 0 bytes .../textures/items/reagentgrowth.png | Bin 579 -> 0 bytes .../textures/items/reagenthaste.png | Bin 520 -> 0 bytes .../textures/items/reagentholding.png | Bin 520 -> 0 bytes .../bloodmagic/textures/items/reagentlava.png | Bin 562 -> 0 bytes .../textures/items/reagentmagnetism.png | Bin 497 -> 0 bytes .../textures/items/reagentseverance.png | Bin 526 -> 0 bytes .../textures/items/reagentsight.png | Bin 602 -> 0 bytes .../textures/items/reagentsuppression.png | Bin 543 -> 0 bytes .../textures/items/reagentteleposition.png | Bin 468 -> 0 bytes .../textures/items/reagenttransposition.png | Bin 397 -> 0 bytes .../bloodmagic/textures/items/reagentvoid.png | Bin 607 -> 0 bytes .../textures/items/reagentwater.png | Bin 628 -> 0 bytes .../bloodmagic/textures/items/reagentwind.png | Bin 504 -> 0 bytes .../items/reinforcedteleposerfocus.png | Bin 868 -> 0 bytes .../textures/items/ritual_dismantler.png | Bin 693 -> 0 bytes .../textures/items/ritualdiviner.png | Bin 1366 -> 0 bytes .../textures/items/ritualtinkerer.png | Bin 505 -> 0 bytes .../textures/items/sacrificeplate.png | Bin 537 -> 0 bytes .../bloodmagic/textures/items/saltpeter.png | Bin 414 -> 0 bytes .../textures/items/sanguinebook.png | Bin 695 -> 0 bytes .../bloodmagic/textures/items/seersigil.png | Bin 693 -> 0 bytes .../textures/items/selfsacrificeplate.png | Bin 512 -> 0 bytes .../items/sentientarmourgem_activated.png | Bin 921 -> 0 bytes .../sentientarmourgem_corrosive_activated.png | Bin 951 -> 0 bytes ...entientarmourgem_corrosive_deactivated.png | Bin 857 -> 0 bytes .../items/sentientarmourgem_deactivated.png | Bin 851 -> 0 bytes ...entientarmourgem_destructive_activated.png | Bin 968 -> 0 bytes ...tientarmourgem_destructive_deactivated.png | Bin 864 -> 0 bytes .../sentientarmourgem_steadfast_activated.png | Bin 957 -> 0 bytes ...entientarmourgem_steadfast_deactivated.png | Bin 859 -> 0 bytes .../sentientarmourgem_vengeful_activated.png | Bin 971 -> 0 bytes ...sentientarmourgem_vengeful_deactivated.png | Bin 860 -> 0 bytes .../textures/items/sentientarrow.png | Bin 437 -> 0 bytes .../textures/items/sentientboots.png | Bin 699 -> 0 bytes .../items/sentientboots_corrosive.png | Bin 700 -> 0 bytes .../items/sentientboots_destructive.png | Bin 691 -> 0 bytes .../items/sentientboots_steadfast.png | Bin 697 -> 0 bytes .../textures/items/sentientboots_vengeful.png | Bin 696 -> 0 bytes .../bloodmagic/textures/items/sentientbow.png | Bin 769 -> 0 bytes .../textures/items/sentientbow_corrosive.png | Bin 779 -> 0 bytes .../items/sentientbow_corrosive_pulling_0.png | Bin 611 -> 0 bytes .../items/sentientbow_corrosive_pulling_1.png | Bin 871 -> 0 bytes .../items/sentientbow_corrosive_pulling_2.png | Bin 838 -> 0 bytes .../items/sentientbow_destructive.png | Bin 785 -> 0 bytes .../sentientbow_destructive_pulling_0.png | Bin 596 -> 0 bytes .../sentientbow_destructive_pulling_1.png | Bin 864 -> 0 bytes .../sentientbow_destructive_pulling_2.png | Bin 825 -> 0 bytes .../textures/items/sentientbow_pulling_0.png | Bin 606 -> 0 bytes .../textures/items/sentientbow_pulling_1.png | Bin 846 -> 0 bytes .../textures/items/sentientbow_pulling_2.png | Bin 821 -> 0 bytes .../textures/items/sentientbow_steadfast.png | Bin 780 -> 0 bytes .../items/sentientbow_steadfast_pulling_0.png | Bin 620 -> 0 bytes .../items/sentientbow_steadfast_pulling_1.png | Bin 872 -> 0 bytes .../items/sentientbow_steadfast_pulling_2.png | Bin 822 -> 0 bytes .../textures/items/sentientbow_vengeful.png | Bin 778 -> 0 bytes .../items/sentientbow_vengeful_pulling_0.png | Bin 620 -> 0 bytes .../items/sentientbow_vengeful_pulling_1.png | Bin 876 -> 0 bytes .../items/sentientbow_vengeful_pulling_2.png | Bin 834 -> 0 bytes .../textures/items/sentienthelmet.png | Bin 474 -> 0 bytes .../items/sentienthelmet_corrosive.png | Bin 464 -> 0 bytes .../items/sentienthelmet_destructive.png | Bin 464 -> 0 bytes .../items/sentienthelmet_steadfast.png | Bin 562 -> 0 bytes .../items/sentienthelmet_vengeful.png | Bin 466 -> 0 bytes .../textures/items/sentientleggings.png | Bin 522 -> 0 bytes .../items/sentientleggings_corrosive.png | Bin 536 -> 0 bytes .../items/sentientleggings_destructive.png | Bin 533 -> 0 bytes .../items/sentientleggings_steadfast.png | Bin 533 -> 0 bytes .../items/sentientleggings_vengeful.png | Bin 523 -> 0 bytes .../textures/items/sentientplate.png | Bin 735 -> 0 bytes .../items/sentientplate_corrosive.png | Bin 735 -> 0 bytes .../items/sentientplate_destructive.png | Bin 732 -> 0 bytes .../items/sentientplate_steadfast.png | Bin 737 -> 0 bytes .../textures/items/sentientplate_vengeful.png | Bin 735 -> 0 bytes .../bloodmagic/textures/items/set_area.png | Bin 505 -> 0 bytes .../textures/items/set_will_types.png | Bin 593 -> 0 bytes .../textures/items/sheatheditem.png | Bin 1373 -> 0 bytes .../items/{airsigil.png => sigil/air.png} | Bin .../divination.png} | Bin .../fast_miner.png} | Bin .../fast_miner_toggled.png} | Bin .../textures/items/sigilofholding.png | Bin 1605 -> 0 bytes .../items/sigilofmagnetism_activated.png | Bin 692 -> 0 bytes .../items/sigilofmagnetism_deactivated.png | Bin 691 -> 0 bytes .../items/sigilofseverance_activated.png | Bin 1599 -> 0 bytes .../items/sigilofseverance_deactivated.png | Bin 1590 -> 0 bytes .../items/sigilofsuppression_activated.png | Bin 1605 -> 0 bytes .../items/sigilofsuppression_deactivated.png | Bin 1573 -> 0 bytes .../textures/items/sigiloverlay.png | Bin 18111 -> 0 bytes .../items/{blankslate.png => slate_blank.png} | Bin .../{demonslate.png => slate_demonic.png} | Bin .../{etherealslate.png => slate_ethereal.png} | Bin .../{infusedslate.png => slate_imbued.png} | Bin ...inforcedslate.png => slate_reinforced.png} | Bin .../bloodmagic/textures/items/soulaxe.png | Bin 935 -> 0 bytes .../textures/items/soulaxe_corrosive.png | Bin 937 -> 0 bytes .../textures/items/soulaxe_destructive.png | Bin 945 -> 0 bytes .../textures/items/soulaxe_steadfast.png | Bin 928 -> 0 bytes .../textures/items/soulaxe_vengeful.png | Bin 929 -> 0 bytes .../textures/items/soulgemcommon.png | Bin 717 -> 0 bytes .../items/soulgemcommon_corrosive.png | Bin 725 -> 0 bytes .../items/soulgemcommon_destructive.png | Bin 728 -> 0 bytes .../items/soulgemcommon_steadfast.png | Bin 722 -> 0 bytes .../textures/items/soulgemcommon_vengeful.png | Bin 726 -> 0 bytes .../textures/items/soulgemgrand.png | Bin 757 -> 0 bytes .../textures/items/soulgemgrand_corrosive.png | Bin 757 -> 0 bytes .../items/soulgemgrand_destructive.png | Bin 761 -> 0 bytes .../textures/items/soulgemgrand_steadfast.png | Bin 754 -> 0 bytes .../textures/items/soulgemgrand_vengeful.png | Bin 767 -> 0 bytes .../textures/items/soulgemgreater.png | Bin 721 -> 0 bytes .../items/soulgemgreater_corrosive.png | Bin 725 -> 0 bytes .../items/soulgemgreater_destructive.png | Bin 730 -> 0 bytes .../items/soulgemgreater_steadfast.png | Bin 723 -> 0 bytes .../items/soulgemgreater_vengeful.png | Bin 727 -> 0 bytes .../textures/items/soulgemlesser.png | Bin 719 -> 0 bytes .../items/soulgemlesser_corrosive.png | Bin 726 -> 0 bytes .../items/soulgemlesser_destructive.png | Bin 727 -> 0 bytes .../items/soulgemlesser_steadfast.png | Bin 725 -> 0 bytes .../textures/items/soulgemlesser_vengeful.png | Bin 723 -> 0 bytes .../textures/items/soulgempetty.png | Bin 706 -> 0 bytes .../textures/items/soulgempetty_corrosive.png | Bin 710 -> 0 bytes .../items/soulgempetty_destructive.png | Bin 708 -> 0 bytes .../textures/items/soulgempetty_steadfast.png | Bin 708 -> 0 bytes .../textures/items/soulgempetty_vengeful.png | Bin 707 -> 0 bytes .../bloodmagic/textures/items/soulpickaxe.png | Bin 923 -> 0 bytes .../textures/items/soulpickaxe_corrosive.png | Bin 940 -> 0 bytes .../items/soulpickaxe_destructive.png | Bin 941 -> 0 bytes .../textures/items/soulpickaxe_steadfast.png | Bin 933 -> 0 bytes .../textures/items/soulpickaxe_vengeful.png | Bin 939 -> 0 bytes .../bloodmagic/textures/items/soulshovel.png | Bin 936 -> 0 bytes .../textures/items/soulshovel_corrosive.png | Bin 945 -> 0 bytes .../textures/items/soulshovel_destructive.png | Bin 938 -> 0 bytes .../textures/items/soulshovel_steadfast.png | Bin 929 -> 0 bytes .../textures/items/soulshovel_vengeful.png | Bin 940 -> 0 bytes .../bloodmagic/textures/items/soulsnare.png | Bin 498 -> 0 bytes .../textures/items/soulsnare_corrosive.png | Bin 499 -> 0 bytes .../textures/items/soulsnare_destructive.png | Bin 499 -> 0 bytes .../textures/items/soulsnare_steadfast.png | Bin 497 -> 0 bytes .../textures/items/soulsnare_vengeful.png | Bin 496 -> 0 bytes .../textures/items/soulsword_activated.png | Bin 15261 -> 0 bytes .../items/soulsword_corrosive_activated.png | Bin 873 -> 0 bytes .../items/soulsword_corrosive_deactivated.png | Bin 862 -> 0 bytes .../textures/items/soulsword_deactivated.png | Bin 15220 -> 0 bytes .../items/soulsword_destructive_activated.png | Bin 866 -> 0 bytes .../soulsword_destructive_deactivated.png | Bin 847 -> 0 bytes .../items/soulsword_steadfast_activated.png | Bin 873 -> 0 bytes .../items/soulsword_steadfast_deactivated.png | Bin 867 -> 0 bytes .../items/soulsword_vengeful_activated.png | Bin 876 -> 0 bytes .../items/soulsword_vengeful_deactivated.png | Bin 866 -> 0 bytes .../bloodmagic/textures/items/sulfur.png | Bin 459 -> 0 bytes .../textures/items/teleposerfocus.png | Bin 688 -> 0 bytes .../textures/items/telepositionsigil.png | Bin 747 -> 0 bytes .../textures/items/transpositionsigil.png | Bin 738 -> 0 bytes .../bloodmagic/textures/items/upgradetome.png | Bin 853 -> 0 bytes .../textures/items/upgradetrainer.png | Bin 690 -> 0 bytes .../bloodmagic/textures/items/voidsigil.png | Bin 698 -> 0 bytes .../textures/items/warriorsigil_activated.png | Bin 1583 -> 0 bytes .../items/warriorsigil_deactivated.png | Bin 1580 -> 0 bytes .../textures/items/waterscribetool.png | Bin 15388 -> 0 bytes .../bloodmagic/textures/items/watersigil.png | Bin 1585 -> 0 bytes .../textures/items/weakbloodshard.png | Bin 541 -> 0 bytes .../textures/items/windsigil_activated.png | Bin 1599 -> 0 bytes .../textures/items/windsigil_deactivated.png | Bin 1574 -> 0 bytes .../assets/bloodmagic/textures/misc/beam2.png | Bin 487 -> 0 bytes .../bloodmagic/textures/misc/potions.png | Bin 2109 -> 0 bytes .../textures/misc/screenshots/altars/t1.png | Bin 21644 -> 0 bytes .../textures/misc/screenshots/altars/t2.png | Bin 37659 -> 0 bytes .../textures/misc/screenshots/altars/t3.png | Bin 48658 -> 0 bytes .../textures/misc/screenshots/altars/t4.png | Bin 49884 -> 0 bytes .../textures/misc/screenshots/altars/t5.png | Bin 63113 -> 0 bytes .../textures/misc/screenshots/altars/t6.png | Bin 72385 -> 0 bytes .../misc/screenshots/demons/ring1.png | Bin 21567 -> 0 bytes .../misc/screenshots/demons/ring2.png | Bin 41249 -> 0 bytes .../misc/screenshots/rituals/alchemy.png | Bin 48584 -> 0 bytes .../misc/screenshots/rituals/animalgrowth.png | Bin 38609 -> 0 bytes .../misc/screenshots/rituals/beatinganvil.png | Bin 57210 -> 0 bytes .../misc/screenshots/rituals/binding.png | Bin 91100 -> 0 bytes .../misc/screenshots/rituals/containment.png | Bin 38720 -> 0 bytes .../misc/screenshots/rituals/convocation.png | Bin 99654 -> 0 bytes .../misc/screenshots/rituals/crusher.png | Bin 78450 -> 0 bytes .../misc/screenshots/rituals/dome.png | Bin 44876 -> 0 bytes .../misc/screenshots/rituals/ellipsoid.png | Bin 89596 -> 0 bytes .../misc/screenshots/rituals/eternalsoul.png | Bin 82170 -> 0 bytes .../misc/screenshots/rituals/evaporation.png | Bin 70654 -> 0 bytes .../misc/screenshots/rituals/expulsion.png | Bin 41196 -> 0 bytes .../screenshots/rituals/featheredearth.png | Bin 85440 -> 0 bytes .../screenshots/rituals/featheredknife.png | Bin 57026 -> 0 bytes .../misc/screenshots/rituals/flight.png | Bin 74223 -> 0 bytes .../misc/screenshots/rituals/gaia.png | Bin 73058 -> 0 bytes .../misc/screenshots/rituals/greengrove.png | Bin 38966 -> 0 bytes .../misc/screenshots/rituals/harvest.png | Bin 73476 -> 0 bytes .../misc/screenshots/rituals/interdiction.png | Bin 37754 -> 0 bytes .../misc/screenshots/rituals/jump.png | Bin 60507 -> 0 bytes .../misc/screenshots/rituals/lava.png | Bin 33923 -> 0 bytes .../misc/screenshots/rituals/magnetism.png | Bin 74168 -> 0 bytes .../misc/screenshots/rituals/meteor.png | Bin 72137 -> 0 bytes .../misc/screenshots/rituals/phantomhands.png | Bin 90184 -> 0 bytes .../misc/screenshots/rituals/regeneration.png | Bin 68184 -> 0 bytes .../screenshots/rituals/sacrosanctity.png | Bin 85523 -> 0 bytes .../misc/screenshots/rituals/speed.png | Bin 46938 -> 0 bytes .../screenshots/rituals/stallingomega.png | Bin 96404 -> 0 bytes .../misc/screenshots/rituals/stomach.png | Bin 76910 -> 0 bytes .../screenshots/rituals/symmetryomega.png | Bin 22586 -> 0 bytes .../misc/screenshots/rituals/unbinding.png | Bin 85056 -> 0 bytes .../misc/screenshots/rituals/veilofevil.png | Bin 79972 -> 0 bytes .../misc/screenshots/rituals/water.png | Bin 32267 -> 0 bytes .../screenshots/rituals/wellofsuffering.png | Bin 93294 -> 0 bytes .../misc/screenshots/rituals/zephyr.png | Bin 60404 -> 0 bytes .../misc/screenshots/spells/conduit.png | Bin 41574 -> 0 bytes .../misc/screenshots/spells/effect.png | Bin 24790 -> 0 bytes .../misc/screenshots/spells/enhancement.png | Bin 30271 -> 0 bytes .../misc/screenshots/spells/modifier.png | Bin 24647 -> 0 bytes .../misc/screenshots/spells/paradigm.png | Bin 23796 -> 0 bytes .../screenshots/spells/simplespelltable.png | Bin 33963 -> 0 bytes .../models/alchemyarrays/airsigil.png | Bin 36077 -> 0 bytes .../models/alchemyarrays/basearray.png | Bin 20705 -> 0 bytes .../models/alchemyarrays/bindingarray.png | Bin 43181 -> 0 bytes .../alchemyarrays/bindinglightningarray.png | Bin 43258 -> 0 bytes .../models/alchemyarrays/bouncearray.png | Bin 35950 -> 0 bytes .../models/alchemyarrays/divinationsigil.png | Bin 33324 -> 0 bytes .../alchemyarrays/elementalaffinitysigil.png | Bin 36992 -> 0 bytes .../models/alchemyarrays/fastminersigil.png | Bin 30009 -> 0 bytes .../models/alchemyarrays/furnacearray.png | Bin 45089 -> 0 bytes .../models/alchemyarrays/growthsigil.png | Bin 33209 -> 0 bytes .../models/alchemyarrays/hastesigil.png | Bin 38571 -> 0 bytes .../models/alchemyarrays/lavasigil.png | Bin 28707 -> 0 bytes .../models/alchemyarrays/lightsigil.png | Bin 41435 -> 0 bytes .../models/alchemyarrays/magnetismsigil.png | Bin 36653 -> 0 bytes .../models/alchemyarrays/mobsacrifice.png | Bin 44577 -> 0 bytes .../models/alchemyarrays/movementarray.png | Bin 46869 -> 0 bytes .../models/alchemyarrays/shardoflaputa.png | Bin 54532 -> 0 bytes .../models/alchemyarrays/sightsigil.png | Bin 43552 -> 0 bytes .../models/alchemyarrays/skeletonturret1.png | Bin 33675 -> 0 bytes .../models/alchemyarrays/skeletonturret2.png | Bin 30611 -> 0 bytes .../models/alchemyarrays/spikearray.png | Bin 47801 -> 0 bytes .../models/alchemyarrays/stupidarray.png | Bin 905 -> 0 bytes .../models/alchemyarrays/suppressionsigil.png | Bin 42298 -> 0 bytes .../models/alchemyarrays/teleportation.png | Bin 50896 -> 0 bytes .../alchemyarrays/teleportationarray.png | Bin 50896 -> 0 bytes .../models/alchemyarrays/updraftarray.png | Bin 43778 -> 0 bytes .../models/alchemyarrays/voidsigil.png | Bin 24185 -> 0 bytes .../models/alchemyarrays/watersigil.png | Bin 29093 -> 0 bytes .../models/alchemyarrays/wiparray.png | Bin 16402 -> 0 bytes .../models/alchemyarrays/zombiebeacon.png | Bin 40967 -> 0 bytes .../textures/models/alchemytable.png | Bin 10109 -> 0 bytes .../models/armor/living_armor_layer_1.png} | Bin .../models/armor/living_armor_layer_2.png} | Bin .../textures/models/corrosivecrystal.png | Bin 748 -> 0 bytes .../textures/models/defaultcrystal.png | Bin 740 -> 0 bytes .../textures/models/demoncrucible.png | Bin 5682 -> 0 bytes .../textures/models/demoncrystallizer.png | Bin 3406 -> 0 bytes .../bloodmagic/textures/models/demonpylon.png | Bin 5671 -> 0 bytes .../textures/models/destructivecrystal.png | Bin 748 -> 0 bytes .../models/energybazookamainprojectile.png | Bin 2154 -> 0 bytes .../textures/models/hellfireforge.png | Bin 3581 -> 0 bytes .../textures/models/incensealtar.png | Bin 6835 -> 0 bytes .../bloodmagic/textures/models/meteor.png | Bin 1969 -> 0 bytes .../textures/models/mobsacrificeswirl.png | Bin 137017 -> 0 bytes .../textures/models/modelinputroutingnode.png | Bin 1948 -> 0 bytes .../models/modelmasterroutingnode.png | Bin 2898 -> 0 bytes .../models/modeloutputroutingnode.png | Bin 1916 -> 0 bytes .../textures/models/modelroutingnode.png | Bin 1798 -> 0 bytes .../bloodmagic/textures/models/pedestal.png | Bin 1469 -> 0 bytes .../textures/models/pillar_base.png | Bin 1573 -> 0 bytes .../textures/models/pillar_base_c.png | Bin 1515 -> 0 bytes .../textures/models/pillar_base_d.png | Bin 1489 -> 0 bytes .../textures/models/pillar_base_s.png | Bin 1517 -> 0 bytes .../textures/models/pillar_base_v.png | Bin 1590 -> 0 bytes .../bloodmagic/textures/models/pillar_mid.png | Bin 1901 -> 0 bytes .../textures/models/pillar_mid_c.png | Bin 1853 -> 0 bytes .../textures/models/pillar_mid_d.png | Bin 1805 -> 0 bytes .../textures/models/pillar_mid_s.png | Bin 1794 -> 0 bytes .../textures/models/pillar_mid_v.png | Bin 2446 -> 0 bytes .../bloodmagic/textures/models/plinth.png | Bin 2700 -> 0 bytes .../bloodmagic/textures/models/reagent.png | Bin 396 -> 0 bytes .../textures/models/simpletranscircle.png | Bin 22424 -> 0 bytes .../textures/models/steadfastcrystal.png | Bin 734 -> 0 bytes .../textures/models/vengefulcrystal.png | Bin 737 -> 0 bytes .../textures/models/writingtable.png | Bin 2260 -> 0 bytes .../bloodmagic/textures/potions/boost.png | Bin 748 -> 0 bytes .../assets/bloodmagicguide/lang/de_DE.lang | 270 ---- .../assets/bloodmagicguide/lang/en_US.lang | 270 ---- .../assets/bloodmagicguide/lang/zh_CN.lang | 270 ---- .../assets/bloodmagicguide/lang/zh_TW.lang | 258 ---- .../textures/gui/alchemyarraycrafting.png | Bin 2464 -> 0 bytes .../bloodmagicguide/textures/gui/altar.png | Bin 18703 -> 0 bytes .../textures/gui/bullet_point.png | Bin 17840 -> 0 bytes .../textures/gui/soulforge.png | Bin 3452 -> 0 bytes src/main/resources/mcmod.info | 30 +- src/main/resources/pack.mcmeta | 6 + 1764 files changed, 7049 insertions(+), 90817 deletions(-) rename src/api/java/{WayofTime => com/wayoftime}/bloodmagic/api/BloodMagicPlugin.java (93%) rename src/api/java/{WayofTime => com/wayoftime}/bloodmagic/api/IBloodMagicAPI.java (96%) rename src/api/java/{WayofTime => com/wayoftime}/bloodmagic/api/IBloodMagicBlacklist.java (97%) rename src/api/java/{WayofTime => com/wayoftime}/bloodmagic/api/IBloodMagicPlugin.java (96%) rename src/api/java/{WayofTime => com/wayoftime}/bloodmagic/api/IBloodMagicRecipeRegistrar.java (95%) rename src/api/java/{WayofTime => com/wayoftime}/bloodmagic/api/IBloodMagicValueManager.java (97%) rename src/api/java/{WayofTime => com/wayoftime}/bloodmagic/api/event/BloodMagicCraftedEvent.java (92%) rename src/api/java/{WayofTime => com/wayoftime}/bloodmagic/api/package-info.java (75%) create mode 100644 src/compat/java/com/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java rename src/{main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java => compat/java/com/wayoftime/bloodmagic/compat/jei/altar/RecipeCategoryAltar.java} (61%) create mode 100644 src/compat/java/com/wayoftime/bloodmagic/compat/jei/altar/RecipeWrapperAltar.java create mode 100644 src/compat/java/com/wayoftime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java create mode 100644 src/compat/java/com/wayoftime/bloodmagic/compat/waila/DataProviderBloodAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/BloodMagic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ConfigHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffect.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectArrowTurret.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectAttractor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBinding.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBounce.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectCrafting.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectCraftingNew.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectFurnaceFuel.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectLaputa.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMobSacrifice.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMovement.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSigil.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSkeletonTurret.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSpike.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectTeleport.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectUpdraft.java delete mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/altar/AltarComponent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/altar/AltarUpgrade.java delete mode 100644 src/main/java/WayofTime/bloodmagic/altar/AltarUtil.java delete mode 100644 src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/altar/ComponentType.java delete mode 100644 src/main/java/WayofTime/bloodmagic/altar/IAltarComponent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/altar/IAltarManipulator.java delete mode 100644 src/main/java/WayofTime/bloodmagic/altar/IBloodAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicCorePlugin.java delete mode 100644 src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicValueManager.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockAlchemyTable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDecorative.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonLight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarCapBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonStairsBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDemonWallBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockDimensionalPortal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockItemRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockLifeEssence.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockMasterRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockPath.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/BlockTeleposer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/IBMBlock.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/base/BlockEnum.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillarCap.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/base/BlockEnumWall.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/base/BlockInteger.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumDecorative.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock1.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock2.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock3.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumInversionCap.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumPath.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumRitualController.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType1.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType2.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType3.java delete mode 100644 src/main/java/WayofTime/bloodmagic/block/enums/EnumWillWall.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/gui/GuiAlchemyTable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/gui/GuiBloodMagicConfig.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/gui/GuiHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/gui/GuiHolding.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/gui/GuiMasterRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/gui/GuiSoulForge.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/gui/GuiTeleposer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/helper/ShaderHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/ConfigEntryEditHUD.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/ElementInfo.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/ElementRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/Elements.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/GuiEditHUD.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/element/ElementDemonAura.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/element/ElementDivinedInformation.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/element/ElementHolding.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/element/ElementItemStack.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/element/ElementSprite.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/element/ElementString.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/element/ElementTileInformation.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/hud/element/HUDElement.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/key/IKeybindable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/key/KeyBindingBloodMagic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionActivatable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionMultiWill.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionWillGem.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/LayerBloodElytra.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/AttractorAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/BindingAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/DualAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/LowAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/LowStaticAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/MobSacrificeAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/SingleAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/StaticAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/TurretAlchemyCircleRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/block/RenderAlchemyArray.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/block/RenderAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/block/RenderBloodTank.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/block/RenderDemonCrucible.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/block/RenderFakeBlocks.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/block/RenderMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/BloodLightRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedChickenRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedSheepRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedSpiderRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedZombieRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/MeteorRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/MimicRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedChicken.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedSheep.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedSpider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedZombie.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityBloodLight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMeteor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntitySentientArrow.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntitySoulSnare.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/RenderSentientSpecter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/SentientArrowRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/SentientSpecterRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/SoulSnareRenderFactory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerAlchemyCircle.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerCorruptedSheepWool.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerCorruptedSpiderEyes.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerWill.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedChicken.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSheep.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSheep2.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSpider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/model/ModelMeteor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/client/render/model/ModelMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java delete mode 100644 src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java delete mode 100644 src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/BookUtils.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryAlchemy.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryArchitect.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryDemon.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryRitual.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategorySpell.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/entry/EntryText.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAlchemyArray.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageTartaricForgeRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeJEI.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeMaker.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeJEI.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeMaker.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderAlchemyArray.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodTank.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderRitualController.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderTeleposer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compress/AdvancedCompressionHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compress/BaseCompressionHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compress/CompressionHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compress/CompressionRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingManager.java delete mode 100644 src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingRecipeAssimilator.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicBlocks.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicRecipes.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/data/BMWorldSavedData.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/data/SoulNetwork.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/data/SoulTicket.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/registry/AlchemyArrayRecipeRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/registry/AlchemyTableRecipeRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/registry/AltarRecipeRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/registry/LivingArmourDowngradeRecipeRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/registry/OrbRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/core/registry/TartaricForgeRecipeRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/demonAura/PosXY.java delete mode 100644 src/main/java/WayofTime/bloodmagic/demonAura/WillChunk.java delete mode 100644 src/main/java/WayofTime/bloodmagic/demonAura/WillWorld.java delete mode 100644 src/main/java/WayofTime/bloodmagic/demonAura/WorldDemonWillHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackRangedBow.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackStealthMelee.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIEatAndCorruptBlock.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIFollowOwner.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIGrabEffectsFromOwner.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIHurtByTargetIgnoreTamed.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIMimicReform.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIOwnerHurtByTarget.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIOwnerHurtTarget.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIPickUpAlly.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIProtectAlly.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIRetreatToHeal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthRetreat.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthTowardsTarget.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/mob/EntityAspectedDemonBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedChicken.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSheep.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSpider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedZombie.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/mob/EntityDemonBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/mob/EntityMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/mob/EntitySentientSpecter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/projectile/EntityBloodLight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySentientArrow.java delete mode 100644 src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySoulSnare.java delete mode 100644 src/main/java/WayofTime/bloodmagic/event/AddToNetworkEvent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/event/AltarCraftedEvent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/event/BoundToolEvent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/event/ItemBindEvent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/event/RitualEvent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/event/SacrificeKnifeUsedEvent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/event/TeleposeEvent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/fakePlayer/FakeNetHandlerPlayServer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/fakePlayer/FakePlayerBM.java delete mode 100644 src/main/java/WayofTime/bloodmagic/gson/SerializerBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/gson/Serializers.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IActivatable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IAlchemyArray.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IAltarReader.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IBloodRune.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/ICustomAlchemyConsumable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IDemonWillViewer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IDocumentedBlock.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IItemLPContainer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IMultiWillTool.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/INodeRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IPurificationAsh.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/ISentientSwordEffectProvider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/ISentientTool.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/ISigil.java delete mode 100644 src/main/java/WayofTime/bloodmagic/iface/IUpgradeTrainer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/incense/EnumTranquilityType.java delete mode 100644 src/main/java/WayofTime/bloodmagic/incense/IIncensePath.java delete mode 100644 src/main/java/WayofTime/bloodmagic/incense/ITranquilityHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/incense/IncenseAltarComponent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/incense/IncenseAltarHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/incense/IncenseTranquilityRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/incense/TranquilityStack.java delete mode 100644 src/main/java/WayofTime/bloodmagic/inversion/CorruptionHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemAlchemicVial.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemArcaneAshes.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBindableBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemDemonWillGauge.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemEnum.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemRitualReader.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemSanguineBook.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemSlate.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTrainer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/alchemy/ItemCuttingFluid.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/alchemy/ItemLivingArmourPointsUpgrade.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/block/ItemBlockAlchemyTable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/block/ItemBlockMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockEnum.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockInteger.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSacrifice.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/inventory/ContainerHolding.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/inventory/InventoryHolding.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/IFluidFilterProvider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/IItemFilterProvider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/IRoutingFilterProvider.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/ItemNodeRouter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigil.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFilledHand.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilPhantomBridge.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSuppression.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemMonsterSoul.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientArmourGem.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soulBreath/ItemFlightScroll.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/soulBreath/ItemSoulBreathContainer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/types/AlchemicVialType.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/types/ComponentTypes.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/types/ISubItem.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/types/ShardType.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/ILivingArmour.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourUpgrade.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/StatTracker.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeBattleHungry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeCrippledArm.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDigSlowdown.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDisoriented.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeQuenched.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlippery.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowHeal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeStormTrooper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowProtect.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowShot.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerCriticalStrike.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerDigging.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerExperience.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFallProtect.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFireResist.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGraveDigger.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGrimReaperSprint.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerHealthboost.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerJump.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMeleeDamage.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMovement.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerNightSight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPhysicalProtect.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPoison.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerRepairing.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSelfSacrifice.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSolarPowered.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSprintAttack.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerStepAssist.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeArrowProtect.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeArrowShot.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeCriticalStrike.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeDigging.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeElytra.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeExperience.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeFallProtect.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeFireResist.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGraveDigger.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGrimReaperSprint.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeJump.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeNightSight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradePhysicalProtect.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradePoisonResist.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeRepairing.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSelfSacrifice.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSolarPowered.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSprintAttack.java delete mode 100644 src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeStepAssist.java delete mode 100644 src/main/java/WayofTime/bloodmagic/meteor/Meteor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/meteor/MeteorComponent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/meteor/MeteorRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/network/BloodMagicPacketHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/network/DemonAuraPacketProcessor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/network/ItemRouterAmountPacketProcessor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/network/KeyProcessor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/network/PlayerFallDistancePacketProcessor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/network/PlayerVelocityPacketProcessor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/network/SigilHoldingPacketProcessor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/orb/BloodOrb.java delete mode 100644 src/main/java/WayofTime/bloodmagic/orb/IBloodOrb.java delete mode 100644 src/main/java/WayofTime/bloodmagic/potion/BMPotionUtils.java delete mode 100644 src/main/java/WayofTime/bloodmagic/potion/PotionBloodMagic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java delete mode 100644 src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java delete mode 100644 src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java delete mode 100644 src/main/java/WayofTime/bloodmagic/recipe/LivingArmourDowngradeRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/recipe/TartaricForgeRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableCustomRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableDyeableRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTablePotionAugmentRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTablePotionRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableRecipe.java delete mode 100644 src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java delete mode 100644 src/main/java/WayofTime/bloodmagic/registry/ModCorruptionBlocks.java delete mode 100644 src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java delete mode 100644 src/main/java/WayofTime/bloodmagic/registry/ModRituals.java delete mode 100644 src/main/java/WayofTime/bloodmagic/registry/ModTranquilityHandlers.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/AreaDescriptor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/CapabilityRuneType.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/EnumRitualReaderState.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/EnumRuneType.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/IMasterRitualStone.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/IRitualStone.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/Ritual.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/RitualComponent.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/RitualManager.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/RitualRegister.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/RitualRenderer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerTall.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/harvest/IHarvestHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/imperfect/IImperfectRitualStone.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitual.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/imperfect/package-info.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/portal/LocationsHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/portal/Teleports.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualAltarBuilder.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualAnimalGrowth.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualArmourEvolve.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualCobblestone.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualContainment.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrushing.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrystalHarvest.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrystalSplit.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualEllipsoid.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualExpulsion.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualFeatheredKnife.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualFelling.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualForsakenSoul.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualFullStomach.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualGreenGrove.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualHarvest.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualInterdiction.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualJumping.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualLava.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualLivingArmourDowngrade.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualMagnetic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualMeteor.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualPlacer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualPortal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualPump.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualRegeneration.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualSpeed.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualSuppression.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualUpgradeRemove.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualWater.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualWellOfSuffering.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/RitualZephyr.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualDay.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualNight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualRain.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualResistance.java delete mode 100644 src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualZombie.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IFluidFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IFluidRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IInputFluidRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IInputItemRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IItemRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IMasterRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IOutputFluidRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IOutputItemRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IRoutingFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/IgnoreNBTItemFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/ModIdItemFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/NodeHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/OreDictItemFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/DemonWillHolder.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/EnumDemonWillType.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/IDemonWill.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/IDemonWillConduit.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/IDemonWillGem.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/IDemonWillWeapon.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/IDiscreteDemonWill.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/ISoulBreathContainer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/soul/PlayerDemonWillHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/BuildTestStructure.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/Dungeon.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/DungeonRoom.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/DungeonRoomLoader.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/DungeonRoomRegistry.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/DungeonStructure.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/DungeonTester.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/DungeonUtil.java delete mode 100644 src/main/java/WayofTime/bloodmagic/structures/ModDungeons.java delete mode 100644 src/main/java/WayofTime/bloodmagic/teleport/ITeleport.java delete mode 100644 src/main/java/WayofTime/bloodmagic/teleport/PortalLocation.java delete mode 100644 src/main/java/WayofTime/bloodmagic/teleport/Teleport.java delete mode 100644 src/main/java/WayofTime/bloodmagic/teleport/TeleportQueue.java delete mode 100644 src/main/java/WayofTime/bloodmagic/teleport/TeleporterBloodMagic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileAlchemyTable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystallizer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileDimensionalPortal.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileIncenseAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileInventory.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileMimic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TilePhantomBlock.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TilePurificationAltar.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileSpectralBlock.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/base/TileTicking.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/container/ContainerAlchemyTable.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/container/ContainerMasterRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/container/ContainerSoulForge.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/container/ContainerTeleposer.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/routing/TileItemRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/tile/routing/TileRoutingNode.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/BlockStack.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/BooleanResult.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/ChatUtil.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/Constants.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/DamageSourceBloodMagic.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/GhostItemHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/ItemStackWrapper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/StateUtil.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/Utils.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/handler/event/CraftingHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/BindableHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/IncenseHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/ItemHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/NBTHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/NetworkHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/NumeralHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/PlayerHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/PlayerSacrificeHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/PurificationHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/RitualHelper.java delete mode 100644 src/main/java/WayofTime/bloodmagic/util/helper/TextHelper.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/BloodMagic.java rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/api/impl/BloodMagicAPI.java (90%) rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/api/impl/BloodMagicBlacklist.java (95%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java (82%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicValueManager.java rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/api/impl/recipe/RecipeAlchemyArray.java (93%) rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/api/impl/recipe/RecipeAlchemyTable.java (96%) rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/api/impl/recipe/RecipeBloodAltar.java (89%) rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/api/impl/recipe/RecipeSacrificeCraft.java (80%) rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/api/impl/recipe/RecipeTartaricForge.java (96%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/block/BlockBloodAltar.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/block/BlockBloodRune.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/block/BlockDemonDecor.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/block/BlockMundane.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/block/BlockStairsExtended.java rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/client/Sprite.java (93%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/client/render/TESRBloodAltar.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/BloodMagicConfiguration.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagic.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicBlocks.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicItems.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicLivingArmor.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicRecipes.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/altar/AltarComponent.java rename src/main/java/{WayofTime/bloodmagic => com/wayoftime/bloodmagic/core}/altar/AltarTier.java (62%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUpgrades.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUtil.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/altar/IAltarManipulator.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/handler/GenericEventHandler.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/living/ILivingContainer.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/living/LivingEquipmentEvent.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/living/LivingStats.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/living/LivingStatusWatcher.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/living/LivingUtil.java rename src/main/java/{WayofTime/bloodmagic/core/data => com/wayoftime/bloodmagic/core/network}/Binding.java (84%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/network/BloodOrb.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/network/IBloodOrb.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/network/NetworkInteraction.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/network/SNSavedData.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/network/SoulNetwork.java rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/core/recipe/IngredientBloodOrb.java (86%) rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/core/recipe/IngredientBloodOrbFactory.java (76%) rename src/main/java/{WayofTime/bloodmagic/block/enums/BloodRuneType.java => com/wayoftime/bloodmagic/core/type/BloodRunes.java} (53%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/type/ComponentType.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/type/DemonWillType.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/type/SlateType.java rename src/main/java/{WayofTime/bloodmagic => com/wayoftime/bloodmagic/core}/util/BMLog.java (68%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/BooleanResult.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/JsonUtil.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/OrbUtil.java rename src/main/java/{WayofTime/bloodmagic => com/wayoftime/bloodmagic/core}/util/PluginUtil.java (93%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/RegistryAddCallbackWrapper.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/register/IItemProvider.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/core/util/register/IVariantProvider.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/event/BindingEvent.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/event/SacrificeEvent.java rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/event/SoulNetworkEvent.java (71%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/Category.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/Entry.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/Guide.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponent.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentFiller.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentImage.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentItem.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentRecipe.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentSmelting.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentText.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/test/GuideTest.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/test/ItemGuide.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/test/gui/Bookmark.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/guide/test/gui/GuiGuide.java rename src/main/java/{WayofTime/bloodmagic/iface => com/wayoftime/bloodmagic/item}/IBindable.java (54%) create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemAltarBuilder.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemBindable.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemBloodOrb.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemDaggerSelfSacrifice.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemLivingArmor.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemLivingTome.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/ItemMundane.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/sigil/ISigil.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/sigil/ItemSigil.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilAir.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilDivination.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilFastMiner.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilHaste.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/proxy/ClientProxy.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/proxy/IProxy.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/proxy/ServerProxy.java create mode 100644 src/main/java/com/wayoftime/bloodmagic/tile/TileBloodAltar.java rename src/main/java/{WayofTime => com/wayoftime}/bloodmagic/tile/base/TileBase.java (64%) delete mode 100644 src/main/resources/assets/bloodmagic/armatures/block/pillar_mid.json delete mode 100644 src/main/resources/assets/bloodmagic/asms/block/inversion_pillar.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/activation_crystal.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/alchemic_vial.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/alchemy_array.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/alchemy_table.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/altar.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/altar_maker.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/arcane_ashes.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/base_fluid_filter.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/base_item_filter.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_altar.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_light.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_orb.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_acceleration.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_augmented_capacity.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_blank.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_capacity.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_charging.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_displacement.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_efficiency.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_orb.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_sacrifice.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_self_sacrifice.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_rune_speed.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_shard.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/blood_tank.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/bloodstone_brick.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/bloodstone_tile.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/bound_axe.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/bound_pickaxe.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/bound_shovel.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/bound_sword.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/component.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/cutting_fluid.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/dagger_of_sacrifice.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/decorative_brick.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_1.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_2.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_corrosive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_corrosive_stairs.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_destructive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_destructive_stairs.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_raw.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_raw_stairs.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_corrosive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_destructive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_raw.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_steadfast.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_vengeful.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_steadfast.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_steadfast_stairs.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_vengeful.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_brick_vengeful_stairs.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_crucible.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_crystal.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_crystallizer.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_extras.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_light.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_metal_corrosive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_metal_destructive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_metal_raw.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_metal_steadfast.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_metal_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_pillar_1.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_pillar_2.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_1.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_2.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_3.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_pylon.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stairs_1.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stairs_2.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stairs_3.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_corrosive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_destructive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_corrosive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_destructive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_raw.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_steadfast.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_vengeful.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_raw.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_steadfast.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_stone_vengeful.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_corrosive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_destructive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_raw.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_corrosive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_destructive.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_raw.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_steadfast.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_vengeful.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_steadfast.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_tile_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_wall_1.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/demon_will_gauge.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/dimensional_portal.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/experience_tome.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/icarus_scroll.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/incense_altar.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/input_routing_node.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/inscription_tool.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/inversion_pillar.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/inversion_pillar_end.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/item_demon_crystal.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/item_routing_node.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/lava_crystal.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/living_armour.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/master_routing_node.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/mimic.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/monster_soul.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/node_router.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/output_routing_node.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/pack_sacrifice.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/pack_self_sacrifice.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/path.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/phantom.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/points_upgrade.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/potion_flask.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/ritual_controller.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/ritual_diviner.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/ritual_reader.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/ritual_stone.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sacrificial_dagger.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sanguine_book.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sentient_armour.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sentient_armour_gem.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sentient_axe.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sentient_bow.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sentient_pickaxe.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sentient_shovel.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sentient_sword.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_air.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_blood_light.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_bounce.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_claw.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_compression.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_divination.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_elemental_affinity.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_ender_severance.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_fast_miner.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_frost.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_green_grove.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_haste.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_holding.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_lava.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_magnetism.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_phantom_bridge.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_seer.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_suppression.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_teleposition.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_transposition.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_void.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_water.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/sigil_whirlwind.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/slate.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/soul_forge.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/soul_gem.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/soul_snare.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/spectral.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/teleposer.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/teleposition_focus.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/test_spell_block.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/upgrade_tome.json delete mode 100644 src/main/resources/assets/bloodmagic/blockstates/upgrade_trainer.json delete mode 100644 src/main/resources/assets/bloodmagic/books/architect.xml delete mode 100644 src/main/resources/assets/bloodmagic/gui/bookleft.png delete mode 100644 src/main/resources/assets/bloodmagic/gui/jei/alchemy.png delete mode 100644 src/main/resources/assets/bloodmagic/gui/jei/alchemytable.png delete mode 100644 src/main/resources/assets/bloodmagic/gui/jei/binding.png delete mode 100644 src/main/resources/assets/bloodmagic/gui/jei/soulforge.png delete mode 100644 src/main/resources/assets/bloodmagic/gui/sigilholding.png delete mode 100644 src/main/resources/assets/bloodmagic/gui/teleposer.png delete mode 100644 src/main/resources/assets/bloodmagic/gui/writingtable.png delete mode 100644 src/main/resources/assets/bloodmagic/lang/bg_BG.lang delete mode 100644 src/main/resources/assets/bloodmagic/lang/de_DE.lang delete mode 100644 src/main/resources/assets/bloodmagic/lang/en_US.lang_old delete mode 100644 src/main/resources/assets/bloodmagic/lang/fr_FR.lang delete mode 100644 src/main/resources/assets/bloodmagic/lang/it_IT.lang delete mode 100644 src/main/resources/assets/bloodmagic/lang/ja_JP.lang delete mode 100644 src/main/resources/assets/bloodmagic/lang/ko_KR.lang delete mode 100644 src/main/resources/assets/bloodmagic/lang/ru_RU.lang delete mode 100644 src/main/resources/assets/bloodmagic/lang/zh_CN.lang delete mode 100644 src/main/resources/assets/bloodmagic/lang/zh_TW.lang delete mode 100644 src/main/resources/assets/bloodmagic/loot_tables/bm_loot_table.json delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sacrificearmour_layer_1.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/selfsacrificearmour_layer_1.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_corrosive_layer_1.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_corrosive_layer_2.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_1.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_2.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_1.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_2.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_steadfast_layer_1.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_steadfast_layer_2.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_vengeful_layer_1.png delete mode 100644 src/main/resources/assets/bloodmagic/models/armor/sentientarmour_vengeful_layer_2.png delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockalchemyarray.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockblank.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockbloodlight.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockbloodtank.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdemoncrucible.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdemoncrucible.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdemoncrystallizer.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdemoncrystallizer.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdemonpylon.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdemonpylon.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdimensionalportal.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdimensionalportalew.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockdimensionalportalns.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockhellfireforge.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockhellfireforge.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockincensealtar.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockincensealtar.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockincensealtar.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockinputroutingnode.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockmasterroutingnode.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockoutputroutingnode.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockphantom.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockpillarcapeast.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockpillarcapnorth.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockpillarcapsouth.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockpillarcapwest.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockpillarx.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockpillarz.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blocksoulforge.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/blockspectral.json rename src/main/resources/assets/bloodmagic/models/block/{blockaltar.mtl => blood_altar.mtl} (79%) rename src/main/resources/assets/bloodmagic/models/block/{blockaltar.obj => blood_altar.obj} (99%) delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal1.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal1.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal2.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal2.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal3.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal3.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal4.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal4.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal5.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal5.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal6.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal6.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal7.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/crystal/crystal7.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/modelalchemytable.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/modelalchemytable.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/pillar_bottom.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/pillar_mid.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/pillar_top.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodebase.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodebase.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodecore.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/modelmasterroutingnodecore.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodebase.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodebase.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodecore.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/modelroutingnodecore.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/outputroutingnodecore.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/routing/routingnodebase.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/sub/blockaltar.mtl delete mode 100644 src/main/resources/assets/bloodmagic/models/block/sub/blockaltar.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/block/sub/blocksoulforge.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifiercore.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifierinput.json delete mode 100644 src/main/resources/assets/bloodmagic/models/block/sub/blockspellmodifieroutput.json delete mode 100644 src/main/resources/assets/bloodmagic/models/bloodaltar-fixeuv.obj delete mode 100644 src/main/resources/assets/bloodmagic/models/bloodaltar.obj create mode 100644 src/main/resources/assets/bloodmagic/models/item/altar_builder.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/blood_orb_apprentice.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/blood_orb_archmage.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/blood_orb_magician.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/blood_orb_master.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/blood_orb_transcendent.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/blood_orb_weak.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_corrosive_pulling_2.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_destructive_pulling_2.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_pulling_2.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_steadfast_pulling_2.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/bow/itemsentientbow_vengeful_pulling_2.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/dagger_self_sacrifice.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/dagger_self_sacrifice_charged.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/dagger_self_sacrifice_creative.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/demon_will_crystal_corrosive.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/demon_will_crystal_destructive.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/demon_will_crystal_raw.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/demon_will_crystal_steadfast.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/demon_will_crystal_vengeful.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/living_armor_chest.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/living_armor_feet.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/living_armor_head.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/living_armor_legs.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/living_tome.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/sentient_bow.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/sigil_air.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/sigil_divination.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/sigil_fast_miner.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/sigil_fast_miner_toggled.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/slate_blank.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/slate_demonic.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/slate_ethereal.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/slate_imbued.json create mode 100644 src/main/resources/assets/bloodmagic/models/item/slate_reinforced.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/_factories.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/activation_crystal.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/alchemy_table.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/altar.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/base_fluid_filter_0.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/base_item_filter_0.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/base_item_filter_1.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/base_item_filter_2.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/base_item_filter_3.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_acceleration.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_augcapacity.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_blank.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_capacity.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_charging.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_displacement.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_orb.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_sacrifice.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_selfsacrifice.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_rune/blood_rune_speed.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_0.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_1.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_10.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_11.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_12.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_13.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_14.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_15.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_2.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_3.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_4.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_5.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_6.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_7.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_8.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/blood_tank/blood_tank_9.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/decorative_brick_bloodstone_brick.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/decorative_brick_bloodstone_tile.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_1_brick1_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_smallbrick_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tile_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_brick_2_tilespecial_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_polished_stone_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_polished_stone_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_polished_stone_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_polished_stone_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_polished_stone_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_extras_stone_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_light_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_1_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_2_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_1_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_1_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_2_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_2_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_pillar_cap_3_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_1_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_1_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_2_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_2_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_stairs_3_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_brick_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_large_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_corrosive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_destructive.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_raw.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_steadfast.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/demon_decor/demon_wall_1_smallbrick_vengeful.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/experience_tome.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/incense_altar.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/lava_crystal.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/mimic_nohitbox.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/mimic_solidclear.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/mimic_solidlight.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/mimic_solidopaque.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/pack_sacrifice.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/pack_self_sacrifice.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/path/path_obsidian.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/path/path_obsidiantile.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/path/path_stone.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/path/path_stonetile.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/path/path_wood.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/path/path_woodtile.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/path/path_wornstone.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/path/path_wornstonetile.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_controller_imperfect.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_controller_inverted.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_controller_master.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_controller_master_alt.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_diviner_0.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_diviner_1.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_reader.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_stone_blank.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/ritual_stone_reset.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/sacrificial_dagger.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/soul_forge.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/soul_snare.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/teleposer.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/teleposition_focus_2.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/teleposition_focus_3.json delete mode 100644 src/main/resources/assets/bloodmagic/recipes/upgrade_trainer.json delete mode 100644 src/main/resources/assets/bloodmagic/schematics/corridor1.json delete mode 100644 src/main/resources/assets/bloodmagic/schematics/hallchest1.json delete mode 100644 src/main/resources/assets/bloodmagic/schematics/rawbuilding1.json delete mode 100644 src/main/resources/assets/bloodmagic/schematics/schematics.json delete mode 100644 src/main/resources/assets/bloodmagic/shaders/beam-broken.frag delete mode 100644 src/main/resources/assets/bloodmagic/shaders/beam.frag delete mode 100644 src/main/resources/assets/bloodmagic/structures/building1.nbt delete mode 100644 src/main/resources/assets/bloodmagic/structures/corridor1.nbt delete mode 100644 src/main/resources/assets/bloodmagic/structures/hallchest1.nbt delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/airritualstone.png rename src/main/resources/assets/bloodmagic/textures/{models/altar.png => blocks/blood_altar.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{accelerationrune.png => blood_rune/blood_rune_acceleration.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{bettercapacityrune.png => blood_rune/blood_rune_augmented_capacity.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{blankrune.png => blood_rune/blood_rune_blank.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{altarcapacityrune.png => blood_rune/blood_rune_capacity.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{chargingrune.png => blood_rune/blood_rune_charging.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{dislocationrune.png => blood_rune/blood_rune_displacement.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{efficiencyrune.png => blood_rune/blood_rune_efficiency.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{orbcapacityrune.png => blood_rune/blood_rune_orb.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{runeofsacrifice.png => blood_rune/blood_rune_sacrifice.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{runeofselfsacrifice.png => blood_rune/blood_rune_self_sacrifice.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{speedrune.png => blood_rune/blood_rune_speed.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/bloodsocket.png rename src/main/resources/assets/bloodmagic/textures/blocks/{bloodstonebrick.png => bloodstone_brick.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{largebloodstonebrick.png => bloodstone_tile.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/bloodtank.png rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick1_c.png => demon_brick_1_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick1_d.png => demon_brick_1_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick1.png => demon_brick_1_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick1_s.png => demon_brick_1_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick1_v.png => demon_brick_1_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick2_c.png => demon_brick_2_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick2_d.png => demon_brick_2_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick2.png => demon_brick_2_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick2_s.png => demon_brick_2_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick2_v.png => demon_brick_2_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick3_c.png => demon_brick_3_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick3_d.png => demon_brick_3_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick3.png => demon_brick_3_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick3_s.png => demon_brick_3_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_brick3_v.png => demon_brick_3_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_eye_c.png => demon_brick_eye_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_eye_d.png => demon_brick_eye_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_eye.png => demon_brick_eye_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_eye_s.png => demon_brick_eye_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_eye_v.png => demon_brick_eye_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarbottom_c.png => demon_brick_pillar_bottom_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarbottom_d.png => demon_brick_pillar_bottom_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarbottom.png => demon_brick_pillar_bottom_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarbottom_s.png => demon_brick_pillar_bottom_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarbottom_v.png => demon_brick_pillar_bottom_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillar_c.png => demon_brick_pillar_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillar_d.png => demon_brick_pillar_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarheart_c.png => demon_brick_pillar_heart_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarheart_d.png => demon_brick_pillar_heart_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarheart.png => demon_brick_pillar_heart_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarheart_s.png => demon_brick_pillar_heart_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarheart_v.png => demon_brick_pillar_heart_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillar.png => demon_brick_pillar_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarspecial_c.png => demon_brick_pillar_special_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarspecial_d.png => demon_brick_pillar_special_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarspecial.png => demon_brick_pillar_special_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarspecial_s.png => demon_brick_pillar_special_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillarspecial_v.png => demon_brick_pillar_special_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillar_s.png => demon_brick_pillar_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillartop_c.png => demon_brick_pillar_top_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillartop_d.png => demon_brick_pillar_top_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillartop.png => demon_brick_pillar_top_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillartop_s.png => demon_brick_pillar_top_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillartop_v.png => demon_brick_pillar_top_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_pillar_v.png => demon_brick_pillar_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_smallbrick_c.png => demon_brick_small_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_smallbrick_d.png => demon_brick_small_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_smallbrick.png => demon_brick_small_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_smallbrick_s.png => demon_brick_small_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_smallbrick_v.png => demon_brick_small_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tile_c.png => demon_brick_tile_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tile_d.png => demon_brick_tile_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tile.png => demon_brick_tile_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tilespecial_c.png => demon_brick_tile_special_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tilespecial_d.png => demon_brick_tile_special_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tilespecial.png => demon_brick_tile_special_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tilespecial_s.png => demon_brick_tile_special_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tilespecial_v.png => demon_brick_tile_special_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tile_s.png => demon_brick_tile_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_tile_v.png => demon_brick_tile_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_metal_c.png => demon_metal_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_metal_d.png => demon_metal_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_metal.png => demon_metal_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_metal_s.png => demon_metal_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_metal_v.png => demon_metal_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_stone_c.png => demon_stone_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_stone_d.png => demon_stone_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_polished_c.png => demon_stone_polished_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_polished_d.png => demon_stone_polished_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_polished.png => demon_stone_polished_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_polished_s.png => demon_stone_polished_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_polished_v.png => demon_stone_polished_vengeful.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_stone.png => demon_stone_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_stone_s.png => demon_stone_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/dungeon/{dungeon_stone_v.png => demon_stone_vengeful.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/duskritualstone.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/earthritualstone.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/empty.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/emptysocket.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/etherealopaquemimic.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/fireritualstone.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/imperfectritualstone.png rename src/main/resources/assets/bloodmagic/textures/blocks/{lifeessenceflowing.png => life_essence_flowing.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{lifeessenceflowing.png.mcmeta => life_essence_flowing.png.mcmeta} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{lifeessencestill.png => life_essence_still.png} (100%) rename src/main/resources/assets/bloodmagic/textures/blocks/{lifeessencestill.png.mcmeta => life_essence_still.png.mcmeta} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/lightritualstone.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/masterritualstone.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/masterritualstone_inverted.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/obsidianbrickpath.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/obsidiantilepath.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/phantomblock.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/ritualstone.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/sentientmimic.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/shardcluster.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/shardclusterbrick.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/simpletranscircle.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/solidclearmimic.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/solidlightmimic.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/solidopaquemimic.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/soulforge.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/spectralblock.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/stonebrickpath.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/stonetilepath.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/teleposer_side.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/teleposer_top.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/waterritualstone.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/woodbrickpath.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/woodtilepath.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/wornstonebrickpath.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/blocks/wornstonetilepath.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/bloodelytra.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/defaultcrystallayer.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/energyblastprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/explosionprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/fireprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/holyprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/iceprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/lightningprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/mudprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/nodebeam.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/overlay/overlay_raw.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/soularrow.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/soularrow_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/soularrow_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/soularrow_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/soularrow_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/specter.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/waterprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/windgustprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/entities/zombie_raw.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/alchemytable.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/bookcrafting.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/bookfurnace.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/bookleft.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/bookright.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/crucible.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/guitrap.png rename src/main/resources/assets/bloodmagic/{gui/jei/altar.png => textures/gui/jei/blood_altar.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/masterroutingnode.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/routingnode.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/soulforge.png rename src/main/resources/assets/bloodmagic/textures/gui/{buttons_compat.png => sprites.png} (84%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/teleposer.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back.jpg delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back_over.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/gui/widgets.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/hud/bars.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/activationcrystalawakened.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/activationcrystalcreative.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/activationcrystalweak.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/airscribetool.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/alchemic_liquid.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/alchemic_ribbon.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/alchemic_vial.png rename src/main/resources/assets/bloodmagic/textures/items/{altarmaker.png => altar_builder.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/ampouleempty.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/ampoulefull.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/antiseptic.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/arcaneashes.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/basemonstersoul.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/basiccuttingfluid.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/blackpudding.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/blanksigil.png rename src/main/resources/assets/bloodmagic/textures/items/{apprenticebloodorb.png => blood_orb_apprentice.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{archmagebloodorb.png => blood_orb_archmage.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{magicianbloodorb.png => blood_orb_magician.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{masterbloodorb.png => blood_orb_master.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{transcendentbloodorb.png => blood_orb_transcendent.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{weakbloodorb.png => blood_orb_weak.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/bloodlightsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/bloodpack.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/bouncesigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/bouncesigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/boundaxe_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/boundpickaxe_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/boundshovel_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/boundsword_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/boundtool.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/bridgesigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/bridgesigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/clawsigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/clawsigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/coagulant.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/coalsand.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/componentframeparts.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/compressionsigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/compressionsigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/crucibleupgrade.png rename src/main/resources/assets/bloodmagic/textures/items/{sacrificialdagger.png => dagger_self_sacrifice.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{ceremonialdagger.png => dagger_self_sacrifice_charged.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/daggerofsacrifice.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/dawnscribetool.png rename src/main/resources/assets/bloodmagic/textures/items/{corrosivecrystal.png => demon_will_crystal_corrosive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{destructivecrystal.png => demon_will_crystal_destructive.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{defaultcrystal.png => demon_will_crystal_raw.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{steadfastcrystal.png => demon_will_crystal_steadfast.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{vengefulcrystal.png => demon_will_crystal_vengeful.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/demonbloodshard.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/demonicteleposerfocus.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/demonwillgauge.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/duskscribetool.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/earthscribetool.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/elementalsigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/elementalsigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/enhancedteleposerfocus.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/experiencebook.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/explosivepowder.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/firescribetool.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/fluidrouterfilterexact.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/goldsand.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/growthsigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/growthsigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/harvestgoddesssigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/harvestgoddesssigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/hastesigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/hastesigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/icarusscroll_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/icarusscroll_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/icesigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/icesigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/information.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/inputroutingfocus.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/ironsand.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/item_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/itemrouterfilterexact.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/itemrouterfilterignorenbt.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/itemrouterfiltermoditems.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/itemrouterfilteroredict.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/lavacrystal.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/lavasigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/lifebucket.png rename src/main/resources/assets/bloodmagic/textures/items/{livingplate.png => living_armor_chest.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{livingboots.png => living_armor_feet.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{livinghelmet.png => living_armor_head.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{livingleggings.png => living_armor_legs.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{mailorder.png => living_tome.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/mundanelengtheningcatalyst.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/mundanepowercatalyst.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/neurotoxin.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/noderouter.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/plantfibres.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/plantoil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/potionflask_outline.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/potionflask_overlay.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/potionflask_underlay.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentaffinity.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentair.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentbinding.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentbloodlight.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentbounce.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentbridge.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentclaw.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentcompression.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentfastminer.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentfrost.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentgrowth.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagenthaste.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentholding.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentlava.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentmagnetism.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentseverance.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentsight.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentsuppression.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentteleposition.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagenttransposition.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentvoid.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentwater.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reagentwind.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/reinforcedteleposerfocus.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/ritual_dismantler.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/ritualdiviner.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/ritualtinkerer.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sacrificeplate.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/saltpeter.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sanguinebook.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/seersigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/selfsacrificeplate.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_corrosive_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_corrosive_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_destructive_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_destructive_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_steadfast_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_steadfast_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_vengeful_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_vengeful_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientarrow.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientboots.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientboots_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientboots_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientboots_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientboots_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_corrosive_pulling_0.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_corrosive_pulling_1.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_corrosive_pulling_2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_destructive_pulling_0.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_destructive_pulling_1.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_destructive_pulling_2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_pulling_0.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_pulling_1.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_pulling_2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_steadfast_pulling_0.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_steadfast_pulling_1.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_steadfast_pulling_2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_vengeful_pulling_0.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_vengeful_pulling_1.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientbow_vengeful_pulling_2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentienthelmet.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentienthelmet_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentienthelmet_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentienthelmet_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentienthelmet_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientleggings.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientleggings_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientleggings_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientleggings_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientleggings_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientplate.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientplate_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientplate_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientplate_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sentientplate_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/set_area.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/set_will_types.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sheatheditem.png rename src/main/resources/assets/bloodmagic/textures/items/{airsigil.png => sigil/air.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{divinationsigil.png => sigil/divination.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{miningsigil_deactivated.png => sigil/fast_miner.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{miningsigil_activated.png => sigil/fast_miner_toggled.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sigilofholding.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sigilofmagnetism_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sigilofmagnetism_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sigilofseverance_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sigilofseverance_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sigilofsuppression_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sigilofsuppression_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sigiloverlay.png rename src/main/resources/assets/bloodmagic/textures/items/{blankslate.png => slate_blank.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{demonslate.png => slate_demonic.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{etherealslate.png => slate_ethereal.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{infusedslate.png => slate_imbued.png} (100%) rename src/main/resources/assets/bloodmagic/textures/items/{reinforcedslate.png => slate_reinforced.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulaxe.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulaxe_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulaxe_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulaxe_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulaxe_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemcommon.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgrand.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgrand_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgrand_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgrand_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgrand_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgreater.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemlesser.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemlesser_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemlesser_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemlesser_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgemlesser_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgempetty.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgempetty_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgempetty_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgempetty_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulgempetty_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulpickaxe.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulpickaxe_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulpickaxe_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulpickaxe_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulpickaxe_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulshovel.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulshovel_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulshovel_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulshovel_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulshovel_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsnare.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsnare_corrosive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsnare_destructive.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsnare_steadfast.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsnare_vengeful.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_corrosive_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_corrosive_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_destructive_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_destructive_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_steadfast_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_steadfast_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_vengeful_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/soulsword_vengeful_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/sulfur.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/teleposerfocus.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/telepositionsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/transpositionsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/upgradetome.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/upgradetrainer.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/voidsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/warriorsigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/warriorsigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/waterscribetool.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/watersigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/weakbloodshard.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/windsigil_activated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/items/windsigil_deactivated.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/beam2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/potions.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t1.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t3.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t4.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t5.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t6.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring1.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/alchemy.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/animalgrowth.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/beatinganvil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/binding.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/containment.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/convocation.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/crusher.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/dome.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/ellipsoid.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/eternalsoul.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/evaporation.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/expulsion.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredearth.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredknife.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/flight.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/gaia.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/greengrove.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/harvest.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/interdiction.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/jump.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/lava.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/magnetism.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/meteor.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/phantomhands.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/regeneration.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/sacrosanctity.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/speed.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stallingomega.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stomach.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/symmetryomega.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/unbinding.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/veilofevil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/water.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/wellofsuffering.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/zephyr.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/conduit.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/effect.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/enhancement.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/modifier.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/paradigm.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/simplespelltable.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/airsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/basearray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindingarray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindinglightningarray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bouncearray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/divinationsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/elementalaffinitysigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/fastminersigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/furnacearray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/growthsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/hastesigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lavasigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lightsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/magnetismsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/mobsacrifice.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/movementarray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/shardoflaputa.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/sightsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret1.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret2.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/spikearray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/stupidarray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/suppressionsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportation.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportationarray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/updraftarray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/voidsigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/watersigil.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/wiparray.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/zombiebeacon.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/alchemytable.png rename src/main/resources/assets/bloodmagic/{models/armor/livingarmour_layer_1.png => textures/models/armor/living_armor_layer_1.png} (100%) rename src/main/resources/assets/bloodmagic/{models/armor/livingarmour_layer_2.png => textures/models/armor/living_armor_layer_2.png} (100%) delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/corrosivecrystal.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/defaultcrystal.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/demoncrucible.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/demoncrystallizer.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/demonpylon.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/destructivecrystal.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/energybazookamainprojectile.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/hellfireforge.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/incensealtar.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/meteor.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/mobsacrificeswirl.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/modelinputroutingnode.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/modelmasterroutingnode.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/modeloutputroutingnode.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/modelroutingnode.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pedestal.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_base.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_base_c.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_base_d.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_base_s.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_base_v.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_mid.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_mid_c.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_mid_d.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_mid_s.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/pillar_mid_v.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/plinth.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/reagent.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/simpletranscircle.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/steadfastcrystal.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/vengefulcrystal.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/writingtable.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/potions/boost.png delete mode 100644 src/main/resources/assets/bloodmagicguide/lang/de_DE.lang delete mode 100644 src/main/resources/assets/bloodmagicguide/lang/en_US.lang delete mode 100644 src/main/resources/assets/bloodmagicguide/lang/zh_CN.lang delete mode 100644 src/main/resources/assets/bloodmagicguide/lang/zh_TW.lang delete mode 100644 src/main/resources/assets/bloodmagicguide/textures/gui/alchemyarraycrafting.png delete mode 100644 src/main/resources/assets/bloodmagicguide/textures/gui/altar.png delete mode 100644 src/main/resources/assets/bloodmagicguide/textures/gui/bullet_point.png delete mode 100644 src/main/resources/assets/bloodmagicguide/textures/gui/soulforge.png create mode 100644 src/main/resources/pack.mcmeta diff --git a/build.gradle b/build.gradle index 9947af35..f1ffc620 100644 --- a/build.gradle +++ b/build.gradle @@ -15,13 +15,18 @@ plugins { id 'maven-publish' } -def build_number = 'CUSTOM' -if (System.getenv('BUILD_NUMBER') != null) - build_number = System.getenv('BUILD_NUMBER') +sourceSets { + compat { + compileClasspath += sourceSets.main.runtimeClasspath + sourceSets.main.output + } -def username = "${mod_name}" -if (project.hasProperty('dev_username')) - username = "${dev_username}" + main { + runtimeClasspath += sourceSets.compat.runtimeClasspath + } +} + +def build_number = System.getenv('BUILD_NUMBER') != null ? System.getenv('BUILD_NUMBER') : 'CUSTOM' +def username = project.hasProperty('dev_username') ? "${dev_username}" : "${mod_name}" group = package_group archivesBaseName = mod_name @@ -33,16 +38,17 @@ repositories { } dependencies { - deobfCompile "mezz.jei:jei_${mc_version}:${jei_version}" - deobfCompile "mcp.mobius.waila:Hwyla:${waila_version}" - deobfCompile "info.amerifrance.guideapi:Guide-API:${guideapi_version}" + deobfCompile "mcp.mobius.waila:Hwyla:${hwyla_version}:api" + runtime "mcp.mobius.waila:Hwyla:${hwyla_version}" + deobfCompile "mezz.jei:jei_${mc_version}:${jei_version}:api" + runtime "mezz.jei:jei_${mc_version}:${jei_version}" } minecraft { version = "${mc_version}-${forge_version}" runDir = "run" - replace "@VERSION@", project.version + replace '${VERSION}', project.version replaceIn "BloodMagic.java" clientRunArgs += "--username=${username}" @@ -68,16 +74,11 @@ processResources { } } -allprojects { - tasks.withType(Javadoc) { - options.addStringOption('Xdoclint:none', '-quiet') - } -} - jar { classifier = '' from sourceSets.main.output from sourceSets.api.output + from sourceSets.compat.output manifest.mainAttributes( "Built-By": System.getProperty('user.name'), "Created-By": "${System.getProperty('java.vm.version')} + (${System.getProperty('java.vm.vendor')})", @@ -97,18 +98,14 @@ task apiJar(type: Jar) { from sourceSets.api.allJava } -task javadocJar(type: Jar, dependsOn: javadoc) { - from javadoc.destinationDir - classifier = 'javadoc' -} - task sourcesJar(type: Jar) { classifier = 'sources' from sourceSets.main.allJava from sourceSets.api.allJava + from sourceSets.compat.allJava } -tasks.build.dependsOn javadoc, javadocJar, apiJar, sourcesJar +tasks.build.dependsOn apiJar, sourcesJar tasks.withType(JavaCompile) { task -> task.options.encoding = 'UTF-8' @@ -119,7 +116,6 @@ publishing { publications { mavenJava(MavenPublication) { artifact jar - artifact javadocJar artifact sourcesJar artifact apiJar } @@ -175,7 +171,6 @@ curseforge { relations curseRelations - addArtifact javadocJar addArtifact sourcesJar addArtifact apiJar } diff --git a/gradle.properties b/gradle.properties index b97442cd..d9286a61 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,13 @@ mod_name=BloodMagic package_group=com.wayoftime.bloodmagic -mod_version=2.3.1 +mod_version=3.0.0 + mc_version=1.12.2 -forge_version=14.23.2.2611 -curse_id=224791 +forge_version=14.23.4.2759 +mappings_version=stable_39 -mappings_version=snapshot_20180201 +jei_version=4.11.0.206 +hwyla_version=1.8.26-B41_1.12.2 +guideapi_version=1.12-2.1.4-57 -jei_version=4.8.5.147 -waila_version=1.8.23-B38_1.12 -guideapi_version=1.12-2.1.4-57 \ No newline at end of file +curse_id=224791 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a5ffca25..9d7c377b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip diff --git a/src/api/java/WayofTime/bloodmagic/api/BloodMagicPlugin.java b/src/api/java/com/wayoftime/bloodmagic/api/BloodMagicPlugin.java similarity index 93% rename from src/api/java/WayofTime/bloodmagic/api/BloodMagicPlugin.java rename to src/api/java/com/wayoftime/bloodmagic/api/BloodMagicPlugin.java index 3cbeb4b9..c9687fe1 100644 --- a/src/api/java/WayofTime/bloodmagic/api/BloodMagicPlugin.java +++ b/src/api/java/com/wayoftime/bloodmagic/api/BloodMagicPlugin.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api; +package com.wayoftime.bloodmagic.api; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -16,9 +16,9 @@ public @interface BloodMagicPlugin { /** * This annotation will inject the active {@link IBloodMagicAPI} into a {@code static} field of the same * type. Fields with invalid types will be ignored and an error will be logged. - * + *

* These fields are populated during {@link net.minecraftforge.fml.common.event.FMLPreInitializationEvent}. - * + *

* {@code public static @BloodMagicPlugin.Inject IBloodMagicAPI API_INSTANCE = null;} */ @Retention(RetentionPolicy.RUNTIME) diff --git a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicAPI.java b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicAPI.java similarity index 96% rename from src/api/java/WayofTime/bloodmagic/api/IBloodMagicAPI.java rename to src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicAPI.java index 11ce4bce..bf003608 100644 --- a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicAPI.java +++ b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicAPI.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api; +package com.wayoftime.bloodmagic.api; import net.minecraft.block.state.IBlockState; @@ -6,9 +6,9 @@ import javax.annotation.Nonnull; /** * The main interface between a plugin and Blood Magic's internals. - * + *

* This API is intended for compatibility between other mods and Blood Magic. More advanced integration is out of the scope of this API and are considered "addons". - * + *

* To get an instance of this without actually creating an {@link IBloodMagicPlugin}, use {@link BloodMagicPlugin.Inject}. */ public interface IBloodMagicAPI { diff --git a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicBlacklist.java b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicBlacklist.java similarity index 97% rename from src/api/java/WayofTime/bloodmagic/api/IBloodMagicBlacklist.java rename to src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicBlacklist.java index e99c1609..329f98d7 100644 --- a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicBlacklist.java +++ b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicBlacklist.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api; +package com.wayoftime.bloodmagic.api; import net.minecraft.block.state.IBlockState; import net.minecraft.util.ResourceLocation; diff --git a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicPlugin.java b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicPlugin.java similarity index 96% rename from src/api/java/WayofTime/bloodmagic/api/IBloodMagicPlugin.java rename to src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicPlugin.java index c18d3c1d..9cd2546f 100644 --- a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicPlugin.java +++ b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicPlugin.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api; +package com.wayoftime.bloodmagic.api; /** * The main class to implement to create a Blood Magic plugin. Everything communicated between a mod and Blood Magic is through this class. diff --git a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicRecipeRegistrar.java b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicRecipeRegistrar.java similarity index 95% rename from src/api/java/WayofTime/bloodmagic/api/IBloodMagicRecipeRegistrar.java rename to src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicRecipeRegistrar.java index 93e13c45..544c16a3 100644 --- a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicRecipeRegistrar.java +++ b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicRecipeRegistrar.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api; +package com.wayoftime.bloodmagic.api; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; @@ -11,8 +11,7 @@ import javax.annotation.Nullable; /** * Allows recipe addition and removal. */ -public interface IBloodMagicRecipeRegistrar -{ +public interface IBloodMagicRecipeRegistrar { /** * Adds a new recipe to the Blood Altar. @@ -55,7 +54,7 @@ public interface IBloodMagicRecipeRegistrar /** * Adds a new recipe to the Soul/Tartaric Forge. - * + * * @param output An output {@link ItemStack}. * @param minimumSouls The minimum number of souls that must be contained in the Soul Gem. * @param soulDrain The number of souls to drain from the Soul Gem. @@ -66,8 +65,8 @@ public interface IBloodMagicRecipeRegistrar /** * Removes a Soul/Tartaric Forge recipe based on an input {@link ItemStack} array. * - * @param input The input items to remove the recipe of. - * @return Whether or not a recipe was removed. + * @param input The input items to remove the recipe of. + * @return Whether or not a recipe was removed. */ boolean removeTartaricForge(@Nonnull ItemStack... input); diff --git a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicValueManager.java b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicValueManager.java similarity index 97% rename from src/api/java/WayofTime/bloodmagic/api/IBloodMagicValueManager.java rename to src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicValueManager.java index f51db50c..1a5389ff 100644 --- a/src/api/java/WayofTime/bloodmagic/api/IBloodMagicValueManager.java +++ b/src/api/java/com/wayoftime/bloodmagic/api/IBloodMagicValueManager.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api; +package com.wayoftime.bloodmagic.api; import net.minecraft.block.state.IBlockState; import net.minecraft.util.ResourceLocation; diff --git a/src/api/java/WayofTime/bloodmagic/api/event/BloodMagicCraftedEvent.java b/src/api/java/com/wayoftime/bloodmagic/api/event/BloodMagicCraftedEvent.java similarity index 92% rename from src/api/java/WayofTime/bloodmagic/api/event/BloodMagicCraftedEvent.java rename to src/api/java/com/wayoftime/bloodmagic/api/event/BloodMagicCraftedEvent.java index 0b92284c..fe8125ac 100644 --- a/src/api/java/WayofTime/bloodmagic/api/event/BloodMagicCraftedEvent.java +++ b/src/api/java/com/wayoftime/bloodmagic/api/event/BloodMagicCraftedEvent.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api.event; +package com.wayoftime.bloodmagic.api.event; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.eventhandler.Event; @@ -34,19 +34,19 @@ public class BloodMagicCraftedEvent extends Event { /** * Fired whenever a craft is completed in a Blood Altar. - * + *

* It is not cancelable, however you can modify the output stack. */ public static class Altar extends BloodMagicCraftedEvent { public Altar(ItemStack output, ItemStack input) { - super(output, new ItemStack[] { input }, true); + super(output, new ItemStack[]{input}, true); } } /** * Fired whenever a craft is completed in a Soul Forge. - * + *

* It is not cancelable, however you can modify the output stack. */ public static class SoulForge extends BloodMagicCraftedEvent { @@ -58,7 +58,7 @@ public class BloodMagicCraftedEvent extends Event { /** * Fired whenever a craft is completed in an Alchemy Table. - * + *

* It is not cancelable, however you can modify the output stack. */ public static class AlchemyTable extends BloodMagicCraftedEvent { diff --git a/src/api/java/WayofTime/bloodmagic/api/package-info.java b/src/api/java/com/wayoftime/bloodmagic/api/package-info.java similarity index 75% rename from src/api/java/WayofTime/bloodmagic/api/package-info.java rename to src/api/java/com/wayoftime/bloodmagic/api/package-info.java index 9d563054..462725c6 100644 --- a/src/api/java/WayofTime/bloodmagic/api/package-info.java +++ b/src/api/java/com/wayoftime/bloodmagic/api/package-info.java @@ -1,4 +1,4 @@ @API(owner = "bloodmagic", provides = "bloodmagic-api", apiVersion = "2.0.0") -package WayofTime.bloodmagic.api; +package com.wayoftime.bloodmagic.api; import net.minecraftforge.fml.common.API; \ No newline at end of file diff --git a/src/compat/java/com/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java b/src/compat/java/com/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java new file mode 100644 index 00000000..19f88ba3 --- /dev/null +++ b/src/compat/java/com/wayoftime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java @@ -0,0 +1,35 @@ +package com.wayoftime.bloodmagic.compat.jei; + +import com.wayoftime.bloodmagic.api.impl.BloodMagicAPI; +import com.wayoftime.bloodmagic.api.impl.recipe.RecipeBloodAltar; +import com.wayoftime.bloodmagic.compat.jei.altar.RecipeCategoryAltar; +import com.wayoftime.bloodmagic.compat.jei.altar.RecipeWrapperAltar; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicBlocks; +import mezz.jei.api.IJeiHelpers; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.IModRegistry; +import mezz.jei.api.JEIPlugin; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; +import net.minecraft.item.ItemStack; + +@JEIPlugin +public class BloodMagicJEIPlugin implements IModPlugin { + + public static IJeiHelpers helper; + + @Override + public void registerCategories(IRecipeCategoryRegistration registry) { + helper = registry.getJeiHelpers(); + + registry.addRecipeCategories( + new RecipeCategoryAltar() + ); + } + + @Override + public void register(IModRegistry registry) { + registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes(), RecipeCategoryAltar.CATEGORY_ID); + registry.handleRecipes(RecipeBloodAltar.class, RecipeWrapperAltar::new, RecipeCategoryAltar.CATEGORY_ID); + registry.addRecipeCatalyst(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_ALTAR), RecipeCategoryAltar.CATEGORY_ID); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java b/src/compat/java/com/wayoftime/bloodmagic/compat/jei/altar/RecipeCategoryAltar.java similarity index 61% rename from src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java rename to src/compat/java/com/wayoftime/bloodmagic/compat/jei/altar/RecipeCategoryAltar.java index 10f2f6a2..4bd8c397 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java +++ b/src/compat/java/com/wayoftime/bloodmagic/compat/jei/altar/RecipeCategoryAltar.java @@ -1,37 +1,37 @@ -package WayofTime.bloodmagic.compat.jei.altar; +package com.wayoftime.bloodmagic.compat.jei.altar; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.util.helper.TextHelper; +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.compat.jei.BloodMagicJEIPlugin; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.IRecipeCategory; -import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import javax.annotation.Nonnull; import javax.annotation.Nullable; -public class AltarRecipeCategory implements IRecipeCategory { +public class RecipeCategoryAltar implements IRecipeCategory { + + public static final String CATEGORY_ID = "bloodmagic:blood_altar"; private static final int INPUT_SLOT = 0; private static final int OUTPUT_SLOT = 1; @Nonnull - private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/altar.png"), 3, 4, 155, 65); + private final IDrawable background = BloodMagicJEIPlugin.helper.getGuiHelper().createDrawable(new ResourceLocation(BloodMagic.MODID, "textures/gui/jei/blood_altar.png"), 3, 4, 155, 65); @Nonnull @Override public String getUid() { - return Constants.Compat.JEI_CATEGORY_ALTAR; + return CATEGORY_ID; } @Nonnull @Override public String getTitle() { - return TextHelper.localize("jei.bloodmagic.recipe.altar"); + return I18n.format("jei.bloodmagic:blood_altar"); } @Nonnull @@ -40,11 +40,6 @@ public class AltarRecipeCategory implements IRecipeCategory { return background; } - @Override - public void drawExtras(Minecraft minecraft) { - - } - @Nullable @Override public IDrawable getIcon() { @@ -52,7 +47,7 @@ public class AltarRecipeCategory implements IRecipeCategory { } @Override - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull AltarRecipeJEI recipeWrapper, @Nonnull IIngredients ingredients) { + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull RecipeWrapperAltar recipeWrapper, @Nonnull IIngredients ingredients) { recipeLayout.getItemStacks().init(INPUT_SLOT, true, 31, 0); recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 125, 30); @@ -65,4 +60,4 @@ public class AltarRecipeCategory implements IRecipeCategory { public String getModName() { return BloodMagic.NAME; } -} +} \ No newline at end of file diff --git a/src/compat/java/com/wayoftime/bloodmagic/compat/jei/altar/RecipeWrapperAltar.java b/src/compat/java/com/wayoftime/bloodmagic/compat/jei/altar/RecipeWrapperAltar.java new file mode 100644 index 00000000..d36c4ad8 --- /dev/null +++ b/src/compat/java/com/wayoftime/bloodmagic/compat/jei/altar/RecipeWrapperAltar.java @@ -0,0 +1,49 @@ +package com.wayoftime.bloodmagic.compat.jei.altar; + +import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.api.impl.recipe.RecipeBloodAltar; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import javax.annotation.Nonnull; +import java.awt.Color; +import java.util.List; + +public class RecipeWrapperAltar implements IRecipeWrapper { + + private final RecipeBloodAltar recipe; + + public RecipeWrapperAltar(RecipeBloodAltar recipe) { + this.recipe = recipe; + } + + @Override + public void getIngredients(@Nonnull IIngredients ingredients) { + ingredients.setInputs(ItemStack.class, NonNullList.from(ItemStack.EMPTY, recipe.getInput().getMatchingStacks())); + ingredients.setOutput(ItemStack.class, recipe.getOutput()); + } + + @Nonnull + @Override + public List getTooltipStrings(int mouseX, int mouseY) { + List tooltip = Lists.newArrayList(); + if (mouseX >= 13 && mouseX <= 64 && mouseY >= 27 && mouseY <= 58) { + tooltip.add(I18n.format("jei.bloodmagic:consumption_rate", recipe.getConsumeRate())); + tooltip.add(I18n.format("jei.bloodmagic:drain_rate", recipe.getDrainRate())); + } + return tooltip; + } + + @Override + public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { + String line1 = I18n.format("jei.bloodmagic:required_tier", I18n.format("enchantment.level." + (recipe.getMinimumTier().ordinal() + 1))); + minecraft.fontRenderer.drawString(line1, 90 - minecraft.fontRenderer.getStringWidth(line1) / 2, 0, Color.GRAY.getRGB()); + + String line2 = I18n.format("jei.bloodmagic:required_lp", recipe.getSyphon()); + minecraft.fontRenderer.drawString(line2, 90 - minecraft.fontRenderer.getStringWidth(line2) / 2, 10, Color.GRAY.getRGB()); + } +} diff --git a/src/compat/java/com/wayoftime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java b/src/compat/java/com/wayoftime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java new file mode 100644 index 00000000..7e7ddeda --- /dev/null +++ b/src/compat/java/com/wayoftime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java @@ -0,0 +1,15 @@ +package com.wayoftime.bloodmagic.compat.waila; + +import com.wayoftime.bloodmagic.tile.TileBloodAltar; +import mcp.mobius.waila.api.IWailaPlugin; +import mcp.mobius.waila.api.IWailaRegistrar; +import mcp.mobius.waila.api.WailaPlugin; + +@WailaPlugin +public class BloodMagicHwylaPlugin implements IWailaPlugin { + @Override + public void register(IWailaRegistrar registrar) { + registrar.registerBodyProvider(DataProviderBloodAltar.INSTANCE, TileBloodAltar.class); + registrar.registerNBTProvider(DataProviderBloodAltar.INSTANCE, TileBloodAltar.class); + } +} diff --git a/src/compat/java/com/wayoftime/bloodmagic/compat/waila/DataProviderBloodAltar.java b/src/compat/java/com/wayoftime/bloodmagic/compat/waila/DataProviderBloodAltar.java new file mode 100644 index 00000000..57c560e8 --- /dev/null +++ b/src/compat/java/com/wayoftime/bloodmagic/compat/waila/DataProviderBloodAltar.java @@ -0,0 +1,40 @@ +package com.wayoftime.bloodmagic.compat.waila; + +import com.wayoftime.bloodmagic.tile.TileBloodAltar; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import net.minecraft.client.resources.I18n; +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.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import java.util.List; + +public class DataProviderBloodAltar implements IWailaDataProvider { + + static final IWailaDataProvider INSTANCE = new DataProviderBloodAltar(); + + @Nonnull + @Override + public List getWailaBody(ItemStack itemStack, List tooltip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + tooltip.add(I18n.format("tooltip.bloodmagic:tier", I18n.format("enchantment.level." + (accessor.getNBTData().getInteger("tier") + 1)))); + if (accessor.getNBTData().hasKey("progress")) + tooltip.add(I18n.format("tooltip.bloodmagic:progress", String.valueOf(accessor.getNBTData().getFloat("progress") * 100))); + return tooltip; + } + + @Nonnull + @Override + public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { + TileBloodAltar altar = (TileBloodAltar) te; + tag.setInteger("tier", altar.getCurrentTier().ordinal()); + if (altar.isCrafting()) + tag.setFloat("progress", altar.getProgress()); + return tag; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java deleted file mode 100644 index c132d776..00000000 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ /dev/null @@ -1,123 +0,0 @@ -package WayofTime.bloodmagic; - -import WayofTime.bloodmagic.api.BloodMagicPlugin; -import WayofTime.bloodmagic.api.IBloodMagicPlugin; -import WayofTime.bloodmagic.core.registry.OrbRegistry; -import WayofTime.bloodmagic.ritual.RitualManager; -import WayofTime.bloodmagic.client.gui.GuiHandler; -import WayofTime.bloodmagic.command.CommandBloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.meteor.MeteorConfigHandler; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.proxy.CommonProxy; -import WayofTime.bloodmagic.registry.*; -import WayofTime.bloodmagic.structures.ModDungeons; -import WayofTime.bloodmagic.util.PluginUtil; -import WayofTime.bloodmagic.util.handler.IMCHandler; -import com.google.common.collect.Lists; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.ItemStack; -import net.minecraft.launchwrapper.Launch; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.SidedProxy; -import net.minecraftforge.fml.common.event.*; -import net.minecraftforge.fml.common.network.NetworkRegistry; -import org.apache.commons.lang3.tuple.Pair; - -import java.io.File; -import java.util.List; - -@Mod(modid = BloodMagic.MODID, name = BloodMagic.NAME, version = BloodMagic.VERSION, dependencies = BloodMagic.DEPEND, guiFactory = "WayofTime.bloodmagic.client.gui.GuiBloodMagicConfig$Factory") -public class BloodMagic { - public static final String MODID = "bloodmagic"; - public static final String NAME = "Blood Magic: Alchemical Wizardry"; - public static final String VERSION = "@VERSION@"; - public static final String DEPEND = "required-after:guideapi;"; - public static final boolean IS_DEV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); - public static final List> PLUGINS = Lists.newArrayList(); - public static final RitualManager RITUAL_MANAGER = new RitualManager(new Configuration(new File(Loader.instance().getConfigDir(), MODID + "/" + "rituals.cfg"))); - public static final CreativeTabs TAB_BM = new CreativeTabs(MODID + ".creativeTab") { - @Override - public ItemStack getTabIconItem() { - return OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK); - } - }; - public static CreativeTabs TAB_TOMES = new CreativeTabs(MODID + ".creativeTabTome") { - @Override - public ItemStack getTabIconItem() { - return new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); - } - - @Override - public boolean hasSearchBar() { - return true; - } - }.setNoTitle().setBackgroundImageName("item_search.png"); - - @SidedProxy(serverSide = "WayofTime.bloodmagic.proxy.CommonProxy", clientSide = "WayofTime.bloodmagic.proxy.ClientProxy") - public static CommonProxy proxy; - @Mod.Instance(BloodMagic.MODID) - public static BloodMagic instance; - - static { - FluidRegistry.enableUniversalBucket(); - } - - private File configDir; - - @Mod.EventHandler - public void preInit(FMLPreInitializationEvent event) { - configDir = new File(event.getModConfigurationDirectory(), "bloodmagic"); - - PLUGINS.addAll(PluginUtil.gatherPlugins(event.getAsmData())); - PluginUtil.injectAPIInstances(PluginUtil.gatherInjections(event.getAsmData())); - - ModTranquilityHandlers.init(); - ModDungeons.init(); - RITUAL_MANAGER.discover(event.getAsmData()); - - proxy.preInit(); - } - - @Mod.EventHandler - public void init(FMLInitializationEvent event) { - BloodMagicPacketHandler.init(); - - PluginUtil.handlePluginStep(PluginUtil.RegistrationStep.PLUGIN_REGISTER); - - ModRecipes.init(); - ModRituals.initHarvestHandlers(); - MeteorConfigHandler.init(new File(configDir, "meteors")); - ModArmourTrackers.init(); - NetworkRegistry.INSTANCE.registerGuiHandler(BloodMagic.instance, new GuiHandler()); - ModCorruptionBlocks.init(); - - proxy.init(); - } - - @Mod.EventHandler - public void postInit(FMLPostInitializationEvent event) { - ModRecipes.addCompressionHandlers(); - - proxy.postInit(); - } - - @Mod.EventHandler - public void modMapping(FMLModIdMappingEvent event) { - - } - - @Mod.EventHandler - public void serverStarting(FMLServerStartingEvent event) { - event.registerServerCommand(new CommandBloodMagic()); - } - - @Mod.EventHandler - public void onIMCRecieved(FMLInterModComms.IMCEvent event) { - IMCHandler.handleIMC(event); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java b/src/main/java/WayofTime/bloodmagic/ConfigHandler.java deleted file mode 100644 index 4bed50be..00000000 --- a/src/main/java/WayofTime/bloodmagic/ConfigHandler.java +++ /dev/null @@ -1,93 +0,0 @@ -package WayofTime.bloodmagic; - -import WayofTime.bloodmagic.meteor.MeteorConfigHandler; -import net.minecraftforge.common.config.Config; -import net.minecraftforge.common.config.ConfigManager; -import net.minecraftforge.fml.client.event.ConfigChangedEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -@Config(modid = BloodMagic.MODID, name = BloodMagic.MODID + "/" + BloodMagic.MODID, category = "") -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class ConfigHandler -{ - - @Config.Comment({ "General settings" }) - public static ConfigGeneral general = new ConfigGeneral(); - @Config.Comment({ "Blacklist options for various features" }) - public static ConfigBlacklist blacklist = new ConfigBlacklist(); - @Config.Comment({ "Value modifiers for various features" }) - public static ConfigValues values = new ConfigValues(); - @Config.Comment({ "Settings that only pertain to the client" }) - public static ConfigClient client = new ConfigClient(); - @Config.Comment({ "Compatibility settings" }) - public static ConfigCompat compat = new ConfigCompat(); - - @SubscribeEvent - public static void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) - { - if (event.getModID().equals(BloodMagic.MODID)) - { - ConfigManager.sync(event.getModID(), Config.Type.INSTANCE); // Sync config values - BloodMagic.RITUAL_MANAGER.syncConfig(); - MeteorConfigHandler.handleMeteors(false); // Reload meteors - } - } - - public static class ConfigGeneral - { - @Config.Comment({ "Enables extra information to be printed to the log.", "Warning: May drastically increase log size." }) - public boolean enableDebugLogging = false; - @Config.Comment({ "Enables extra information to be printed to the log." }) - public boolean enableAPILogging = false; - @Config.Comment({ "Enables extra information to be printed to the log.", "Warning: May drastically increase log size." }) - public boolean enableVerboseAPILogging = false; - } - - public static class ConfigBlacklist - { - @Config.Comment({ "Stops listed blocks and entities from being teleposed.", "Use the registry name of the block or entity. Vanilla objects do not require the modid.", "If a block is specified, you can list the variants to only blacklist a given state." }) - public String[] teleposer = { "bedrock", "mob_spawner" }; - @Config.Comment({ "Stops listed blocks from being transposed.", "Use the registry name of the block. Vanilla blocks do not require the modid." }) - public String[] transposer = { "bedrock", "mob_spawner" }; - @Config.Comment({ "Stops the listed entities from being used in the Well of Suffering.", "Use the registry name of the entity. Vanilla entities do not require the modid." }) - public String[] wellOfSuffering = {}; - } - - public static class ConfigValues - { - @Config.Comment({ "Declares the amount of LP gained per HP sacrificed for the given entity.", "Setting the value to 0 will blacklist it.", "Use the registry name of the entity followed by a ';' and then the value you want.", "Vanilla entities do not require the modid." }) - public String[] sacrificialValues = { "villager;100", "slime;15", "enderman;10", "cow;100", "chicken;100", "horse;100", "sheep;100", "wolf;100", "ocelot;100", "pig;100", "rabbit;100" }; - @Config.Comment({ "Amount of LP the Coat of Arms should provide for each damage dealt." }) - @Config.RangeInt(min = 0, max = 100) - public int coatOfArmsConversion = 20; - @Config.Comment({ "Amount of LP the Sacrificial Dagger should provide for each damage dealt." }) - @Config.RangeInt(min = 0, max = 10000) - public int sacrificialDaggerConversion = 100; - @Config.Comment({ "Will rewrite any default meteor types with new versions.", "Disable this if you want any of your changes to stay, or do not want default meteor types regenerated." }) - public boolean shouldResyncMeteors = true; - } - - public static class ConfigClient - { - @Config.Comment({ "Always render the beams between routing nodes.", "If disabled, the beams will only render while the Node Router is held." }) - public boolean alwaysRenderRoutingLines = false; - @Config.Comment({ "Completely hide spectral blocks from view.", "If disabled, a transparent block will be displayed." }) - public boolean invisibleSpectralBlocks = true; - @Config.Comment({ "When cycling through slots, the Sigil of Holding will skip over empty slots and move to the next occupied one.", "If disabled, it will behave identically to the default hotbar." }) - public boolean sigilHoldingSkipsEmptySlots = false; - } - - public static class ConfigCompat - { - @Config.Comment({ "The display mode to use when looking at a Blood Altar.", "ALWAYS - Always display information.", "SIGIL_HELD - Only display information when a Divination or Seers sigil is held in either hand.", "SIGIL_CONTAINED - Only display information when a Divination or Seers sigil is somewhere in the inventory." }) - public AltarDisplayMode wailaAltarDisplayMode = AltarDisplayMode.SIGIL_HELD; - - public enum AltarDisplayMode - { - ALWAYS, - SIGIL_HELD, - SIGIL_CONTAINED, ; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffect.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffect.java deleted file mode 100644 index 6bac1e53..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffect.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.iface.IAlchemyArray; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public abstract class AlchemyArrayEffect { - public final String key; - - public AlchemyArrayEffect(String key) { - this.key = key; - } - - public abstract boolean update(TileEntity tile, int ticksActive); - - public abstract void writeToNBT(NBTTagCompound tag); - - public abstract void readFromNBT(NBTTagCompound tag); - - public abstract AlchemyArrayEffect getNewCopy(); - - public void onEntityCollidedWithBlock(IAlchemyArray array, World world, BlockPos pos, IBlockState state, Entity entity) { - - } - - public String getKey() { - return key; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectArrowTurret.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectArrowTurret.java deleted file mode 100644 index ccebac1f..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectArrowTurret.java +++ /dev/null @@ -1,243 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import java.util.List; - -import javax.vecmath.Vector2d; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.projectile.EntityTippedArrow; -import net.minecraft.init.Items; -import net.minecraft.item.ItemArrow; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; -import WayofTime.bloodmagic.util.Utils; - -public class AlchemyArrayEffectArrowTurret extends AlchemyArrayEffect -{ - public EntityLiving target; - public int arrowTimer; - public static final int ARROW_WINDUP = 50; - private int lastChestSlot = -1; - - private double pitch = 0; - private double lastPitch = 0; - private double yaw = 0; - private double lastYaw = 0; - - public AlchemyArrayEffectArrowTurret(String key) - { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) - { - BlockPos pos = tile.getPos(); - World world = tile.getWorld(); - - BlockPos chestPos = pos.down(); - TileEntity chestTile = world.getTileEntity(chestPos); - if (chestTile == null) - { - return false; - } - IItemHandler itemHandler = Utils.getInventory(chestTile, EnumFacing.UP); - if (itemHandler == null) - { - return false; - } - - ItemStack arrowStack = new ItemStack(Items.AIR); - if (lastChestSlot >= 0 && lastChestSlot < itemHandler.getSlots()) - { - ItemStack testStack = itemHandler.extractItem(lastChestSlot, 1, true); - if (testStack.isEmpty() || !(testStack.getItem() instanceof ItemArrow)) - { - lastChestSlot = -1; - } else - { - arrowStack = testStack; - } - } - - if (lastChestSlot < 0) - { - for (int i = 0; i < itemHandler.getSlots(); i++) - { - ItemStack testStack = itemHandler.extractItem(i, 1, true); - if (!testStack.isEmpty() && testStack.getItem() instanceof ItemArrow) - { - arrowStack = testStack; - lastChestSlot = i; - break; - } - } - - } - - if (lastChestSlot < 0) - { - return false; //No arrows in the chest. Welp! - } - - if (canFireOnMob(world, pos, target)) - { - Vector2d pitchYaw = getPitchYaw(pos, target); - lastPitch = pitch; - lastYaw = yaw; - pitch = pitchYaw.x; - yaw = pitchYaw.y; - arrowTimer++; - - if (arrowTimer >= ARROW_WINDUP) - { -// ItemStack arrowStack = new ItemStack(Items.ARROW); - fireOnTarget(world, pos, arrowStack, target); - if (!world.isRemote) - { - itemHandler.extractItem(lastChestSlot, 1, false); - } - arrowTimer = 0; - } - return false; - } else - { - target = null; - arrowTimer = -1; - } - - List mobsInRange = world.getEntitiesWithinAABB(EntityMob.class, getBounds(pos)); - - for (EntityMob entity : mobsInRange) - { - if (canFireOnMob(world, pos, entity))// && isMobInFilter(ent)) - { - target = entity; - arrowTimer = 0; - return false; - } - } - arrowTimer = -1; - target = null; - - return false; - } - - public double getPitch() - { - return pitch; - } - - public double getLastPitch() - { - return lastPitch; - } - - public double getYaw() - { - return yaw; - } - - public double getLastYaw() - { - return lastYaw; - } - - public void fireOnTarget(World world, BlockPos pos, ItemStack arrowStack, EntityLiving targetMob) - { - float vel = 3f; - double damage = 2; - if (!world.isRemote) - { - if (arrowStack.getItem() instanceof ItemArrow) - { -// ItemArrow arrow = (ItemArrow) arrowStack.getItem(); -// EntityArrow entityarrow = arrow.createArrow(world, arrowStack, targetMob); - EntityTippedArrow entityarrow = new EntityTippedArrow(world); - entityarrow.setPotionEffect(arrowStack); - entityarrow.posX = pos.getX() + 0.5; - entityarrow.posY = pos.getY() + 0.5; - entityarrow.posZ = pos.getZ() + 0.5; - - double d0 = targetMob.posX - (pos.getX() + 0.5); - double d1 = targetMob.posY + targetMob.height - (pos.getY() + 0.5); - double d2 = targetMob.posZ - (pos.getZ() + 0.5); - double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); - entityarrow.setDamage(damage); - entityarrow.shoot(d0, d1 + d3 * 0.05, d2, vel, 0); - world.spawnEntity(entityarrow); - } - } - } - - public static Vector2d getPitchYaw(BlockPos pos, Entity entityIn) - { - if (entityIn == null) - { - return new Vector2d(0, 0); - } - - double distanceX = entityIn.posX - (pos.getX() + 0.5); - double distanceY = entityIn.posY + (double) entityIn.getEyeHeight() - (pos.getY() + 0.5); - double distanceZ = entityIn.posZ - (pos.getZ() + 0.5); - double radialDistance = Math.sqrt(distanceX * distanceX + distanceZ * distanceZ); - double yaw = Math.atan2(-distanceX, distanceZ) * 180 / Math.PI; - double pitch = -Math.atan2(distanceY, radialDistance) * 180 / Math.PI; - - return new Vector2d(pitch, yaw); - } - - public boolean canEntityBeSeen(World world, BlockPos pos, Entity entityIn) - { - return world.rayTraceBlocks(new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5), new Vec3d(entityIn.posX, entityIn.posY + (double) entityIn.getEyeHeight(), entityIn.posZ), false, true, false) == null; - } - - public boolean canFireOnMob(World world, BlockPos pos, Entity entityIn) - { - return entityIn != null && !entityIn.isDead && entityIn.getDistanceSqToCenter(pos) <= getRange() * getRange() && entityIn.getDistanceSqToCenter(pos) >= getMinRange() * getMinRange() && canEntityBeSeen(world, pos, entityIn); - } - - public AxisAlignedBB getBounds(BlockPos pos) - { - return new AxisAlignedBB(pos).grow(getRange(), getRange(), getRange()); - } - - public float getRange() - { - return 32; - } - - public float getMinRange() - { - return 3; - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - - } - - @Override - public AlchemyArrayEffect getNewCopy() - { - return new AlchemyArrayEffectArrowTurret(key); - } - -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectAttractor.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectAttractor.java deleted file mode 100644 index 9d8d63d5..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectAttractor.java +++ /dev/null @@ -1,393 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.fakePlayer.FakePlayerBM; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import com.mojang.authlib.GameProfile; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.ai.EntityAITasks; -import net.minecraft.entity.ai.EntityAITasks.EntityAITaskEntry; -import net.minecraft.entity.monster.*; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.pathfinding.Path; -import net.minecraft.pathfinding.PathFinder; -import net.minecraft.pathfinding.WalkNodeProcessor; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; - -import java.util.*; - -/** - * Credits for the initial code go to Crazy Pants of EIO. - */ -public class AlchemyArrayEffectAttractor extends AlchemyArrayEffect { - private FakePlayer target; - private Set tracking = new HashSet<>(); - - private int counter = 0; - private int maxMobsAttracted = 10000; - - private int cooldown = 50; - - public AlchemyArrayEffectAttractor(String key) { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { - if (tile.getWorld().isRemote) { - return false; - } - - BlockPos pos = tile.getPos(); - counter++; - if (counter < 10) { - for (EntityLiving ent : tracking) { - onEntityTick(pos, ent); - } - - return false; - } - - counter = 0; - - World world = tile.getWorld(); - - Set trackingThisTick = new HashSet<>(); - List entsInBounds = world.getEntitiesWithinAABB(EntityLiving.class, getBounds(pos)); - - for (EntityLiving ent : entsInBounds) { - if (!ent.isDead)// && isMobInFilter(ent)) - { - double x = (pos.getX() + 0.5D - ent.posX); - double y = (pos.getY() + 1D - ent.posY); - double z = (pos.getZ() + 0.5D - ent.posZ); - double distance = Math.sqrt(x * x + y * y + z * z); - - if (distance < 2 && tracking.contains(ent)) { - setEntityCooldown(pos, ent, cooldown); - removeAssignedAITask(pos, ent); - continue; - } - - if (!canEntityBeTracked(pos, ent)) { -// System.out.println("Cooldown: " + getEntityCooldown(pos, ent)); - decrementEntityCooldown(pos, ent); - continue; - } - - if (tracking.contains(ent)) { - trackingThisTick.add(ent); - onEntityTick(pos, ent); - } else if (tracking.size() < maxMobsAttracted && trackMob(pos, ent)) { - trackingThisTick.add(ent); - onTracked(ent); - } - } - } - - for (EntityLiving e : tracking) { - if (!trackingThisTick.contains(e)) { - onUntracked(e); - } - } - tracking.clear(); - tracking = trackingThisTick; - - return false; - } - - public boolean canEntityBeTracked(BlockPos pos, EntityLiving entity) { - return getEntityCooldown(pos, entity) <= 0; - } - - private String getPosKey(BlockPos pos) { - return "BMAttractor:" + pos; - } - - public int getEntityCooldown(BlockPos pos, EntityLiving entity) { - return entity.getEntityData().getInteger(getPosKey(pos)); - } - - public void setEntityCooldown(BlockPos pos, EntityLiving entity, int cooldown) { - entity.getEntityData().setInteger(getPosKey(pos), cooldown); - } - - public void decrementEntityCooldown(BlockPos pos, EntityLiving entity) { - int cooldown = getEntityCooldown(pos, entity); - if (cooldown > 0) { - setEntityCooldown(pos, entity, cooldown - 1); - } - } - - public AxisAlignedBB getBounds(BlockPos pos) { - return new AxisAlignedBB(pos).expand(getRange(), getRange(), getRange()); - } - - public float getRange() { - return 10; - } - - private void onUntracked(EntityLiving e) { - if (e instanceof EntityEnderman) { - e.getEntityData().setBoolean("BM:tracked", false); - } - } - - private void onTracked(EntityLiving e) { - if (e instanceof EntityEnderman) { - e.getEntityData().setBoolean("BM:tracked", true); - } - } - - private void onEntityTick(BlockPos pos, EntityLiving ent) { - if (ent instanceof EntitySlime) { - ent.faceEntity(getTarget(ent.getEntityWorld(), pos), 10.0F, 20.0F); - } else if (ent instanceof EntitySilverfish) { - if (counter < 10) { - return; - } - EntitySilverfish sf = (EntitySilverfish) ent; - Path pathentity = getPathEntityToEntity(ent, getTarget(ent.getEntityWorld(), pos), getRange()); - sf.getNavigator().setPath(pathentity, sf.getAIMoveSpeed()); - } else if (ent instanceof EntityBlaze) { - double x = (pos.getX() + 0.5D - ent.posX); - double y = (pos.getY() + 1D - ent.posY); - double z = (pos.getZ() + 0.5D - ent.posZ); - double distance = Math.sqrt(x * x + y * y + z * z); - if (distance > 1.25) { - double speed = 0.01; - ent.motionX += x / distance * speed; - if (y > 0) { - ent.motionY += (0.3 - ent.motionY) * 0.3; - } - ent.motionZ += z / distance * speed; - } - } else if (ent instanceof EntityPigZombie || ent instanceof EntitySpider) { - forceMove(pos, ent); -// ent.setAttackTarget(target); - } else if (ent instanceof EntityEnderman) { - ent.setAttackTarget(getTarget(ent.getEntityWorld(), pos)); - } - } - - private void forceMove(BlockPos pos, EntityLiving ent) { - double x = (pos.getX() + 0.5D - ent.posX); - double y = (pos.getY() + 1D - ent.posY); - double z = (pos.getZ() + 0.5D - ent.posZ); - double distance = Math.sqrt(x * x + y * y + z * z); - if (distance > 2) { - EntityMob mod = (EntityMob) ent; - mod.faceEntity(getTarget(ent.getEntityWorld(), pos), 180, 0); - mod.getMoveHelper().strafe(0, 0.3f); - if (mod.posY < pos.getY()) { - mod.setJumping(true); - } else { - mod.setJumping(false); - } - } - } - - public Path getPathEntityToEntity(Entity entity, Entity targetEntity, float range) { - int targX = MathHelper.floor(targetEntity.posX); - int targY = MathHelper.floor(targetEntity.posY + 1.0D); - int targZ = MathHelper.floor(targetEntity.posZ); - - PathFinder pf = new PathFinder(new WalkNodeProcessor()); - return pf.findPath(targetEntity.getEntityWorld(), (EntityLiving) entity, new BlockPos(targX, targY, targZ), range); - } - - private boolean trackMob(BlockPos pos, EntityLiving ent) { - //TODO: Figure out if this crud is needed - if (useSetTarget(ent)) { - ent.setAttackTarget(getTarget(ent.getEntityWorld(), pos)); - return true; - } else if (useSpecialCase(ent)) { - return applySpecialCase(pos, ent); - } else { - return attractUsingAITask(pos, ent); - } - } - - private boolean useSetTarget(EntityLiving ent) { - return ent instanceof EntityPigZombie || ent instanceof EntitySpider || ent instanceof EntitySilverfish; - } - - public void removeAssignedAITask(BlockPos pos, EntityLiving ent) { - Set entries = ent.tasks.taskEntries; - EntityAIBase remove = null; - for (EntityAITaskEntry entry : entries) { - if (entry.action instanceof AttractTask) { - AttractTask at = (AttractTask) entry.action; - if (at.coord.equals(pos)) { - remove = entry.action; - } else { - continue; - } - } - } - if (remove != null) { - ent.tasks.removeTask(remove); - } - } - - private boolean attractUsingAITask(BlockPos pos, EntityLiving ent) { - tracking.add(ent); - Set entries = ent.tasks.taskEntries; - // boolean hasTask = false; - EntityAIBase remove = null; - // boolean isTracked; - for (EntityAITaskEntry entry : entries) { - if (entry.action instanceof AttractTask) { - AttractTask at = (AttractTask) entry.action; - if (at.coord.equals(pos) || !at.shouldExecute()) { - remove = entry.action; - } else { - return false; - } - } - } - if (remove != null) { - ent.tasks.removeTask(remove); - } - - cancelCurrentTasks(ent); - ent.tasks.addTask(0, new AttractTask(ent, getTarget(ent.getEntityWorld(), pos), pos)); - - return true; - } - - private void cancelCurrentTasks(EntityLiving ent) { - Iterator iterator = ent.tasks.taskEntries.iterator(); - - List currentTasks = new ArrayList<>(); - while (iterator.hasNext()) { - EntityAITaskEntry entityaitaskentry = iterator.next(); - if (entityaitaskentry != null) { - if (entityaitaskentry.action instanceof AttractTask) { - continue; - } - - currentTasks.add(entityaitaskentry); - } - } - // Only available way to stop current execution is to remove all current - // tasks, then re-add them - for (EntityAITaskEntry task : currentTasks) { - ent.tasks.removeTask(task.action); - ent.tasks.addTask(task.priority, task.action); - } - } - - private boolean applySpecialCase(BlockPos pos, EntityLiving ent) { - if (ent instanceof EntitySlime) { - ent.faceEntity(getTarget(ent.getEntityWorld(), pos), 10.0F, 20.0F); -// ent.setAttackTarget(getTarget(ent.worldObj, pos)); - return true; - } else if (ent instanceof EntitySilverfish) { - EntitySilverfish es = (EntitySilverfish) ent; - Path pathentity = getPathEntityToEntity(ent, getTarget(ent.getEntityWorld(), pos), getRange()); - es.getNavigator().setPath(pathentity, es.getAIMoveSpeed()); - return true; - } else if (ent instanceof EntityBlaze) { - return true; - } - return false; - } - - private boolean useSpecialCase(EntityLiving ent) { - return ent instanceof EntitySlime || ent instanceof EntitySilverfish || ent instanceof EntityBlaze; - } - - public FakePlayer getTarget(World world, BlockPos pos) { - if (target == null) { -// System.out.println("...Hi? " + pos); - target = new Target(world, pos); - } - - return target; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectAttractor(key); - } - - private static class AttractTask extends EntityAIBase { - private EntityLiving mob; - private BlockPos coord; - private FakePlayer target; - private int updatesSincePathing; - - private boolean started = false; - - private AttractTask(EntityLiving mob, FakePlayer target, BlockPos coord) { - this.mob = mob; - this.coord = coord; - this.target = target; - } - - @Override - public boolean shouldExecute() { - boolean res = false; - //TODO: - TileEntity te = mob.getEntityWorld().getTileEntity(coord); - if (te instanceof TileAlchemyArray) { - res = true; - } - - return res; - } - - @Override - public void resetTask() { - started = false; - updatesSincePathing = 0; - } - - @Override - public boolean isInterruptible() { - return true; - } - - @Override - public void updateTask() { - if (!started || updatesSincePathing > 20) { - started = true; - int speed = 1; - // mob.getNavigator().setAvoidsWater(false); - boolean res = mob.getNavigator().tryMoveToEntityLiving(target, speed); - if (!res) { - mob.getNavigator().tryMoveToXYZ(target.posX, target.posY + 1, target.posZ, speed); - } - updatesSincePathing = 0; - } else { - updatesSincePathing++; - } - } - - } - - private class Target extends FakePlayerBM { - public Target(World world, BlockPos pos) { - super(world, pos, new GameProfile(null, BloodMagic.MODID + "ArrayAttractor" + ":" + pos)); - posY += 1; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBinding.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBinding.java deleted file mode 100644 index d3e9849c..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBinding.java +++ /dev/null @@ -1,71 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.client.render.alchemyArray.BindingAlchemyCircleRenderer; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class AlchemyArrayEffectBinding extends AlchemyArrayEffectCrafting { - public AlchemyArrayEffectBinding(String key, ItemStack outputStack) { - super(key, outputStack, 200); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { - if (ticksActive >= 50 && ticksActive <= 250) { - // TODO: Find a way to spawn lightning from only the server side - - // does not render when just spawned on server, not client. - this.spawnLightningOnCircle(tile.getWorld(), tile.getPos(), ticksActive); - } - - if (tile.getWorld().isRemote) { - return false; - } - - if (ticksActive >= 300) { - BlockPos pos = tile.getPos(); - - ItemStack output = outputStack.copy(); - EntityItem outputEntity = new EntityItem(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, output); - - tile.getWorld().spawnEntity(outputEntity); - - return true; - } - - return false; - } - - public void spawnLightningOnCircle(World world, BlockPos pos, int ticksActive) { - if (ticksActive % 50 == 0) { - int circle = ticksActive / 50 - 1; - float distance = BindingAlchemyCircleRenderer.getDistanceOfCircle(circle, ticksActive); - float angle = BindingAlchemyCircleRenderer.getAngleOfCircle(circle, ticksActive); - - double dispX = distance * Math.sin(angle); - double dispZ = -distance * Math.cos(angle); - - EntityLightningBolt lightning = new EntityLightningBolt(world, pos.getX() + dispX, pos.getY(), pos.getZ() + dispZ, true); - world.spawnEntity(lightning); - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - //EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - //EMPTY - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectBinding(key, outputStack); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBounce.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBounce.java deleted file mode 100644 index cd35b720..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectBounce.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.iface.IAlchemyArray; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class AlchemyArrayEffectBounce extends AlchemyArrayEffect { - public AlchemyArrayEffectBounce(String key) { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { - return false; - } - - @Override - public void onEntityCollidedWithBlock(IAlchemyArray array, World world, BlockPos pos, IBlockState state, Entity entity) { - if (entity.isSneaking()) { - entity.fallDistance = 0; - } else if (entity.motionY < 0.0D) { - entity.motionY = -entity.motionY; - - if (!(entity instanceof EntityLivingBase)) { - entity.motionY *= 0.8D; - } - - entity.fallDistance = 0; - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectBounce(key); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectCrafting.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectCrafting.java deleted file mode 100644 index 9f658335..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectCrafting.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; - -public class AlchemyArrayEffectCrafting extends AlchemyArrayEffect { - public final ItemStack outputStack; - public int tickLimit; - - public AlchemyArrayEffectCrafting(ItemStack outputStack) { - this(outputStack, 200); - } - - public AlchemyArrayEffectCrafting(ItemStack outputStack, int tickLimit) { - this(outputStack.toString() + tickLimit, outputStack, tickLimit); - } - - public AlchemyArrayEffectCrafting(String key, ItemStack outputStack, int tickLimit) { - super(key); - this.outputStack = outputStack; - this.tickLimit = tickLimit; - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { - // TODO: Add recipe rechecking to verify nothing screwy is going on. - if (tile.getWorld().isRemote) { - return false; - } - - if (ticksActive >= tickLimit) { - BlockPos pos = tile.getPos(); - - ItemStack output = outputStack.copy(); - - EntityItem outputEntity = new EntityItem(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, output); - - tile.getWorld().spawnEntity(outputEntity); - - return true; - } - - return false; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectCrafting(key, outputStack, tickLimit); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectCraftingNew.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectCraftingNew.java deleted file mode 100644 index b96c9052..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectCraftingNew.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyArray; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; - -public class AlchemyArrayEffectCraftingNew extends AlchemyArrayEffect { - - private final RecipeAlchemyArray recipe; - - public AlchemyArrayEffectCraftingNew(RecipeAlchemyArray recipe) { - this(recipe.getOutput().toString() + 200, recipe); - } - - public AlchemyArrayEffectCraftingNew(String key, RecipeAlchemyArray recipeAlchemyArray) { - super(key); - - this.recipe = recipeAlchemyArray; - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { - if (tile.getWorld().isRemote) - return false; - - if (ticksActive >= 200) { - BlockPos pos = tile.getPos(); - - ItemStack output = recipe.getOutput().copy(); - - EntityItem outputEntity = new EntityItem(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, output); - - tile.getWorld().spawnEntity(outputEntity); - - return true; - } - - return false; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectCraftingNew(key, recipe); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectFurnaceFuel.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectFurnaceFuel.java deleted file mode 100644 index c21135ac..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectFurnaceFuel.java +++ /dev/null @@ -1,143 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import java.util.List; - -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import net.minecraft.block.Block; -import net.minecraft.block.BlockFurnace; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityFurnace; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class AlchemyArrayEffectFurnaceFuel extends AlchemyArrayEffect -{ - static double radius = 10; - static int burnTicksAdded = 401; //Set to +1 more than it needs to be due to a hacky method - basically done so that the array doesn't double dip your health if you only add one item. - - public AlchemyArrayEffectFurnaceFuel(String key) - { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) - { - BlockPos pos = tile.getPos(); - World world = tile.getWorld(); - EntityPlayer sacrifice = null; - - for (EnumFacing face : EnumFacing.VALUES) - { - BlockPos furnacePos = pos.offset(face); - Block block = world.getBlockState(furnacePos).getBlock(); - if (block != Blocks.FURNACE) //This will only work vanilla furnaces. No others! - { - continue; - } - - TileEntity bottomTile = world.getTileEntity(furnacePos); - if (bottomTile instanceof TileEntityFurnace) - { - TileEntityFurnace furnaceTile = (TileEntityFurnace) bottomTile; - if (canFurnaceSmelt(furnaceTile) && !furnaceTile.isBurning()) - { - if (sacrifice == null || sacrifice.isDead) - { - AxisAlignedBB bb = new AxisAlignedBB(pos).grow(radius); - List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, bb); - for (EntityPlayer player : playerList) - { - if (!player.isDead) - { - sacrifice = player; - } - } - } - - if (sacrifice == null || sacrifice.isDead) - { - return false; - } - - if (addFuelTime(furnaceTile, world, furnacePos, burnTicksAdded)) - { - if (!sacrifice.capabilities.isCreativeMode) - { - sacrifice.hurtResistantTime = 0; - sacrifice.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 1.0F); //No. - } - } - } - } - } - - return false; - } - - public static boolean addFuelTime(TileEntityFurnace furnaceTile, World world, BlockPos furnacePos, int cookTime) - { - furnaceTile.setField(0, cookTime); - BlockFurnace.setState(true, world, furnacePos); - return true; - } - - public static boolean canFurnaceSmelt(TileEntityFurnace furnaceTile) - { - ItemStack burnStack = furnaceTile.getStackInSlot(0); - if (burnStack.isEmpty()) - { - return false; - } else - { - ItemStack resultStack = FurnaceRecipes.instance().getSmeltingResult(burnStack); - - if (resultStack.isEmpty()) - { - return false; - } else - { - ItemStack finishStack = furnaceTile.getStackInSlot(2); - - if (finishStack.isEmpty()) - { - return true; - } else if (!finishStack.isItemEqual(resultStack)) - { - return false; - } else if (finishStack.getCount() + resultStack.getCount() <= furnaceTile.getInventoryStackLimit() && finishStack.getCount() + resultStack.getCount() <= finishStack.getMaxStackSize()) // Forge fix: make furnace respect stack sizes in furnace recipes - { - return true; - } else - { - return finishStack.getCount() + resultStack.getCount() <= resultStack.getMaxStackSize(); // Forge fix: make furnace respect stack sizes in furnace recipes - } - } - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - - } - - @Override - public AlchemyArrayEffect getNewCopy() - { - return new AlchemyArrayEffectFurnaceFuel(key); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectLaputa.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectLaputa.java deleted file mode 100644 index ce64e7f3..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectLaputa.java +++ /dev/null @@ -1,154 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import java.util.Random; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import WayofTime.bloodmagic.event.TeleposeEvent; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.Utils; - -public class AlchemyArrayEffectLaputa extends AlchemyArrayEffect -{ - public static final int TELEPOSE_DELAY = 4; - - private BlockPos currentPos = BlockPos.ORIGIN; - - private int radius = -1; - private int teleportHeightOffset = 5; - - public AlchemyArrayEffectLaputa(String key) - { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) - { - if (ticksActive >= 100) - { - World world = tile.getWorld(); - - if (radius == -1) - { - ((TileAlchemyArray) tile).setItemDrop(false); - radius = getRandomRadius(world.rand); - teleportHeightOffset = getRandomHeightOffset(world.rand); - currentPos = new BlockPos(-radius, -radius, -radius); - } - - BlockPos pos = tile.getPos(); - if (world.isRemote) - { - return false; - } - - int j = -radius; - int i = -radius; - int k = -radius; - - if (currentPos != null) - { - j = currentPos.getY(); - i = currentPos.getX(); - k = currentPos.getZ(); - } - int checks = 0; - int maxChecks = 100; - - while (j <= radius) - { - while (i <= radius) - { - while (k <= radius) - { - if (i == 0 && j == 0 && k == 0) - { - k++; - continue; - } - - checks++; - if (checks >= maxChecks) - { - this.currentPos = new BlockPos(i, j, k); - return false; - } - - if (checkIfSphere(radius, i, j, k)) - { - BlockPos newPos = pos.add(i, j, k); - BlockPos offsetPos = newPos.up(teleportHeightOffset); - IBlockState state = world.getBlockState(newPos); - - TeleposeEvent event = new TeleposeEvent(world, newPos, world, offsetPos); - if (state.getBlockHardness(world, newPos) > 0 && !MinecraftForge.EVENT_BUS.post(event) && Utils.swapLocations(event.initalWorld, event.initialBlockPos, event.finalWorld, event.finalBlockPos)) - { - k++; - this.currentPos = new BlockPos(i, j, k); - - return false; - } - } - k++; - } - i++; - k = -radius; - } - j++; - i = -radius; - this.currentPos = new BlockPos(i, j, k); - return false; - } - - return true; - } - - return false; - } - - public boolean checkIfSphere(float radius, float xOff, float yOff, float zOff) - { - float possOffset = 0.5f; - return xOff * xOff + yOff * yOff + zOff * zOff <= ((radius + possOffset) * (radius + possOffset)); - } - - public int getRandomRadius(Random rand) - { - return rand.nextInt(5) + 4; - } - - public int getRandomHeightOffset(Random rand) - { - return radius * 2 + 1 + rand.nextInt(5); - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - tag.setInteger("radius", radius); - tag.setInteger("teleportHeightOffset", teleportHeightOffset); - tag.setInteger(Constants.NBT.X_COORD, currentPos.getX()); - tag.setInteger(Constants.NBT.Y_COORD, currentPos.getY()); - tag.setInteger(Constants.NBT.Z_COORD, currentPos.getZ()); - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - radius = tag.getInteger("radius"); - teleportHeightOffset = tag.getInteger("teleportHeightOffset"); - currentPos = new BlockPos(tag.getInteger(Constants.NBT.X_COORD), tag.getInteger(Constants.NBT.Y_COORD), tag.getInteger(Constants.NBT.Z_COORD)); - } - - @Override - public AlchemyArrayEffect getNewCopy() - { - return new AlchemyArrayEffectLaputa(key); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMobSacrifice.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMobSacrifice.java deleted file mode 100644 index 77224e58..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMobSacrifice.java +++ /dev/null @@ -1,233 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.monster.IMob; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.common.registry.EntityRegistry; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.api.impl.recipe.RecipeSacrificeCraft; -import WayofTime.bloodmagic.ritual.AreaDescriptor; -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import WayofTime.bloodmagic.util.helper.PurificationHelper; - -public class AlchemyArrayEffectMobSacrifice extends AlchemyArrayEffect -{ - public static final AreaDescriptor itemDescriptor = new AreaDescriptor.Rectangle(new BlockPos(-5, -5, -5), 11); - public static final AreaDescriptor mobDescriptor = new AreaDescriptor.Rectangle(new BlockPos(-5, -5, -5), 11); - public int craftTime = 0; - public static final int REQUIRED_CRAFT_TIME = 200; - - public AlchemyArrayEffectMobSacrifice(String key) - { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) - { - World world = tile.getWorld(); - if (world.isRemote && ticksActive < 200 && ticksActive > 40) - { - BlockPos pos = tile.getPos(); - Random rand = world.rand; - - for (int i = 0; i < 2; i++) - { - double d0 = (double) pos.getX() + 0.5D + (rand.nextDouble() - 0.5D) * 2.5D; - double d1 = (double) pos.getY() + 0.2D + (rand.nextDouble() - 0.5D) * 0.2D; - double d2 = (double) pos.getZ() + 0.5D + (rand.nextDouble() - 0.5D) * 2.5D; - world.spawnParticle(EnumParticleTypes.SPELL_MOB, d0, d1, d2, 1D, 0.0D, 0.0D); - } - } - - //We need to do the check on both sides to correctly do particles. - - if (ticksActive >= 200) - { - BlockPos pos = tile.getPos(); - - List itemList = world.getEntitiesWithinAABB(EntityItem.class, itemDescriptor.getAABB(pos)); - - List inputList = new ArrayList(); - - for (EntityItem entityItem : itemList) - { - if (entityItem.isDead || entityItem.getItem().isEmpty()) - { - continue; - } - - inputList.add(entityItem.getItem().copy()); - } - - if (inputList.isEmpty()) - { - return false; - } - - if (inputList.size() == 1) //TODO: Test if it is a something that can be filled with Soul Breath - { - - } - - RecipeSacrificeCraft recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getSacrificeCraft(inputList); - if (recipe != null) - { - double healthRequired = recipe.getHealthRequired(); - double healthAvailable = 0; - - List livingEntities = world.getEntitiesWithinAABB(EntityLivingBase.class, mobDescriptor.getAABB(pos)); - for (EntityLivingBase living : livingEntities) - { - double health = getEffectiveHealth(living); - if (health > 0) - { - healthAvailable += health; - } - } - - if (healthAvailable < healthRequired) - { - craftTime = 0; - return false; - } - - craftTime++; - - if (craftTime >= REQUIRED_CRAFT_TIME) - { - if (!world.isRemote) - { - for (EntityLivingBase living : livingEntities) - { - double health = getEffectiveHealth(living); - if (healthAvailable > 0 && health > 0) - { - healthAvailable -= health; - living.getEntityWorld().playSound(null, living.posX, living.posY, living.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (living.getEntityWorld().rand.nextFloat() - living.getEntityWorld().rand.nextFloat()) * 0.8F); - living.setHealth(-1); - living.onDeath(DamageSourceBloodMagic.INSTANCE); - } - - if (healthAvailable <= 0) - { - break; - } - } - - for (EntityItem itemEntity : itemList) - { - itemEntity.getItem().setCount(itemEntity.getItem().getCount() - 1); - if (itemEntity.getItem().isEmpty()) //TODO: Check container - { - itemEntity.setDead(); - } - } - - world.spawnEntity(new EntityItem(world, pos.getX() + 0.5, pos.getY() + 2.5, pos.getZ() + 0.5, recipe.getOutput())); - craftTime = 0; - } - } else - { - if (world.isRemote) - { - Vec3d spawnPosition = new Vec3d(pos.getX() + 0.5, pos.getY() + 2.5, pos.getZ() + 0.5); - for (EntityItem itemEntity : itemList) - { - ItemStack stack = itemEntity.getItem(); - double velocityFactor = 0.1; - - Vec3d itemPosition = new Vec3d(itemEntity.posX, itemEntity.posY + 0.5, itemEntity.posZ); - Vec3d velVec1 = new Vec3d((world.rand.nextDouble() - 0.5) * velocityFactor, (world.rand.nextDouble() - 0.5) * velocityFactor, (world.rand.nextDouble() - 0.5) * velocityFactor); -// Vec3d velVec2 = new Vec3d((world.rand.nextDouble() - 0.5) * velocityFactor, (world.rand.nextDouble()) * velocityFactor, (world.rand.nextDouble() - 0.5) * velocityFactor); - -// vec3d1 = vec3d1.addVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ); -// if (this.world instanceof WorldServer) //Forge: Fix MC-2518 spawnParticle is nooped on server, need to use server specific variant -// ((WorldServer)this.world).spawnParticle(EnumParticleTypes.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, 0, vec3d.x, vec3d.y + 0.05D, vec3d.z, 0.0D, Item.getIdFromItem(stack.getItem()), stack.getMetadata()); -// else //Fix the fact that spawning ItemCrack uses TWO arguments. - world.spawnParticle(EnumParticleTypes.ITEM_CRACK, itemPosition.x + (spawnPosition.x - itemPosition.x) * craftTime / REQUIRED_CRAFT_TIME, itemPosition.y + (spawnPosition.y - itemPosition.y) * craftTime / REQUIRED_CRAFT_TIME, itemPosition.z + (spawnPosition.z - itemPosition.z) * craftTime / REQUIRED_CRAFT_TIME, velVec1.x, velVec1.y, velVec1.z, Item.getIdFromItem(stack.getItem()), stack.getMetadata()); -// world.spawnParticle(EnumParticleTypes.ITEM_CRACK, spawnPosition.x, spawnPosition.y, spawnPosition.z, velVec2.x, velVec2.y, velVec2.z, Item.getIdFromItem(stack.getItem()), stack.getMetadata()); - } - - for (EntityLivingBase living : livingEntities) - { - double health = getEffectiveHealth(living); - if (health <= 0) - { - continue; - } - double d0 = (double) living.posX + (world.rand.nextDouble() - 0.5D) * 0.5D; - double d1 = (double) living.posY + 0.5D + (world.rand.nextDouble() - 0.5D) * 1D; - double d2 = (double) living.posZ + (world.rand.nextDouble() - 0.5D) * 0.5D; - world.spawnParticle(EnumParticleTypes.SPELL_MOB, d0, d1, d2, 1D, 0.0D, 0.0D); - } - } - } - } - } - - return false; - } - - //Future-proofing in case I want to make different mobs give different effective health - public double getEffectiveHealth(EntityLivingBase living) - { - if (living == null) - return 0; - - if (!living.isNonBoss()) - return 0; - - if (living instanceof EntityPlayer) - return 0; - - if (living.isChild() && !(living instanceof IMob)) - return 0; - - if (living.isDead || living.getHealth() < 0.5F) - return 0; - - EntityEntry entityEntry = EntityRegistry.getEntry(living.getClass()); - if (entityEntry == null) - return 0; - - return living.getHealth(); - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - - } - - @Override - public AlchemyArrayEffect getNewCopy() - { - return new AlchemyArrayEffectMobSacrifice(key); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMovement.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMovement.java deleted file mode 100644 index 3bf96427..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMovement.java +++ /dev/null @@ -1,74 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.iface.IAlchemyArray; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class AlchemyArrayEffectMovement extends AlchemyArrayEffect { - public AlchemyArrayEffectMovement(String key) { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { - return false; - } - - @Override - public void onEntityCollidedWithBlock(IAlchemyArray array, World world, BlockPos pos, IBlockState state, Entity entity) { - double motionY = 0.5; - double speed = 3; - EnumFacing direction = array.getRotation(); - - entity.motionY = motionY; - entity.fallDistance = 0; - - switch (direction) { - case NORTH: - entity.motionX = 0; - entity.motionY = motionY; - entity.motionZ = -speed; - break; - - case SOUTH: - entity.motionX = 0; - entity.motionY = motionY; - entity.motionZ = speed; - break; - - case WEST: - entity.motionX = -speed; - entity.motionY = motionY; - entity.motionZ = 0; - break; - - case EAST: - entity.motionX = speed; - entity.motionY = motionY; - entity.motionZ = 0; - break; - default: - break; - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectMovement(key); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSigil.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSigil.java deleted file mode 100644 index beb4ba46..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSigil.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.iface.ISigil; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; - -public class AlchemyArrayEffectSigil extends AlchemyArrayEffect { - private final ISigil sigil; - - public AlchemyArrayEffectSigil(String key, ISigil sigil) { - super(key); - this.sigil = sigil; - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { - //TODO: Need particles. - if (sigil.hasArrayEffect()) { - sigil.performArrayEffect(tile.getWorld(), tile.getPos()); - } - - return false; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectSigil(key, sigil); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSkeletonTurret.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSkeletonTurret.java deleted file mode 100644 index d297eb60..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSkeletonTurret.java +++ /dev/null @@ -1,186 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import com.google.common.base.Predicate; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; -import net.minecraft.entity.ai.EntityAITasks; -import net.minecraft.entity.ai.EntityAITasks.EntityAITaskEntry; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * Credits for the initial code go to Crazy Pants of EIO. - */ -public class AlchemyArrayEffectSkeletonTurret extends AlchemyArrayEffect { - public static Predicate checkSkeleton = input -> !(input instanceof EntitySkeleton); - private EntitySkeleton turret; - - public AlchemyArrayEffectSkeletonTurret(String key) { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { -// if (tile.getWorld().isRemote) -// { -// return false; -// } - - BlockPos pos = tile.getPos(); - - if (turret != null && !turret.isDead) { - double x = (pos.getX() + 0.5D - turret.posX); - double y = (pos.getY() + 1D - turret.posY); - double z = (pos.getZ() + 0.5D - turret.posZ); - double distance = Math.sqrt(x * x + y * y + z * z); - - if (distance < 2) { -// turret.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 100, 100)); - return false; - } - } - - World world = tile.getWorld(); - - List skeletonsInRange = world.getEntitiesWithinAABB(EntitySkeleton.class, getBounds(pos)); - - for (EntitySkeleton entity : skeletonsInRange) { - if (!entity.isDead)// && isMobInFilter(ent)) - { - modifyAITargetTasks(entity); - turret = entity; - break; - } - } - - return false; - } - - public AxisAlignedBB getBounds(BlockPos pos) { - return new AxisAlignedBB(pos).expand(getRange(), getRange(), getRange()); - } - - public float getRange() { - return 0; - } - -// private void onUntracked(EntityLiving e) -// { -// e.getEntityData().setBoolean("BM:tracked", false); -// } -// -// private void onTracked(EntityLiving e) -// { -// e.getEntityData().setBoolean("BM:tracked", true); -// } - - private boolean modifyAITargetTasks(EntitySkeleton entity) { - cancelCurrentTargetTasks(entity); - -// entity.setCombatTask(); - entity.targetTasks.addTask(1, new EntityAINearestAttackableTarget(entity, EntityMob.class, 10, true, false, checkSkeleton)); - entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0); - entity.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(1); - return true; - } - - private void cancelCurrentTargetTasks(EntityLiving entity) { - Iterator iterator = entity.targetTasks.taskEntries.iterator(); - - List currentTasks = new ArrayList<>(); - while (iterator.hasNext()) { - EntityAITaskEntry entityaitaskentry = iterator.next(); - if (entityaitaskentry != null)// && entityaitaskentry.action instanceof EntityAITarget) - { - currentTasks.add(entityaitaskentry); - } - } - - for (EntityAITaskEntry task : currentTasks) { - entity.targetTasks.removeTask(task.action); - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectSkeletonTurret(key); - } - - private static class AttractTask extends EntityAIBase { - private EntityLiving mob; - private BlockPos coord; - private FakePlayer target; - private int updatesSincePathing; - - private boolean started = false; - - private AttractTask(EntityLiving mob, FakePlayer target, BlockPos coord) { - this.mob = mob; - this.coord = coord; - this.target = target; - } - - @Override - public boolean shouldExecute() { - boolean res = false; - //TODO: - TileEntity te = mob.getEntityWorld().getTileEntity(coord); - if (te instanceof TileAlchemyArray) { - res = true; - } - - return res; - } - - @Override - public void resetTask() { - started = false; - updatesSincePathing = 0; - } - - @Override - public boolean isInterruptible() { - return true; - } - - @Override - public void updateTask() { - if (!started || updatesSincePathing > 20) { - started = true; - int speed = 1; - // mob.getNavigator().setAvoidsWater(false); - boolean res = mob.getNavigator().tryMoveToEntityLiving(target, speed); - if (!res) { - mob.getNavigator().tryMoveToXYZ(target.posX, target.posY + 1, target.posZ, speed); - } - updatesSincePathing = 0; - } else { - updatesSincePathing++; - } - } - - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSpike.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSpike.java deleted file mode 100644 index a0bbf514..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectSpike.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import WayofTime.bloodmagic.iface.IAlchemyArray; - -public class AlchemyArrayEffectSpike extends AlchemyArrayEffect -{ - public AlchemyArrayEffectSpike(String key) - { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) - { - return false; - } - - @Override - public void onEntityCollidedWithBlock(IAlchemyArray array, World world, BlockPos pos, IBlockState state, Entity entity) - { - if (entity instanceof EntityLivingBase) - { - entity.attackEntityFrom(DamageSource.CACTUS, 2); - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - - } - - @Override - public AlchemyArrayEffect getNewCopy() - { - return new AlchemyArrayEffectSpike(key); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectTeleport.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectTeleport.java deleted file mode 100644 index 9437e86b..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectTeleport.java +++ /dev/null @@ -1,101 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.SoundEvents; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.play.server.SPacketUpdateHealth; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.iface.IAlchemyArray; - -public class AlchemyArrayEffectTeleport extends AlchemyArrayEffect -{ - public static final int MAX_SEARCH = 20; - public static final int TELEPORT_DELAY = 40; - - public AlchemyArrayEffectTeleport(String key) - { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) - { - return false; - } - - @Override - public void onEntityCollidedWithBlock(IAlchemyArray array, World world, BlockPos pos, IBlockState state, Entity entity) - { - EnumFacing direction = array.getRotation(); - - teleportEntityInDirection(world, pos, entity, direction); - } - - public void teleportEntityInDirection(World world, BlockPos currentPos, Entity entity, EnumFacing direction) - { - if (entity != null && entity.timeUntilPortal <= 0) - { - for (int i = 1; i <= MAX_SEARCH; i++) - { - BlockPos offsetPos = currentPos.offset(direction, i); - Block testBlock = world.getBlockState(offsetPos).getBlock(); - if (testBlock == RegistrarBloodMagicBlocks.ALCHEMY_ARRAY) - { - int x = offsetPos.getX(); - int y = offsetPos.getY(); - int z = offsetPos.getZ(); - - entity.getEntityWorld().playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); - entity.timeUntilPortal = TELEPORT_DELAY; - if (!world.isRemote) - { - if (entity instanceof EntityPlayer) - { - EntityPlayerMP player = (EntityPlayerMP) entity; - - player.setPositionAndUpdate(x + 0.5, y + 0.5, z + 0.5); - player.getEntityWorld().updateEntityWithOptionalForce(player, false); - player.connection.sendPacket(new SPacketUpdateHealth(player.getHealth(), player.getFoodStats().getFoodLevel(), player.getFoodStats().getSaturationLevel())); - - } else - { - WorldServer worldServer = (WorldServer) entity.getEntityWorld(); - - entity.setPosition(x + 0.5, y + 0.5, z + 0.5); - worldServer.resetUpdateEntityTick(); - } - } - return; - } - } - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - - } - - @Override - public AlchemyArrayEffect getNewCopy() - { - return new AlchemyArrayEffectTeleport(key); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectUpdraft.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectUpdraft.java deleted file mode 100644 index f2cb4612..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectUpdraft.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.iface.IAlchemyArray; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class AlchemyArrayEffectUpdraft extends AlchemyArrayEffect { - public AlchemyArrayEffectUpdraft(String key) { - super(key); - } - - @Override - public boolean update(TileEntity tile, int ticksActive) { - return false; - } - - @Override - public void onEntityCollidedWithBlock(IAlchemyArray array, World world, BlockPos pos, IBlockState state, Entity entity) { - double motionY = 1.5; - - entity.fallDistance = 0; - - entity.motionY = motionY; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public AlchemyArrayEffect getNewCopy() { - return new AlchemyArrayEffectUpdraft(key); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyCircleRenderer.java deleted file mode 100644 index 89b0e042..00000000 --- a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyCircleRenderer.java +++ /dev/null @@ -1,151 +0,0 @@ -package WayofTime.bloodmagic.alchemyArray; - -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; - -public class AlchemyCircleRenderer { - public final ResourceLocation arrayResource; - public float offsetFromFace = -0.9f; - - public AlchemyCircleRenderer() { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SightSigil.png")); - } - - public AlchemyCircleRenderer(ResourceLocation arrayResource) { - this.arrayResource = arrayResource; - } - - public float getRotation(float craftTime) { - float offset = 2; - if (craftTime >= offset) { - float modifier = (float) Math.pow(craftTime - offset, 1.5); - return modifier * 1f; - } - return 0; - } - - public float getSecondaryRotation(float craftTime) { - float offset = 50; - if (craftTime >= offset) { - float modifier = (float) Math.pow(craftTime - offset, 1.7); - return modifier * 0.5f; - } - return 0; - } - - public float getSizeModifier(float craftTime) { - if (craftTime >= 150 && craftTime <= 250) { - return (200 - craftTime) / 50f; - } - return 1.0f; - } - - public float getVerticalOffset(float craftTime) { - if (craftTime >= 5) { - if (craftTime <= 40) { - return (float) ((-0.4) * Math.pow((craftTime - 5) / 35f, 3)); - } else { - return -0.4f; - } - } - return 0; - } - - public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) { - if (!(tile instanceof TileAlchemyArray)) { - return; - } - - TileAlchemyArray tileArray = (TileAlchemyArray) tile; - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - // float rot = (float)(this.worldObj.provider.getWorldTime() % (360 / - // this.rotationspeed) * this.rotationspeed) + this.rotationspeed * f; - float rot = getRotation(craftTime); - float secondaryRot = getSecondaryRotation(craftTime); - - float size = 1.0F * getSizeModifier(craftTime); - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - - GlStateManager.translate(x, y, z); - - // Specify which face this "circle" is located on - EnumFacing sideHit = EnumFacing.UP; - EnumFacing rotation = tileArray.getRotation(); - - GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); - - switch (sideHit) { - case DOWN: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(-90.0f, 1, 0, 0); - break; - case EAST: - GlStateManager.rotate(-90.0f, 0, 1, 0); - GlStateManager.translate(0, 0, -1); - break; - case NORTH: - break; - case SOUTH: - GlStateManager.rotate(180.0f, 0, 1, 0); - GlStateManager.translate(-1, 0, -1); - break; - case UP: - GlStateManager.translate(0, 1, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - break; - case WEST: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(90.0f, 0, 1, 0); - break; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); - GlStateManager.rotate(rotation.getHorizontalAngle() + 180, 0, 0, 1); - - GlStateManager.pushMatrix(); - GlStateManager.rotate(rot, 0, 0, 1); - GlStateManager.rotate(secondaryRot, 1, 0, 0); - GlStateManager.rotate(secondaryRot * 0.45812f, 0, 0, 1); - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - - GlStateManager.color(1f, 1f, 1f, 1f); - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - - // GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GlStateManager.popMatrix(); - GlStateManager.popMatrix(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/altar/AltarComponent.java b/src/main/java/WayofTime/bloodmagic/altar/AltarComponent.java deleted file mode 100644 index abc937c7..00000000 --- a/src/main/java/WayofTime/bloodmagic/altar/AltarComponent.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.altar; - -import net.minecraft.util.math.BlockPos; - -/** - * Used for building the altar structure. - */ -public class AltarComponent { - private final BlockPos offset; - private final ComponentType component; - private boolean upgradeSlot; - - /** - * Sets a component location for the altar. - * - * @param offset - Where the block should be in relation to the Altar - * @param component - The type of Component the location should contain - */ - public AltarComponent(BlockPos offset, ComponentType component) { - this.offset = offset; - this.component = component; - } - - /** - * Use for setting a location at which there must be a block, but the type - * of block does not matter. - * - * @param offset - Where the block should be in relation to the Altar - */ - public AltarComponent(BlockPos offset) { - this(offset, ComponentType.NOTAIR); - } - - /** - * Sets the location to an upgrade slot. - * - * @return the current instance for further use. - */ - public AltarComponent setUpgradeSlot() { - this.upgradeSlot = true; - return this; - } - - public BlockPos getOffset() { - return offset; - } - - public boolean isUpgradeSlot() { - return upgradeSlot; - } - - public ComponentType getComponent() { - return component; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/altar/AltarUpgrade.java b/src/main/java/WayofTime/bloodmagic/altar/AltarUpgrade.java deleted file mode 100644 index fce1de92..00000000 --- a/src/main/java/WayofTime/bloodmagic/altar/AltarUpgrade.java +++ /dev/null @@ -1,24 +0,0 @@ -package WayofTime.bloodmagic.altar; - -import WayofTime.bloodmagic.block.enums.BloodRuneType; -import com.google.common.collect.Maps; - -import java.util.EnumMap; - -public class AltarUpgrade { - - private final EnumMap upgradeLevels; - - public AltarUpgrade() { - this.upgradeLevels = Maps.newEnumMap(BloodRuneType.class); - } - - public AltarUpgrade upgrade(BloodRuneType rune) { - upgradeLevels.compute(rune, (r, l) -> l == null ? 1 : l + 1); - return this; - } - - public int getLevel(BloodRuneType rune) { - return upgradeLevels.getOrDefault(rune, 0); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/altar/AltarUtil.java b/src/main/java/WayofTime/bloodmagic/altar/AltarUtil.java deleted file mode 100644 index acde6d6d..00000000 --- a/src/main/java/WayofTime/bloodmagic/altar/AltarUtil.java +++ /dev/null @@ -1,86 +0,0 @@ -package WayofTime.bloodmagic.altar; - -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.block.BlockBloodRune; -import WayofTime.bloodmagic.tile.TileAltar; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import org.apache.commons.lang3.tuple.Pair; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.List; - -public class AltarUtil { - - @Nonnull - public static AltarTier getTier(World world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - if (!(tile instanceof TileAltar)) - return AltarTier.ONE; - - AltarTier lastCheck = AltarTier.ONE; - for (AltarTier tier : AltarTier.values()) { - for (AltarComponent component : tier.getAltarComponents()) { - BlockPos componentPos = pos.add(component.getOffset()); - IBlockState worldState = world.getBlockState(componentPos); - - if (worldState.getBlock() instanceof IAltarComponent) - if (((IAltarComponent) worldState.getBlock()).getType(world, worldState, componentPos) == component.getComponent()) - continue; - - if (component.getComponent() == ComponentType.NOTAIR && worldState.getMaterial() != Material.AIR && !worldState.getMaterial().isLiquid()) - continue; - - List validStates = BloodMagicAPI.INSTANCE.getComponentStates(component.getComponent()); - if (!validStates.contains(worldState)) - return lastCheck; - } - - lastCheck = tier; - } - - return lastCheck; - } - - @Nonnull - public static AltarUpgrade getUpgrades(World world, BlockPos pos, AltarTier currentTier) { - AltarUpgrade upgrades = new AltarUpgrade(); - - for (AltarComponent component : currentTier.getAltarComponents()) { - if (!component.isUpgradeSlot() || component.getComponent() != ComponentType.BLOODRUNE) - continue; - - BlockPos componentPos = pos.add(component.getOffset()); - IBlockState state = world.getBlockState(componentPos); - if (state.getBlock() instanceof BlockBloodRune) - upgrades.upgrade(((BlockBloodRune) state.getBlock()).getBloodRune(world, componentPos, state)); - } - - return upgrades; - } - - @Nullable - public static Pair getFirstMissingComponent(World world, BlockPos pos, int altarTier) { - if (altarTier >= AltarTier.MAXTIERS) - return null; - - for (AltarTier tier : AltarTier.values()) { - for (AltarComponent component : tier.getAltarComponents()) { - BlockPos componentPos = pos.add(component.getOffset()); - IBlockState worldState = world.getBlockState(componentPos); - if (component.getComponent() == ComponentType.NOTAIR && worldState.getMaterial() != Material.AIR && !worldState.getMaterial().isLiquid()) - continue; - - List validStates = BloodMagicAPI.INSTANCE.getComponentStates(component.getComponent()); - if (!validStates.contains(worldState)) - return Pair.of(componentPos, component.getComponent()); - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java deleted file mode 100644 index 8df2775c..00000000 --- a/src/main/java/WayofTime/bloodmagic/altar/BloodAltar.java +++ /dev/null @@ -1,711 +0,0 @@ -package WayofTime.bloodmagic.altar; - -import WayofTime.bloodmagic.api.event.BloodMagicCraftedEvent; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.api.impl.recipe.RecipeBloodAltar; -import WayofTime.bloodmagic.block.enums.BloodRuneType; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.block.BlockLifeEssence; -import WayofTime.bloodmagic.tile.TileAltar; -import com.google.common.base.Enums; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.capability.FluidTankPropertiesWrapper; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidTankProperties; -import net.minecraftforge.items.ItemHandlerHelper; - -public class BloodAltar implements IFluidHandler -{ - - public boolean isActive; - protected FluidStack fluidOutput = new FluidStack(BlockLifeEssence.getLifeEssence(), 0); - protected FluidStack fluidInput = new FluidStack(BlockLifeEssence.getLifeEssence(), 0); - private TileAltar tileAltar; - private int internalCounter = 0; - private AltarTier altarTier = AltarTier.ONE; - private AltarUpgrade upgrade; - private int capacity = Fluid.BUCKET_VOLUME * 10; - private FluidStack fluid = new FluidStack(BlockLifeEssence.getLifeEssence(), 0); - private int liquidRequired; // mB - private boolean canBeFilled; - private int consumptionRate; - private int drainRate; - private float consumptionMultiplier; - private float efficiencyMultiplier; - private float sacrificeEfficiencyMultiplier; - private float selfSacrificeEfficiencyMultiplier; - private float capacityMultiplier = 1; - private float orbCapacityMultiplier; - private float dislocationMultiplier; - private int accelerationUpgrades; - private boolean isUpgraded; - private boolean isResultBlock; - private int bufferCapacity = Fluid.BUCKET_VOLUME; - private int progress; - private int lockdownDuration; - private int demonBloodDuration; - private int totalCharge = 0; //TODO save - private int chargingRate = 0; - private int chargingFrequency = 0; - private int maxCharge = 0; - private int cooldownAfterCrafting = 60; - private RecipeBloodAltar recipe; - private AltarTier currentTierDisplayed = AltarTier.ONE; - - public BloodAltar(TileAltar tileAltar) - { - this.tileAltar = tileAltar; - } - - public void readFromNBT(NBTTagCompound tagCompound) - { - if (!tagCompound.hasKey(Constants.NBT.EMPTY)) - { - FluidStack fluid = FluidStack.loadFluidStackFromNBT(tagCompound); - - if (fluid != null) - setMainFluid(fluid); - - FluidStack fluidOut = new FluidStack(BlockLifeEssence.getLifeEssence(), tagCompound.getInteger(Constants.NBT.OUTPUT_AMOUNT)); - setOutputFluid(fluidOut); - - FluidStack fluidIn = new FluidStack(BlockLifeEssence.getLifeEssence(), tagCompound.getInteger(Constants.NBT.INPUT_AMOUNT)); - setInputFluid(fluidIn); - } - - internalCounter = tagCompound.getInteger("internalCounter"); - altarTier = Enums.getIfPresent(AltarTier.class, tagCompound.getString(Constants.NBT.ALTAR_TIER)).or(AltarTier.ONE); - isActive = tagCompound.getBoolean(Constants.NBT.ALTAR_ACTIVE); - liquidRequired = tagCompound.getInteger(Constants.NBT.ALTAR_LIQUID_REQ); - canBeFilled = tagCompound.getBoolean(Constants.NBT.ALTAR_FILLABLE); - isUpgraded = tagCompound.getBoolean(Constants.NBT.ALTAR_UPGRADED); - consumptionRate = tagCompound.getInteger(Constants.NBT.ALTAR_CONSUMPTION_RATE); - drainRate = tagCompound.getInteger(Constants.NBT.ALTAR_DRAIN_RATE); - consumptionMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_CONSUMPTION_MULTIPLIER); - efficiencyMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_EFFICIENCY_MULTIPLIER); - selfSacrificeEfficiencyMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_SELF_SACRIFICE_MULTIPLIER); - sacrificeEfficiencyMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_SACRIFICE_MULTIPLIER); - capacityMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_CAPACITY_MULTIPLIER); - orbCapacityMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_ORB_CAPACITY_MULTIPLIER); - dislocationMultiplier = tagCompound.getFloat(Constants.NBT.ALTAR_DISLOCATION_MULTIPLIER); - capacity = tagCompound.getInteger(Constants.NBT.ALTAR_CAPACITY); - bufferCapacity = tagCompound.getInteger(Constants.NBT.ALTAR_BUFFER_CAPACITY); - progress = tagCompound.getInteger(Constants.NBT.ALTAR_PROGRESS); - isResultBlock = tagCompound.getBoolean(Constants.NBT.ALTAR_IS_RESULT_BLOCK); - lockdownDuration = tagCompound.getInteger(Constants.NBT.ALTAR_LOCKDOWN_DURATION); - accelerationUpgrades = tagCompound.getInteger(Constants.NBT.ALTAR_ACCELERATION_UPGRADES); - demonBloodDuration = tagCompound.getInteger(Constants.NBT.ALTAR_DEMON_BLOOD_DURATION); - cooldownAfterCrafting = tagCompound.getInteger(Constants.NBT.ALTAR_COOLDOWN_AFTER_CRAFTING); - chargingRate = tagCompound.getInteger(Constants.NBT.ALTAR_CHARGE_RATE); - chargingFrequency = tagCompound.getInteger(Constants.NBT.ALTAR_CHARGE_FREQUENCY); - totalCharge = tagCompound.getInteger(Constants.NBT.ALTAR_TOTAL_CHARGE); - maxCharge = tagCompound.getInteger(Constants.NBT.ALTAR_MAX_CHARGE); - currentTierDisplayed = Enums.getIfPresent(AltarTier.class, tagCompound.getString(Constants.NBT.ALTAR_CURRENT_TIER_DISPLAYED)).or(AltarTier.ONE); - } - - public void writeToNBT(NBTTagCompound tagCompound) - { - - if (fluid != null) - fluid.writeToNBT(tagCompound); - else - tagCompound.setString(Constants.NBT.EMPTY, ""); - - if (fluidOutput != null) - tagCompound.setInteger(Constants.NBT.OUTPUT_AMOUNT, fluidOutput.amount); - - if (fluidInput != null) - tagCompound.setInteger(Constants.NBT.INPUT_AMOUNT, fluidInput.amount); - - tagCompound.setInteger("internalCounter", internalCounter); - tagCompound.setString(Constants.NBT.ALTAR_TIER, altarTier.name()); - tagCompound.setBoolean(Constants.NBT.ALTAR_ACTIVE, isActive); - tagCompound.setInteger(Constants.NBT.ALTAR_LIQUID_REQ, liquidRequired); - tagCompound.setBoolean(Constants.NBT.ALTAR_FILLABLE, canBeFilled); - tagCompound.setBoolean(Constants.NBT.ALTAR_UPGRADED, isUpgraded); - tagCompound.setInteger(Constants.NBT.ALTAR_CONSUMPTION_RATE, consumptionRate); - tagCompound.setInteger(Constants.NBT.ALTAR_DRAIN_RATE, drainRate); - tagCompound.setFloat(Constants.NBT.ALTAR_CONSUMPTION_MULTIPLIER, consumptionMultiplier); - tagCompound.setFloat(Constants.NBT.ALTAR_EFFICIENCY_MULTIPLIER, efficiencyMultiplier); - tagCompound.setFloat(Constants.NBT.ALTAR_SACRIFICE_MULTIPLIER, sacrificeEfficiencyMultiplier); - tagCompound.setFloat(Constants.NBT.ALTAR_SELF_SACRIFICE_MULTIPLIER, selfSacrificeEfficiencyMultiplier); - tagCompound.setBoolean(Constants.NBT.ALTAR_IS_RESULT_BLOCK, isResultBlock); - tagCompound.setFloat(Constants.NBT.ALTAR_CAPACITY_MULTIPLIER, capacityMultiplier); - tagCompound.setFloat(Constants.NBT.ALTAR_ORB_CAPACITY_MULTIPLIER, orbCapacityMultiplier); - tagCompound.setFloat(Constants.NBT.ALTAR_DISLOCATION_MULTIPLIER, dislocationMultiplier); - tagCompound.setInteger(Constants.NBT.ALTAR_CAPACITY, capacity); - tagCompound.setInteger(Constants.NBT.ALTAR_PROGRESS, progress); - tagCompound.setInteger(Constants.NBT.ALTAR_BUFFER_CAPACITY, bufferCapacity); - tagCompound.setInteger(Constants.NBT.ALTAR_LOCKDOWN_DURATION, lockdownDuration); - tagCompound.setInteger(Constants.NBT.ALTAR_ACCELERATION_UPGRADES, accelerationUpgrades); - tagCompound.setInteger(Constants.NBT.ALTAR_DEMON_BLOOD_DURATION, demonBloodDuration); - tagCompound.setInteger(Constants.NBT.ALTAR_COOLDOWN_AFTER_CRAFTING, cooldownAfterCrafting); - tagCompound.setInteger(Constants.NBT.ALTAR_CHARGE_RATE, chargingRate); - tagCompound.setInteger(Constants.NBT.ALTAR_CHARGE_FREQUENCY, chargingFrequency); - tagCompound.setInteger(Constants.NBT.ALTAR_TOTAL_CHARGE, totalCharge); - tagCompound.setInteger(Constants.NBT.ALTAR_MAX_CHARGE, maxCharge); - tagCompound.setString(Constants.NBT.ALTAR_CURRENT_TIER_DISPLAYED, currentTierDisplayed.name()); - } - - public void startCycle() - { - if (tileAltar.getWorld() != null) - tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); - - checkTier(); - - if ((fluid == null || fluid.amount <= 0) && totalCharge <= 0) - return; - - if (!isActive) - progress = 0; - - ItemStack input = tileAltar.getStackInSlot(0); - - if (!input.isEmpty()) - { - // Do recipes - RecipeBloodAltar recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getBloodAltar(input); - if (recipe != null) - { - if (recipe.getMinimumTier().ordinal() <= altarTier.ordinal()) - { - this.isActive = true; - this.recipe = recipe; - this.liquidRequired = recipe.getSyphon(); - this.consumptionRate = recipe.getConsumeRate(); - this.drainRate = recipe.getDrainRate(); - this.canBeFilled = false; - return; - } - } else if (input.getItem() instanceof IBloodOrb) - { - this.isActive = true; - this.canBeFilled = true; - return; - } - } - - isActive = false; - } - - public void update() - { - World world = tileAltar.getWorld(); - BlockPos pos = tileAltar.getPos(); - - if (world.isRemote) - return; - - // Used instead of the world time for checks that do not happen every tick - internalCounter++; - - if (lockdownDuration > 0) - lockdownDuration--; - - if (internalCounter % 20 == 0) - { - for (EnumFacing facing : EnumFacing.VALUES) - { - BlockPos newPos = pos.offset(facing); - IBlockState block = world.getBlockState(newPos); - block.getBlock().onNeighborChange(world, newPos, pos); - } - } - if (internalCounter % (Math.max(20 - this.accelerationUpgrades, 1)) == 0) - { - int syphonMax = (int) (20 * this.dislocationMultiplier); - int fluidInputted; - int fluidOutputted; - fluidInputted = Math.min(syphonMax, -this.fluid.amount + capacity); - fluidInputted = Math.min(this.fluidInput.amount, fluidInputted); - this.fluid.amount += fluidInputted; - this.fluidInput.amount -= fluidInputted; - fluidOutputted = Math.min(syphonMax, this.bufferCapacity - this.fluidOutput.amount); - fluidOutputted = Math.min(this.fluid.amount, fluidOutputted); - this.fluidOutput.amount += fluidOutputted; - this.fluid.amount -= fluidOutputted; - tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); - } - - if (internalCounter % this.getChargingFrequency() == 0 && !this.isActive) - { - int chargeInputted = Math.min(chargingRate, this.fluid.amount); - chargeInputted = Math.min(chargeInputted, maxCharge - totalCharge); - totalCharge += chargeInputted; - this.fluid.amount -= chargeInputted; - tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); - } - - if (internalCounter % 100 == 0 && (this.isActive || this.cooldownAfterCrafting <= 0)) - startCycle(); - - updateAltar(); - } - - private void updateAltar() - { - if (!isActive) - { - if (cooldownAfterCrafting > 0) - cooldownAfterCrafting--; - return; - } - - if (!canBeFilled && recipe == null) - { - startCycle(); - return; - } - - ItemStack input = tileAltar.getStackInSlot(0); - - if (input.isEmpty()) - return; - - World world = tileAltar.getWorld(); - BlockPos pos = tileAltar.getPos(); - - if (world.isRemote) - return; - - if (!canBeFilled) - { - boolean hasOperated = false; - int stackSize = input.getCount(); - - if (totalCharge > 0) - { - int chargeDrained = Math.min(liquidRequired * stackSize - progress, totalCharge); - - totalCharge -= chargeDrained; - progress += chargeDrained; - - hasOperated = true; - } - if (fluid != null && fluid.amount >= 1) - { - int liquidDrained = Math.min((int) (altarTier.ordinal() >= 2 ? consumptionRate * (1 + consumptionMultiplier) : consumptionRate), fluid.amount); - - if (liquidDrained > (liquidRequired * stackSize - progress)) - liquidDrained = liquidRequired * stackSize - progress; - - fluid.amount = fluid.amount - liquidDrained; - progress += liquidDrained; - - hasOperated = true; - - if (internalCounter % 4 == 0 && world instanceof WorldServer) - { - WorldServer server = (WorldServer) world; - server.spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 1, 0.2, 0, 0.2, 0); - } - - } else if (!hasOperated && progress > 0) - { - progress -= (int) (efficiencyMultiplier * drainRate); - - if (internalCounter % 2 == 0 && world instanceof WorldServer) - { - WorldServer server = (WorldServer) world; - server.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 1, 0.1, 0, 0.1, 0); - } - } - - if (hasOperated) - { - if (progress >= liquidRequired * stackSize) - { - ItemStack result = ItemHandlerHelper.copyStackWithSize(recipe.getOutput(), stackSize); - - BloodMagicCraftedEvent.Altar event = new BloodMagicCraftedEvent.Altar(result, input.copy()); - MinecraftForge.EVENT_BUS.post(event); - tileAltar.setInventorySlotContents(0, event.getOutput()); - progress = 0; - - if (world instanceof WorldServer) - { - WorldServer server = (WorldServer) world; - server.spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 40, 0.3, 0, 0.3, 0); - } - - this.cooldownAfterCrafting = 30; - this.isActive = false; - } - } - } else - { - ItemStack contained = tileAltar.getStackInSlot(0); - - if (contained.isEmpty() || !(contained.getItem() instanceof IBloodOrb) || !(contained.getItem() instanceof IBindable)) - return; - - BloodOrb orb = ((IBloodOrb) contained.getItem()).getOrb(contained); - Binding binding = ((IBindable) contained.getItem()).getBinding(contained); - - if (binding == null || orb == null) - return; - - if (fluid != null && fluid.amount >= 1) - { - int liquidDrained = Math.min((int) (altarTier.ordinal() >= 2 ? orb.getFillRate() * (1 + consumptionMultiplier) : orb.getFillRate()), fluid.amount); - int drain = NetworkHelper.getSoulNetwork(binding).add(SoulTicket.block(world, pos, liquidDrained), (int) (orb.getCapacity() * this.orbCapacityMultiplier)); - fluid.amount = fluid.amount - drain; - - if (drain > 0 && internalCounter % 4 == 0 && world instanceof WorldServer) - { - WorldServer server = (WorldServer) world; - server.spawnParticle(EnumParticleTypes.SPELL_WITCH, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 1, 0, 0, 0, 0.001); - } - } - } - - tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); - } - - public void checkTier() - { - AltarTier tier = AltarUtil.getTier(tileAltar.getWorld(), tileAltar.getPos()); - this.altarTier = tier; - - upgrade = AltarUtil.getUpgrades(tileAltar.getWorld(), tileAltar.getPos(), tier); - - if (tier.equals(currentTierDisplayed)) - currentTierDisplayed = AltarTier.ONE; - - if (tier.equals(AltarTier.ONE)) - { - upgrade = null; - isUpgraded = false; - this.consumptionMultiplier = 0; - this.efficiencyMultiplier = 1; - this.sacrificeEfficiencyMultiplier = 0; - this.selfSacrificeEfficiencyMultiplier = 0; - this.capacityMultiplier = 1; - this.orbCapacityMultiplier = 1; - this.dislocationMultiplier = 1; - this.accelerationUpgrades = 0; - this.chargingFrequency = 20; - this.chargingRate = 0; - this.maxCharge = 0; - this.totalCharge = 0; - return; - } else if (!tier.equals(AltarTier.ONE)) - { - this.isUpgraded = true; - this.accelerationUpgrades = upgrade.getLevel(BloodRuneType.ACCELERATION); - this.consumptionMultiplier = (float) (0.20 * upgrade.getLevel(BloodRuneType.SPEED)); - this.efficiencyMultiplier = (float) Math.pow(0.85, upgrade.getLevel(BloodRuneType.EFFICIENCY)); - this.sacrificeEfficiencyMultiplier = (float) (0.10 * upgrade.getLevel(BloodRuneType.SACRIFICE)); - this.selfSacrificeEfficiencyMultiplier = (float) (0.10 * upgrade.getLevel(BloodRuneType.SELF_SACRIFICE)); - this.capacityMultiplier = (float) ((1 * Math.pow(1.10, upgrade.getLevel(BloodRuneType.AUGMENTED_CAPACITY))) + 0.20 * upgrade.getLevel(BloodRuneType.CAPACITY)); - this.dislocationMultiplier = (float) (Math.pow(1.2, upgrade.getLevel(BloodRuneType.DISPLACEMENT))); - this.orbCapacityMultiplier = (float) (1 + 0.02 * upgrade.getLevel(BloodRuneType.ORB)); - this.chargingFrequency = Math.max(20 - accelerationUpgrades, 1); - this.chargingRate = (int) (10 * upgrade.getLevel(BloodRuneType.CHARGING) * (1 + consumptionMultiplier / 2)); - this.maxCharge = (int) (Fluid.BUCKET_VOLUME * Math.max(0.5 * capacityMultiplier, 1) * upgrade.getLevel(BloodRuneType.CHARGING)); - } - - this.capacity = (int) (Fluid.BUCKET_VOLUME * 10 * capacityMultiplier); - this.bufferCapacity = (int) (Fluid.BUCKET_VOLUME * 1 * capacityMultiplier); - - if (this.fluid.amount > this.capacity) - this.fluid.amount = this.capacity; - if (this.fluidOutput.amount > this.bufferCapacity) - this.fluidOutput.amount = this.bufferCapacity; - if (this.fluidInput.amount > this.bufferCapacity) - this.fluidInput.amount = this.bufferCapacity; - if (this.totalCharge > this.maxCharge) - this.totalCharge = this.maxCharge; - - tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); - } - - public int fillMainTank(int amount) - { - int filledAmount = Math.min(capacity - fluid.amount, amount); - fluid.amount += filledAmount; - - return filledAmount; - } - - public void sacrificialDaggerCall(int amount, boolean isSacrifice) - { - if (this.lockdownDuration > 0) - { - int amt = (int) Math.min(bufferCapacity - fluidInput.amount, (isSacrifice ? 1 + sacrificeEfficiencyMultiplier : 1 + selfSacrificeEfficiencyMultiplier) * amount); - fluidInput.amount += amt; - } else - { - fluid.amount += Math.min(capacity - fluid.amount, (isSacrifice ? 1 + sacrificeEfficiencyMultiplier : 1 + selfSacrificeEfficiencyMultiplier) * amount); - } - } - - public void setMainFluid(FluidStack fluid) - { - this.fluid = fluid; - } - - public void setOutputFluid(FluidStack fluid) - { - this.fluidOutput = fluid; - } - - public void setInputFluid(FluidStack fluid) - { - this.fluidInput = fluid; - } - - public AltarUpgrade getUpgrade() - { - return upgrade; - } - - public void setUpgrade(AltarUpgrade upgrade) - { - this.upgrade = upgrade; - } - - public int getCapacity() - { - return capacity; - } - - public FluidStack getFluid() - { - return fluid; - } - - public int getFluidAmount() - { - return fluid.amount; - } - - public int getCurrentBlood() - { - return getFluidAmount(); - } - - public AltarTier getTier() - { - return altarTier; - } - - public void setTier(AltarTier tier) - { - this.altarTier = tier; - } - - public int getProgress() - { - return progress; - } - - public float getSacrificeMultiplier() - { - return sacrificeEfficiencyMultiplier; - } - - public float getSelfSacrificeMultiplier() - { - return selfSacrificeEfficiencyMultiplier; - } - - public float getOrbMultiplier() - { - return orbCapacityMultiplier; - } - - public float getDislocationMultiplier() - { - return dislocationMultiplier; - } - - public float getConsumptionMultiplier() - { - return consumptionMultiplier; - } - - public float getConsumptionRate() - { - return consumptionRate; - } - - public int getLiquidRequired() - { - return liquidRequired; - } - - public int getBufferCapacity() - { - return bufferCapacity; - } - - public boolean setCurrentTierDisplayed(AltarTier altarTier) - { - if (currentTierDisplayed == altarTier) - return false; - else - currentTierDisplayed = altarTier; - return true; - } - - public void addToDemonBloodDuration(int dur) - { - this.demonBloodDuration += dur; - } - - public boolean hasDemonBlood() - { - return this.demonBloodDuration > 0; - } - - public void decrementDemonBlood() - { - this.demonBloodDuration = Math.max(0, this.demonBloodDuration - 1); - } - - public void setActive() - { - if (tileAltar.getStackInSlot(0).isEmpty()) - { - isActive = false; - } - } - - public boolean isActive() - { - return isActive; - } - - public void requestPauseAfterCrafting(int amount) - { - if (this.isActive) - { - this.cooldownAfterCrafting = amount; - } - } - - public int getChargingRate() - { - return chargingRate; - } - - public int getTotalCharge() - { - return totalCharge; - } - - public int getChargingFrequency() - { - return chargingFrequency == 0 ? 1 : chargingFrequency; - } - - @Override - public int fill(FluidStack resource, boolean doFill) - { - if (resource == null || resource.getFluid() != BlockLifeEssence.getLifeEssence()) - { - return 0; - } - - if (!doFill) - { - if (fluidInput == null) - { - return Math.min(bufferCapacity, resource.amount); - } - - if (!fluidInput.isFluidEqual(resource)) - { - return 0; - } - - return Math.min(bufferCapacity - fluidInput.amount, resource.amount); - } - - if (fluidInput == null) - { - fluidInput = new FluidStack(resource, Math.min(bufferCapacity, resource.amount)); - - return fluidInput.amount; - } - - if (!fluidInput.isFluidEqual(resource)) - { - return 0; - } - int filled = bufferCapacity - fluidInput.amount; - - if (resource.amount < filled) - { - fluidInput.amount += resource.amount; - filled = resource.amount; - } else - { - fluidInput.amount = bufferCapacity; - } - - return filled; - } - - @Override - public FluidStack drain(FluidStack resource, boolean doDrain) - { - if (resource == null || !resource.isFluidEqual(fluidOutput)) - { - return null; - } - return drain(resource.amount, doDrain); - } - - @Override - public FluidStack drain(int maxDrain, boolean doDrain) - { - if (fluidOutput == null) - { - return null; - } - - int drained = maxDrain; - if (fluidOutput.amount < drained) - { - drained = fluidOutput.amount; - } - - FluidStack stack = new FluidStack(fluidOutput, drained); - if (doDrain) - { - fluidOutput.amount -= drained; - } - return stack; - } - - @Override - public IFluidTankProperties[] getTankProperties() - { - return new IFluidTankProperties[] { new FluidTankPropertiesWrapper(new FluidTank(fluid, capacity)) }; - } - - public AltarTier getCurrentTierDisplayed() - { - return currentTierDisplayed; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/altar/ComponentType.java b/src/main/java/WayofTime/bloodmagic/altar/ComponentType.java deleted file mode 100644 index 1eec1f0d..00000000 --- a/src/main/java/WayofTime/bloodmagic/altar/ComponentType.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.bloodmagic.altar; - -import java.util.Locale; - -/** - * List of different components used to construct different tiers of altars. - */ -public enum ComponentType { - GLOWSTONE, - BLOODSTONE, - BEACON, - BLOODRUNE, - CRYSTAL, - NOTAIR; - - public static final ComponentType[] VALUES = values(); - private static final String BASE = "chat.bloodmagic.altar.comp."; - private String key; - - ComponentType() { - this.key = BASE + name().toLowerCase(Locale.ENGLISH); - } - - public String getKey() { - return key; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/altar/IAltarComponent.java b/src/main/java/WayofTime/bloodmagic/altar/IAltarComponent.java deleted file mode 100644 index 6a96dc66..00000000 --- a/src/main/java/WayofTime/bloodmagic/altar/IAltarComponent.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.bloodmagic.altar; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public interface IAltarComponent { - @Nullable - ComponentType getType(World world, IBlockState state, BlockPos pos); -} diff --git a/src/main/java/WayofTime/bloodmagic/altar/IAltarManipulator.java b/src/main/java/WayofTime/bloodmagic/altar/IAltarManipulator.java deleted file mode 100644 index 5ce9f00c..00000000 --- a/src/main/java/WayofTime/bloodmagic/altar/IAltarManipulator.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.bloodmagic.altar; - -/** - * Any item that implements this interface will not be pulled into the Altar on - * right click. - */ -public interface IAltarManipulator { -} diff --git a/src/main/java/WayofTime/bloodmagic/altar/IBloodAltar.java b/src/main/java/WayofTime/bloodmagic/altar/IBloodAltar.java deleted file mode 100644 index 0270ac3e..00000000 --- a/src/main/java/WayofTime/bloodmagic/altar/IBloodAltar.java +++ /dev/null @@ -1,54 +0,0 @@ -package WayofTime.bloodmagic.altar; - -public interface IBloodAltar { - int getCapacity(); - - int getCurrentBlood(); - - AltarTier getTier(); - - int getProgress(); - - float getSacrificeMultiplier(); - - float getSelfSacrificeMultiplier(); - - float getOrbMultiplier(); - - float getDislocationMultiplier(); - - float getConsumptionMultiplier(); - - float getConsumptionRate(); - - int getChargingRate(); - - int getChargingFrequency(); - - int getTotalCharge(); - - int getLiquidRequired(); - - int getBufferCapacity(); - - void sacrificialDaggerCall(int amount, boolean isSacrifice); - - void startCycle(); - - void checkTier(); - - boolean isActive(); - - void setActive(); - - int fillMainTank(int amount); - - /** - * Will set the altar to initiate a cooldown cycle after it crafts before - * starting to craft again, giving the user time to interact with the altar. - * This can only be set while the altar is not active. - * - * @param cooldown - How long the cooldown should last - */ - void requestPauseAfterCrafting(int cooldown); -} diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicCorePlugin.java b/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicCorePlugin.java deleted file mode 100644 index 3a0d0164..00000000 --- a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicCorePlugin.java +++ /dev/null @@ -1,156 +0,0 @@ -package WayofTime.bloodmagic.api.impl; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.api.BloodMagicPlugin; -import WayofTime.bloodmagic.api.IBloodMagicAPI; -import WayofTime.bloodmagic.api.IBloodMagicPlugin; -import WayofTime.bloodmagic.altar.ComponentType; -import WayofTime.bloodmagic.api.IBloodMagicRecipeRegistrar; -import WayofTime.bloodmagic.block.BlockBloodRune; -import WayofTime.bloodmagic.block.BlockDecorative; -import WayofTime.bloodmagic.block.enums.BloodRuneType; -import WayofTime.bloodmagic.block.enums.EnumDecorative; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagicRecipes; -import WayofTime.bloodmagic.incense.EnumTranquilityType; -import WayofTime.bloodmagic.incense.TranquilityStack; -import WayofTime.bloodmagic.util.StateUtil; -import net.minecraft.block.Block; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -@BloodMagicPlugin -public class BloodMagicCorePlugin implements IBloodMagicPlugin -{ - - @Override - public void register(IBloodMagicAPI apiInterface) - { - BloodMagicAPI api = (BloodMagicAPI) apiInterface; - // Add forced blacklistings - api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE); - api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE); - api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE); - api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE); - api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE); - api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE); - api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE); - api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE); - api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.DEMON_CRYSTAL); - api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.DEMON_CRYSTAL); - api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.INVERSION_PILLAR); - api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.INVERSION_PILLAR); - api.getBlacklist().addWellOfSuffering(new ResourceLocation("armor_stand")); - api.getBlacklist().addWellOfSuffering(new ResourceLocation(BloodMagic.MODID, "sentient_specter")); - - api.getValueManager().setSacrificialValue(new ResourceLocation("armor_stand"), 0); - api.getValueManager().setSacrificialValue(new ResourceLocation(BloodMagic.MODID, "sentient_specter"), 0); - - api.getValueManager().setTranquility(Blocks.LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D)); - api.getValueManager().setTranquility(Blocks.FLOWING_LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D)); - api.getValueManager().setTranquility(Blocks.WATER, new TranquilityStack(EnumTranquilityType.WATER, 1.0D)); - api.getValueManager().setTranquility(Blocks.FLOWING_WATER, new TranquilityStack(EnumTranquilityType.WATER, 1.0D)); - api.getValueManager().setTranquility(RegistrarBloodMagicBlocks.LIFE_ESSENCE, new TranquilityStack(EnumTranquilityType.WATER, 1.5D)); - api.getValueManager().setTranquility(Blocks.NETHERRACK, new TranquilityStack(EnumTranquilityType.FIRE, 0.5D)); - api.getValueManager().setTranquility(Blocks.DIRT, new TranquilityStack(EnumTranquilityType.EARTHEN, 0.25D)); - api.getValueManager().setTranquility(Blocks.FARMLAND, new TranquilityStack(EnumTranquilityType.EARTHEN, 1.0D)); - api.getValueManager().setTranquility(Blocks.POTATOES, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); - api.getValueManager().setTranquility(Blocks.CARROTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); - api.getValueManager().setTranquility(Blocks.WHEAT, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); - api.getValueManager().setTranquility(Blocks.NETHER_WART, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); - api.getValueManager().setTranquility(Blocks.BEETROOTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); - - handleConfigValues(api); - - // Add standard blocks for altar components - api.registerAltarComponent(Blocks.GLOWSTONE.getDefaultState(), ComponentType.GLOWSTONE.name()); - api.registerAltarComponent(Blocks.SEA_LANTERN.getDefaultState(), ComponentType.GLOWSTONE.name()); - api.registerAltarComponent(Blocks.BEACON.getDefaultState(), ComponentType.BEACON.name()); - - BlockDecorative decorative = (BlockDecorative) RegistrarBloodMagicBlocks.DECORATIVE_BRICK; - api.registerAltarComponent(decorative.getDefaultState().withProperty(decorative.getProperty(), EnumDecorative.BLOODSTONE_BRICK), ComponentType.BLOODSTONE.name()); - api.registerAltarComponent(decorative.getDefaultState().withProperty(decorative.getProperty(), EnumDecorative.BLOODSTONE_TILE), ComponentType.BLOODSTONE.name()); - api.registerAltarComponent(decorative.getDefaultState().withProperty(decorative.getProperty(), EnumDecorative.CRYSTAL_BRICK), ComponentType.CRYSTAL.name()); - api.registerAltarComponent(decorative.getDefaultState().withProperty(decorative.getProperty(), EnumDecorative.CRYSTAL_TILE), ComponentType.CRYSTAL.name()); - - BlockBloodRune bloodRune = (BlockBloodRune) RegistrarBloodMagicBlocks.BLOOD_RUNE; - for (BloodRuneType runeType : BloodRuneType.values()) - api.registerAltarComponent(bloodRune.getDefaultState().withProperty(bloodRune.getProperty(), runeType), ComponentType.BLOODRUNE.name()); - } - - @Override - public void registerRecipes(IBloodMagicRecipeRegistrar recipeRegistrar) - { - RegistrarBloodMagicRecipes.registerAltarRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); - RegistrarBloodMagicRecipes.registerAlchemyTableRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); - RegistrarBloodMagicRecipes.registerTartaricForgeRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); - RegistrarBloodMagicRecipes.registerAlchemyArrayRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); - RegistrarBloodMagicRecipes.registerSacrificeCraftRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); - } - - private static void handleConfigValues(BloodMagicAPI api) - { - for (String value : ConfigHandler.values.sacrificialValues) - { - String[] split = value.split(";"); - if (split.length != 2) // Not valid format - continue; - - api.getValueManager().setSacrificialValue(new ResourceLocation(split[0]), Integer.parseInt(split[1])); - } - - for (String value : ConfigHandler.blacklist.teleposer) - { - EntityEntry entityEntry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(value)); - if (entityEntry == null) - { // It's not an entity (or at least not a valid one), so let's try a block. - String[] blockData = value.split("\\["); - Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockData[0])); - if (block == Blocks.AIR || block == null) // Not a valid block either - continue; - - if (blockData.length > 1) - { // We have properties listed, so let's build a state. - api.getBlacklist().addTeleposer(StateUtil.parseState(value)); - continue; - } - - api.getBlacklist().addTeleposer(block); - continue; - } - - api.getBlacklist().addTeleposer(entityEntry.getRegistryName()); - } - - for (String value : ConfigHandler.blacklist.transposer) - { - String[] blockData = value.split("\\["); - Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockData[0])); - if (block == Blocks.AIR || block == null) // Not a valid block - continue; - - if (blockData.length > 1) - { // We have properties listed, so let's build a state. - api.getBlacklist().addTeleposer(StateUtil.parseState(value)); - continue; - } - - api.getBlacklist().addTeleposer(block); - } - - for (String value : ConfigHandler.blacklist.wellOfSuffering) - { - EntityEntry entityEntry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(value)); - if (entityEntry == null) // Not a valid entity - continue; - - api.getBlacklist().addWellOfSuffering(entityEntry.getRegistryName()); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicValueManager.java b/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicValueManager.java deleted file mode 100644 index 5c894574..00000000 --- a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicValueManager.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.bloodmagic.api.impl; - -import WayofTime.bloodmagic.api.IBloodMagicValueManager; -import WayofTime.bloodmagic.incense.EnumTranquilityType; -import WayofTime.bloodmagic.incense.TranquilityStack; -import WayofTime.bloodmagic.util.BMLog; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.ResourceLocation; - -import javax.annotation.Nonnull; -import java.util.Map; - -public class BloodMagicValueManager implements IBloodMagicValueManager { - - private final Map sacrificial; - private final Map tranquility; - - public BloodMagicValueManager() { - this.sacrificial = Maps.newHashMap(); - this.tranquility = Maps.newHashMap(); - } - - @Override - public void setSacrificialValue(@Nonnull ResourceLocation entityId, int value) { - BMLog.API_VERBOSE.info("Value Manager: Set sacrificial value of {} to {}.", entityId, value); - sacrificial.put(entityId, value); - } - - @Override - public void setTranquility(@Nonnull IBlockState state, @Nonnull String tranquilityType, double value) { - EnumTranquilityType tranquility = null; - for (EnumTranquilityType type : EnumTranquilityType.values()) { - if (type.name().equalsIgnoreCase(tranquilityType)) { - tranquility = type; - break; - } - } - - if (tranquility != null) { - BMLog.API_VERBOSE.info("Value Manager: Set tranquility value of {} to {} @ {}", state, tranquilityType, value); - this.tranquility.put(state, new TranquilityStack(tranquility, value)); - } else BMLog.API.warn("Invalid tranquility type: {}.", tranquilityType); - } - - public void setTranquility(Block block, TranquilityStack tranquilityStack) { - for (IBlockState state : block.getBlockState().getValidStates()) { - BMLog.API_VERBOSE.info("Value Manager: Set tranquility value of {} to {} @ {}", state, tranquilityStack.type, tranquilityStack.value); - tranquility.put(state, tranquilityStack); - } - } - - public Map getSacrificial() { - return ImmutableMap.copyOf(sacrificial); - } - - public Map getTranquility() { - return ImmutableMap.copyOf(tranquility); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java deleted file mode 100644 index 1e02ef13..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java +++ /dev/null @@ -1,143 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.List; -import java.util.Random; - -public class BlockAlchemyArray extends Block { - protected static final AxisAlignedBB ARRAY_AABB = new AxisAlignedBB(0, 0, 0, 1, 0.1, 1); - - public BlockAlchemyArray() { - super(Material.CLOTH); - - setUnlocalizedName(BloodMagic.MODID + ".alchemyArray"); - setHardness(0.1f); - } - - @Override - public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean p_185477_7_) { - // No-op - } - - @Override - public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileAlchemyArray) { - ((TileAlchemyArray) tile).onEntityCollidedWithBlock(state, entity); - } - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return ARRAY_AABB; - } - - @Override - @SideOnly(Side.CLIENT) - public BlockRenderLayer getBlockLayer() { - return BlockRenderLayer.CUTOUT; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.INVISIBLE; - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - //TODO: Right click should rotate it - TileAlchemyArray array = (TileAlchemyArray) world.getTileEntity(pos); - - if (array == null || player.isSneaking()) - return false; - - ItemStack playerItem = player.getHeldItem(hand); - - if (!playerItem.isEmpty()) { - if (array.getStackInSlot(0).isEmpty()) { - Utils.insertItemToTile(array, player, 0); - } else if (!array.getStackInSlot(0).isEmpty()) { - Utils.insertItemToTile(array, player, 1); - array.attemptCraft(); - } else { - return true; - } - } - - world.notifyBlockUpdate(pos, state, state, 3); - return true; - } - - @Override - public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { - return new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES); - } - - @Override - public int quantityDropped(Random random) { - return 0; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) { - TileAlchemyArray alchemyArray = (TileAlchemyArray) world.getTileEntity(blockPos); - if (alchemyArray != null) - alchemyArray.dropItems(); - - super.breakBlock(world, blockPos, blockState); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileAlchemyArray(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyTable.java deleted file mode 100644 index 8d9c9b8f..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyTable.java +++ /dev/null @@ -1,158 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.item.block.ItemBlockAlchemyTable; -import WayofTime.bloodmagic.tile.TileAlchemyTable; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyBool; -import net.minecraft.block.properties.PropertyEnum; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class BlockAlchemyTable extends Block implements IBMBlock { - public static final PropertyBool INVISIBLE = PropertyBool.create("invisible"); - public static final PropertyEnum DIRECTION = PropertyEnum.create("direction", EnumFacing.class); - - public BlockAlchemyTable() { - super(Material.ROCK); -// this.setDefaultState(this.blockState.getBaseState().withProperty(DIRECTION, EnumFacing.DOWN).withProperty(INVISIBLE, false)); - - setUnlocalizedName(BloodMagic.MODID + ".alchemyTable"); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 0); - -// setBlockBounds(0.3F, 0F, 0.3F, 0.72F, 1F, 0.72F); - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) { - return layer == BlockRenderLayer.CUTOUT_MIPPED || layer == BlockRenderLayer.TRANSLUCENT; - } - - @Override - public IBlockState getStateFromMeta(int meta) { - return this.getDefaultState(); - } - - /** - * Convert the BlockState into the correct metadata value - */ - @Override - public int getMetaFromState(IBlockState state) { - return 0; - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileAlchemyTable) { - return state.withProperty(INVISIBLE, ((TileAlchemyTable) tile).isInvisible()).withProperty(DIRECTION, ((TileAlchemyTable) tile).getDirection()); - } - - return state.withProperty(INVISIBLE, false); - } - - @Override - protected BlockStateContainer createBlockState() { - return new BlockStateContainer(this, DIRECTION, INVISIBLE); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - BlockPos position = pos; - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileAlchemyTable) { - if (((TileAlchemyTable) tile).isSlave()) { - position = ((TileAlchemyTable) tile).getConnectedPos(); - tile = world.getTileEntity(position); - if (!(tile instanceof TileAlchemyTable)) { - return false; - } - } - } - - player.openGui(BloodMagic.instance, Constants.Gui.ALCHEMY_TABLE_GUI, world, position.getX(), position.getY(), position.getZ()); - - return true; - } - - @Override - public void breakBlock(World world, BlockPos pos, IBlockState blockState) { - TileAlchemyTable tile = (TileAlchemyTable) world.getTileEntity(pos); - if (tile != null && !tile.isSlave()) { - tile.dropItems(); - } - - super.breakBlock(world, pos, blockState); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileAlchemyTable(); - } - - @Override - public void neighborChanged(IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos) { - TileAlchemyTable tile = (TileAlchemyTable) world.getTileEntity(pos); - if (tile != null) { - BlockPos connectedPos = tile.getConnectedPos(); - TileEntity connectedTile = world.getTileEntity(connectedPos); - if (!(connectedTile instanceof TileAlchemyTable && ((TileAlchemyTable) connectedTile).getConnectedPos().equals(pos))) { - this.breakBlock(world, pos, state); - world.setBlockToAir(pos); - } - } - } - - @Override - public ItemBlock getItem() { - return new ItemBlockAlchemyTable(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java b/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java deleted file mode 100644 index 3f979f47..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAltar.java +++ /dev/null @@ -1,173 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.altar.*; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.iface.IAltarReader; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.iface.IDocumentedBlock; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.tile.TileAltar; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import org.apache.commons.lang3.tuple.Pair; - -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.List; - -public class BlockAltar extends Block implements IVariantProvider, IDocumentedBlock, IBMBlock { - public BlockAltar() { - super(Material.ROCK); - - setUnlocalizedName(BloodMagic.MODID + ".altar"); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 1); - } - - @Override - public boolean hasComparatorInputOverride(IBlockState state) { - return true; - } - - @Override - public int getComparatorInputOverride(IBlockState state, World world, BlockPos pos) { - if (world.isRemote) - return 0; - - TileEntity tile = world.getTileEntity(pos); - - if (tile instanceof TileAltar) { - TileAltar altar = (TileAltar) tile; - ItemStack orbStack = altar.getStackInSlot(0); - - if (world.getBlockState(pos.down()).getBlock() instanceof BlockDecorative) { - if (orbStack.getItem() instanceof IBloodOrb && orbStack.getItem() instanceof IBindable) { - BloodOrb orb = ((IBloodOrb) orbStack.getItem()).getOrb(orbStack); - Binding binding = ((IBindable) orbStack.getItem()).getBinding(orbStack); - if (orb != null && binding != null) { - SoulNetwork soulNetwork = NetworkHelper.getSoulNetwork(binding); - - int maxEssence = orb.getCapacity(); - int currentEssence = soulNetwork.getCurrentEssence(); - int level = currentEssence * 15 / maxEssence; - return Math.min(15, level) % 16; - } - } - } else { - int maxEssence = altar.getCapacity(); - int currentEssence = altar.getCurrentBlood(); - int level = currentEssence * 15 / maxEssence; - return Math.min(15, level) % 16; - } - } - - return 0; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return true; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - TileAltar altar = (TileAltar) world.getTileEntity(pos); - - if (altar == null || player.isSneaking()) - return false; - - ItemStack playerItem = player.getHeldItem(hand); - - if (playerItem.getItem() instanceof IAltarReader || playerItem.getItem() instanceof IAltarManipulator) { - playerItem.getItem().onItemRightClick(world, player, hand); - return true; - } - - if (Utils.insertItemToTile(altar, player)) - altar.startCycle(); - else - altar.setActive(); - - world.notifyBlockUpdate(pos, state, state, 3); - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TileAltar) - ((TileAltar) tile).dropItems(); - - super.breakBlock(world, blockPos, blockState); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileAltar(); - } - - // IDocumentedBlock - - @Override - public List getDocumentation(EntityPlayer player, World world, BlockPos pos, IBlockState state) { - List docs = new ArrayList<>(); - IBloodAltar altar = ((IBloodAltar) world.getTileEntity(pos)); - Pair missingBlock = AltarUtil.getFirstMissingComponent(world, pos, altar.getTier().toInt()); - if (missingBlock != null) - docs.add(new TextComponentTranslation("chat.bloodmagic.altar.nextTier", new TextComponentTranslation(missingBlock.getRight().getKey()), Utils.prettifyBlockPosString(missingBlock.getLeft()))); - - return docs; - } - - @Override - public ItemBlock getItem() { - return new ItemBlock(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java deleted file mode 100644 index 7076f77f..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodLight.java +++ /dev/null @@ -1,112 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.particle.ParticleManager; -import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumHand; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.Random; - -public class BlockBloodLight extends Block { - protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.4, 0.4, 0.4, 0.6, 0.6, 0.6); - - public BlockBloodLight() { - super(Material.CLOTH); - - setUnlocalizedName(BloodMagic.MODID + ".bloodLight"); - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return AABB; - } - - @Nullable - @Override - public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) { - return NULL_AABB; - } - - @Override - public boolean isReplaceable(IBlockAccess world, BlockPos pos) { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public BlockRenderLayer getBlockLayer() { - return BlockRenderLayer.CUTOUT; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public int getLightValue(IBlockState state) { - return 15; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean addDestroyEffects(World world, BlockPos pos, ParticleManager particleManager) { - if (world.getBlockState(pos).getBlock() == this) { - Random random = new Random(); - particleManager.spawnEffectParticle(EnumParticleTypes.REDSTONE.getParticleID(), pos.getX() + 0.5D + random.nextGaussian() / 8, pos.getY() + 0.5D, pos.getZ() + 0.5D + random.nextGaussian() / 8, 0, 0, 0); - } - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand) { - EntityPlayerSP player = Minecraft.getMinecraft().player; - - if (rand.nextInt(3) != 0) { - world.spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + 0.5D + rand.nextGaussian() / 8, pos.getY() + 0.5D, pos.getZ() + 0.5D + rand.nextGaussian() / 8, 0, 0, 0, 0); - ItemStack heldItem = player.getHeldItem(EnumHand.MAIN_HAND); - - if (heldItem.isEmpty() || heldItem.getItem() != RegistrarBloodMagicItems.SIGIL_BLOOD_LIGHT) - return; - - for (int i = 0; i < 8; i++) - world.spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + 0.5D + rand.nextGaussian() / 8, pos.getY() + 0.5D, pos.getZ() + 0.5D + rand.nextGaussian() / 8, 0, 0, 0, 0); - } - } - - @Override - public int quantityDropped(Random par1Random) { - return 0; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java deleted file mode 100644 index 471bc99d..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodRune.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.block.enums.BloodRuneType; -import WayofTime.bloodmagic.iface.IBloodRune; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import javax.annotation.Nullable; -import java.util.List; - -public class BlockBloodRune extends BlockEnum implements IBloodRune { - - public BlockBloodRune() { - super(Material.ROCK, BloodRuneType.class); - - setUnlocalizedName(BloodMagic.MODID + ".rune."); - setCreativeTab(BloodMagic.TAB_BM); - setSoundType(SoundType.STONE); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 2); - } - - @Nullable - @Override - public BloodRuneType getBloodRune(IBlockAccess world, BlockPos pos, IBlockState state) { - return state.getValue(getProperty()); - } - - @Override - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag tooltipFlag) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.decoration.safe")); - super.addInformation(stack, world, tooltip, tooltipFlag); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java deleted file mode 100644 index 47e03d74..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java +++ /dev/null @@ -1,195 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockInteger; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.block.ItemBlockBloodTank; -import WayofTime.bloodmagic.tile.TileBloodTank; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class BlockBloodTank extends BlockInteger implements IVariantProvider, IBMBlock { - public static final AxisAlignedBB BOX = new AxisAlignedBB(0.25, 0, 0.25, 0.75, 0.8, 0.75); - - public BlockBloodTank() { - super(Material.IRON, TileBloodTank.CAPACITIES.length - 1, "tier"); - - setUnlocalizedName(BloodMagic.MODID + ".bloodTank"); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.GLASS); - setHarvestLevel("pickaxe", 1); - setCreativeTab(BloodMagic.TAB_BM); - setLightOpacity(0); - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return BOX; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - @SideOnly(Side.CLIENT) - public BlockRenderLayer getBlockLayer() { - return BlockRenderLayer.CUTOUT_MIPPED; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity tile, ItemStack stack) { - super.harvestBlock(world, player, pos, state, tile, stack); - world.setBlockToAir(pos); - } - - @Override - public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) { - return willHarvest || super.removedByPlayer(state, world, pos, player, willHarvest); - } - - @Override - public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - boolean success = FluidUtil.interactWithFluidHandler(player, hand, world, blockPos, side); - if (success) { - world.checkLight(blockPos); - world.updateComparatorOutputLevel(blockPos, this); - world.markAndNotifyBlock(blockPos, world.getChunkFromBlockCoords(blockPos), state, state, 3); - return true; - } - - return true; - } - - @Override - public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) { - if (!player.capabilities.isCreativeMode) - this.dropBlockAsItem(worldIn, pos, state, 0); - super.onBlockHarvested(worldIn, pos, state, player); - } - - @Override - public void getDrops(NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState blockState, int fortune) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileBloodTank) { - TileBloodTank bloodTank = (TileBloodTank) tile; - ItemStack drop = new ItemStack(this, 1, bloodTank.getBlockMetadata()); - NBTTagCompound fluidTag = new NBTTagCompound(); - - if (bloodTank.getTank().getFluid() != null) { - bloodTank.getTank().getFluid().writeToNBT(fluidTag); - NBTTagCompound dropTag = new NBTTagCompound(); - dropTag.setTag("Fluid", fluidTag); - drop.setTagCompound(dropTag); - } - - drops.add(drop); - } - } - - @Override - public void onBlockPlacedBy(World world, BlockPos pos, IBlockState blockState, EntityLivingBase placer, ItemStack stack) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileBloodTank) { - TileBloodTank bloodTank = (TileBloodTank) tile; - NBTTagCompound tag = stack.getTagCompound(); - if (stack.hasTagCompound() && stack.getTagCompound().hasKey("Fluid")) { - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(tag.getCompoundTag("Fluid")); - bloodTank.getTank().setFluid(fluidStack); - } - } - - world.checkLight(pos); - world.updateComparatorOutputLevel(pos, this); - world.markAndNotifyBlock(pos, world.getChunkFromBlockCoords(pos), blockState, blockState, 3); - } - - @Override - public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileBloodTank) { - FluidStack fluidStack = ((TileBloodTank) tile).getTank().getFluid(); - return fluidStack == null || fluidStack.amount <= 0 ? 0 : fluidStack.getFluid().getLuminosity(fluidStack); - } - - return super.getLightValue(state, world, pos); - } - - @Override - public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { - return new ItemStack(this, 1, getMetaFromState(state)); - } - - @Override - public boolean hasComparatorInputOverride(IBlockState state) { - return true; - } - - @Override - public int getComparatorInputOverride(IBlockState state, World world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileBloodTank) - return ((TileBloodTank) tile).getComparatorOutput(); - return 0; - } - - @Override - public TileEntity createTileEntity(World worldIn, IBlockState blockState) { - return new TileBloodTank(getMetaFromState(blockState)); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Override - public ItemBlock getItem() { - return new ItemBlockBloodTank(this); - } - - // IVariantProvider - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - for (int i = 0; i < TileBloodTank.CAPACITIES.length; i++) - variants.put(i, "inventory"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDecorative.java b/src/main/java/WayofTime/bloodmagic/block/BlockDecorative.java deleted file mode 100644 index 281b4fb5..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDecorative.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.block.enums.EnumDecorative; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; - -public class BlockDecorative extends BlockEnum { - public BlockDecorative() { - super(Material.ROCK, EnumDecorative.class); - - setUnlocalizedName(BloodMagic.MODID + "."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonBase.java deleted file mode 100644 index 782758fa..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonBase.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.client.IVariantProvider; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.IStringSerializable; - -public class BlockDemonBase & IStringSerializable> extends BlockEnum implements IVariantProvider { - public BlockDemonBase(String baseName, Class enumClass) { - super(Material.ROCK, enumClass); - - setUnlocalizedName(BloodMagic.MODID + "." + baseName + "."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java deleted file mode 100644 index 5627ce9d..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrucible.java +++ /dev/null @@ -1,102 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.soul.IDemonWillGem; -import WayofTime.bloodmagic.soul.IDiscreteDemonWill; -import WayofTime.bloodmagic.tile.TileDemonCrucible; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class BlockDemonCrucible extends Block implements IVariantProvider, IBMBlock { - public BlockDemonCrucible() { - super(Material.ROCK); - - setUnlocalizedName(BloodMagic.MODID + ".demonCrucible"); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 0); - -// setBlockBounds(0.3F, 0F, 0.3F, 0.72F, 1F, 0.72F); - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack heldItem = player.getHeldItem(hand); - TileDemonCrucible crucible = (TileDemonCrucible) world.getTileEntity(pos); - - if (crucible == null || player.isSneaking()) - return false; - - if (!heldItem.isEmpty()) { - if (!(heldItem.getItem() instanceof IDiscreteDemonWill) && !(heldItem.getItem() instanceof IDemonWillGem)) { - return true; - } - } - - Utils.insertItemToTile(crucible, player); - - world.notifyBlockUpdate(pos, state, state, 3); - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) { - TileDemonCrucible tile = (TileDemonCrucible) world.getTileEntity(blockPos); - if (tile != null) - tile.dropItems(); - - super.breakBlock(world, blockPos, blockState); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileDemonCrucible(); - } - - @Override - public ItemBlock getItem() { - return new ItemBlock(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java deleted file mode 100644 index 61b7073c..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java +++ /dev/null @@ -1,223 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.ItemDemonCrystal; -import WayofTime.bloodmagic.item.block.ItemBlockDemonCrystal; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.tile.TileDemonCrystal; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyEnum; -import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class BlockDemonCrystal extends Block implements IBMBlock, IVariantProvider { - public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 6); - public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumDemonWillType.class); - public static final PropertyEnum ATTACHED = PropertyEnum.create("attached", EnumFacing.class); - - public BlockDemonCrystal() { - super(Material.ROCK); - this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumDemonWillType.DEFAULT).withProperty(ATTACHED, EnumFacing.UP)); - - setUnlocalizedName(BloodMagic.MODID + ".demonCrystal."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 2); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - if (!world.isRemote) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileDemonCrystal) { - TileDemonCrystal crystal = (TileDemonCrystal) tile; - boolean isCreative = player.capabilities.isCreativeMode; - boolean holdsCrystal = player.getHeldItem(hand).getItem() instanceof ItemDemonCrystal; - - if (PlayerDemonWillHandler.getTotalDemonWill(EnumDemonWillType.DEFAULT, player) > 1024 && !(holdsCrystal && isCreative)) { - crystal.dropSingleCrystal(); - - } - if (!crystal.getWorld().isRemote && isCreative && holdsCrystal) { - if (crystal.crystalCount < 7) { - crystal.internalCounter = 0; - if(crystal.progressToNextCrystal > 0) - crystal.progressToNextCrystal--; - crystal.crystalCount++; - crystal.markDirty(); - crystal.notifyUpdate(); - } - } - } - } - return true; - } - - @Override - public void getDrops(NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileDemonCrystal) { - EnumDemonWillType type = state.getValue(TYPE); - int number = ((TileDemonCrystal) tile).getCrystalCount(); - - drops.add(getItemStackDropped(type, number)); - } - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileDemonCrystal) { - TileDemonCrystal crystal = (TileDemonCrystal) tile; - state = state.withProperty(AGE, crystal.getCrystalCountForRender()); - state = state.withProperty(ATTACHED, crystal.getPlacement()); - } - return state; - } - - @Override - public void neighborChanged(IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileDemonCrystal) { - TileDemonCrystal crystal = (TileDemonCrystal) tile; - EnumFacing placement = crystal.getPlacement(); - BlockPos offsetPos = pos.offset(placement.getOpposite()); - IBlockState offsetState = world.getBlockState(offsetPos); - - if (!offsetState.isSideSolid(world, offsetPos, placement)) - world.destroyBlock(pos, true); - } - } - - @Override - public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) { - BlockPos offsetPos = pos.offset(side.getOpposite()); - IBlockState offsetState = world.getBlockState(offsetPos); - - return offsetState.isSideSolid(world, offsetPos, side) && this.canPlaceBlockAt(world, pos); - } - - @Override - public void getSubBlocks(CreativeTabs creativeTabs, NonNullList list) { - for (EnumDemonWillType willType : EnumDemonWillType.values()) - list.add(new ItemStack(this, 1, willType.ordinal())); - } - - @Override - public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity tile, ItemStack stack) { - super.harvestBlock(world, player, pos, state, tile, stack); - world.setBlockToAir(pos); - } - - @Override - public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) { - return willHarvest || super.removedByPlayer(state, world, pos, player, false); - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public IBlockState getStateFromMeta(int meta) { - return this.getDefaultState().withProperty(TYPE, EnumDemonWillType.values()[meta]); - } - - @Override - public int getMetaFromState(IBlockState state) { - return state.getValue(TYPE).ordinal(); - } - - @Override - protected BlockStateContainer createBlockState() { - return new BlockStateContainer(this, TYPE, AGE, ATTACHED); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileDemonCrystal(); - } - - public static ItemStack getItemStackDropped(EnumDemonWillType type, int crystalNumber) { - ItemStack stack = ItemStack.EMPTY; - switch (type) { - case CORROSIVE: - stack = EnumDemonWillType.CORROSIVE.getStack(); - break; - case DEFAULT: - stack = EnumDemonWillType.DEFAULT.getStack(); - break; - case DESTRUCTIVE: - stack = EnumDemonWillType.DESTRUCTIVE.getStack(); - break; - case STEADFAST: - stack = EnumDemonWillType.STEADFAST.getStack(); - break; - case VENGEFUL: - stack = EnumDemonWillType.VENGEFUL.getStack(); - break; - } - - stack.setCount(crystalNumber); - return stack; - } - - @Override - public ItemBlock getItem() { - return new ItemBlockDemonCrystal(this); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - for (EnumDemonWillType willType : EnumDemonWillType.values()) - variants.put(willType.ordinal(), "age=3,attached=up,type=" + willType.getName()); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java deleted file mode 100644 index 26ecfb88..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystallizer.java +++ /dev/null @@ -1,77 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.tile.TileDemonCrystallizer; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; - -public class BlockDemonCrystallizer extends BlockContainer implements IVariantProvider, IBMBlock { - public BlockDemonCrystallizer() { - super(Material.ROCK); - - setUnlocalizedName(BloodMagic.MODID + ".demonCrystallizer"); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 0); - -// setBlockBounds(0.3F, 0F, 0.3F, 0.72F, 1F, 0.72F); - } - - @Override - public boolean isSideSolid(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) { - return side == EnumFacing.UP; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) { - return new TileDemonCrystallizer(); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "normal"); - } - - @Override - public ItemBlock getItem() { - return new ItemBlock(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonLight.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonLight.java deleted file mode 100644 index f78e7266..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonLight.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.block.enums.EnumSubWillType; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; - -public class BlockDemonLight extends BlockEnum { - public BlockDemonLight() { - super(Material.ROCK, EnumSubWillType.class); - - setUnlocalizedName(BloodMagic.MODID + ".demonlight."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - setLightLevel(1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarBase.java deleted file mode 100644 index 5db379bb..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarBase.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnumPillar; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.IStringSerializable; - -import javax.annotation.Nonnull; - -public class BlockDemonPillarBase & IStringSerializable> extends BlockEnumPillar { - public BlockDemonPillarBase(String baseName, Material materialIn, Class enumClass) { - super(materialIn, enumClass); - - setUnlocalizedName(BloodMagic.MODID + "." + baseName + "."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - EnumFacing.Axis[] axis = new EnumFacing.Axis[]{EnumFacing.Axis.Y, EnumFacing.Axis.X, EnumFacing.Axis.Z}; - - for (int i = 0; i < 3; i++) - for (int j = 0; j < this.getTypes().length; j++) - variants.put(i * 5 + j, "axis=" + axis[i] + ",type=" + this.getTypes()[j]); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarCapBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarCapBase.java deleted file mode 100644 index b31b09b1..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPillarCapBase.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnumPillarCap; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.IStringSerializable; - -import javax.annotation.Nonnull; - -public class BlockDemonPillarCapBase & IStringSerializable> extends BlockEnumPillarCap { - public BlockDemonPillarCapBase(String baseName, Material materialIn, Class enumClass) { - super(materialIn, enumClass); - - setUnlocalizedName(BloodMagic.MODID + "." + baseName + "."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - for (int i = 0; i < EnumFacing.values().length; i++) - for (int j = 0; j < this.getTypes().length; j++) - variants.put(i * 2 + j, "facing=" + EnumFacing.values()[i] + ",type=" + this.getTypes()[j]); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java deleted file mode 100644 index 60fdafea..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonPylon.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.tile.TileDemonPylon; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -public class BlockDemonPylon extends BlockContainer implements IBMBlock, IVariantProvider { - public BlockDemonPylon() { - super(Material.ROCK); - - setUnlocalizedName(BloodMagic.MODID + ".demonPylon"); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 0); - -// setBlockBounds(0.3F, 0F, 0.3F, 0.72F, 1F, 0.72F); - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) { - return new TileDemonPylon(); - } - - @Override - public ItemBlock getItem() { - return new ItemBlock(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonStairsBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonStairsBase.java deleted file mode 100644 index 05bd1d75..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonStairsBase.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnumStairs; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.IStringSerializable; - -public class BlockDemonStairsBase & IStringSerializable> extends BlockEnumStairs { - public BlockDemonStairsBase(String baseName, Material materialIn, Class enumClass) { - super(materialIn, enumClass); - - setUnlocalizedName(BloodMagic.MODID + "." + baseName + "."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - } - - @Override - public void gatherVariants(Int2ObjectMap variants) { - for (int i = 0; i < this.getTypes().length; i++) - variants.put(i, "facing=south,half=bottom,shape=straight,type=" + this.getTypes()[i]); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonWallBase.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonWallBase.java deleted file mode 100644 index ba6699fa..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonWallBase.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnumWall; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.util.IStringSerializable; - -public class BlockDemonWallBase & IStringSerializable> extends BlockEnumWall { - public BlockDemonWallBase(String baseName, Material materialIn, Class enumClass) { - super(materialIn, enumClass); - - setUnlocalizedName(BloodMagic.MODID + "." + baseName + "."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - } - - @Override - public void gatherVariants(Int2ObjectMap variants) { - for (int i = 0; i < this.getTypes().length; i++) - variants.put(i, "east=true,north=false,south=false,type=" + this.getTypes()[i] + ",up=true,west=true"); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDimensionalPortal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDimensionalPortal.java deleted file mode 100644 index 8939e5f5..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDimensionalPortal.java +++ /dev/null @@ -1,183 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.IMasterRitualStone; -import WayofTime.bloodmagic.teleport.PortalLocation; -import WayofTime.bloodmagic.teleport.TeleportQueue; -import WayofTime.bloodmagic.block.base.BlockInteger; -import WayofTime.bloodmagic.ritual.portal.LocationsHandler; -import WayofTime.bloodmagic.ritual.portal.Teleports; -import WayofTime.bloodmagic.tile.TileDimensionalPortal; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.Random; - -public class BlockDimensionalPortal extends BlockInteger { - protected static final AxisAlignedBB AABB_0 = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D); - protected static final AxisAlignedBB AABB_1 = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D); - protected static final AxisAlignedBB AABB_DEFAULT = new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D); - - public BlockDimensionalPortal() { - super(Material.PORTAL, 2); - setUnlocalizedName(BloodMagic.MODID + ".dimensionalPortal"); - setBlockUnbreakable(); - setResistance(2000); - setLightOpacity(0); - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) { - return null; - } - - public boolean isOpaqueCube() { - return false; - } - - public boolean isFullCube() { - return false; - } - - @Override - public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) { - return 12; - } - - @Override - public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState blockState, Entity entity) { - if (!world.isRemote && world.getTileEntity(pos) instanceof TileDimensionalPortal) { - TileDimensionalPortal tile = (TileDimensionalPortal) world.getTileEntity(pos); - - if (LocationsHandler.getLocationsHandler() != null) { - ArrayList linkedLocations = LocationsHandler.getLocationsHandler().getLinkedLocations(tile.portalID); - - if (linkedLocations != null && !linkedLocations.isEmpty() && linkedLocations.size() > 1) { - if (world.getTileEntity(tile.getMasterStonePos()) != null && world.getTileEntity(tile.getMasterStonePos()) instanceof IMasterRitualStone) { - IMasterRitualStone masterRitualStone = (IMasterRitualStone) world.getTileEntity(tile.getMasterStonePos()); - if (linkedLocations.get(0).equals(new PortalLocation(masterRitualStone.getBlockPos().up(), world.provider.getDimension()))) { - PortalLocation portal = linkedLocations.get(1); - if (portal.getDimension() == world.provider.getDimension()) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(portal.getX(), portal.getY(), portal.getZ(), entity, masterRitualStone.getOwner(), false)); - } else { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(portal.getX(), portal.getY(), portal.getZ(), entity, masterRitualStone.getOwner(), world, portal.getDimension(), false)); - } - } else if (linkedLocations.get(1).equals(new PortalLocation(masterRitualStone.getBlockPos().up(), world.provider.getDimension()))) { - PortalLocation portal = linkedLocations.get(0); - if (portal.getDimension() == world.provider.getDimension()) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(portal.getX(), portal.getY(), portal.getZ(), entity, masterRitualStone.getOwner(), false)); - } else { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(portal.getX(), portal.getY(), portal.getZ(), entity, masterRitualStone.getOwner(), world, portal.getDimension(), false)); - } - } - } - } - } - } - } - - @Override - public int quantityDropped(Random par1Random) { - return 0; - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) { - int meta = state.getBlock().getMetaFromState(state); - if (meta == 0) { - return AABB_0; - } else if (meta == 1) { - return AABB_1; - } else { - return AABB_DEFAULT; - } - } - -// -// @Override -// public void setBlockBoundsForItemRender() -// { -// setBlockBounds(0f, 0f, 0.375f, 1f, 1f, 0.625f); -// } - - @Override - @SideOnly(Side.CLIENT) - public BlockRenderLayer getBlockLayer() { - return BlockRenderLayer.TRANSLUCENT; - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand) { - this.spawnParticles(world, pos.getX(), pos.getY(), pos.getZ()); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileDimensionalPortal(); - } - - private void spawnParticles(World world, int x, int y, int z) { - Random random = world.rand; - double d0 = 0.0625D; - for (int i = 0; i < 6; ++i) { - double particleX = (double) ((float) x + random.nextFloat()); - double particleY = (double) ((float) y + random.nextFloat()); - double particleZ = (double) ((float) z + random.nextFloat()); - if (i == 0 && !world.getBlockState(new BlockPos(x, y + 1, z)).isOpaqueCube()) { - particleY = (double) (y + 1) + d0; - } - if (i == 1 && !world.getBlockState(new BlockPos(x, y - 1, z)).isOpaqueCube()) { - particleY = (double) y - d0; - } - if (i == 2 && !world.getBlockState(new BlockPos(x, y, z + 1)).isOpaqueCube()) { - particleZ = (double) (z + 1) + d0; - } - if (i == 3 && !world.getBlockState(new BlockPos(x, y, z - 1)).isOpaqueCube()) { - particleZ = (double) z - d0; - } - if (i == 4 && !world.getBlockState(new BlockPos(x + 1, y, z)).isOpaqueCube()) { - particleX = (double) (x + 1) + d0; - } - if (i == 5 && !world.getBlockState(new BlockPos(x - 1, y, z)).isOpaqueCube()) { - particleX = (double) x - d0; - } - if (particleX < (double) x || particleX > (double) (x + 1) || particleY < 0.0D || particleY > (double) (y + 1) || particleZ < (double) z || particleZ > (double) (z + 1)) { - world.spawnParticle(EnumParticleTypes.REDSTONE, particleX, particleY, particleZ, 0.0D, 0.0D, 0.0D); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java b/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java deleted file mode 100644 index e77d0982..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockIncenseAltar.java +++ /dev/null @@ -1,86 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.tile.TileIncenseAltar; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class BlockIncenseAltar extends Block implements IVariantProvider, IBMBlock { - protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.3F, 0F, 0.3F, 0.72F, 1F, 0.72F); - - public BlockIncenseAltar() { - super(Material.ROCK); - - setUnlocalizedName(BloodMagic.MODID + ".incenseAltar"); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 0); - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return AABB; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) { - TileIncenseAltar TileIncenseAltar = (TileIncenseAltar) world.getTileEntity(blockPos); - if (TileIncenseAltar != null) - TileIncenseAltar.dropItems(); - - super.breakBlock(world, blockPos, blockState); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileIncenseAltar(); - } - - @Override - public ItemBlock getItem() { - return new ItemBlock(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java deleted file mode 100644 index 85aab8ae..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInputRoutingNode.java +++ /dev/null @@ -1,53 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.tile.routing.TileInputRoutingNode; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class BlockInputRoutingNode extends BlockRoutingNode { - public BlockInputRoutingNode() { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".inputRouting"); - } - - @Override - //TODO: Combine BlockInputRoutingNode and BlockInputRoutingNode so they have the same superclass - public void breakBlock(World world, BlockPos pos, IBlockState state) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileInputRoutingNode) { - ((TileInputRoutingNode) tile).removeAllConnections(); - ((TileInputRoutingNode) tile).dropItems(); - } - super.breakBlock(world, pos, state); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - if (world.getTileEntity(pos) instanceof TileInputRoutingNode) { - player.openGui(BloodMagic.instance, Constants.Gui.ROUTING_NODE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileInputRoutingNode(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java deleted file mode 100644 index f9c17e29..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillar.java +++ /dev/null @@ -1,91 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.block.enums.EnumSubWillType; -import WayofTime.bloodmagic.tile.TileInversionPillar; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.property.Properties; - -public class BlockInversionPillar extends BlockEnum { - public BlockInversionPillar() { - super(Material.ROCK, EnumSubWillType.class); - - setUnlocalizedName(BloodMagic.MODID + ".inversionpillar."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TileInversionPillar) { - TileInversionPillar tilePillar = (TileInversionPillar) world.getTileEntity(blockPos); - tilePillar.removePillarFromMap(); - } - - super.breakBlock(world, blockPos, blockState); - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { - return super.getActualState(state, world, pos).withProperty(Properties.StaticProperty, true); - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public void gatherVariants(Int2ObjectMap variants) { - for (int i = 0; i < this.getTypes().length; i++) - variants.put(i, "static=false,type=" + this.getTypes()[i]); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileInversionPillar(state.getValue(getProperty()).getType()); - } - - protected BlockStateContainer createStateContainer() { - return new BlockStateContainer.Builder(this).add(getProperty(), Properties.StaticProperty).add(Properties.AnimationProperty).build(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java b/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java deleted file mode 100644 index 54193ee9..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockInversionPillarEnd.java +++ /dev/null @@ -1,57 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.block.enums.EnumInversionCap; -import WayofTime.bloodmagic.client.IVariantProvider; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; - -public class BlockInversionPillarEnd extends BlockEnum implements IVariantProvider { - public BlockInversionPillarEnd() { - super(Material.ROCK, EnumInversionCap.class); - - setUnlocalizedName(BloodMagic.MODID + ".inversionpillarend."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 2); - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public void gatherVariants(Int2ObjectMap variants) { - for (int i = 0; i < this.getTypes().length; i++) - variants.put(i, "type=" + this.getTypes()[i]); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockItemRoutingNode.java deleted file mode 100644 index 1bb62034..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockItemRoutingNode.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.tile.routing.TileItemRoutingNode; -import WayofTime.bloodmagic.tile.routing.TileRoutingNode; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class BlockItemRoutingNode extends BlockRoutingNode { - public BlockItemRoutingNode() { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".itemRouting"); - } - - @Override - public void breakBlock(World world, BlockPos pos, IBlockState state) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileRoutingNode) { - ((TileRoutingNode) tile).removeAllConnections(); - } - super.breakBlock(world, pos, state); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileItemRoutingNode(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockLifeEssence.java b/src/main/java/WayofTime/bloodmagic/block/BlockLifeEssence.java deleted file mode 100644 index 8828d7c0..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockLifeEssence.java +++ /dev/null @@ -1,66 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.block.material.Material; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fluids.BlockFluidClassic; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import java.awt.Color; - -public class BlockLifeEssence extends BlockFluidClassic { - private static final Fluid LIFE_ESSENCE = new FluidLifeEssence(); - - public BlockLifeEssence() { - super(LIFE_ESSENCE, Material.WATER); - - setUnlocalizedName(BloodMagic.MODID + ".fluid.lifeEssence"); - getLifeEssence().setBlock(this); - } - - @Override - public boolean canDisplace(IBlockAccess world, BlockPos blockPos) { - return !world.getBlockState(blockPos).getBlock().getMaterial(world.getBlockState(blockPos)).isLiquid() && super.canDisplace(world, blockPos); - } - - @Override - public boolean displaceIfPossible(World world, BlockPos blockPos) { - return !world.getBlockState(blockPos).getBlock().getMaterial(world.getBlockState(blockPos)).isLiquid() && super.displaceIfPossible(world, blockPos); - } - - @Override - public BlockRenderLayer getBlockLayer() { - return BlockRenderLayer.SOLID; - } - - public static Fluid getLifeEssence() { - return LIFE_ESSENCE; - } - - public static class FluidLifeEssence extends Fluid { - - public FluidLifeEssence() { - super("lifeEssence", new ResourceLocation(Constants.Mod.DOMAIN + "blocks/lifeEssenceStill"), new ResourceLocation(Constants.Mod.DOMAIN + "blocks/lifeEssenceFlowing")); - - setDensity(2000); - setViscosity(2000); - } - - @Override - public int getColor() { - return Color.RED.getRGB(); - } - - @Override - public String getLocalizedName(FluidStack fluidStack) { - return TextHelper.localize("tile.bloodmagic.fluid.lifeEssence.name"); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockMasterRoutingNode.java deleted file mode 100644 index d04ab3f2..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockMasterRoutingNode.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class BlockMasterRoutingNode extends BlockRoutingNode { - public BlockMasterRoutingNode() { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".masterRouting"); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 2); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileMasterRoutingNode(); - } - - // @Override -// public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) -// { -// if (world.getTileEntity(pos) instanceof TileMasterRoutingNode) -// { -// player.openGui(BloodMagic.instance, Constants.Gui.MASTER_ROUTING_NODE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); -// } -// -// return true; -// } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java b/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java deleted file mode 100644 index b0feb7eb..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockMimic.java +++ /dev/null @@ -1,228 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.altar.ComponentType; -import WayofTime.bloodmagic.altar.IAltarComponent; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.block.enums.EnumMimic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.tile.TileMimic; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.item.block.ItemBlockMimic; -import net.minecraft.block.Block; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; - -public class BlockMimic extends BlockEnum implements IAltarComponent { - public static final int sentientMimicMeta = 4; - - public BlockMimic() { - super(Material.ROCK, EnumMimic.class); - - setUnlocalizedName(BloodMagic.MODID + ".mimic."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - setHarvestLevel("pickaxe", 0); - setLightOpacity(15); - } - - @Nullable - @Override - public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) { - switch (this.getMetaFromState(state)) { - case 1: - case 2: - case 3: - case 4: - TileMimic tileMimic = (TileMimic) world.getTileEntity(pos); - if (tileMimic != null && !tileMimic.getStackInSlot(0).isEmpty()) { - Block mimicBlock = Block.getBlockFromItem(tileMimic.getStackInSlot(0).getItem()); - if (mimicBlock == Blocks.AIR) { - return FULL_BLOCK_AABB; - } - IBlockState mimicState = tileMimic.getReplacedState(); - if (mimicBlock != this) { - return mimicState.getCollisionBoundingBox(world, pos); - } - } else { - return FULL_BLOCK_AABB; - } - case 0: - default: - return NULL_AABB; - } - - } - - @Override - @SideOnly(Side.CLIENT) - public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World world, BlockPos pos) { - TileMimic tileMimic = (TileMimic) world.getTileEntity(pos); - if (tileMimic != null && !tileMimic.getStackInSlot(0).isEmpty()) { - Block mimicBlock = Block.getBlockFromItem(tileMimic.getStackInSlot(0).getItem()); - if (mimicBlock == Blocks.AIR) { - return FULL_BLOCK_AABB; - } - IBlockState mimicState = tileMimic.getReplacedState(); - if (mimicBlock != this) { - return mimicState.getSelectedBoundingBox(world, pos); - } - } - - return FULL_BLOCK_AABB; - } - - @Override - public int getLightOpacity(IBlockState state) { - switch (this.getMetaFromState(state)) { - case 2: - case 4: - return 0; - default: - return this.lightOpacity; - } - } - - @Override - public int getLightValue(IBlockState state) { - switch (this.getMetaFromState(state)) { - case 3: - return 15; - default: - return this.lightValue; - } - } - - @Override - public int getMetaFromState(IBlockState state) { - if (state.getBlock() == this) { - return super.getMetaFromState(state); - } - - return state.getBlock().getMetaFromState(state); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - TileMimic mimic = (TileMimic) world.getTileEntity(pos); - - return mimic != null && mimic.onBlockActivated(world, pos, state, player, hand, player.getHeldItem(hand), side); - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileMimic) { - TileMimic mimic = (TileMimic) tile; - ItemStack stack = mimic.getStackInSlot(0); - if (stack.getItem() instanceof ItemBlock) { - Block block = ((ItemBlock) stack.getItem()).getBlock(); - IBlockState mimicState = mimic.getReplacedState(); - if (block != this) { - if (block.getRenderType(mimicState) == EnumBlockRenderType.ENTITYBLOCK_ANIMATED) { - return RegistrarBloodMagicBlocks.BLOOD_LIGHT.getDefaultState(); //Small and invisible-ish, basically this is returned in order to not render over the animated block (TESR) - } - - return block.getActualState(mimicState, world, pos); - } - } - } - return state; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) { - return layer == BlockRenderLayer.CUTOUT_MIPPED || layer == BlockRenderLayer.CUTOUT; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TileMimic) { - TileMimic TileMimic = (TileMimic) world.getTileEntity(blockPos); - if (TileMimic != null) - TileMimic.dropItems(); - } - - super.breakBlock(world, blockPos, blockState); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileMimic(); - } - - // IAltarComponent - - @Nullable - @Override - public ComponentType getType(World world, IBlockState state, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileMimic) { - TileMimic mimic = (TileMimic) tile; - ItemStack stack = mimic.getStackInSlot(0); - if (stack.getItem() instanceof ItemBlock) { - Block block = ((ItemBlock) stack.getItem()).getBlock(); - if (block instanceof IAltarComponent) { - return ((IAltarComponent) block).getType(world, mimic.getReplacedState(), pos); - } else { - for (ComponentType altarComponent : ComponentType.values()) - if (block == Utils.getBlockForComponent(altarComponent)) - return altarComponent; - } - } - } - return null; - } - - @Override - public ItemBlock getItem() { - return new ItemBlockMimic(this); - } - -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java deleted file mode 100644 index 5882dc30..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockOutputRoutingNode.java +++ /dev/null @@ -1,53 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class BlockOutputRoutingNode extends BlockRoutingNode { - public BlockOutputRoutingNode() { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".outputRouting"); - } - - @Override - //TODO: Combine BlockOutputRoutingNode and BlockInputRoutingNode so they have the same superclass - public void breakBlock(World world, BlockPos pos, IBlockState state) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileOutputRoutingNode) { - ((TileOutputRoutingNode) tile).removeAllConnections(); - ((TileOutputRoutingNode) tile).dropItems(); - } - super.breakBlock(world, pos, state); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - if (world.getTileEntity(pos) instanceof TileOutputRoutingNode) { - player.openGui(BloodMagic.instance, Constants.Gui.ROUTING_NODE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileOutputRoutingNode(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockPath.java b/src/main/java/WayofTime/bloodmagic/block/BlockPath.java deleted file mode 100644 index 92fae1bf..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockPath.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.block.enums.EnumPath; -import WayofTime.bloodmagic.incense.IIncensePath; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; - -public class BlockPath extends BlockEnum implements IIncensePath { - - public BlockPath() { - super(Material.ROCK, EnumPath.class); - - setUnlocalizedName(BloodMagic.MODID + ".path."); - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.STONE); - - setHarvestLevel("axe", 0, getStateFromMeta(0)); - setHarvestLevel("axe", 0, getStateFromMeta(1)); - setHarvestLevel("pickaxe", 0, getStateFromMeta(2)); - setHarvestLevel("pickaxe", 0, getStateFromMeta(3)); - setHarvestLevel("pickaxe", 0, getStateFromMeta(4)); - setHarvestLevel("pickaxe", 0, getStateFromMeta(5)); - setHarvestLevel("pickaxe", 3, getStateFromMeta(6)); - setHarvestLevel("pickaxe", 3, getStateFromMeta(7)); - } - - @Override - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag tooltipFlag) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.decoration.safe")); - super.addInformation(stack, world, tooltip, tooltipFlag); - } - - @Override - public int getLevelOfPath(World world, BlockPos pos, IBlockState state) { - switch (this.getMetaFromState(state)) { - case 0: - case 1: - return 2; - case 2: - case 3: - return 4; - case 4: - case 5: - return 6; - case 6: - case 7: - return 8; - default: - return 0; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java b/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java deleted file mode 100644 index bb6ad64a..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockPhantom.java +++ /dev/null @@ -1,82 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.tile.TilePhantomBlock; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.Random; - -public class BlockPhantom extends Block implements IVariantProvider { - public BlockPhantom() { - super(Material.CLOTH); - - setUnlocalizedName(BloodMagic.MODID + ".phantom"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - @SideOnly(Side.CLIENT) - public BlockRenderLayer getBlockLayer() { - return BlockRenderLayer.TRANSLUCENT; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) { - return world.getBlockState(pos.offset(side)) != state || state.getBlock() != this && super.shouldSideBeRendered(state, world, pos, side); - } - - @Override - public int quantityDropped(Random par1Random) { - return 0; - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TilePhantomBlock(100); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java deleted file mode 100644 index d08eb08c..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRitualController.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.event.RitualEvent; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.ritual.imperfect.IImperfectRitualStone; -import WayofTime.bloodmagic.ritual.Ritual; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import WayofTime.bloodmagic.util.helper.RitualHelper; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.block.enums.EnumRitualController; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.tile.TileImperfectRitualStone; -import WayofTime.bloodmagic.tile.TileMasterRitualStone; -import amerifrance.guideapi.api.IGuideLinked; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; - -import javax.annotation.Nullable; - -public class BlockRitualController extends BlockEnum implements IGuideLinked { - - public BlockRitualController() { - super(Material.ROCK, EnumRitualController.class); - - setUnlocalizedName(BloodMagic.MODID + ".stone.ritual."); - setCreativeTab(BloodMagic.TAB_BM); - setSoundType(SoundType.STONE); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 2); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack heldItem = player.getHeldItem(hand); - TileEntity tile = world.getTileEntity(pos); - - if (state.getValue(getProperty()) != EnumRitualController.IMPERFECT && tile instanceof TileMasterRitualStone) { - if (heldItem.getItem() == RegistrarBloodMagicItems.ACTIVATION_CRYSTAL) { - if (((IBindable) heldItem.getItem()).getBinding(heldItem) == null) - return false; - - String key = RitualHelper.getValidRitual(world, pos); - if (!key.isEmpty()) { - Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(key); - if (ritual != null) { - EnumFacing direction = RitualHelper.getDirectionOfRitual(world, pos, ritual); - // TODO: Give a message stating that this ritual is not a valid ritual. - if (direction != null && RitualHelper.checkValidRitual(world, pos, ritual, direction)) { - if (((TileMasterRitualStone) tile).activateRitual(heldItem, player, BloodMagic.RITUAL_MANAGER.getRitual(key))) { - ((TileMasterRitualStone) tile).setDirection(direction); - if (state.getValue(getProperty()) == EnumRitualController.INVERTED) - ((TileMasterRitualStone) tile).setInverted(true); - } - } else { - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.ritual.notValid"), true); - } - } else { - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.ritual.notValid"), true); - } - } else { - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.ritual.notValid"), true); - } - } - } else if (state.getValue(getProperty()) == EnumRitualController.IMPERFECT && tile instanceof TileImperfectRitualStone) { - IBlockState ritualBlock = world.getBlockState(pos.up()); - ImperfectRitual ritual = BloodMagic.RITUAL_MANAGER.getImperfectRitual(ritualBlock); - if (ritual == null) - return false; - - RitualEvent.ImperfectRitualActivatedEvent event = new RitualEvent.ImperfectRitualActivatedEvent((IImperfectRitualStone) tile, player, ritual); - return !MinecraftForge.EVENT_BUS.post(event) && ((TileImperfectRitualStone) tile).performRitual(world, pos, ritual, player); - } - - return false; - } - - @Override - public void onBlockHarvested(World world, BlockPos pos, IBlockState state, EntityPlayer player) { - TileEntity tile = world.getTileEntity(pos); - - if (getMetaFromState(state) == 0 && tile instanceof TileMasterRitualStone) - ((TileMasterRitualStone) tile).stopRitual(Ritual.BreakType.BREAK_MRS); - } - - @Override - public void onBlockDestroyedByExplosion(World world, BlockPos pos, Explosion explosion) { - TileEntity tile = world.getTileEntity(pos); - - if (tile instanceof TileMasterRitualStone) - ((TileMasterRitualStone) tile).stopRitual(Ritual.BreakType.EXPLOSION); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return state.getValue(getProperty()) != EnumRitualController.IMPERFECT ? new TileMasterRitualStone() : new TileImperfectRitualStone(); - } - - // IGuideLinked - - @Override - @Nullable - public ResourceLocation getLinkedEntry(World world, BlockPos pos, EntityPlayer player, ItemStack stack) { - IBlockState state = world.getBlockState(pos); - if (state.getValue(getProperty()).equals(EnumRitualController.MASTER)) { - TileMasterRitualStone mrs = (TileMasterRitualStone) world.getTileEntity(pos); - if (mrs == null || mrs.getCurrentRitual() == null) - return null; - else - return new ResourceLocation("bloodmagic", "ritual_" + mrs.getCurrentRitual().getName()); - } else if (state.getValue(getProperty()).equals(EnumRitualController.IMPERFECT)) { - ImperfectRitual imperfectRitual = BloodMagic.RITUAL_MANAGER.getImperfectRitual(world.getBlockState(pos.up())); - if (imperfectRitual != null) - return new ResourceLocation("bloodmagic", "ritual_" + imperfectRitual.getName()); - } - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java b/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java deleted file mode 100644 index 905c8810..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRitualStone.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.EnumRuneType; -import WayofTime.bloodmagic.ritual.IRitualStone; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class BlockRitualStone extends BlockEnum implements IRitualStone { - public BlockRitualStone() { - super(Material.IRON, EnumRuneType.class); - - setUnlocalizedName(BloodMagic.MODID + ".ritualStone."); - setCreativeTab(BloodMagic.TAB_BM); - setSoundType(SoundType.STONE); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 2); - } - - @SideOnly(Side.CLIENT) - @Override - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag tooltipFlag) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.decoration.safe")); - super.addInformation(stack, world, tooltip, tooltipFlag); - } - - @Override - public int damageDropped(IBlockState state) { - return 0; - } - - @Override - public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player) { - return false; - } - - @Override - public boolean isRuneType(World world, BlockPos pos, EnumRuneType runeType) { - return runeType == this.getTypes()[getMetaFromState(world.getBlockState(pos))]; - } - - @Override - public void setRuneType(World world, BlockPos pos, EnumRuneType runeType) { - int meta = runeType.ordinal(); - IBlockState newState = RegistrarBloodMagicBlocks.RITUAL_STONE.getStateFromMeta(meta); - world.setBlockState(pos, newState); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java b/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java deleted file mode 100644 index bb26cf20..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockRoutingNode.java +++ /dev/null @@ -1,137 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode; -import WayofTime.bloodmagic.tile.routing.TileRoutingNode; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyBool; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; - -public class BlockRoutingNode extends Block implements IBMBlock, IVariantProvider { - public static final PropertyBool UP = PropertyBool.create("up"); - public static final PropertyBool DOWN = PropertyBool.create("down"); - public static final PropertyBool NORTH = PropertyBool.create("north"); - public static final PropertyBool EAST = PropertyBool.create("east"); - public static final PropertyBool SOUTH = PropertyBool.create("south"); - public static final PropertyBool WEST = PropertyBool.create("west"); - protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.378F, 0.378F, 0.378F, 0.625F, 0.625F, 0.625F); - - public BlockRoutingNode() { - super(Material.ROCK); - - setCreativeTab(BloodMagic.TAB_BM); - setHardness(2.0F); - setResistance(5.0F); - setHarvestLevel("pickaxe", 2); - - this.setDefaultState(this.blockState.getBaseState().withProperty(DOWN, false).withProperty(UP, false).withProperty(NORTH, false).withProperty(EAST, false).withProperty(SOUTH, false).withProperty(WEST, false)); - } - - @Override - public boolean canConnectRedstone(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) { - return true; - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return AABB; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) { - return layer == BlockRenderLayer.CUTOUT_MIPPED || layer == BlockRenderLayer.TRANSLUCENT; - } - - @Override - public IBlockState getStateFromMeta(int meta) { - return this.getDefaultState(); - } - - /** - * Convert the BlockState into the correct metadata value - */ - @Override - public int getMetaFromState(IBlockState state) { - return 0; - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { - return state.withProperty(UP, this.shouldConnect(state, worldIn, pos.up(), EnumFacing.DOWN)).withProperty(DOWN, this.shouldConnect(state, worldIn, pos.down(), EnumFacing.UP)).withProperty(NORTH, this.shouldConnect(state, worldIn, pos.north(), EnumFacing.SOUTH)).withProperty(EAST, this.shouldConnect(state, worldIn, pos.east(), EnumFacing.WEST)).withProperty(SOUTH, this.shouldConnect(state, worldIn, pos.south(), EnumFacing.NORTH)).withProperty(WEST, this.shouldConnect(state, worldIn, pos.west(), EnumFacing.EAST)); - } - - @Override - protected BlockStateContainer createBlockState() { - return new BlockStateContainer(this, UP, DOWN, NORTH, EAST, WEST, SOUTH); - } - - public boolean shouldConnect(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing attachedSide) { - IBlockState blockState = world.getBlockState(pos); - Block block = blockState.getBlock(); - return block.getMaterial(blockState).isOpaque() && blockState.isFullCube(); - } - - @Override - public void breakBlock(World world, BlockPos pos, IBlockState blockState) { - if (!world.isRemote) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileRoutingNode) { - ((TileRoutingNode) tile).removeAllConnections(); - } else if (tile instanceof TileMasterRoutingNode) { - ((TileMasterRoutingNode) tile).removeAllConnections(); - } - } - - super.breakBlock(world, pos, blockState); - } - - @Override - public ItemBlock getItem() { - return new ItemBlock(this); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "inventory"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java b/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java deleted file mode 100644 index 4f93536b..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockSoulForge.java +++ /dev/null @@ -1,100 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.tile.TileSoulForge; -import WayofTime.bloodmagic.util.Constants; -import net.minecraft.block.Block; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class BlockSoulForge extends Block implements IVariantProvider, IBMBlock { - protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.06F, 0.0F, 0.06F, 0.94F, 0.75F, 0.94F); - - public BlockSoulForge() { - super(Material.IRON); - - setUnlocalizedName(BloodMagic.MODID + ".soulForge"); - setHardness(2.0F); - setResistance(5.0F); - setSoundType(SoundType.METAL); - setHarvestLevel("pickaxe", 1); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return AABB; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - if (world.getTileEntity(pos) instanceof TileSoulForge) - player.openGui(BloodMagic.instance, Constants.Gui.SOUL_FORGE_GUI, world, pos.getX(), pos.getY(), pos.getZ()); - - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) { - TileSoulForge tileSoulForge = (TileSoulForge) world.getTileEntity(blockPos); - if (tileSoulForge != null) - tileSoulForge.dropItems(); - - super.breakBlock(world, blockPos, blockState); - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileSoulForge(); - } - - @Override - public ItemBlock getItem() { - return new ItemBlock(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java b/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java deleted file mode 100644 index 6802804b..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockSpectral.java +++ /dev/null @@ -1,105 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.tile.TileSpectralBlock; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.List; -import java.util.Random; - -public class BlockSpectral extends Block { - protected static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 0, 0, 0); - - public BlockSpectral() { - super(Material.CLOTH); - - setUnlocalizedName(BloodMagic.MODID + ".spectral"); - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return AABB; - } - - @Override - public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public boolean causesSuffocation(IBlockState state) { - return false; - } - - @SideOnly(Side.CLIENT) - @Override - public BlockRenderLayer getBlockLayer() { - return BlockRenderLayer.TRANSLUCENT; - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return ConfigHandler.client.invisibleSpectralBlocks ? EnumBlockRenderType.INVISIBLE : EnumBlockRenderType.MODEL; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) { - return world.getBlockState(pos.offset(side)) != state || state.getBlock() != this && super.shouldSideBeRendered(state, world, pos, side); - } - - @Override - public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB mask, List list, Entity collidingEntity, boolean bool) { - } - - @Override - public int quantityDropped(Random par1Random) { - return 0; - } - - @Override - public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) { - return true; - } - - @Override - public boolean isAir(IBlockState state, IBlockAccess world, BlockPos blockPos) { - return true; - } - - @Override - public boolean hasTileEntity(IBlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileSpectralBlock(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockTeleposer.java b/src/main/java/WayofTime/bloodmagic/block/BlockTeleposer.java deleted file mode 100644 index 22fb0307..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/BlockTeleposer.java +++ /dev/null @@ -1,66 +0,0 @@ -package WayofTime.bloodmagic.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.ItemTelepositionFocus; -import WayofTime.bloodmagic.tile.TileTeleposer; -import WayofTime.bloodmagic.util.Constants; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class BlockTeleposer extends BlockContainer implements IVariantProvider, IBMBlock { - public BlockTeleposer() { - super(Material.ROCK); - - setCreativeTab(BloodMagic.TAB_BM); - setUnlocalizedName(BloodMagic.MODID + ".teleposer"); - setHardness(2.0F); - setResistance(5.0F); - } - - @Override - public EnumBlockRenderType getRenderType(IBlockState state) { - return EnumBlockRenderType.MODEL; - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack playerItem = player.getHeldItem(hand); - - if (playerItem.getItem() instanceof ItemTelepositionFocus) - ((ItemTelepositionFocus) playerItem.getItem()).setBlockPos(playerItem, world, pos); - else if (world.getTileEntity(pos) instanceof TileTeleposer) - player.openGui(BloodMagic.instance, Constants.Gui.TELEPOSER_GUI, world, pos.getX(), pos.getY(), pos.getZ()); - - return true; - } - - @Override - public void breakBlock(World world, BlockPos blockPos, IBlockState blockState) { - TileTeleposer tileTeleposer = (TileTeleposer) world.getTileEntity(blockPos); - if (tileTeleposer != null) - tileTeleposer.dropItems(); - - super.breakBlock(world, blockPos, blockState); - } - - @Override - public TileEntity createNewTileEntity(World worldIn, int meta) { - return new TileTeleposer(); - } - - @Override - public ItemBlock getItem() { - return new ItemBlock(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/IBMBlock.java b/src/main/java/WayofTime/bloodmagic/block/IBMBlock.java deleted file mode 100644 index 7dd5b818..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/IBMBlock.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.bloodmagic.block; - -import net.minecraft.item.ItemBlock; - -public interface IBMBlock { - - ItemBlock getItem(); -} diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnum.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnum.java deleted file mode 100644 index 0734740e..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnum.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.bloodmagic.block.base; - -import WayofTime.bloodmagic.block.IBMBlock; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.block.base.ItemBlockEnum; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyEnum; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IStringSerializable; -import net.minecraft.util.NonNullList; - -import javax.annotation.Nonnull; - -public class BlockEnum & IStringSerializable> extends Block implements IBMBlock, IVariantProvider { - private final E[] types; - private final PropertyEnum property; - private final BlockStateContainer realStateContainer; - - public BlockEnum(Material material, Class enumClass, String propName) { - super(material); - - this.types = enumClass.getEnumConstants(); - this.property = PropertyEnum.create(propName, enumClass); - this.realStateContainer = createStateContainer(); - setDefaultState(getBlockState().getBaseState()); - } - - public BlockEnum(Material material, Class enumClass) { - this(material, enumClass, "type"); - } - - @Override - protected final BlockStateContainer createBlockState() { - return new BlockStateContainer.Builder(this).build(); // Blank to avoid crashes - } - - @Override - public final BlockStateContainer getBlockState() { - return realStateContainer; - } - - @Override - public IBlockState getStateFromMeta(int meta) { - return getDefaultState().withProperty(property, types[meta]); - } - - @Override - public int getMetaFromState(IBlockState state) { - return state.getValue(property).ordinal(); - } - - @Override - public int damageDropped(IBlockState state) { - return getMetaFromState(state); - } - - @Override - public void getSubBlocks(CreativeTabs tab, NonNullList subBlocks) { - for (E type : types) - subBlocks.add(new ItemStack(this, 1, type.ordinal())); - } - - protected BlockStateContainer createStateContainer() { - return new BlockStateContainer.Builder(this).add(property).build(); - } - - @Override - public ItemBlock getItem() { - return new ItemBlockEnum<>(this); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - if (getItem() == null) - return; - - for (int i = 0; i < types.length; i++) - variants.put(i, getProperty().getName() + "=" + types[i].name()); - } - - public E[] getTypes() { - return types; - } - - public PropertyEnum getProperty() { - return property; - } - - public BlockStateContainer getRealStateContainer() { - return realStateContainer; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillar.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillar.java deleted file mode 100644 index 418c8de7..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillar.java +++ /dev/null @@ -1,124 +0,0 @@ -package WayofTime.bloodmagic.block.base; - -import net.minecraft.block.BlockRotatedPillar; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.IStringSerializable; -import net.minecraft.util.Rotation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import org.apache.commons.lang3.ArrayUtils; - -public class BlockEnumPillar & IStringSerializable> extends BlockEnum { - public BlockEnumPillar(Material material, Class enumClass, String propName) { - super(material, enumClass, propName); - } - - public BlockEnumPillar(Material material, Class enumClass) { - this(material, enumClass, "type"); - } - - @Override - protected BlockStateContainer createStateContainer() { - return new BlockStateContainer.Builder(this).add(getProperty(), BlockRotatedPillar.AXIS).build(); - } - - @Override - public IBlockState getStateFromMeta(int meta) { - IBlockState state = getBlockState().getBaseState().withProperty(this.getProperty(), getTypes()[meta % 5]); - - switch (meta / 5) { - case 0: - state = state.withProperty(BlockRotatedPillar.AXIS, EnumFacing.Axis.Y); - break; - case 1: - state = state.withProperty(BlockRotatedPillar.AXIS, EnumFacing.Axis.X); - break; - case 2: - state = state.withProperty(BlockRotatedPillar.AXIS, EnumFacing.Axis.Z); - break; - default: - state.withProperty(BlockRotatedPillar.AXIS, EnumFacing.Axis.Y); - break; - } - - return state; - } - - @Override - public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { - return new ItemStack(this, 1, damageDropped(state)); - } - - @SuppressWarnings("incomplete-switch") - @Override - public int getMetaFromState(IBlockState state) { - int i = ArrayUtils.indexOf(getTypes(), state.getValue(getProperty())); - - switch (state.getValue(BlockRotatedPillar.AXIS)) { - case X: - i = i + 5; - break; - case Z: - i = i + 10; - break; - } - - return i; - } - - @Override - public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) { - IBlockState state = world.getBlockState(pos); - for (IProperty prop : state.getProperties().keySet()) { - if (prop == BlockRotatedPillar.AXIS) { - world.setBlockState(pos, state.cycleProperty(prop)); - return true; - } - } - return false; - } - - @Override - public IBlockState withRotation(IBlockState state, Rotation rot) { - switch (rot) { - case COUNTERCLOCKWISE_90: - case CLOCKWISE_90: - switch (state.getValue(BlockRotatedPillar.AXIS)) { - case X: - return state.withProperty(BlockRotatedPillar.AXIS, EnumFacing.Axis.Z); - case Z: - return state.withProperty(BlockRotatedPillar.AXIS, EnumFacing.Axis.X); - default: - return state; - } - - default: - return state; - } - } - - @Override - protected ItemStack getSilkTouchDrop(IBlockState state) { - return new ItemStack(this, 1, damageDropped(state)); - } - - - @Override - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { - return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand).withProperty(BlockRotatedPillar.AXIS, facing.getAxis()); - } - - @Override - public int damageDropped(IBlockState state) { - return super.getMetaFromState(state); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillarCap.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillarCap.java deleted file mode 100644 index 365dd875..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumPillarCap.java +++ /dev/null @@ -1,73 +0,0 @@ -package WayofTime.bloodmagic.block.base; - -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyDirection; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import org.apache.commons.lang3.ArrayUtils; - -public class BlockEnumPillarCap & IStringSerializable> extends BlockEnum { - public static final PropertyDirection FACING = PropertyDirection.create("facing"); - - public BlockEnumPillarCap(Material material, Class enumClass, String propName) { - super(material, enumClass, propName); - } - - public BlockEnumPillarCap(Material material, Class enumClass) { - this(material, enumClass, "type"); - } - - @Override - protected BlockStateContainer createStateContainer() { - return new BlockStateContainer.Builder(this).add(getProperty(), FACING).build(); - } - - @Override - public IBlockState getStateFromMeta(int meta) { - IBlockState state = getBlockState().getBaseState().withProperty(this.getProperty(), getTypes()[meta % 2]); - return state.withProperty(FACING, EnumFacing.getFront(meta / 2)); - } - - @Override - public int getMetaFromState(IBlockState state) { - int i = ArrayUtils.indexOf(getTypes(), state.getValue(getProperty())); - return i + 2 * state.getValue(FACING).getIndex(); - } - - @Override - public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { - return new ItemStack(this, 1, damageDropped(state)); - } - - @Override - public IBlockState withRotation(IBlockState state, Rotation rot) { - return state.withProperty(FACING, rot.rotate(state.getValue(FACING))); - } - - @Override - public IBlockState withMirror(IBlockState state, Mirror mirrorIn) { - return state.withRotation(mirrorIn.toRotation(state.getValue(FACING))); - } - - @Override - protected ItemStack getSilkTouchDrop(IBlockState state) { - return new ItemStack(this, 1, damageDropped(state)); - } - - @Override - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { - return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand).withProperty(FACING, facing); - } - - @Override - public int damageDropped(IBlockState state) { - return super.getMetaFromState(state); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java deleted file mode 100644 index 7a0203c4..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumStairs.java +++ /dev/null @@ -1,343 +0,0 @@ -package WayofTime.bloodmagic.block.base; - -import com.google.common.collect.Lists; -import net.minecraft.block.BlockHorizontal; -import net.minecraft.block.BlockStairs; -import net.minecraft.block.BlockStairs.EnumHalf; -import net.minecraft.block.BlockStairs.EnumShape; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyDirection; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.*; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeModContainer; -import org.apache.commons.lang3.ArrayUtils; - -import javax.annotation.Nullable; -import java.util.List; - -public class BlockEnumStairs & IStringSerializable> extends BlockEnum { - public static final PropertyDirection FACING = BlockHorizontal.FACING; - - protected static final AxisAlignedBB AABB_SLAB_TOP = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 1.0D, 1.0D, 1.0D); - protected static final AxisAlignedBB AABB_QTR_TOP_WEST = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 0.5D, 1.0D, 1.0D); - protected static final AxisAlignedBB AABB_QTR_TOP_EAST = new AxisAlignedBB(0.5D, 0.5D, 0.0D, 1.0D, 1.0D, 1.0D); - protected static final AxisAlignedBB AABB_QTR_TOP_NORTH = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 1.0D, 1.0D, 0.5D); - protected static final AxisAlignedBB AABB_QTR_TOP_SOUTH = new AxisAlignedBB(0.0D, 0.5D, 0.5D, 1.0D, 1.0D, 1.0D); - protected static final AxisAlignedBB AABB_OCT_TOP_NW = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 0.5D, 1.0D, 0.5D); - protected static final AxisAlignedBB AABB_OCT_TOP_NE = new AxisAlignedBB(0.5D, 0.5D, 0.0D, 1.0D, 1.0D, 0.5D); - protected static final AxisAlignedBB AABB_OCT_TOP_SW = new AxisAlignedBB(0.0D, 0.5D, 0.5D, 0.5D, 1.0D, 1.0D); - protected static final AxisAlignedBB AABB_OCT_TOP_SE = new AxisAlignedBB(0.5D, 0.5D, 0.5D, 1.0D, 1.0D, 1.0D); - protected static final AxisAlignedBB AABB_SLAB_BOTTOM = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); - protected static final AxisAlignedBB AABB_QTR_BOT_WEST = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 1.0D); - protected static final AxisAlignedBB AABB_QTR_BOT_EAST = new AxisAlignedBB(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); - protected static final AxisAlignedBB AABB_QTR_BOT_NORTH = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D); - protected static final AxisAlignedBB AABB_QTR_BOT_SOUTH = new AxisAlignedBB(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D); - protected static final AxisAlignedBB AABB_OCT_BOT_NW = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 0.5D); - protected static final AxisAlignedBB AABB_OCT_BOT_NE = new AxisAlignedBB(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D); - protected static final AxisAlignedBB AABB_OCT_BOT_SW = new AxisAlignedBB(0.0D, 0.0D, 0.5D, 0.5D, 0.5D, 1.0D); - protected static final AxisAlignedBB AABB_OCT_BOT_SE = new AxisAlignedBB(0.5D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D); - - public BlockEnumStairs(Material material, Class enumClass, String propName) { - super(material, enumClass, propName); - } - - public BlockEnumStairs(Material material, Class enumClass) { - this(material, enumClass, "type"); - } - - @Override - protected BlockStateContainer createStateContainer() { - return new BlockStateContainer.Builder(this).add(getProperty(), FACING, BlockStairs.HALF, BlockStairs.SHAPE).build(); - } - - @Override - public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean bool) { - state = this.getActualState(state, worldIn, pos); - - for (AxisAlignedBB axisalignedbb : getCollisionBoxList(state)) { - addCollisionBoxToList(pos, entityBox, collidingBoxes, axisalignedbb); - } - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - @Override - public boolean isFullCube(IBlockState state) { - return false; - } - - @Override - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { - IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand); - state = state.withProperty(FACING, placer.getHorizontalFacing()).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.STRAIGHT); - return facing != EnumFacing.DOWN && (facing == EnumFacing.UP || (double) hitY <= 0.5D) ? state.withProperty(BlockStairs.HALF, BlockStairs.EnumHalf.BOTTOM) : state.withProperty(BlockStairs.HALF, BlockStairs.EnumHalf.TOP); - } - - @Override - public RayTraceResult collisionRayTrace(IBlockState blockState, World worldIn, BlockPos pos, Vec3d start, Vec3d end) { - List list = Lists.newArrayList(); - - for (AxisAlignedBB axisalignedbb : getCollisionBoxList(this.getActualState(blockState, worldIn, pos))) { - list.add(this.rayTrace(pos, start, end, axisalignedbb)); - } - - RayTraceResult rayTrace = null; - double d1 = 0.0D; - - for (RayTraceResult raytraceresult : list) { - if (raytraceresult != null) { - double d0 = raytraceresult.hitVec.squareDistanceTo(end); - - if (d0 > d1) { - rayTrace = raytraceresult; - d1 = d0; - } - } - } - - return rayTrace; - } - - // Meta looks like: {1|11|1} = {HALF|FACING|TYPE} - @Override - public IBlockState getStateFromMeta(int meta) { - IBlockState state = getBlockState().getBaseState().withProperty(BlockStairs.HALF, (meta & 8) > 0 ? BlockStairs.EnumHalf.TOP : BlockStairs.EnumHalf.BOTTOM); - state = state.withProperty(FACING, EnumFacing.getFront(5 - (meta & 6) / 2)).withProperty(this.getProperty(), getTypes()[meta % 2]); - return state; - } - - // Meta looks like: {1|11|1} = {HALF|FACING|TYPE} - @Override - public int getMetaFromState(IBlockState state) { - int i = 0; - - if (state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP) { - i |= 4; - } - - i = i | 5 - state.getValue(FACING).getIndex(); - return i * 2 + ArrayUtils.indexOf(getTypes(), state.getValue(getProperty())); - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { - return state.withProperty(BlockStairs.SHAPE, getStairsShape(state, worldIn, pos)); - } - - @Override - public IBlockState withRotation(IBlockState state, Rotation rot) { - return state.withProperty(FACING, rot.rotate(state.getValue(FACING))); - } - - @SuppressWarnings("incomplete-switch") - @Override - public IBlockState withMirror(IBlockState state, Mirror mirrorIn) { - EnumFacing facing = state.getValue(FACING); - BlockStairs.EnumShape stairShape = state.getValue(BlockStairs.SHAPE); - - switch (mirrorIn) { - case LEFT_RIGHT: - - if (facing.getAxis() == EnumFacing.Axis.Z) { - switch (stairShape) { - case OUTER_LEFT: - return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.OUTER_RIGHT); - case OUTER_RIGHT: - return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.OUTER_LEFT); - case INNER_RIGHT: - return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.INNER_LEFT); - case INNER_LEFT: - return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.INNER_RIGHT); - default: - return state.withRotation(Rotation.CLOCKWISE_180); - } - } - - break; - case FRONT_BACK: - - if (facing.getAxis() == EnumFacing.Axis.X) { - switch (stairShape) { - case OUTER_LEFT: - return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.OUTER_RIGHT); - case OUTER_RIGHT: - return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.OUTER_LEFT); - case INNER_RIGHT: - return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.INNER_RIGHT); - case INNER_LEFT: - return state.withRotation(Rotation.CLOCKWISE_180).withProperty(BlockStairs.SHAPE, BlockStairs.EnumShape.INNER_LEFT); - case STRAIGHT: - return state.withRotation(Rotation.CLOCKWISE_180); - } - } - } - - return super.withMirror(state, mirrorIn); - } - - @Override - protected ItemStack getSilkTouchDrop(IBlockState state) { - return new ItemStack(this, 1, damageDropped(state)); - } - - @Override - public int damageDropped(IBlockState state) { - return super.getMetaFromState(state); - } - - @Override - public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { - return new ItemStack(this, 1, damageDropped(state)); - } - - @Override - public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { - if (ForgeModContainer.disableStairSlabCulling) - return super.doesSideBlockRendering(state, world, pos, face); - - if (state.isOpaqueCube()) - return true; - - state = this.getActualState(state, world, pos); - - EnumHalf half = state.getValue(BlockStairs.HALF); - EnumFacing side = state.getValue(FACING); - EnumShape shape = state.getValue(BlockStairs.SHAPE); - if (face == EnumFacing.UP) - return half == EnumHalf.TOP; - if (face == EnumFacing.DOWN) - return half == EnumHalf.BOTTOM; - if (shape == EnumShape.OUTER_LEFT || shape == EnumShape.OUTER_RIGHT) - return false; - if (face == side) - return true; - if (shape == EnumShape.INNER_LEFT && face.rotateY() == side) - return true; - if (shape == EnumShape.INNER_RIGHT && face.rotateYCCW() == side) - return true; - return false; - } - - private static List getCollisionBoxList(IBlockState state) { - List list = Lists.newArrayList(); - boolean flag = state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; - list.add(flag ? AABB_SLAB_TOP : AABB_SLAB_BOTTOM); - BlockStairs.EnumShape stairShape = state.getValue(BlockStairs.SHAPE); - - if (stairShape == BlockStairs.EnumShape.STRAIGHT || stairShape == BlockStairs.EnumShape.INNER_LEFT || stairShape == BlockStairs.EnumShape.INNER_RIGHT) { - list.add(getCollQuarterBlock(state)); - } - - if (stairShape != BlockStairs.EnumShape.STRAIGHT) { - list.add(getCollEighthBlock(state)); - } - - return list; - } - - private static AxisAlignedBB getCollQuarterBlock(IBlockState state) { - boolean flag = state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; - - switch (state.getValue(FACING)) { - case NORTH: - default: - return flag ? AABB_QTR_BOT_NORTH : AABB_QTR_TOP_NORTH; - case SOUTH: - return flag ? AABB_QTR_BOT_SOUTH : AABB_QTR_TOP_SOUTH; - case WEST: - return flag ? AABB_QTR_BOT_WEST : AABB_QTR_TOP_WEST; - case EAST: - return flag ? AABB_QTR_BOT_EAST : AABB_QTR_TOP_EAST; - } - } - - private static AxisAlignedBB getCollEighthBlock(IBlockState state) { - EnumFacing facing = state.getValue(FACING); - EnumFacing newFacing; - - switch (state.getValue(BlockStairs.SHAPE)) { - case OUTER_LEFT: - default: - newFacing = facing; - break; - case OUTER_RIGHT: - newFacing = facing.rotateY(); - break; - case INNER_RIGHT: - newFacing = facing.getOpposite(); - break; - case INNER_LEFT: - newFacing = facing.rotateYCCW(); - } - - boolean isTop = state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; - - switch (newFacing) { - case NORTH: - default: - return isTop ? AABB_OCT_BOT_NW : AABB_OCT_TOP_NW; - case SOUTH: - return isTop ? AABB_OCT_BOT_SE : AABB_OCT_TOP_SE; - case WEST: - return isTop ? AABB_OCT_BOT_SW : AABB_OCT_TOP_SW; - case EAST: - return isTop ? AABB_OCT_BOT_NE : AABB_OCT_TOP_NE; - } - } - - private static BlockStairs.EnumShape getStairsShape(IBlockState state, IBlockAccess world, BlockPos pos) { - EnumFacing facing = state.getValue(FACING); - IBlockState offsetState = world.getBlockState(pos.offset(facing)); - - if (isBlockStairs(offsetState) && state.getValue(BlockStairs.HALF) == offsetState.getValue(BlockStairs.HALF)) { - EnumFacing offsetFacing = offsetState.getValue(FACING); - - if (offsetFacing.getAxis() != state.getValue(FACING).getAxis() && isDifferentStairs(state, world, pos, offsetFacing.getOpposite())) { - if (offsetFacing == facing.rotateYCCW()) { - return BlockStairs.EnumShape.OUTER_LEFT; - } - - return BlockStairs.EnumShape.OUTER_RIGHT; - } - } - - IBlockState oppositeOffsetState = world.getBlockState(pos.offset(facing.getOpposite())); - - if (isBlockStairs(oppositeOffsetState) && state.getValue(BlockStairs.HALF) == oppositeOffsetState.getValue(BlockStairs.HALF)) { - EnumFacing oppositeOffsetFacing = oppositeOffsetState.getValue(FACING); - - if (oppositeOffsetFacing.getAxis() != (state.getValue(FACING)).getAxis() && isDifferentStairs(state, world, pos, oppositeOffsetFacing)) { - if (oppositeOffsetFacing == facing.rotateYCCW()) { - return BlockStairs.EnumShape.INNER_LEFT; - } - - return BlockStairs.EnumShape.INNER_RIGHT; - } - } - - return BlockStairs.EnumShape.STRAIGHT; - } - - private static boolean isDifferentStairs(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing facing) { - IBlockState offsetState = world.getBlockState(pos.offset(facing)); - return !isBlockStairs(offsetState) || offsetState.getValue(FACING) != state.getValue(FACING) || offsetState.getValue(BlockStairs.HALF) != state.getValue(BlockStairs.HALF); - } - - public static boolean isBlockStairs(IBlockState state) { - return state.getBlock() instanceof BlockStairs || state.getBlock() instanceof BlockEnumStairs; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumWall.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumWall.java deleted file mode 100644 index 325689e6..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockEnumWall.java +++ /dev/null @@ -1,122 +0,0 @@ -package WayofTime.bloodmagic.block.base; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockFenceGate; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyBool; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.IStringSerializable; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class BlockEnumWall & IStringSerializable> extends BlockEnum { - public static final PropertyBool UP = PropertyBool.create("up"); - public static final PropertyBool NORTH = PropertyBool.create("north"); - public static final PropertyBool EAST = PropertyBool.create("east"); - public static final PropertyBool SOUTH = PropertyBool.create("south"); - public static final PropertyBool WEST = PropertyBool.create("west"); - protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[]{new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), - new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; - protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[]{AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), - AABB_BY_INDEX[15].setMaxY(1.5D)}; - - // Most of this is copied from BlockWall - if there is an issue when porting, look there first. - public BlockEnumWall(Material material, Class enumClass, String propName) { - super(material, enumClass, propName); - } - - public BlockEnumWall(Material material, Class enumClass) { - this(material, enumClass, "type"); - } - - @Override - protected BlockStateContainer createStateContainer() { - return new BlockStateContainer.Builder(this).add(getProperty(), UP, NORTH, EAST, SOUTH, WEST).build(); - } - - @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - state = state.getActualState(source, pos); - return AABB_BY_INDEX[getAABBIndex(state)]; - } - - @Override - public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) { - blockState = blockState.getActualState(worldIn, pos); - return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)]; - } - - public boolean isFullCube(IBlockState state) { - return false; - } - - public boolean isPassable(IBlockAccess worldIn, BlockPos pos) { - return false; - } - - @Override - public boolean isOpaqueCube(IBlockState state) { - return false; - } - - private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos) { - IBlockState worldState = worldIn.getBlockState(pos); - Block block = worldState.getBlock(); - return block != Blocks.BARRIER && (!(block != this && !(block instanceof BlockFenceGate)) || ((worldState.getMaterial().isOpaque() && worldState.isFullCube()) && worldState.getMaterial() != Material.GOURD)); - } - - @SideOnly(Side.CLIENT) - @Override - public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) { - return side != EnumFacing.DOWN || super.shouldSideBeRendered(blockState, blockAccess, pos, side); - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { - boolean canNorth = this.canConnectTo(worldIn, pos.north()); - boolean canEast = this.canConnectTo(worldIn, pos.east()); - boolean canSouth = this.canConnectTo(worldIn, pos.south()); - boolean canWest = this.canConnectTo(worldIn, pos.west()); - boolean flag4 = canNorth && !canEast && canSouth && !canWest || !canNorth && canEast && !canSouth && canWest; - return state.withProperty(UP, !flag4 || !worldIn.isAirBlock(pos.up())).withProperty(NORTH, canNorth).withProperty(EAST, canEast).withProperty(SOUTH, canSouth).withProperty(WEST, canWest); - } - - @Override - protected ItemStack getSilkTouchDrop(IBlockState state) { - return new ItemStack(this, 1, damageDropped(state)); - } - - @Override - public int damageDropped(IBlockState state) { - return super.getMetaFromState(state); - } - - private static int getAABBIndex(IBlockState state) { - int i = 0; - - if (state.getValue(NORTH)) { - i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); - } - - if (state.getValue(EAST)) { - i |= 1 << EnumFacing.EAST.getHorizontalIndex(); - } - - if (state.getValue(SOUTH)) { - i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); - } - - if (state.getValue(WEST)) { - i |= 1 << EnumFacing.WEST.getHorizontalIndex(); - } - - return i; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/base/BlockInteger.java b/src/main/java/WayofTime/bloodmagic/block/base/BlockInteger.java deleted file mode 100644 index 3e2a13f9..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/base/BlockInteger.java +++ /dev/null @@ -1,81 +0,0 @@ -package WayofTime.bloodmagic.block.base; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; - -/** - * Creates a block that has multiple meta-based states. - *

- * These states will be numbered 0 through {@code maxMeta}. - */ -public class BlockInteger extends Block { - private final int maxMeta; - private final PropertyInteger property; - private final BlockStateContainer realStateContainer; - - public BlockInteger(Material material, int maxMeta, String propName) { - super(material); - - this.maxMeta = maxMeta; - this.property = PropertyInteger.create(propName, 0, maxMeta); - this.realStateContainer = createStateContainer(); - setDefaultState(getBlockState().getBaseState()); - } - - public BlockInteger(Material material, int maxMeta) { - this(material, maxMeta, "meta"); - } - - @Override - protected final BlockStateContainer createBlockState() { - return new BlockStateContainer.Builder(this).build(); // Blank to avoid crashes - } - - @Override - public final BlockStateContainer getBlockState() { - return realStateContainer; - } - - @Override - public IBlockState getStateFromMeta(int meta) { - return getDefaultState().withProperty(property, meta); - } - - @Override - public int getMetaFromState(IBlockState state) { - return state.getValue(property); - } - - @Override - public int damageDropped(IBlockState state) { - return getMetaFromState(state); - } - - @Override - public void getSubBlocks(CreativeTabs tab, NonNullList subBlocks) { - for (int i = 0; i < maxMeta; i++) - subBlocks.add(new ItemStack(this, 1, i)); - } - - protected BlockStateContainer createStateContainer() { - return new BlockStateContainer.Builder(this).add(property).build(); - } - - public int getMaxMeta() { - return maxMeta; - } - - public PropertyInteger getProperty() { - return property; - } - - public BlockStateContainer getRealStateContainer() { - return realStateContainer; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumDecorative.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumDecorative.java deleted file mode 100644 index d9cdcdff..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumDecorative.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumDecorative implements IStringSerializable { - BLOODSTONE_TILE, - BLOODSTONE_BRICK, - CRYSTAL_TILE, - CRYSTAL_BRICK,; - - @Override - public String toString() { - return name().toLowerCase(Locale.ROOT); - } - - @Override - public String getName() { - return toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock1.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock1.java deleted file mode 100644 index 84b42602..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock1.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumDemonBlock1 implements IStringSerializable { - BRICK1_RAW, - BRICK1_CORROSIVE, - BRICK1_DESTRUCTIVE, - BRICK1_VENGEFUL, - BRICK1_STEADFAST; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock2.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock2.java deleted file mode 100644 index b9a35aab..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock2.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumDemonBlock2 implements IStringSerializable { - SMALLBRICK_RAW, - SMALLBRICK_CORROSIVE, - SMALLBRICK_DESTRUCTIVE, - SMALLBRICK_VENGEFUL, - SMALLBRICK_STEADFAST, - TILE_RAW, - TILE_CORROSIVE, - TILE_DESTRUCTIVE, - TILE_VENGEFUL, - TILE_STEADFAST, - TILESPECIAL_RAW, - TILESPECIAL_CORROSIVE, - TILESPECIAL_DESTRUCTIVE, - TILESPECIAL_VENGEFUL, - TILESPECIAL_STEADFAST; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock3.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock3.java deleted file mode 100644 index c7a54ac6..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumDemonBlock3.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumDemonBlock3 implements IStringSerializable { - STONE_RAW, - STONE_CORROSIVE, - STONE_DESTRUCTIVE, - STONE_VENGEFUL, - STONE_STEADFAST, - POLISHED_RAW, - POLISHED_CORROSIVE, - POLISHED_DESTRUCTIVE, - POLISHED_VENGEFUL, - POLISHED_STEADFAST, - METAL_RAW, - METAL_CORROSIVE, - METAL_DESTRUCTIVE, - METAL_VENGEFUL, - METAL_STEADFAST; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumInversionCap.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumInversionCap.java deleted file mode 100644 index b760a46b..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumInversionCap.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumInversionCap implements IStringSerializable { - RAW_BOTTOM, - RAW_TOP, - CORROSIVE_BOTTOM, - CORROSIVE_TOP, - DESTRUCTIVE_BOTTOM, - DESTRUCTIVE_TOP, - VENGEFUL_BOTTOM, - VENGEFUL_TOP, - STEADFAST_BOTTOM, - STEADFAST_TOP; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumMimic.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumMimic.java deleted file mode 100644 index 18e2053e..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumMimic.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumMimic implements IStringSerializable { - NOHITBOX, - SOLIDOPAQUE, - SOLIDCLEAR, - SOLIDLIGHT, - SENTIENT; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumPath.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumPath.java deleted file mode 100644 index 79c768bb..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumPath.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumPath implements IStringSerializable { - WOOD, - WOODTILE, - STONE, - STONETILE, - WORNSTONE, - WORNSTONETILE, - OBSIDIAN, - OBSIDIANTILE; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumRitualController.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumRitualController.java deleted file mode 100644 index 531ab6a2..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumRitualController.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumRitualController implements IStringSerializable { - MASTER, - IMPERFECT, - INVERTED,; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType.java deleted file mode 100644 index 01c05b88..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumSubWillType implements IStringSerializable { - RAW, - CORROSIVE, - DESTRUCTIVE, - VENGEFUL, - STEADFAST; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } - - public EnumDemonWillType getType() { - String name = name(); - - if (this == RAW) - name = EnumDemonWillType.DEFAULT.name(); - - return EnumDemonWillType.valueOf(name); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType1.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType1.java deleted file mode 100644 index 4f51f8e8..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType1.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumSubWillType1 implements IStringSerializable { - RAW, - CORROSIVE; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType2.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType2.java deleted file mode 100644 index 5f1a6aca..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType2.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumSubWillType2 implements IStringSerializable { - DESTRUCTIVE, - VENGEFUL; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType3.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType3.java deleted file mode 100644 index 963704e8..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumSubWillType3.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumSubWillType3 implements IStringSerializable { - STEADFAST; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/EnumWillWall.java b/src/main/java/WayofTime/bloodmagic/block/enums/EnumWillWall.java deleted file mode 100644 index 172c6d2b..00000000 --- a/src/main/java/WayofTime/bloodmagic/block/enums/EnumWillWall.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.block.enums; - -import net.minecraft.util.IStringSerializable; - -import java.util.Locale; - -public enum EnumWillWall implements IStringSerializable { - BRICK_RAW, - BRICK_CORROSIVE, - BRICK_DESTRUCTIVE, - BRICK_VENGEFUL, - BRICK_STEADFAST, - SMALLBRICK_RAW, - SMALLBRICK_CORROSIVE, - SMALLBRICK_DESTRUCTIVE, - SMALLBRICK_VENGEFUL, - SMALLBRICK_STEADFAST, - LARGE_RAW, - LARGE_CORROSIVE, - LARGE_DESTRUCTIVE, - LARGE_VENGEFUL, - LARGE_STEADFAST; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java b/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java deleted file mode 100644 index fb8ec3c2..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.bloodmagic.client; - -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.function.Consumer; - -/** - * Provides a custom {@link ItemMeshDefinition} for automatic registration of - * renders. - */ -public interface IMeshProvider { - /** - * Gets the custom ItemMeshDefinition to use for the item. - * - * @return - the custom ItemMeshDefinition to use for the item. - */ - @SideOnly(Side.CLIENT) - ItemMeshDefinition getMeshDefinition(); - - /** - * Gathers all possible variants for this item - */ - void gatherVariants(Consumer variants); - - /** - * If a custom ResourceLocation is required, return it here. - *

- * Can be null if unneeded. - * - * @return - The custom ResourceLocation - */ - @Nullable - default ResourceLocation getCustomLocation() { - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java b/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java deleted file mode 100644 index cffbd900..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.Block; - -import javax.annotation.Nonnull; - -public interface IVariantProvider { - - default void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, this instanceof Block ? "normal" : "inventory"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiAlchemyTable.java deleted file mode 100644 index 3392b3f3..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiAlchemyTable.java +++ /dev/null @@ -1,65 +0,0 @@ -package WayofTime.bloodmagic.client.gui; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.tile.TileAlchemyTable; -import WayofTime.bloodmagic.tile.container.ContainerAlchemyTable; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiAlchemyTable extends GuiContainer { - public IInventory tileTable; - - public GuiAlchemyTable(InventoryPlayer playerInventory, IInventory tileTable) { - super(new ContainerAlchemyTable(playerInventory, tileTable)); - this.tileTable = tileTable; - this.xSize = 176; - this.ySize = 205; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - super.drawScreen(mouseX, mouseY, partialTicks); - this.renderHoveredToolTip(mouseX, mouseY); - } - - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - this.fontRenderer.drawString(TextHelper.localize("tile.bloodmagic.alchemyTable.name"), 8, 5, 4210752); - this.fontRenderer.drawString(TextHelper.localize("container.inventory"), 8, 111, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - ResourceLocation soulForgeGuiTextures = new ResourceLocation(BloodMagic.MODID + ":textures/gui/alchemyTable.png"); - this.mc.getTextureManager().bindTexture(soulForgeGuiTextures); - int i = (this.width - this.xSize) / 2; - int j = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); - - int l = this.getCookProgressScaled(90); - this.drawTexturedModalRect(i + 115, j + 14 + 90 - l, 176, 90 - l, 18, l); - - for (int slotId = 0; slotId < 6; slotId++) { - if (!((TileAlchemyTable) tileTable).isInputSlotAccessible(slotId)) { - Slot slot = this.inventorySlots.getSlot(slotId); - - this.drawTexturedModalRect(i + slot.xPos, j + slot.yPos, 195, 1, 16, 16); - } - } - } - - public int getCookProgressScaled(int scale) { - double progress = ((TileAlchemyTable) tileTable).getProgressForGui(); - return (int) (progress * scale); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiBloodMagicConfig.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiBloodMagicConfig.java deleted file mode 100644 index f96654ca..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiBloodMagicConfig.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.bloodmagic.client.gui; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.client.hud.ConfigEntryEditHUD; -import com.google.common.collect.Lists; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.common.config.ConfigElement; -import net.minecraftforge.fml.client.IModGuiFactory; -import net.minecraftforge.fml.client.config.DummyConfigElement; -import net.minecraftforge.fml.client.config.GuiConfig; -import net.minecraftforge.fml.client.config.IConfigElement; - -import java.util.Collections; -import java.util.List; -import java.util.Set; - -public class GuiBloodMagicConfig extends GuiConfig { - - public GuiBloodMagicConfig(GuiScreen parentScreen) { - super(parentScreen, getElements(), BloodMagic.MODID, false, false, BloodMagic.NAME); - } - - public static List getElements() { - List elements = Lists.newArrayList(); - - elements.addAll(ConfigElement.from(ConfigHandler.class).getChildElements()); - elements.add(new ConfigElement(BloodMagic.RITUAL_MANAGER.getConfig().getCategory("rituals"))); - if (Minecraft.getMinecraft().world != null) - elements.add(new DummyElementEditHUD(BloodMagic.NAME, "config." + BloodMagic.MODID + ".edit_hud")); - - return elements; - } - - public static class DummyElementEditHUD extends DummyConfigElement.DummyCategoryElement { - - public DummyElementEditHUD(String name, String langKey) { - super(name, langKey, Collections.emptyList(), ConfigEntryEditHUD.class); - } - } - - public static class Factory implements IModGuiFactory { - @Override - public void initialize(Minecraft minecraftInstance) { - - } - - @Override - public boolean hasConfigGui() { - return true; - } - - @Override - public GuiScreen createConfigGui(GuiScreen parentScreen) { - return new GuiBloodMagicConfig(parentScreen); - } - - @Override - public Set runtimeGuiCategories() { - return null; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiHandler.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiHandler.java deleted file mode 100644 index 80705ac1..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiHandler.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.bloodmagic.client.gui; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.item.inventory.ContainerHolding; -import WayofTime.bloodmagic.item.inventory.InventoryHolding; -import WayofTime.bloodmagic.tile.TileAlchemyTable; -import WayofTime.bloodmagic.tile.TileSoulForge; -import WayofTime.bloodmagic.tile.TileTeleposer; -import WayofTime.bloodmagic.tile.container.*; -import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; -import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.network.IGuiHandler; - -public class GuiHandler implements IGuiHandler { - @Override - public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { - BlockPos pos = new BlockPos(x, y, z); - - switch (id) { - case Constants.Gui.TELEPOSER_GUI: - return new ContainerTeleposer(player.inventory, (TileTeleposer) world.getTileEntity(pos)); - case Constants.Gui.SOUL_FORGE_GUI: - return new ContainerSoulForge(player.inventory, (TileSoulForge) world.getTileEntity(pos)); - case Constants.Gui.ROUTING_NODE_GUI: - return new ContainerItemRoutingNode(player.inventory, (TileFilteredRoutingNode) world.getTileEntity(pos)); - case Constants.Gui.MASTER_ROUTING_NODE_GUI: - return new ContainerMasterRoutingNode(player.inventory, (TileMasterRoutingNode) world.getTileEntity(pos)); - case Constants.Gui.ALCHEMY_TABLE_GUI: - return new ContainerAlchemyTable(player.inventory, (TileAlchemyTable) world.getTileEntity(pos)); - case Constants.Gui.SIGIL_HOLDING_GUI: - return new ContainerHolding(player, new InventoryHolding(player.getHeldItemMainhand())); - } - - return null; - } - - @Override - public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { - if (world instanceof WorldClient) { - BlockPos pos = new BlockPos(x, y, z); - - switch (id) { - case Constants.Gui.TELEPOSER_GUI: - return new GuiTeleposer(player.inventory, (TileTeleposer) world.getTileEntity(pos)); - case Constants.Gui.SOUL_FORGE_GUI: - return new GuiSoulForge(player.inventory, (TileSoulForge) world.getTileEntity(pos)); - case Constants.Gui.ROUTING_NODE_GUI: - return new GuiItemRoutingNode(player.inventory, (TileFilteredRoutingNode) world.getTileEntity(pos)); - case Constants.Gui.MASTER_ROUTING_NODE_GUI: - return new GuiMasterRoutingNode(player.inventory, (TileMasterRoutingNode) world.getTileEntity(pos)); - case Constants.Gui.ALCHEMY_TABLE_GUI: - return new GuiAlchemyTable(player.inventory, (TileAlchemyTable) world.getTileEntity(pos)); - case Constants.Gui.SIGIL_HOLDING_GUI: - return new GuiHolding(player, new InventoryHolding(player.getHeldItemMainhand())); - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiHolding.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiHolding.java deleted file mode 100644 index 95fbd50f..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiHolding.java +++ /dev/null @@ -1,57 +0,0 @@ -package WayofTime.bloodmagic.client.gui; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.inventory.ContainerHolding; -import WayofTime.bloodmagic.item.inventory.InventoryHolding; -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiHolding extends GuiContainer { - private ResourceLocation texture = new ResourceLocation(BloodMagic.MODID, "gui/SigilHolding.png"); - private EntityPlayer player; - - public GuiHolding(EntityPlayer player, InventoryHolding inventoryHolding) { - super(new ContainerHolding(player, inventoryHolding)); - xSize = 176; - ySize = 121; - this.player = player; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - super.drawScreen(mouseX, mouseY, partialTicks); - this.renderHoveredToolTip(mouseX, mouseY); - } - - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - //the parameters for drawString are: string, x, y, color - fontRenderer.drawString(TextHelper.localize("item.bloodmagic.sigil.holding.name"), 53, 4, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouse) { - //draw your Gui here, only thing you need to change is the path - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(texture); - int x = (width - xSize) / 2; - int y = (height - ySize) / 2; - this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); - ItemStack held = player.getHeldItem(EnumHand.MAIN_HAND); - if (!held.isEmpty() && held.getItem() == RegistrarBloodMagicItems.SIGIL_HOLDING) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.drawTexturedModalRect(4 + x + 36 * ItemSigilHolding.getCurrentItemOrdinal(player.getHeldItemMainhand()), y + 13, 0, 123, 24, 24); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java deleted file mode 100644 index e879512a..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiItemRoutingNode.java +++ /dev/null @@ -1,200 +0,0 @@ -package WayofTime.bloodmagic.client.gui; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.network.ItemRouterAmountPacketProcessor; -import WayofTime.bloodmagic.network.ItemRouterButtonPacketProcessor; -import WayofTime.bloodmagic.tile.container.ContainerItemRoutingNode; -import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; -import WayofTime.bloodmagic.util.GhostItemHelper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiTextField; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.io.IOException; - -@SideOnly(Side.CLIENT) -public class GuiItemRoutingNode extends GuiContainer { - private GuiTextField textBox; - - private TileFilteredRoutingNode inventory; - private ContainerItemRoutingNode container; - - private int left, top; - - public GuiItemRoutingNode(InventoryPlayer playerInventory, IInventory tileRoutingNode) { - super(new ContainerItemRoutingNode(playerInventory, tileRoutingNode)); - this.xSize = 201; - this.ySize = 169; - inventory = (TileFilteredRoutingNode) tileRoutingNode; - container = (ContainerItemRoutingNode) this.inventorySlots; - } - - private int getCurrentActiveSlotPriority() { - EnumFacing direction = EnumFacing.getFront(inventory.currentActiveSlot); - if (direction != null) { - return inventory.getPriority(direction); - } - - return 0; - } - - @Override - public void initGui() { - super.initGui(); - left = (this.width - this.xSize) / 2; - top = (this.height - this.ySize) / 2; - - this.buttonList.clear(); - this.buttonList.add(new GuiButton(0, left + 176, top + 14, 18, 18, "D")); - this.buttonList.add(new GuiButton(1, left + 176, top + 32, 18, 18, "U")); - this.buttonList.add(new GuiButton(2, left + 176, top + 50, 18, 18, "N")); - this.buttonList.add(new GuiButton(3, left + 176, top + 68, 18, 18, "S")); - this.buttonList.add(new GuiButton(4, left + 176, top + 86, 18, 18, "W")); - this.buttonList.add(new GuiButton(5, left + 176, top + 104, 18, 18, "E")); - this.buttonList.add(new GuiButton(6, left + 160, top + 50, 10, 18, ">")); - this.buttonList.add(new GuiButton(7, left + 132, top + 50, 10, 18, "<")); - disableDirectionalButton(inventory.currentActiveSlot); - - this.textBox = new GuiTextField(0, this.fontRenderer, left + 94, top + 37, 70, 12); - this.textBox.setEnableBackgroundDrawing(false); - this.textBox.setText(""); - } - - @Override - protected void keyTyped(char typedChar, int keyCode) throws IOException { - if (this.textBox.textboxKeyTyped(typedChar, keyCode)) { - if (container.lastGhostSlotClicked != -1) { -// this.renameItem(); - String str = this.textBox.getText(); - int amount = 0; - - if (!str.isEmpty()) { - try { - Integer testVal = Integer.decode(str); - if (testVal != null) { - amount = testVal; - } - } catch (NumberFormatException d) { - } - } - -// inventory.setGhostItemAmount(container.lastGhostSlotClicked, amount); - setValueOfGhostItemInSlot(container.lastGhostSlotClicked, amount); - } - } else { - super.keyTyped(typedChar, keyCode); - } - } - - private void setValueOfGhostItemInSlot(int ghostItemSlot, int amount) { - BloodMagicPacketHandler.INSTANCE.sendToServer(new ItemRouterAmountPacketProcessor(ghostItemSlot, amount, inventory.getPos(), inventory.getWorld())); - } - - /** - * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton - */ - @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { - super.mouseClicked(mouseX, mouseY, mouseButton); - this.textBox.mouseClicked(mouseX, mouseY, mouseButton); - if (container.lastGhostSlotClicked != -1) { - Slot slot = container.getSlot(container.lastGhostSlotClicked + 1); - ItemStack stack = slot.getStack(); - if (!stack.isEmpty()) { - int amount = GhostItemHelper.getItemGhostAmount(stack); - this.textBox.setText("" + amount); - } else { - this.textBox.setText(""); - } - } - } - - /** - * Draws the screen and all the components in it. - */ - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - super.drawScreen(mouseX, mouseY, partialTicks); - this.renderHoveredToolTip(mouseX, mouseY); - - Minecraft.getMinecraft().fontRenderer.drawString(inventory.getName(), xSize, ySize / 4, 4210752); - } - - /** - * Called by the controls from the buttonList when activated. (Mouse pressed - * for buttons) - */ - @Override - protected void actionPerformed(GuiButton button) throws IOException { - if (button.enabled) { - BloodMagicPacketHandler.INSTANCE.sendToServer(new ItemRouterButtonPacketProcessor(button.id, inventory.getPos(), inventory.getWorld())); - if (button.id < 6) { - inventory.currentActiveSlot = button.id; - enableAllDirectionalButtons(); - button.enabled = false; - } - } - } - - private void enableAllDirectionalButtons() { - for (GuiButton button : this.buttonList) { - button.enabled = true; - } - } - - private void disableDirectionalButton(int id) { - this.buttonList.get(id).enabled = false; - } - - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - this.fontRenderer.drawString("" + getCurrentActiveSlotPriority(), 143 + 5, 51 + 4, 0xFFFFFF); - String s = ""; - if (container.lastGhostSlotClicked != -1) { - ItemStack clickedStack = inventorySlots.getSlot(1 + container.lastGhostSlotClicked).getStack(); - if (!clickedStack.isEmpty()) { - s = clickedStack.getDisplayName(); - } - } - - this.fontRenderer.drawStringWithShadow(s.substring(0, Math.min(16, s.length())), 81, 19, 0xFFFFFF); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - ResourceLocation soulForgeGuiTextures = new ResourceLocation(BloodMagic.MODID + ":textures/gui/routingNode.png"); - this.mc.getTextureManager().bindTexture(soulForgeGuiTextures); - this.drawTexturedModalRect(left, top, 0, 0, this.xSize, this.ySize); - GlStateManager.disableLighting(); - GlStateManager.disableBlend(); - this.textBox.drawTextBox(); - } - -// @Override -// public void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack) -// { -// if (slotInd == 0) -// { -// this.nameField.setText(stack == null ? "" : stack.getOwnerName()); -// this.nameField.setEnabled(stack != null); -// -// if (stack != null) -// { -// this.renameItem(); -// } -// } -// } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiMasterRoutingNode.java deleted file mode 100644 index c64d1b21..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiMasterRoutingNode.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.bloodmagic.client.gui; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.tile.container.ContainerMasterRoutingNode; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiMasterRoutingNode extends GuiContainer { - - public GuiMasterRoutingNode(InventoryPlayer playerInventory, IInventory tileRoutingNode) { - super(new ContainerMasterRoutingNode(playerInventory, tileRoutingNode)); - this.xSize = 216; - this.ySize = 216; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - super.drawScreen(mouseX, mouseY, partialTicks); - this.renderHoveredToolTip(mouseX, mouseY); - } - - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { -// this.fontRendererObj.drawString(TextHelper.localize("tile.bloodmagic.soulForge.name"), 8, 5, 4210752); -// this.fontRendererObj.drawString(TextHelper.localize("container.inventory"), 8, 111, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - ResourceLocation soulForgeGuiTextures = new ResourceLocation(BloodMagic.MODID + ":textures/gui/masterRoutingNode.png"); - this.mc.getTextureManager().bindTexture(soulForgeGuiTextures); - int i = (this.width - this.xSize) / 2; - int j = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiSoulForge.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiSoulForge.java deleted file mode 100644 index 6a1d85b0..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiSoulForge.java +++ /dev/null @@ -1,56 +0,0 @@ -package WayofTime.bloodmagic.client.gui; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.tile.TileSoulForge; -import WayofTime.bloodmagic.tile.container.ContainerSoulForge; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiSoulForge extends GuiContainer { - public IInventory tileSoulForge; - - public GuiSoulForge(InventoryPlayer playerInventory, IInventory tileSoulForge) { - super(new ContainerSoulForge(playerInventory, tileSoulForge)); - this.tileSoulForge = tileSoulForge; - this.xSize = 176; - this.ySize = 205; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - super.drawScreen(mouseX, mouseY, partialTicks); - this.renderHoveredToolTip(mouseX, mouseY); - } - - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - this.fontRenderer.drawString(TextHelper.localize("tile.bloodmagic.soulForge.name"), 8, 5, 4210752); - this.fontRenderer.drawString(TextHelper.localize("container.inventory"), 8, 111, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - ResourceLocation soulForgeGuiTextures = new ResourceLocation(BloodMagic.MODID + ":textures/gui/soulForge.png"); - this.mc.getTextureManager().bindTexture(soulForgeGuiTextures); - int i = (this.width - this.xSize) / 2; - int j = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); - - int l = this.getCookProgressScaled(90); - this.drawTexturedModalRect(i + 115, j + 14 + 90 - l, 176, 90 - l, 18, l); - } - - public int getCookProgressScaled(int scale) { - double progress = ((TileSoulForge) tileSoulForge).getProgressForGui(); - return (int) (progress * scale); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiTeleposer.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiTeleposer.java deleted file mode 100644 index e5db4c67..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiTeleposer.java +++ /dev/null @@ -1,42 +0,0 @@ -package WayofTime.bloodmagic.client.gui; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.tile.container.ContainerTeleposer; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GuiTeleposer extends GuiContainer { - public GuiTeleposer(InventoryPlayer playerInventory, IInventory tileTeleposer) { - super(new ContainerTeleposer(playerInventory, tileTeleposer)); - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - this.drawDefaultBackground(); - super.drawScreen(mouseX, mouseY, partialTicks); - this.renderHoveredToolTip(mouseX, mouseY); - } - - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - this.fontRenderer.drawString(TextHelper.localize("tile.bloodmagic.teleposer.name"), 64, 23, 4210752); - this.fontRenderer.drawString(TextHelper.localize("container.inventory"), 8, 47, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - ResourceLocation teleposerGuiTextures = new ResourceLocation(BloodMagic.MODID + ":textures/gui/teleposer.png"); - this.mc.getTextureManager().bindTexture(teleposerGuiTextures); - int i = (this.width - this.xSize) / 2; - int j = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(i, j + 18, 0, 0, this.xSize, this.ySize); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/helper/ShaderHelper.java b/src/main/java/WayofTime/bloodmagic/client/helper/ShaderHelper.java deleted file mode 100644 index 950af569..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/helper/ShaderHelper.java +++ /dev/null @@ -1,182 +0,0 @@ -package WayofTime.bloodmagic.client.helper; - -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraftforge.fml.common.FMLLog; -import org.apache.logging.log4j.Level; -import org.lwjgl.opengl.ARBFragmentShader; -import org.lwjgl.opengl.ARBShaderObjects; -import org.lwjgl.opengl.ARBVertexShader; -import org.lwjgl.opengl.GL11; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; - -/** - * This class was created by . It's distributed as - * part of the Botania Mod. Get the Source Code in github: - * https://github.com/Vazkii/Botania - *

- * Botania is Open Source and distributed under the - * Botania License: http://botaniamod.net/license.php - *

- * File Created @ [Apr 9, 2014, 11:20:26 PM (GMT)] - */ -public final class ShaderHelper { - private static final int VERT_ST = ARBVertexShader.GL_VERTEX_SHADER_ARB; - private static final int FRAG_ST = ARBFragmentShader.GL_FRAGMENT_SHADER_ARB; - - private static final int VERT = 1; - private static final int FRAG = 2; - - private static final String VERT_EXTENSION = ".vsh"; - private static final String FRAG_EXTENSION = ".frag"; - - public static int psiBar; - - public static void init() { - if (!useShaders()) - return; - - psiBar = createProgram("/assets/bloodmagic/shaders/beam", FRAG); - } - - public static void useShader(int shader, int ticks) { - if (!useShaders()) - return; - - ARBShaderObjects.glUseProgramObjectARB(shader); - - if (shader != 0) { - int time = ARBShaderObjects.glGetUniformLocationARB(shader, "time"); - ARBShaderObjects.glUniform1iARB(time, ticks); - } - } - - public static void releaseShader() { - useShader(0, 0); - } - - public static boolean useShaders() { - return OpenGlHelper.shadersSupported; - } - - private static int createProgram(String s, int sides) { - boolean vert = (sides & VERT) != 0; - boolean frag = (sides & FRAG) != 0; - - return createProgram(vert ? (s + VERT_EXTENSION) : null, frag ? (s + FRAG_EXTENSION) : null); - } - - // Most of the code taken from the LWJGL wiki - // http://lwjgl.org/wiki/index.php?title=GLSL_Shaders_with_LWJGL - - private static int createProgram(String vert, String frag) { - int vertId = 0, fragId = 0, program = 0; - if (vert != null) - vertId = createShader(vert, VERT_ST); - if (frag != null) - fragId = createShader(frag, FRAG_ST); - - program = ARBShaderObjects.glCreateProgramObjectARB(); - if (program == 0) - return 0; - - if (vert != null) - ARBShaderObjects.glAttachObjectARB(program, vertId); - if (frag != null) - ARBShaderObjects.glAttachObjectARB(program, fragId); - - ARBShaderObjects.glLinkProgramARB(program); - if (ARBShaderObjects.glGetObjectParameteriARB(program, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) { - FMLLog.log(Level.ERROR, getLogInfo(program)); - return 0; - } - - ARBShaderObjects.glValidateProgramARB(program); - if (ARBShaderObjects.glGetObjectParameteriARB(program, ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) { - FMLLog.log(Level.ERROR, getLogInfo(program)); - return 0; - } - - return program; - } - - private static int createShader(String filename, int shaderType) { - int shader = 0; - try { - shader = ARBShaderObjects.glCreateShaderObjectARB(shaderType); - - if (shader == 0) - return 0; - - ARBShaderObjects.glShaderSourceARB(shader, readFileAsString(filename)); - ARBShaderObjects.glCompileShaderARB(shader); - - if (ARBShaderObjects.glGetObjectParameteriARB(shader, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB) == GL11.GL_FALSE) - throw new RuntimeException("Error creating shader: " + getLogInfo(shader)); - - return shader; - } catch (Exception e) { - ARBShaderObjects.glDeleteObjectARB(shader); - e.printStackTrace(); - return -1; - } - } - - private static String getLogInfo(int obj) { - return ARBShaderObjects.glGetInfoLogARB(obj, ARBShaderObjects.glGetObjectParameteriARB(obj, ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB)); - } - - private static String readFileAsString(String filename) throws Exception { - StringBuilder source = new StringBuilder(); - InputStream in = ShaderHelper.class.getResourceAsStream(filename); - Exception exception = null; - BufferedReader reader; - - if (in == null) - return ""; - - try { - reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); - - Exception innerExc = null; - try { - String line; - while ((line = reader.readLine()) != null) - source.append(line).append('\n'); - } catch (Exception exc) { - exception = exc; - } finally { - try { - reader.close(); - } catch (Exception exc) { - if (innerExc == null) - innerExc = exc; - else - exc.printStackTrace(); - } - } - - if (innerExc != null) - throw innerExc; - } catch (Exception exc) { - exception = exc; - } finally { - try { - in.close(); - } catch (Exception exc) { - if (exception == null) - exception = exc; - else - exc.printStackTrace(); - } - - if (exception != null) - throw exception; - } - - return source.toString(); - } - -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/ConfigEntryEditHUD.java b/src/main/java/WayofTime/bloodmagic/client/hud/ConfigEntryEditHUD.java deleted file mode 100644 index d713e3b6..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/ConfigEntryEditHUD.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.client.hud; - -import net.minecraftforge.fml.client.config.GuiConfig; -import net.minecraftforge.fml.client.config.GuiConfigEntries; -import net.minecraftforge.fml.client.config.IConfigElement; - -public class ConfigEntryEditHUD extends GuiConfigEntries.CategoryEntry { - - public ConfigEntryEditHUD(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement element) { - super(owningScreen, owningEntryList, element); - - this.childScreen = new GuiEditHUD(owningScreen); - } - - @Override - public boolean isDefault() { - return true; - } - - @Override - public void setToDefault() { - ElementRegistry.resetPos(); - } - - @Override - public boolean isChanged() { - return ((GuiEditHUD) childScreen).changes; - } - - @Override - public void undoChanges() { - - } - - @Override - public boolean saveConfigElement() { - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/ElementInfo.java b/src/main/java/WayofTime/bloodmagic/client/hud/ElementInfo.java deleted file mode 100644 index 9544dcdc..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/ElementInfo.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.client.hud; - -import javax.vecmath.Vector2f; - -public class ElementInfo { - - public static final ElementInfo DUMMY = new ElementInfo(new Vector2f(0F, 0F), ElementRegistry.getRandomColor()); - - private final Vector2f defaultPosition; - private final int boxColor; - private Vector2f currentPosition; - - public ElementInfo(Vector2f defaultPosition, int boxColor) { - this.defaultPosition = defaultPosition; - this.boxColor = boxColor; - this.currentPosition = defaultPosition; - } - - public Vector2f getDefaultPosition() { - return defaultPosition; - } - - public int getBoxColor() { - return boxColor; - } - - public ElementInfo setPosition(Vector2f position) { - this.currentPosition = position; - return this; - } - - public Vector2f getPosition() { - return currentPosition; - } - - public void resetPosition() { - this.currentPosition = defaultPosition; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/ElementRegistry.java b/src/main/java/WayofTime/bloodmagic/client/hud/ElementRegistry.java deleted file mode 100644 index d83cb03c..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/ElementRegistry.java +++ /dev/null @@ -1,148 +0,0 @@ -package WayofTime.bloodmagic.client.hud; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.hud.element.HUDElement; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Maps; -import com.google.common.reflect.TypeToken; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.vecmath.Vector2f; -import java.awt.Color; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.function.BiFunction; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID, value = Side.CLIENT) -public class ElementRegistry { - - private static final File CONFIG = new File(Loader.instance().getConfigDir(), BloodMagic.MODID + "/hud_elements.json"); - private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); - private static final Map HUD_ELEMENTS = Maps.newLinkedHashMap(); - private static final Map REVERSE = Maps.newHashMap(); - private static final Map ELEMENT_INFO = Maps.newHashMap(); - - public static void registerHandler(ResourceLocation key, HUDElement element, Vector2f defaultPosition) { - HUD_ELEMENTS.put(key, element); - REVERSE.put(element, key); - - - ELEMENT_INFO.put(key, new ElementInfo(defaultPosition, getRandomColor())); - } - - public static void resetPos() { - ELEMENT_INFO.values().forEach(ElementInfo::resetPosition); - } - - public static List getElements() { - return ImmutableList.copyOf(HUD_ELEMENTS.values()); - } - - public static ResourceLocation getKey(HUDElement element) { - return REVERSE.get(element); - } - - public static int getColor(ResourceLocation element) { - return ELEMENT_INFO.getOrDefault(element, ElementInfo.DUMMY).getBoxColor(); - } - - public static Vector2f getPosition(ResourceLocation element) { - return ELEMENT_INFO.get(element).getPosition(); - } - - public static void setPosition(ResourceLocation element, Vector2f point) { - ELEMENT_INFO.compute(element, (resourceLocation, elementInfo) -> { - if (elementInfo == null) - return new ElementInfo(point, getRandomColor()); - - elementInfo.setPosition(point); - return elementInfo; - }); - } - - public static void save(Map newLocations) { - newLocations.forEach((k, v) -> { - ElementInfo info = ELEMENT_INFO.get(k); - if (info != null) - info.setPosition(v); - }); - - Map toWrite = Maps.newHashMap(); - for (Map.Entry entry : ELEMENT_INFO.entrySet()) - toWrite.put(entry.getKey().toString(), entry.getValue().getPosition()); - - String json = GSON.toJson(toWrite); - try (FileWriter writer = new FileWriter(CONFIG)) { - writer.write(json); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void readConfig() { - if (!CONFIG.exists()) - return; - - try (FileReader reader = new FileReader(CONFIG)) { - Map toLoad = GSON.fromJson(reader, new TypeToken>() {}.getType()); - for (Map.Entry entry : toLoad.entrySet()) { - ElementInfo info = ELEMENT_INFO.get(new ResourceLocation(entry.getKey())); - if (info != null) - info.setPosition(entry.getValue()); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void onRenderOverlay(RenderGameOverlayEvent.Pre event) { - if (event.getType() == RenderGameOverlayEvent.ElementType.HOTBAR) { - ScaledResolution resolution = new ScaledResolution(Minecraft.getMinecraft()); - - for (HUDElement element : HUD_ELEMENTS.values()) { - if (!element.shouldRender(Minecraft.getMinecraft())) - continue; - - Vector2f position = ELEMENT_INFO.get(getKey(element)).getPosition(); - int xPos = (int) (resolution.getScaledWidth_double() * position.x); - if (xPos - element.getWidth() < 0) - xPos *= 2; - if (xPos + element.getWidth() > resolution.getScaledWidth()) - xPos -= element.getWidth(); - - int yPos = (int) (resolution.getScaledHeight_double() * position.y); - if (yPos - element.getHeight() < 0) - yPos *= 2; - if (yPos + element.getHeight() > resolution.getScaledHeight()) - yPos -= element.getHeight(); - - element.draw(event.getResolution(), event.getPartialTicks(), xPos, yPos); - } - } - } - - public static int getRandomColor() { - Random rand = new Random(); - float r = rand.nextFloat() / 2F + 0.5F; - float g = rand.nextFloat() / 2F + 0.5F; - float b = rand.nextFloat() / 2F + 0.5F; - float a = 0.5F; - return new Color(r, g, b, a).getRGB(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/Elements.java b/src/main/java/WayofTime/bloodmagic/client/hud/Elements.java deleted file mode 100644 index cc11d92c..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/Elements.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.bloodmagic.client.hud; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.Sprite; -import WayofTime.bloodmagic.client.hud.element.ElementDemonAura; -import WayofTime.bloodmagic.client.hud.element.ElementDivinedInformation; -import WayofTime.bloodmagic.client.hud.element.ElementHolding; -import WayofTime.bloodmagic.tile.TileAltar; -import WayofTime.bloodmagic.tile.TileIncenseAltar; -import WayofTime.bloodmagic.tile.TileInversionPillar; -import WayofTime.bloodmagic.util.helper.NumeralHelper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.resources.I18n; -import net.minecraft.util.ResourceLocation; -import org.apache.commons.lang3.tuple.Pair; - -import javax.vecmath.Vector2f; -import java.awt.Point; -import java.util.function.Consumer; -import java.util.function.Function; - -public class Elements { - - public static void registerElements() { - ElementRegistry.registerHandler( - new ResourceLocation(BloodMagic.MODID, "blood_altar"), - new ElementDivinedInformation(2, true, TileAltar.class) { - @Override - public void gatherInformation(Consumer>> information) { - // Current tier - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 46, 16, 16), - altar -> altar == null ? "IV" : NumeralHelper.toRoman(altar.getTier().toInt()) - )); - // Stored/Capacity - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 16, 46, 16, 16), - altar -> String.format("%d/%d", altar == null ? 0 : altar.getCurrentBlood(), altar == null ? 10000 : altar.getCapacity()) - )); - } - }, - new Vector2f(0.01F, 0.01F) - ); - - ElementRegistry.registerHandler( - new ResourceLocation(BloodMagic.MODID, "blood_altar_adv"), - new ElementDivinedInformation(5, false, TileAltar.class) { - @Override - public void gatherInformation(Consumer>> information) { - // Current tier - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 46, 16, 16), - altar -> altar == null ? "IV" : NumeralHelper.toRoman(altar.getTier().toInt()) - )); - // Stored/Capacity - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 16, 46, 16, 16), - altar -> String.format("%d/%d", altar == null ? 0 : altar.getCurrentBlood(), altar == null ? 10000 : altar.getCapacity()) - )); - // Crafting progress/Crafting requirement - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 32, 46, 16, 16), - altar -> { - if (altar == null || !altar.isActive()) - return I18n.format("hud.bloodmagic.inactive"); - int progress = altar.getProgress(); - int totalLiquidRequired = altar.getLiquidRequired() * altar.getStackInSlot(0).getCount(); - return String.format("%d/%d", progress, totalLiquidRequired); - } - )); - // Consumption rate - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 48, 46, 16, 16), - altar -> altar == null ? "0" : String.valueOf((int) (altar.getConsumptionRate() * (altar.getConsumptionMultiplier() + 1))) - )); - // Total charge - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 64, 46, 16, 16), - altar -> altar == null ? "0" : String.valueOf(altar.getTotalCharge()) - )); - } - }, - new Vector2f(0.01F, 0.01F) - ); - - ElementRegistry.registerHandler( - new ResourceLocation(BloodMagic.MODID, "incense_altar"), - new ElementDivinedInformation(2, true, TileIncenseAltar.class) { - @Override - public void gatherInformation(Consumer>> information) { - // Current tranquility - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 80, 46, 16, 16), - incense -> incense == null ? "0" : String.valueOf((int) ((100D * (int) (100 * incense.tranquility)) / 100D)) - )); - // Sacrifice bonus - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 96, 46, 16, 16), - incense -> incense == null ? "0" : String.valueOf((int) (100 * incense.incenseAddition)) - )); - } - }, - new Vector2f(0.01F, 0.01F) - ); - - ElementRegistry.registerHandler( - new ResourceLocation(BloodMagic.MODID, "inversion_pillar"), - new ElementDivinedInformation(1, true, TileInversionPillar.class) { - @Override - public void gatherInformation(Consumer>> information) { - // Current inversion - information.accept(Pair.of( - new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 112, 46, 16, 16), - pillar -> pillar == null ? "0" : String.valueOf(((int) (10 * pillar.getCurrentInversion())) / 10D) - )); - } - }, - new Vector2f(0.01F, 0.01F) - ); - - ElementRegistry.registerHandler( - new ResourceLocation(BloodMagic.MODID, "demon_will_aura"), - new ElementDemonAura(), - new Vector2f(0.01F, 0.01F) - ); - - ElementRegistry.registerHandler( - new ResourceLocation(BloodMagic.MODID, "holding"), - new ElementHolding(), - new Vector2f(0.72F, 1.0F) - ); - - ElementRegistry.readConfig(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/GuiEditHUD.java b/src/main/java/WayofTime/bloodmagic/client/hud/GuiEditHUD.java deleted file mode 100644 index a25a5b6c..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/GuiEditHUD.java +++ /dev/null @@ -1,183 +0,0 @@ -package WayofTime.bloodmagic.client.hud; - -import WayofTime.bloodmagic.client.hud.element.HUDElement; -import com.google.common.collect.Maps; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.resources.I18n; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.client.config.GuiButtonExt; -import org.lwjgl.input.Keyboard; - -import javax.annotation.Nullable; -import javax.vecmath.Vector2f; -import java.awt.Point; -import java.util.Map; - -public class GuiEditHUD extends GuiScreen { - - private static final int LINE_COLOR = 0x2D2D2D; - - private final GuiScreen parent; - private final Map currentOverrides = Maps.newHashMap(); - private HUDElement dragged; - public boolean changes; - - public GuiEditHUD(GuiScreen parent) { - this.parent = parent; - } - - @Override - public void initGui() { - super.initGui(); - - addButton(new GuiButtonExt(0, width / 2 - 155, height - 30, 70, 20, I18n.format("gui.bloodmagic.toggle")){{enabled = false;}}); - addButton(new GuiButtonExt(1, width / 2 - 75, height - 30, 70, 20, I18n.format("gui.bloodmagic.default"))); - addButton(new GuiButtonExt(2, width / 2 + 5, height - 30, 70, 20, I18n.format("gui.bloodmagic.save"))); - addButton(new GuiButtonExt(3, width / 2 + 90, height - 30, 70, 20, I18n.format("gui.bloodmagic.cancel"))); - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - drawDefaultBackground(); - super.drawScreen(mouseX, mouseY, partialTicks); - - ScaledResolution resolution = new ScaledResolution(Minecraft.getMinecraft()); - for (HUDElement element : ElementRegistry.getElements()) { - if (dragged == element) - continue; - - ResourceLocation key = ElementRegistry.getKey(element); - Vector2f position = currentOverrides.getOrDefault(key, ElementRegistry.getPosition(key)); - int xPos = (int) (resolution.getScaledWidth_double() * position.x); - int yPos = (int) (resolution.getScaledHeight_double() * position.y); - - drawWithBox(resolution, element, partialTicks, xPos, yPos); - } - - if (dragged != null) { - Point bounded = getBoundedDrag(resolution, mouseX, mouseY); - drawWithBox(resolution, dragged, partialTicks, bounded.x, bounded.y); - } - } - - @Override - public boolean doesGuiPauseGame() { - return true; - } - - @Override - protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) { - if (dragged != null) - return; - - HUDElement element = getHoveredElement(mouseX, mouseY); - if (element == null) - return; - - if (clickedMouseButton == 0) - dragged = element; - } - - @Override - protected void mouseReleased(int mouseX, int mouseY, int state) { - if (dragged != null) { - ScaledResolution resolution = new ScaledResolution(Minecraft.getMinecraft()); - Point bounded = getBoundedDrag(resolution, mouseX, mouseY); - float xPos = (float) ((bounded.x) / resolution.getScaledWidth_double()); - float yPos = (float) ((bounded.y) / resolution.getScaledHeight_double()); - - currentOverrides.put(ElementRegistry.getKey(dragged), new Vector2f(xPos, yPos)); - changes = true; - dragged = null; - return; - } - - super.mouseReleased(mouseX, mouseY, state); - } - - @Override - protected void actionPerformed(GuiButton button) { - switch (button.id) { - case 0: { - Minecraft.getMinecraft().displayGuiScreen(parent); - break; - } - case 1: { - currentOverrides.clear(); - ElementRegistry.resetPos(); - changes = false; - break; - } - case 2: { - ElementRegistry.save(currentOverrides); - Minecraft.getMinecraft().displayGuiScreen(parent); - break; - } - case 3: { - currentOverrides.clear(); - Minecraft.getMinecraft().displayGuiScreen(parent); - break; - } - } - } - - @Nullable - public HUDElement getHoveredElement(int mouseX, int mouseY) { - for (HUDElement element : ElementRegistry.getElements()) { - ResourceLocation key = ElementRegistry.getKey(element); - Vector2f position = currentOverrides.getOrDefault(key, ElementRegistry.getPosition(key)); - ScaledResolution resolution = new ScaledResolution(mc); - int xPos = (int) (resolution.getScaledWidth_double() * position.x); - int yPos = (int) (resolution.getScaledHeight_double() * position.y); - - if (mouseX < xPos || mouseX > xPos + element.getWidth()) - continue; - - if (mouseY < yPos || mouseY > yPos + element.getHeight()) - continue; - - return element; - } - - return null; - } - - protected Point getBoundedDrag(ScaledResolution resolution, int mouseX, int mouseY) { - int drawX = mouseX - dragged.getWidth() / 2; - if (drawX + dragged.getWidth() >= resolution.getScaledWidth()) - drawX = resolution.getScaledWidth() - dragged.getWidth(); - if (drawX < 0) - drawX = 0; - - int drawY = mouseY - dragged.getHeight() / 2; - if (drawY + dragged.getHeight() >= resolution.getScaledHeight()) - drawY = resolution.getScaledHeight() - dragged.getHeight(); - if (drawY < 0) - drawY = 0; - - return new Point(drawX, drawY); - } - - protected void drawWithBox(ScaledResolution resolution, HUDElement element, float partialTicks, int drawX, int drawY) { - int color = ElementRegistry.getColor(ElementRegistry.getKey(element)); - GlStateManager.pushMatrix(); - GlStateManager.enableAlpha(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - drawVerticalLine(drawX, drawY, drawY + element.getHeight() - 1, color); - drawVerticalLine(drawX + element.getWidth() - 1, drawY, drawY + element.getHeight() - 1, color); - drawHorizontalLine(drawX, drawX + element.getWidth() - 1, drawY, color); - drawHorizontalLine(drawX, drawX + element.getWidth() - 1, drawY + element.getHeight() - 1, color); - GlStateManager.disableBlend(); - GlStateManager.disableAlpha(); - GlStateManager.popMatrix(); - GlStateManager.color(1.0F, 1.0F, 1.0F); - GlStateManager.enableTexture2D(); - element.draw(resolution, partialTicks, drawX, drawY); - GlStateManager.disableTexture2D(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementDemonAura.java b/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementDemonAura.java deleted file mode 100644 index 29c7a889..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementDemonAura.java +++ /dev/null @@ -1,78 +0,0 @@ -package WayofTime.bloodmagic.client.hud.element; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.proxy.ClientProxy; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.util.Utils; -import com.google.common.collect.Lists; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; - -import java.util.List; - -public class ElementDemonAura extends HUDElement { - - private static final ResourceLocation BAR_LOCATION = new ResourceLocation(BloodMagic.MODID, "textures/hud/bars.png"); - - private final List orderedTypes = Lists.newArrayList( - EnumDemonWillType.DEFAULT, - EnumDemonWillType.CORROSIVE, - EnumDemonWillType.STEADFAST, - EnumDemonWillType.DESTRUCTIVE, - EnumDemonWillType.VENGEFUL - ); - - public ElementDemonAura() { - super(80, 46); - } - - @Override - public void draw(ScaledResolution resolution, float partialTicks, int drawX, int drawY) { - Minecraft minecraft = Minecraft.getMinecraft(); - EntityPlayer player = minecraft.player; - - minecraft.getTextureManager().bindTexture(BAR_LOCATION); - GlStateManager.color(1.0F, 1.0F, 1.0F); - this.drawTexturedModalRect(drawX, drawY, 0, 210, 80, 46); - - double maxAmount = Utils.getDemonWillResolution(player); - - int i = 0; - for (EnumDemonWillType type : orderedTypes) { - i++; - GlStateManager.color(1.0F, 1.0F, 1.0F); - minecraft.getTextureManager().bindTexture(BAR_LOCATION); - int textureXOffset = (i > 3) ? (i - 3) : (3 - i); - int maxBarSize = 30 - 2 * textureXOffset; - - double amount = ClientProxy.currentAura == null ? 0 : ClientProxy.currentAura.getWill(type); - double ratio = Math.max(Math.min(amount / maxAmount, 1), 0); - - double width = maxBarSize * ratio * 2; - double height = 2; - double x = drawX + 2 * textureXOffset + 10; - double y = drawY + 4 * i + 10; - - double textureX = 2 * textureXOffset + 2 * 42; - double textureY = 4 * i + 220; - - this.drawTexturedModalRect(x, y, textureX, textureY, width, height); - - if (player.isSneaking()) { - GlStateManager.pushMatrix(); - GlStateManager.translate(x - 2 * textureXOffset + 70, (y - 1), 0); - GlStateManager.scale(0.5, 0.5, 1); - minecraft.fontRenderer.drawStringWithShadow(String.valueOf((int) amount), 0, 2, 0xffffff); - GlStateManager.popMatrix(); - } - } - } - - @Override - public boolean shouldRender(Minecraft minecraft) { - return Utils.canPlayerSeeDemonWill(Minecraft.getMinecraft().player); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementDivinedInformation.java b/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementDivinedInformation.java deleted file mode 100644 index c8244775..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementDivinedInformation.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.bloodmagic.client.hud.element; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumHand; - -public abstract class ElementDivinedInformation extends ElementTileInformation { - - private final boolean simple; - - public ElementDivinedInformation(int lines, boolean simple, Class tileClass) { - super(100, lines, tileClass); - this.simple = simple; - } - - @Override - public boolean shouldRender(Minecraft minecraft) { - EntityPlayer player = Minecraft.getMinecraft().player; - ItemStack sigilStack = player.getHeldItem(EnumHand.MAIN_HAND); - boolean flag = false; - if (simple) { - if (sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_DIVINATION) - flag = true; - - if (!flag) { - sigilStack = player.getHeldItem(EnumHand.OFF_HAND); - if (sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_DIVINATION) - flag = true; - } - } else { - if (sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_SEER) - flag = true; - - if (!flag) { - sigilStack = player.getHeldItem(EnumHand.OFF_HAND); - if (sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_SEER) - flag = true; - } - } - - return super.shouldRender(minecraft) && flag; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementHolding.java b/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementHolding.java deleted file mode 100644 index 9206f124..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementHolding.java +++ /dev/null @@ -1,85 +0,0 @@ -package WayofTime.bloodmagic.client.hud.element; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.Sprite; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import java.util.List; - -public class ElementHolding extends HUDElement { - - private static final Sprite HOLDING_BAR = new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 0, 102, 22); - private static final Sprite SELECTED_OVERLAY = new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 22, 24, 24); - - public ElementHolding() { - super(HOLDING_BAR.getTextureWidth(), HOLDING_BAR.getTextureHeight()); - } - - @Override - public void draw(ScaledResolution resolution, float partialTicks, int drawX, int drawY) { - GlStateManager.color(1.0F, 1.0F, 1.0F); - HOLDING_BAR.draw(drawX, drawY); - - Minecraft minecraft = Minecraft.getMinecraft(); - ItemStack sigilHolding = minecraft.player.getHeldItemMainhand(); - // Check mainhand for Sigil of Holding - if (!(sigilHolding.getItem() == RegistrarBloodMagicItems.SIGIL_HOLDING)) - sigilHolding = minecraft.player.getHeldItemOffhand(); - // Check offhand for Sigil of Holding - if (!(sigilHolding.getItem() == RegistrarBloodMagicItems.SIGIL_HOLDING)) - return; - - int currentSlot = ItemSigilHolding.getCurrentItemOrdinal(sigilHolding); - SELECTED_OVERLAY.draw(drawX - 1 + (currentSlot * 20), drawY - 1); - - RenderHelper.enableGUIStandardItemLighting(); - List inventory = ItemSigilHolding.getInternalInventory(sigilHolding); - int xOffset = 0; - for (ItemStack stack : inventory) { - renderHotbarItem(drawX + 3 + xOffset, drawY + 3, partialTicks, minecraft.player, stack); - xOffset += 20; - } - } - - @Override - public boolean shouldRender(Minecraft minecraft) { - ItemStack sigilHolding = minecraft.player.getHeldItemMainhand(); - // Check mainhand for Sigil of Holding - if (!(sigilHolding.getItem() == RegistrarBloodMagicItems.SIGIL_HOLDING)) - sigilHolding = minecraft.player.getHeldItemOffhand(); - // Check offhand for Sigil of Holding - if (!(sigilHolding.getItem() == RegistrarBloodMagicItems.SIGIL_HOLDING)) - return false; - - return true; - } - - protected void renderHotbarItem(int x, int y, float partialTicks, EntityPlayer player, ItemStack stack) { - if (!stack.isEmpty()) { - float animation = (float) stack.getAnimationsToGo() - partialTicks; - - if (animation > 0.0F) { - GlStateManager.pushMatrix(); - float f1 = 1.0F + animation / 5.0F; - GlStateManager.translate((float) (x + 8), (float) (y + 12), 0.0F); - GlStateManager.scale(1.0F / f1, (f1 + 1.0F) / 2.0F, 1.0F); - GlStateManager.translate((float) (-(x + 8)), (float) (-(y + 12)), 0.0F); - } - - Minecraft.getMinecraft().getRenderItem().renderItemAndEffectIntoGUI(player, stack, x, y); - - if (animation > 0.0F) - GlStateManager.popMatrix(); - - Minecraft.getMinecraft().getRenderItem().renderItemOverlays(Minecraft.getMinecraft().fontRenderer, stack, x, y); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementItemStack.java b/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementItemStack.java deleted file mode 100644 index 5f783e55..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementItemStack.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.bloodmagic.client.hud.element; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.item.ItemStack; - -public class ElementItemStack extends HUDElement { - private ItemStack stack; - - public ElementItemStack(ItemStack stack) { - super(16, 16); - - this.stack = stack; - } - - @Override - public void draw(ScaledResolution resolution, float partialTicks, int drawX, int drawY) { - RenderHelper.enableGUIStandardItemLighting(); - Minecraft.getMinecraft().getRenderItem().renderItemIntoGUI(stack, drawX, drawY); - RenderHelper.disableStandardItemLighting(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementSprite.java b/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementSprite.java deleted file mode 100644 index e574ffef..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementSprite.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.bloodmagic.client.hud.element; - -import WayofTime.bloodmagic.client.Sprite; -import net.minecraft.client.gui.ScaledResolution; - -public class ElementSprite extends HUDElement { - - private final Sprite sprite; - - public ElementSprite(Sprite sprite) { - super(sprite.getTextureWidth(), sprite.getTextureHeight()); - - this.sprite = sprite; - } - - @Override - public void draw(ScaledResolution resolution, float partialTicks, int drawX, int drawY) { - sprite.draw(drawX, drawY); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementString.java b/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementString.java deleted file mode 100644 index 419ebe25..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementString.java +++ /dev/null @@ -1,36 +0,0 @@ -package WayofTime.bloodmagic.client.hud.element; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.util.text.ITextComponent; - -public class ElementString extends HUDElement { - - private ITextComponent[] display; - - public ElementString(ITextComponent... display) { - super(getMaxStringWidth(display), (Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT + 2) * display.length - 2); - - this.display = display; - } - - @Override - public void draw(ScaledResolution resolution, float partialTicks, int drawX, int drawY) { - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - for (ITextComponent drawText : display) { - fontRenderer.drawStringWithShadow(drawText.getFormattedText(), drawX, drawY, 14737632); - drawY += fontRenderer.FONT_HEIGHT + 2; - } - } - - private static int getMaxStringWidth(ITextComponent... display) { - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - int maxWidth = 0; - for (ITextComponent drawText : display) - if (fontRenderer.getStringWidth(drawText.getFormattedText()) > maxWidth) - maxWidth = fontRenderer.getStringWidth(drawText.getFormattedText()); - - return maxWidth; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementTileInformation.java b/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementTileInformation.java deleted file mode 100644 index f8092cf6..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/element/ElementTileInformation.java +++ /dev/null @@ -1,57 +0,0 @@ -package WayofTime.bloodmagic.client.hud.element; - -import WayofTime.bloodmagic.client.Sprite; -import com.google.common.collect.Lists; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.RayTraceResult; -import org.apache.commons.lang3.tuple.Pair; - -import java.awt.Color; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; - -public abstract class ElementTileInformation extends HUDElement { - - protected final Class tileClass; - private final List>> information; - - public ElementTileInformation(int width, int lines, Class tileClass) { - super(width, 18 * lines - 2); - - this.tileClass = tileClass; - this.information = Lists.newArrayList(); - gatherInformation(information::add); - } - - public abstract void gatherInformation(Consumer>> information); - - @SuppressWarnings("unchecked") - @Override - public void draw(ScaledResolution resolution, float partialTicks, int drawX, int drawY) { - T tile = (T) Minecraft.getMinecraft().world.getTileEntity(Minecraft.getMinecraft().objectMouseOver.getBlockPos()); - - int yOffset = 0; - for (Pair> sprite : information) { - sprite.getLeft().draw(drawX, drawY + yOffset); - int textY = drawY + yOffset + (sprite.getLeft().getTextureHeight() / 4); - Minecraft.getMinecraft().fontRenderer.drawStringWithShadow((tile != null && tile.getClass() == tileClass) ? sprite.getRight().apply(tile) : "?", drawX + sprite.getLeft().getTextureWidth() + 2, textY, Color.WHITE.getRGB()); - yOffset += sprite.getLeft().getTextureHeight() + 2; - } - } - - @Override - public boolean shouldRender(Minecraft minecraft) { - RayTraceResult trace = Minecraft.getMinecraft().objectMouseOver; - if (trace == null || trace.typeOfHit != RayTraceResult.Type.BLOCK) - return false; - - TileEntity tile = Minecraft.getMinecraft().world.getTileEntity(trace.getBlockPos()); - if (tile == null || !tileClass.isAssignableFrom(tile.getClass())) - return false; - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/hud/element/HUDElement.java b/src/main/java/WayofTime/bloodmagic/client/hud/element/HUDElement.java deleted file mode 100644 index 10eed1cd..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/hud/element/HUDElement.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.bloodmagic.client.hud.element; - -import WayofTime.bloodmagic.client.hud.ElementRegistry; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.ScaledResolution; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.vecmath.Vector2f; -import java.awt.Point; - -@SideOnly(Side.CLIENT) -public abstract class HUDElement { - - private int width; - private int height; - - public HUDElement(int width, int height) { - this.width = width; - this.height = height; - } - - public boolean shouldRender(Minecraft minecraft) { - return true; - } - - public abstract void draw(ScaledResolution resolution, float partialTicks, int drawX, int drawY); - - public final int getWidth() { - return width; - } - - public final int getHeight() { - return height; - } - - protected void drawTexturedModalRect(double x, double y, double textureX, double textureY, double width, double height) { - float f = 0.00390625F; - float f1 = 0.00390625F; - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder buffer = tessellator.getBuffer(); - buffer.begin(7, DefaultVertexFormats.POSITION_TEX); - buffer.pos(x + 0, y + height, 0).tex((double) ((float) (textureX + 0) * f), (double) ((float) (textureY + height) * f1)).endVertex(); - buffer.pos(x + width, y + height, 0).tex((double) ((float) (textureX + width) * f), (double) ((float) (textureY + height) * f1)).endVertex(); - buffer.pos(x + width, y + 0, 0).tex((double) ((float) (textureX + width) * f), (double) ((float) (textureY + 0) * f1)).endVertex(); - buffer.pos(x + 0, y + 0, 0).tex((double) ((float) (textureX + 0) * f), (double) ((float) (textureY + 0) * f1)).endVertex(); - tessellator.draw(); - } - - @Override - public String toString() { - Vector2f point = ElementRegistry.getPosition(ElementRegistry.getKey(this)); - return ElementRegistry.getKey(this) + "@" + point.x + "," + point.y; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/key/IKeybindable.java b/src/main/java/WayofTime/bloodmagic/client/key/IKeybindable.java deleted file mode 100644 index c325019f..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/key/IKeybindable.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.bloodmagic.client.key; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public interface IKeybindable { - void onKeyPressed(ItemStack stack, EntityPlayer player, KeyBindings key, boolean showInChat); -} diff --git a/src/main/java/WayofTime/bloodmagic/client/key/KeyBindingBloodMagic.java b/src/main/java/WayofTime/bloodmagic/client/key/KeyBindingBloodMagic.java deleted file mode 100644 index b1b18335..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/key/KeyBindingBloodMagic.java +++ /dev/null @@ -1,16 +0,0 @@ -package WayofTime.bloodmagic.client.key; - -import WayofTime.bloodmagic.BloodMagic; -import net.minecraft.client.settings.KeyBinding; -import net.minecraftforge.fml.client.registry.ClientRegistry; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class KeyBindingBloodMagic extends KeyBinding { - public KeyBindingBloodMagic(KeyBindings key) { - super(key.getDescription(), key.getKeyConflictContext(), key.getKeyModifier(), key.getKeyCode(), BloodMagic.NAME); - - ClientRegistry.registerKeyBinding(this); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java b/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java deleted file mode 100644 index a9d8a8af..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.bloodmagic.client.key; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.network.KeyProcessor; -import WayofTime.bloodmagic.util.handler.event.ClientHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.settings.IKeyConflictContext; -import net.minecraftforge.client.settings.KeyConflictContext; -import net.minecraftforge.client.settings.KeyModifier; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.input.Keyboard; - -import java.util.Locale; - -public enum KeyBindings { - // @formatter:off - OPEN_HOLDING(KeyConflictContext.IN_GAME, KeyModifier.NONE, Keyboard.KEY_H) { - @SideOnly(Side.CLIENT) - @Override - public void handleKeybind() { - ItemStack itemStack = ClientHandler.minecraft.player.getHeldItemMainhand(); - if (itemStack.getItem() instanceof IKeybindable) - BloodMagicPacketHandler.INSTANCE.sendToServer(new KeyProcessor(this, false)); - } - }, - CYCLE_HOLDING_POS(KeyConflictContext.IN_GAME, KeyModifier.SHIFT, Keyboard.KEY_EQUALS) { - @SideOnly(Side.CLIENT) - @Override - public void handleKeybind() { - EntityPlayerSP player = Minecraft.getMinecraft().player; - if (player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) - ClientHandler.cycleSigil(player.getHeldItemMainhand(), player, -1); - } - }, - CYCLE_HOLDING_NEG(KeyConflictContext.IN_GAME, KeyModifier.SHIFT, Keyboard.KEY_MINUS) { - @SideOnly(Side.CLIENT) - @Override - public void handleKeybind() { - EntityPlayerSP player = Minecraft.getMinecraft().player; - if (player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) - ClientHandler.cycleSigil(player.getHeldItemMainhand(), player, 1); - } - },; - // @formatter:on - - private final IKeyConflictContext keyConflictContext; - private final KeyModifier keyModifier; - private final int keyCode; - - @SideOnly(Side.CLIENT) - private KeyBinding key; - - KeyBindings(IKeyConflictContext keyConflictContext, KeyModifier keyModifier, int keyCode) { - this.keyConflictContext = keyConflictContext; - this.keyModifier = keyModifier; - this.keyCode = keyCode; - } - - @SideOnly(Side.CLIENT) - public abstract void handleKeybind(); - - public IKeyConflictContext getKeyConflictContext() { - return keyConflictContext; - } - - public KeyModifier getKeyModifier() { - return keyModifier; - } - - public int getKeyCode() { - return keyCode; - } - - @SideOnly(Side.CLIENT) - public KeyBinding getKey() { - if (key == null) - key = new KeyBindingBloodMagic(this); - - return key; - } - - @SideOnly(Side.CLIENT) - public void setKey(KeyBinding key) { - this.key = key; - } - - public String getDescription() { - return BloodMagic.MODID + ".keybind." + name().toLowerCase(Locale.ENGLISH); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionActivatable.java b/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionActivatable.java deleted file mode 100644 index a674b457..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionActivatable.java +++ /dev/null @@ -1,25 +0,0 @@ -package WayofTime.bloodmagic.client.mesh; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.iface.IActivatable; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class CustomMeshDefinitionActivatable implements ItemMeshDefinition { - private final String name; - - public CustomMeshDefinitionActivatable(String name) { - this.name = name; - } - - @Override - public ModelResourceLocation getModelLocation(ItemStack stack) { - if (!stack.isEmpty() && stack.getItem() instanceof IActivatable) - if (((IActivatable) stack.getItem()).getActivated(stack)) - return new ModelResourceLocation(new ResourceLocation(BloodMagic.MODID, name), "active=true"); - - return new ModelResourceLocation(new ResourceLocation(BloodMagic.MODID, name), "active=false"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionMultiWill.java b/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionMultiWill.java deleted file mode 100644 index 58f7fc64..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionMultiWill.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.bloodmagic.client.mesh; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.iface.IMultiWillTool; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class CustomMeshDefinitionMultiWill implements ItemMeshDefinition { - private final String name; - - public CustomMeshDefinitionMultiWill(String name) { - this.name = name; - } - - @Override - public ModelResourceLocation getModelLocation(ItemStack stack) { - if (!stack.isEmpty() && stack.getItem() instanceof IMultiWillTool) { - EnumDemonWillType type = ((IMultiWillTool) stack.getItem()).getCurrentType(stack); - return new ModelResourceLocation(new ResourceLocation(BloodMagic.MODID, name), "type=" + type.getName().toLowerCase()); - } - - return new ModelResourceLocation(new ResourceLocation(BloodMagic.MODID, name), "type=default"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionWillGem.java b/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionWillGem.java deleted file mode 100644 index a1e3af67..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionWillGem.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.bloodmagic.client.mesh; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.soul.ItemSoulGem; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class CustomMeshDefinitionWillGem implements ItemMeshDefinition { - private final String name; - - public CustomMeshDefinitionWillGem(String name) { - this.name = name; - } - - @Override - public ModelResourceLocation getModelLocation(ItemStack stack) { - if (!stack.isEmpty() && stack.getItem() == RegistrarBloodMagicItems.SOUL_GEM) { - EnumDemonWillType type = ((ItemSoulGem) stack.getItem()).getCurrentType(stack); - return new ModelResourceLocation(new ResourceLocation(BloodMagic.MODID, name), "type=" + ItemSoulGem.names[stack.getItemDamage()] + "_" + type.getName().toLowerCase()); - } - - return new ModelResourceLocation(new ResourceLocation(BloodMagic.MODID, name), "type=petty_default"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/LayerBloodElytra.java b/src/main/java/WayofTime/bloodmagic/client/render/LayerBloodElytra.java deleted file mode 100644 index 25a9d228..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/LayerBloodElytra.java +++ /dev/null @@ -1,53 +0,0 @@ -package WayofTime.bloodmagic.client.render; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.model.ModelElytra; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.client.renderer.entity.layers.LayerArmorBase; -import net.minecraft.client.renderer.entity.layers.LayerRenderer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class LayerBloodElytra implements LayerRenderer { - - private static final ResourceLocation TEXTURE_BLOOD_ELYTRA = new ResourceLocation("bloodmagic", "textures/entities/bloodElytra.png"); - private final RenderPlayer renderPlayer; - private final ModelElytra modelElytra = new ModelElytra(); - - public LayerBloodElytra(RenderPlayer renderPlayer) { - this.renderPlayer = renderPlayer; - } - - @Override - public void doRenderLayer(AbstractClientPlayer clientPlayer, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { - if (LivingArmour.hasFullSet(clientPlayer)) { - ItemStack chestStack = clientPlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - if (ItemLivingArmour.hasUpgrade(BloodMagic.MODID + ".upgrade.elytra", chestStack)) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager.enableBlend(); - - renderPlayer.bindTexture(TEXTURE_BLOOD_ELYTRA); - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.0F, 0.0F, 0.125F); - modelElytra.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, clientPlayer); - modelElytra.render(clientPlayer, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); - - if (chestStack.isItemEnchanted()) - LayerArmorBase.renderEnchantedGlint(this.renderPlayer, clientPlayer, this.modelElytra, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); - - GlStateManager.popMatrix(); - } - } - } - - @Override - public boolean shouldCombineTextures() { - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/AttractorAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/AttractorAlchemyCircleRenderer.java deleted file mode 100644 index 4e330f9e..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/AttractorAlchemyCircleRenderer.java +++ /dev/null @@ -1,142 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; - -public class AttractorAlchemyCircleRenderer extends AlchemyCircleRenderer { - public AttractorAlchemyCircleRenderer() { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/ZombieBeacon.png")); - } - - public AttractorAlchemyCircleRenderer(ResourceLocation resourceLocation) { - super(resourceLocation); - } - - @Override - public float getSizeModifier(float craftTime) { - return 1; - } - - @Override - public float getRotation(float craftTime) { - float offset = 2; - if (craftTime >= offset) { - float modifier = (craftTime - offset) * 5f; - return modifier * 1f; - } - return 0; - } - - @Override - public float getSecondaryRotation(float craftTime) { - float offset = 50; - float secondaryOffset = 150; - if (craftTime >= offset) { - if (craftTime < secondaryOffset) { - float modifier = 90 * (craftTime - offset) / (secondaryOffset - offset); - return modifier; - } else { - return 90; - } - } - return 0; - } - - @Override - public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) { - if (!(tile instanceof TileAlchemyArray)) { - return; - } - - TileAlchemyArray tileArray = (TileAlchemyArray) tile; - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - - float rot = getRotation(craftTime); - float secondaryRot = getSecondaryRotation(craftTime); - - float size = 1.0F * getSizeModifier(craftTime); - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - - GlStateManager.translate(x, y, z); - - // Specify which face this "circle" is located on - EnumFacing sideHit = EnumFacing.UP; - EnumFacing rotation = tileArray.getRotation(); - - GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); - - switch (sideHit) { - case DOWN: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(-90.0f, 1, 0, 0); - break; - case EAST: - GlStateManager.rotate(-90.0f, 0, 1, 0); - GlStateManager.translate(0, 0, -1); - break; - case NORTH: - break; - case SOUTH: - GlStateManager.rotate(180.0f, 0, 1, 0); - GlStateManager.translate(-1, 0, -1); - break; - case UP: - GlStateManager.translate(0, 1, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - break; - case WEST: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(90.0f, 0, 1, 0); - break; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); - GlStateManager.rotate(rotation.getHorizontalAngle() + 180, 0, 0, 1); - - GlStateManager.pushMatrix(); - GlStateManager.rotate(rot, 0, 0, 1); - GlStateManager.rotate(secondaryRot, 1, 0, 0); - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - - GlStateManager.color(1f, 1f, 1f, 1f); - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - - // GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GlStateManager.popMatrix(); - GlStateManager.popMatrix(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/BindingAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/BindingAlchemyCircleRenderer.java deleted file mode 100644 index 699916ca..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/BindingAlchemyCircleRenderer.java +++ /dev/null @@ -1,236 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; - -public class BindingAlchemyCircleRenderer extends AlchemyCircleRenderer { - public static final int numberOfSweeps = 5; - public static final int startTime = 50; - public static final int sweepTime = 40; - public static final int inwardRotationTime = 50; - public static final float arcLength = (float) Math.sqrt(2 * (2 * 2) - 2 * 2 * 2 * Math.cos(2 * Math.PI * 2 / 5)); - public static final float theta2 = (float) (18f * Math.PI / 180f); - public static final int endTime = 300; - public final ResourceLocation[] arraysResources; - public float offsetFromFace = -0.9f; - - public BindingAlchemyCircleRenderer() { - super(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BindingArray.png")); - arraysResources = new ResourceLocation[5]; - arraysResources[0] = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BindingLightningArray.png"); - arraysResources[1] = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BindingLightningArray.png"); - arraysResources[2] = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BindingLightningArray.png"); - arraysResources[3] = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BindingLightningArray.png"); - arraysResources[4] = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BindingLightningArray.png"); - } - - public float getRotation(int circle, float craftTime) { - float offset = 2; - if (circle == -1) { - return craftTime * 360 * 2 / 5 / sweepTime; - } - if (craftTime >= offset) { - float modifier = (float) Math.pow(craftTime - offset, 1.5); - return modifier * 0.5f; - } - return 0; - } - - public float getSecondaryRotation(int circle, float craftTime) { - float offset = 50; - if (craftTime >= offset) { - float modifier = (float) Math.pow(craftTime - offset, 1.7); - return modifier * 0.5f; - } - return 0; - } - - public float getVerticalOffset(int circle, float craftTime) { - if (circle >= 0 && circle <= 4) { - if (craftTime >= 5) { - if (craftTime <= 40) { - return (float) ((-0.4) * Math.pow((craftTime - 5) / 35f, 3)); - } else { - return -0.4f; - } - } - - return 0; - } - - if (craftTime >= 5) { - if (craftTime <= 40) { - return (float) ((-0.4) * Math.pow((craftTime - 5) / 35f, 3)); - } else { - return -0.4f; - } - } - return 0; - } - - public float getInwardRotation(int circle, float craftTime) { - float offset = startTime + numberOfSweeps * sweepTime; - if (craftTime >= offset) { - if (craftTime <= offset + inwardRotationTime) { - return 90f / inwardRotationTime * (craftTime - offset); - } else { - return 90; - } - } - - return 0; - } - - public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) { - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - - float rot = getRotation(-1, craftTime); - - float size = 3.0F; - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - - GlStateManager.translate(x, y, z); - - // Specify which face this "circle" is located on - EnumFacing sideHit = EnumFacing.UP; - GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); - - switch (sideHit) { - case DOWN: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(-90.0f, 1, 0, 0); - break; - case EAST: - GlStateManager.rotate(-90.0f, 0, 1, 0); - GlStateManager.translate(0, 0, -1); - break; - case NORTH: - break; - case SOUTH: - GlStateManager.rotate(180.0f, 0, 1, 0); - GlStateManager.translate(-1, 0, -1); - break; - case UP: - GlStateManager.translate(0, 1, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - break; - case WEST: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(90.0f, 0, 1, 0); - break; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); - - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - - // GlStateManager.color(0.5f, 1f, 1f, 1f); - GlStateManager.pushMatrix(); - GlStateManager.rotate(rot, 0, 0, 1); - - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - GlStateManager.popMatrix(); - - for (int i = 0; i < 5; i++) { - GlStateManager.pushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(arraysResources[i]); - float newSize = 1; - float distance = BindingAlchemyCircleRenderer.getDistanceOfCircle(i, craftTime); - float angle = BindingAlchemyCircleRenderer.getAngleOfCircle(i, craftTime); - float rotation = this.getRotation(i, craftTime); - - GlStateManager.translate(distance * Math.sin(angle), -distance * Math.cos(angle), this.getVerticalOffset(i, craftTime)); - GlStateManager.rotate(i * 360 / 5, 0, 0, 1); - GlStateManager.rotate(getInwardRotation(i, craftTime), 1, 0, 0); - GlStateManager.rotate(rotation, 0, 0, 1); - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - wr.pos(newSize / 2f, newSize / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(newSize / 2f, -newSize / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-newSize / 2f, -newSize / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-newSize / 2f, newSize / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - } - - GlStateManager.popMatrix(); - - // GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GlStateManager.popMatrix(); - } - - public static float getAngleOfCircle(int circle, float craftTime) { - if (circle >= 0 && circle <= 4) { - float originalAngle = (float) (circle * 2 * Math.PI / 5d); - - double sweep = (craftTime - startTime) / sweepTime; - if (sweep >= 0 && sweep < numberOfSweeps) { - float offset = ((int) sweep) * sweepTime + startTime; - originalAngle += 2 * Math.PI * 2 / 5 * (int) sweep + getAngle(craftTime - offset, (int) sweep); - } else if (sweep >= numberOfSweeps) { - originalAngle += 2 * Math.PI * 2 / 5 * numberOfSweeps + (craftTime - 5 * sweepTime - startTime) * 2 * Math.PI * 2 / 5 / sweepTime; - } - - return originalAngle; - } - - return 0; - } - - public static float getAngle(float craftTime, int sweep) { - float rDP = craftTime / sweepTime * arcLength; - float rEnd = (float) Math.sqrt(rDP * rDP + 2 * 2 - 2 * rDP * 2 * Math.cos(theta2)); - return (float) (Math.acos((2 * 2 + rEnd * rEnd - rDP * rDP) / (2 * rEnd * 2))); - } - - /** - * Returns the center-to-center distance of this circle. - */ - public static float getDistanceOfCircle(int circle, float craftTime) { // TODO Change this so it doesn't use angle, since it is a constant speed. - double sweep = (craftTime - startTime) / sweepTime; - if (sweep >= 0 && sweep < numberOfSweeps) { - float offset = ((int) sweep) * sweepTime + startTime; - float angle = getAngle(craftTime - offset, (int) sweep); - float thetaPrime = (float) (Math.PI - theta2 - angle); - // if(thetaPrime > 0 && thetaPrime < Math.PI) { - return (float) (2 * Math.sin(theta2) / Math.sin(thetaPrime)); - // } - } else if (sweep >= numberOfSweeps && craftTime < endTime) { - return 2 - 2 * (craftTime - startTime - numberOfSweeps * sweepTime) / (endTime - startTime - numberOfSweeps * sweepTime); - } else if (craftTime >= endTime) { - return 0; - } - - return 2; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/DualAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/DualAlchemyCircleRenderer.java deleted file mode 100644 index 29f03cbb..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/DualAlchemyCircleRenderer.java +++ /dev/null @@ -1,145 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; - -public class DualAlchemyCircleRenderer extends AlchemyCircleRenderer { - public final ResourceLocation secondaryArrayResource; - public float offsetFromFace = -0.9f; - - public DualAlchemyCircleRenderer() { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png")); - } - - public DualAlchemyCircleRenderer(ResourceLocation arrayResource, ResourceLocation secondaryArrayResource) { - super(arrayResource); - this.secondaryArrayResource = secondaryArrayResource; - } - - @Override - public float getSizeModifier(float craftTime) { - return 1; - } - - @Override - public float getRotation(float craftTime) { - float offset = 2; - if (craftTime >= offset) { - float modifier = (craftTime - offset) * 2f; - return modifier * 1f; - } - return 0; - } - - @Override - public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) { - if (!(tile instanceof TileAlchemyArray)) { - return; - } - - TileAlchemyArray tileArray = (TileAlchemyArray) tile; - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - // float rot = (float)(this.worldObj.provider.getWorldTime() % (360 / - // this.rotationspeed) * this.rotationspeed) + this.rotationspeed * f; - float rot = getRotation(craftTime); - - float size = 1.0F * getSizeModifier(craftTime); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - - GlStateManager.translate(x, y, z); - - // Specify which face this "circle" is located on - EnumFacing sideHit = EnumFacing.UP; - EnumFacing rotation = tileArray.getRotation(); - - GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); - - switch (sideHit) { - case DOWN: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(-90.0f, 1, 0, 0); - break; - case EAST: - GlStateManager.rotate(-90.0f, 0, 1, 0); - GlStateManager.translate(0, 0, -1); - break; - case NORTH: - break; - case SOUTH: - GlStateManager.rotate(180.0f, 0, 1, 0); - GlStateManager.translate(-1, 0, -1); - break; - case UP: - GlStateManager.translate(0, 1, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - break; - case WEST: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(90.0f, 0, 1, 0); - break; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); - GlStateManager.rotate(rotation.getHorizontalAngle() + 180, 0, 0, 1); - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - GlStateManager.pushMatrix(); - GlStateManager.rotate(rot, 0, 0, 1); - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - - GlStateManager.color(1f, 1f, 1f, 1f); - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - - // Bind the second texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(secondaryArrayResource); - GlStateManager.pushMatrix(); - GlStateManager.rotate(-rot, 0, 0, 1); - - GlStateManager.color(1f, 1f, 1f, 1f); - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - - // GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GlStateManager.popMatrix(); - GlStateManager.popMatrix(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/LowAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/LowAlchemyCircleRenderer.java deleted file mode 100644 index bce8f30f..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/LowAlchemyCircleRenderer.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import net.minecraft.util.ResourceLocation; - -public class LowAlchemyCircleRenderer extends SingleAlchemyCircleRenderer -{ - public LowAlchemyCircleRenderer() - { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png")); - } - - public LowAlchemyCircleRenderer(ResourceLocation arrayResource) - { - super(arrayResource); - } - - @Override - public float getVerticalOffset(float craftTime) - { - return 0; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/LowStaticAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/LowStaticAlchemyCircleRenderer.java deleted file mode 100644 index 0256ec93..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/LowStaticAlchemyCircleRenderer.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import net.minecraft.util.ResourceLocation; - -public class LowStaticAlchemyCircleRenderer extends LowAlchemyCircleRenderer -{ - public LowStaticAlchemyCircleRenderer() - { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png")); - } - - public LowStaticAlchemyCircleRenderer(ResourceLocation arrayResource) - { - super(arrayResource); - } - - @Override - public float getRotation(float craftTime) - { - float offset = 2; - float duration = 180; - if (craftTime >= offset && craftTime < offset + duration) - { - float modifier = (craftTime - offset) * 2f; - return modifier * 1f; - } - return 0; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/MobSacrificeAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/MobSacrificeAlchemyCircleRenderer.java deleted file mode 100644 index d4590a5d..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/MobSacrificeAlchemyCircleRenderer.java +++ /dev/null @@ -1,267 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import WayofTime.bloodmagic.tile.TileAlchemyArray; - -public class MobSacrificeAlchemyCircleRenderer extends AlchemyCircleRenderer -{ - private ResourceLocation bottomArrayResource = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png"); - - private ResourceLocation mobSacrificeSwirlResource = new ResourceLocation("bloodmagic", "textures/models/mobsacrificeswirl.png"); - - public MobSacrificeAlchemyCircleRenderer(ResourceLocation location) - { - super(location); - } - - public MobSacrificeAlchemyCircleRenderer() - { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/mobsacrifice.png")); - } - - @Override - public float getSizeModifier(float craftTime) - { - if (craftTime < 40) - { - return 0; - } else if (craftTime > 40 && craftTime < 100) - { - return (craftTime - 40) / 60f; - } - return 1; - } - - @Override - public float getRotation(float craftTime) - { - float offset = 50; - if (craftTime >= offset) - { - float modifier = (craftTime - offset) * 5f; - return modifier * 1f; - } - return 0; - } - - @Override - public float getSecondaryRotation(float craftTime) - { - return 0; - } - - @Override - public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) - { - if (!(tile instanceof TileAlchemyArray)) - { - return; - } - - TileAlchemyArray tileArray = (TileAlchemyArray) tile; - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - - float rot = getRotation(craftTime); - - float size = 1.0F * getSizeModifier(craftTime); - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - - GlStateManager.translate(x, y, z); - - // Specify which face this "circle" is located on - EnumFacing sideHit = EnumFacing.UP; - EnumFacing rotation = tileArray.getRotation(); - - GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); - - switch (sideHit) - { - case DOWN: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(-90.0f, 1, 0, 0); - break; - case EAST: - GlStateManager.rotate(-90.0f, 0, 1, 0); - GlStateManager.translate(0, 0, -1); - break; - case NORTH: - break; - case SOUTH: - GlStateManager.rotate(180.0f, 0, 1, 0); - GlStateManager.translate(-1, 0, -1); - break; - case UP: - GlStateManager.translate(0, 1, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - break; - case WEST: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(90.0f, 0, 1, 0); - break; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); -// GlStateManager.rotate(rotation.getHorizontalAngle() + 180, 0, 0, 1); - - GlStateManager.pushMatrix(); - - double topHeightOffset = 0; - double middleHeightOffset = 0; - double bottomHeightOffset = 0; - - BlockPos pos = tileArray.getPos(); - World world = tileArray.getWorld(); - -// GlStateManager.rotate((float) (yaw + 360 * getStartupPitchYawRatio(craftTime)), 0, 0, 1); -// GlStateManager.rotate((float) ((pitch + 90) * getStartupPitchYawRatio(craftTime)), 1, 0, 0); - - for (int i = 1; i <= 3; i++) - { - GlStateManager.pushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(bottomArrayResource); - translateAndRotateFloatingArray(tessellator, wr, size, rot, craftTime, i); - GlStateManager.popMatrix(); - } - - //Render the main array. - GlStateManager.pushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); -// GlStateManager.rotate(rot, 0, 0, 1); - renderStandardCircle(tessellator, wr, 3); - GlStateManager.popMatrix(); - - //Render the swirlz - float swirlSize = 3; - if (craftTime <= 40) - { - swirlSize = 0; - } else if (craftTime <= 100) - { - swirlSize = 3 * (craftTime - 40) / 60; - } - GlStateManager.pushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(mobSacrificeSwirlResource); - GlStateManager.translate(0, 0, 0.1); - GlStateManager.rotate(rot / 3, 0, 0, 1); - renderStandardCircle(tessellator, wr, swirlSize); - GlStateManager.popMatrix(); - -// GlStateManager.popMatrix(); - - GlStateManager.popMatrix(); - - // GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GlStateManager.popMatrix(); - GlStateManager.popMatrix(); - } - - public float getStartupPitchYawRatio(float craftTime) - { - if (craftTime <= 80) - { - return 0; - } else if (craftTime > 80 && craftTime < 140) - { - return (craftTime - 80) / 60f; - } - - return 1; - } - - private void translateAndRotateFloatingArray(Tessellator tessellator, BufferBuilder builder, double size, float rotation, float craftTime, int circle) - { - double verticalOffset = 2; - - float primaryRotation = 0; - float secondaryRotation = 0; - if (craftTime >= 40) - { - primaryRotation = (craftTime - 40) * 4f; - secondaryRotation = (craftTime - 40) * 2f; - } - - float translationOffset = 1; - if (craftTime < 80) - { - translationOffset = 0; - } else if (craftTime < 140) - { - translationOffset = (craftTime - 80) / 60; - } - - switch (circle) - { - case 1: - GlStateManager.translate(0, 0, -verticalOffset); - GlStateManager.rotate(rotation / 200, 1, 0, 0); - GlStateManager.rotate(rotation / 10, 0, 0, 1); - GlStateManager.translate(1.7 * translationOffset, 0, 0); - break; - case 2: - GlStateManager.translate(0, 0, -verticalOffset); -// GlStateManager.rotate(254, 0, 0, 1); - GlStateManager.rotate((float) (rotation / 150 + 120), 1, 0, 0); - GlStateManager.rotate(120, 0, 1, 0); - GlStateManager.rotate(-rotation / 10, 0, 0, 1); - GlStateManager.translate(1.2 * translationOffset, 0, 0); - break; - case 3: - GlStateManager.translate(0, 0, -verticalOffset); -// GlStateManager.rotate(130, 0, 0, 1); - GlStateManager.rotate((float) (rotation / 100 + 284), 1, 0, 0); - GlStateManager.rotate(240, 0, 1, 0); - GlStateManager.rotate(-rotation / 7 + 180, 0, 0, 1); - GlStateManager.translate(2 * translationOffset, 0, 0); - break; - default: - //What are you doing, Way??? - } - - GlStateManager.rotate(primaryRotation, 0, 1, 0); - GlStateManager.rotate(secondaryRotation, 1, 0, 0); - GlStateManager.rotate(secondaryRotation * 0.41831f, 0, 0, 1); - - renderStandardCircle(tessellator, builder, size); - } - - private void renderStandardCircle(Tessellator tessellator, BufferBuilder builder, double size) - { - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - GlStateManager.color(1f, 1f, 1f, 1f); - builder.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - builder.pos(size / 2f, size / 2f, 0).tex(var33, var37).endVertex(); - builder.pos(size / 2f, -size / 2f, 0).tex(var33, var35).endVertex(); - builder.pos(-size / 2f, -size / 2f, 0).tex(var31, var35).endVertex(); - builder.pos(-size / 2f, size / 2f, 0).tex(var31, var37).endVertex(); - tessellator.draw(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/SingleAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/SingleAlchemyCircleRenderer.java deleted file mode 100644 index f409062a..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/SingleAlchemyCircleRenderer.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; - -public class SingleAlchemyCircleRenderer extends AlchemyCircleRenderer { - public float offsetFromFace = -0.9f; - - public SingleAlchemyCircleRenderer() { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png")); - } - - public SingleAlchemyCircleRenderer(ResourceLocation arrayResource) { - super(arrayResource); - } - - @Override - public float getSizeModifier(float craftTime) { - return 1; - } - - @Override - public float getRotation(float craftTime) { - float offset = 2; - if (craftTime >= offset) { - float modifier = (craftTime - offset) * 2f; - return modifier * 1f; - } - return 0; - } - - @Override - public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) { - if (!(tile instanceof TileAlchemyArray)) { - return; - } - - TileAlchemyArray tileArray = (TileAlchemyArray) tile; - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - // float rot = (float)(this.worldObj.provider.getWorldTime() % (360 / - // this.rotationspeed) * this.rotationspeed) + this.rotationspeed * f; - float rot = getRotation(craftTime); - - float size = 1.0F * getSizeModifier(craftTime); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - - GlStateManager.translate(x, y, z); - - // Specify which face this "circle" is located on - EnumFacing sideHit = EnumFacing.UP; - EnumFacing rotation = tileArray.getRotation(); - - GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); - - switch (sideHit) { - case DOWN: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(-90.0f, 1, 0, 0); - break; - case EAST: - GlStateManager.rotate(-90.0f, 0, 1, 0); - GlStateManager.translate(0, 0, -1); - break; - case NORTH: - break; - case SOUTH: - GlStateManager.rotate(180.0f, 0, 1, 0); - GlStateManager.translate(-1, 0, -1); - break; - case UP: - GlStateManager.translate(0, 1, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - break; - case WEST: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(90.0f, 0, 1, 0); - break; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); - GlStateManager.rotate(rotation.getHorizontalAngle() + 180, 0, 0, 1); - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - GlStateManager.pushMatrix(); - GlStateManager.rotate(rot, 0, 0, 1); - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - - GlStateManager.color(1f, 1f, 1f, 1f); - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - - // GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GlStateManager.popMatrix(); - GlStateManager.popMatrix(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/StaticAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/StaticAlchemyCircleRenderer.java deleted file mode 100644 index a1e2b461..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/StaticAlchemyCircleRenderer.java +++ /dev/null @@ -1,131 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; - -public class StaticAlchemyCircleRenderer extends AlchemyCircleRenderer { - public StaticAlchemyCircleRenderer(ResourceLocation location) { - super(location); - } - - public StaticAlchemyCircleRenderer() { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png")); - } - - @Override - public float getSizeModifier(float craftTime) { - return 1; - } - - @Override - public float getRotation(float craftTime) { - float offset = 50; - if (craftTime >= offset) { - float modifier = (craftTime - offset) * 5f; - return modifier * 1f; - } - return 0; - } - - @Override - public float getSecondaryRotation(float craftTime) { - return 0; - } - - @Override - public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) { - if (!(tile instanceof TileAlchemyArray)) { - return; - } - - TileAlchemyArray tileArray = (TileAlchemyArray) tile; - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - - float rot = getRotation(craftTime); - - float size = 1.0F * getSizeModifier(craftTime); - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - - GlStateManager.translate(x, y, z); - - // Specify which face this "circle" is located on - EnumFacing sideHit = EnumFacing.UP; - EnumFacing rotation = tileArray.getRotation(); - - GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); - - switch (sideHit) { - case DOWN: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(-90.0f, 1, 0, 0); - break; - case EAST: - GlStateManager.rotate(-90.0f, 0, 1, 0); - GlStateManager.translate(0, 0, -1); - break; - case NORTH: - break; - case SOUTH: - GlStateManager.rotate(180.0f, 0, 1, 0); - GlStateManager.translate(-1, 0, -1); - break; - case UP: - GlStateManager.translate(0, 1, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - break; - case WEST: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(90.0f, 0, 1, 0); - break; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); - GlStateManager.rotate(rotation.getHorizontalAngle() + 180, 0, 0, 1); - - GlStateManager.pushMatrix(); - GlStateManager.rotate(rot, 0, 1, 0); - - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - - GlStateManager.color(1f, 1f, 1f, 1f); - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - - // GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GlStateManager.popMatrix(); - GlStateManager.popMatrix(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/TurretAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/TurretAlchemyCircleRenderer.java deleted file mode 100644 index 967b4638..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/TurretAlchemyCircleRenderer.java +++ /dev/null @@ -1,280 +0,0 @@ -package WayofTime.bloodmagic.client.render.alchemyArray; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffect; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectArrowTurret; -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import WayofTime.bloodmagic.tile.TileAlchemyArray; - -public class TurretAlchemyCircleRenderer extends AlchemyCircleRenderer -{ - private ResourceLocation bottomArrayResource = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png"); - private ResourceLocation middleArrayResource = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png"); - - public TurretAlchemyCircleRenderer(ResourceLocation location) - { - super(location); - } - - public TurretAlchemyCircleRenderer() - { - this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png")); - } - - @Override - public float getSizeModifier(float craftTime) - { - return 1; - } - - @Override - public float getRotation(float craftTime) - { - float offset = 50; - if (craftTime >= offset) - { - float modifier = (craftTime - offset) * 5f; - return modifier * 1f; - } - return 0; - } - - @Override - public float getSecondaryRotation(float craftTime) - { - return 0; - } - - @Override - public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) - { - if (!(tile instanceof TileAlchemyArray)) - { - return; - } - - float f = 0; //Not working - - TileAlchemyArray tileArray = (TileAlchemyArray) tile; - AlchemyArrayEffect effect = tileArray.arrayEffect; - double pitch = 0; - double yaw = 0; - int arrowTimer = -1; - if (effect instanceof AlchemyArrayEffectArrowTurret) - { - AlchemyArrayEffectArrowTurret turretEffect = (AlchemyArrayEffectArrowTurret) effect; - pitch = (turretEffect.getPitch() - turretEffect.getLastPitch()) * f + turretEffect.getLastPitch(); - yaw = (turretEffect.getYaw() - turretEffect.getLastYaw()) * f + turretEffect.getLastYaw(); - arrowTimer = turretEffect.arrowTimer; - } - - double arrowAnimation = arrowTimer + f; - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - - float rot = getRotation(craftTime); - - float size = 1.0F * getSizeModifier(craftTime); - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - - GlStateManager.translate(x, y, z); - - // Specify which face this "circle" is located on - EnumFacing sideHit = EnumFacing.UP; - EnumFacing rotation = tileArray.getRotation(); - - GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); - - switch (sideHit) - { - case DOWN: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(-90.0f, 1, 0, 0); - break; - case EAST: - GlStateManager.rotate(-90.0f, 0, 1, 0); - GlStateManager.translate(0, 0, -1); - break; - case NORTH: - break; - case SOUTH: - GlStateManager.rotate(180.0f, 0, 1, 0); - GlStateManager.translate(-1, 0, -1); - break; - case UP: - GlStateManager.translate(0, 1, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - break; - case WEST: - GlStateManager.translate(0, 0, 1); - GlStateManager.rotate(90.0f, 0, 1, 0); - break; - } - - GlStateManager.pushMatrix(); - GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); -// GlStateManager.rotate(rotation.getHorizontalAngle() + 180, 0, 0, 1); - - GlStateManager.pushMatrix(); - - double topHeightOffset = getTopHeightOffset(craftTime, arrowAnimation); - double middleHeightOffset = getMiddleHeightOffset(craftTime, arrowAnimation); - double bottomHeightOffset = getBottomHeightOffset(craftTime, arrowAnimation); - - BlockPos pos = tileArray.getPos(); - World world = tileArray.getWorld(); - - GlStateManager.rotate((float) (yaw + 360 * getStartupPitchYawRatio(craftTime)), 0, 0, 1); - GlStateManager.rotate((float) ((pitch + 90) * getStartupPitchYawRatio(craftTime)), 1, 0, 0); - - GlStateManager.pushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(bottomArrayResource); - GlStateManager.rotate(-rot, 0, 0, 1); - GlStateManager.translate(0, 0, -bottomHeightOffset); - renderStandardCircle(tessellator, wr, size / 2); - GlStateManager.popMatrix(); - - GlStateManager.pushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(middleArrayResource); - GlStateManager.rotate(0, 0, 0, 1); - GlStateManager.translate(0, 0, -middleHeightOffset); - renderStandardCircle(tessellator, wr, size); - GlStateManager.popMatrix(); - - GlStateManager.pushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); - GlStateManager.rotate(rot, 0, 0, 1); - GlStateManager.translate(0, 0, -topHeightOffset); - renderStandardCircle(tessellator, wr, size); - GlStateManager.popMatrix(); - - GlStateManager.popMatrix(); - - // GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - GlStateManager.popMatrix(); - GlStateManager.popMatrix(); - } - - public float getStartupPitchYawRatio(float craftTime) - { - if (craftTime <= 80) - { - return 0; - } else if (craftTime > 80 && craftTime < 140) - { - return (craftTime - 80) / 60f; - } - - return 1; - } - - public double getBottomHeightOffset(double craftTime, double arrowAnimation) - { - if (craftTime <= 40) - { - return 0; - } else if (craftTime > 40 && craftTime < 100) - { - return -0.4 * (craftTime - 40) / 60d; - } else if (craftTime >= 100 && craftTime < 140) - { - return -0.4 * (140 - craftTime) / 40d; - } - - if (arrowAnimation > 0 && arrowAnimation < 45) - { - return -0.4 * (arrowAnimation) / 45; - } else if (arrowAnimation >= 45 && arrowAnimation < 50) - { - return -0.4 * (50 - arrowAnimation) / 5; - } - - return 0; - } - - public double getMiddleHeightOffset(double craftTime, double arrowAnimation) - { - if (craftTime <= 40) - { - return 0; - } else if (craftTime > 40 && craftTime < 100) - { - return 0.1 * (craftTime - 40) / 60d; - } else if (craftTime >= 100 && craftTime < 140) - { - return 0.1 * (140 - craftTime) / 40d; - } - - if (arrowAnimation > 0 && arrowAnimation < 45) - { - return 0.1 * (arrowAnimation) / 45; - } else if (arrowAnimation >= 45 && arrowAnimation < 50) - { - return 0.1 * (50 - arrowAnimation) / 5; - } - - return 0; - } - - public double getTopHeightOffset(double craftTime, double arrowAnimation) - { - if (craftTime <= 40) - { - return 0; - } else if (craftTime > 40 && craftTime < 100) - { - return 0.4 * (craftTime - 40) / 60d; - } else if (craftTime >= 100 && craftTime < 140) - { - return 0.4 * (140 - craftTime) / 40d; - } - - if (arrowAnimation > 0 && arrowAnimation < 45) - { - return 0.4 * (arrowAnimation) / 45; - } else if (arrowAnimation >= 45 && arrowAnimation < 50) - { - return 0.4 * (50 - arrowAnimation) / 5; - } - - return 0; - } - - private void renderStandardCircle(Tessellator tessellator, BufferBuilder builder, double size) - { - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - GlStateManager.color(1f, 1f, 1f, 1f); - builder.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - builder.pos(size / 2f, size / 2f, 0).tex(var33, var37).endVertex(); - builder.pos(size / 2f, -size / 2f, 0).tex(var33, var35).endVertex(); - builder.pos(-size / 2f, -size / 2f, 0).tex(var31, var35).endVertex(); - builder.pos(-size / 2f, size / 2f, 0).tex(var31, var37).endVertex(); - tessellator.draw(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAlchemyArray.java deleted file mode 100644 index b954ce52..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAlchemyArray.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.bloodmagic.client.render.block; - -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyArray; -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import WayofTime.bloodmagic.core.registry.AlchemyArrayRecipeRegistry; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.item.ItemStack; - -public class RenderAlchemyArray extends TileEntitySpecialRenderer { - @Override - public void render(TileAlchemyArray alchemyArray, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { - ItemStack inputStack = alchemyArray.getStackInSlot(0); - ItemStack catalystStack = alchemyArray.getStackInSlot(1); - int craftTime = alchemyArray.activeCounter; - AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack); - if (renderer == AlchemyArrayRecipeRegistry.DEFAULT_RENDERER) { - RecipeAlchemyArray recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyArray(inputStack, catalystStack); - if (recipe != null) - renderer = new AlchemyCircleRenderer(recipe.getCircleTexture()); - } - - renderer.renderAt(alchemyArray, x, y, z, (craftTime > 0 ? craftTime + partialTicks : 0)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAltar.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAltar.java deleted file mode 100644 index 2dba9db8..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderAltar.java +++ /dev/null @@ -1,164 +0,0 @@ -package WayofTime.bloodmagic.client.render.block; - -import WayofTime.bloodmagic.altar.AltarComponent; -import WayofTime.bloodmagic.altar.AltarTier; -import WayofTime.bloodmagic.block.BlockLifeEssence; -import WayofTime.bloodmagic.tile.TileAltar; -import WayofTime.bloodmagic.util.handler.event.ClientHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import org.lwjgl.opengl.GL11; - -public class RenderAltar extends TileEntitySpecialRenderer { - private static final float MIN_HEIGHT = 0.499f; - private static final float MAX_HEIGHT = 0.745f; - - @Override - public void render(TileAltar tileAltar, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { - ItemStack inputStack = tileAltar.getStackInSlot(0); - - float level = ((float) tileAltar.getCurrentBlood()) / (float) tileAltar.getCapacity(); - - GlStateManager.pushMatrix(); - GlStateManager.translate(x, y, z); - if (level > 0) - this.renderFluid(level); - this.renderItem(inputStack); - GlStateManager.popMatrix(); - - if (tileAltar.getCurrentTierDisplayed() != AltarTier.ONE) - renderHologram(tileAltar, tileAltar.getCurrentTierDisplayed(), partialTicks); - } - - private void renderFluid(float fluidLevel) { - GlStateManager.pushMatrix(); - - Fluid fluid = BlockLifeEssence.getLifeEssence(); - FluidStack fluidStack = new FluidStack(fluid, 1000); - - GlStateManager.translate(0.5, MIN_HEIGHT + (fluidLevel) * (MAX_HEIGHT - MIN_HEIGHT), 0.5); - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - float size = 0.8f; - - TextureAtlasSprite fluidStillSprite = Minecraft.getMinecraft().getTextureMapBlocks().getTextureExtry(fluid.getStill().toString()); - - int fluidColor = fluid.getColor(fluidStack); - - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - setGLColorFromInt(fluidColor); - - double uMin = (double) fluidStillSprite.getMinU(); - double uMax = (double) fluidStillSprite.getMaxU(); - double vMin = (double) fluidStillSprite.getMinV(); - double vMax = (double) fluidStillSprite.getMaxV(); - - wr.begin(7, DefaultVertexFormats.POSITION_TEX); -// wr.setBrightness(200); - wr.pos(size / 2f, 0, size / 2f).tex(uMax, vMax).endVertex(); - wr.pos(size / 2f, 0, -size / 2f).tex(uMax, vMin).endVertex(); - wr.pos(-size / 2f, 0, -size / 2f).tex(uMin, vMin).endVertex(); - wr.pos(-size / 2f, 0, size / 2f).tex(uMin, vMax).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - } - - private void renderItem(ItemStack stack) { - RenderItem itemRenderer = Minecraft.getMinecraft().getRenderItem(); - if (!stack.isEmpty()) { - GlStateManager.translate(0.5, 1, 0.5); - GlStateManager.pushMatrix(); - GlStateManager.disableLighting(); - - float rotation = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); - - GlStateManager.rotate(rotation, 0.0F, 1.0F, 0); - GlStateManager.scale(0.75F, 0.75F, 0.75F); - GlStateManager.pushAttrib(); - RenderHelper.enableStandardItemLighting(); - itemRenderer.renderItem(stack, ItemCameraTransforms.TransformType.GROUND); - RenderHelper.disableStandardItemLighting(); - GlStateManager.popAttrib(); - - GlStateManager.enableLighting(); - GlStateManager.popMatrix(); - } - } - - private void renderHologram(TileAltar altar, AltarTier tier, float partialTicks) { - EntityPlayerSP player = Minecraft.getMinecraft().player; - World world = player.world; - - if (tier == AltarTier.ONE) - return; - - GlStateManager.pushMatrix(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GlStateManager.color(1F, 1F, 1F, 0.6125F); - - BlockPos vec3, vX; - vec3 = altar.getPos(); - double posX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; - double posY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; - double posZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; - - for (AltarComponent altarComponent : tier.getAltarComponents()) { - vX = vec3.add(altarComponent.getOffset()); - double minX = vX.getX() - posX; - double minY = vX.getY() - posY; - double minZ = vX.getZ() - posZ; - - if (!world.getBlockState(vX).isOpaqueCube()) { - TextureAtlasSprite texture = null; - - switch (altarComponent.getComponent()) { - case BLOODRUNE: - texture = ClientHandler.blankBloodRune; - break; - case NOTAIR: - texture = ClientHandler.stoneBrick; - break; - case GLOWSTONE: - texture = ClientHandler.glowstone; - break; - case BLOODSTONE: - texture = ClientHandler.bloodStoneBrick; - break; - case BEACON: - texture = ClientHandler.beacon; - break; - case CRYSTAL: - texture = ClientHandler.crystalCluster; - break; - } - - RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ); - } - } - - GlStateManager.popMatrix(); - } - - private static void setGLColorFromInt(int color) { - float red = (color >> 16 & 0xFF) / 255.0F; - float green = (color >> 8 & 0xFF) / 255.0F; - float blue = (color & 0xFF) / 255.0F; - - GlStateManager.color(red, green, blue, 1.0F); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderBloodTank.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderBloodTank.java deleted file mode 100644 index 235fb836..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderBloodTank.java +++ /dev/null @@ -1,109 +0,0 @@ -package WayofTime.bloodmagic.client.render.block; - -import WayofTime.bloodmagic.tile.TileBloodTank; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.opengl.GL11; - -@SideOnly(Side.CLIENT) -public class RenderBloodTank extends TileEntitySpecialRenderer { - private static final Minecraft mc = Minecraft.getMinecraft(); - - @Override - public void render(TileBloodTank bloodTank, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { - if (bloodTank == null) - return; - - Fluid renderFluid = bloodTank.getClientRenderFluid(); - if (bloodTank.getRenderHeight() == 0 || renderFluid == null) - return; - - GlStateManager.pushMatrix(); - - bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - - renderFluid(bloodTank.getRenderHeight(), renderFluid, x, y, z); - - GlStateManager.popMatrix(); - } - - public void renderFluid(float maxHeight, Fluid renderFluid, double x, double y, double z) { - maxHeight = maxHeight * 0.575F; - - GlStateManager.translate(x, y, z); - RenderHelper.disableStandardItemLighting(); - - GlStateManager.disableRescaleNormal(); - GlStateManager.disableBlend(); - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder buffer = tessellator.getBuffer(); - - TextureAtlasSprite fluid = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(renderFluid.getStill().toString()); - fluid = fluid == null ? mc.getTextureMapBlocks().getMissingSprite() : fluid; - - buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); - - final int rgbaColor = renderFluid.getColor(); - final int rColor = rgbaColor >> 16 & 0xFF; - final int gColor = rgbaColor >> 8 & 0xFF; - final int bColor = rgbaColor & 0xFF; - final int aColor = rgbaColor >> 24 & 0xFF; - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GlStateManager.color(rColor, gColor, bColor, aColor); - - float u1 = fluid.getMinU(); - float v1 = fluid.getMinV(); - float u2 = fluid.getMaxU(); - float v2 = fluid.getMaxV(); - - if (maxHeight > 0) { - float texWidth = u2 - u1; - - // TOP - buffer.pos(0.25, maxHeight + 0.05, 0.25).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.25, maxHeight + 0.05, 0.75).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.75, maxHeight + 0.05, 0.75).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.75, maxHeight + 0.05, 0.25).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - - // NORTH - buffer.pos(0.75, maxHeight + 0.05, 0.25).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.75, 0, 0.25).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.25, 0, 0.25).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.25, maxHeight + 0.05, 0.25).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - - // EAST - buffer.pos(0.25, 0, 0.75).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.25, maxHeight + 0.05, 0.75).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.25, maxHeight + 0.05, 0.25).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.25, 0, 0.25).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - - // SOUTH - buffer.pos(0.75, 0, 0.75).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.75, maxHeight + 0.05, 0.75).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.25, maxHeight + 0.05, 0.75).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.25, 0, 0.75).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - - // WEST - buffer.pos(0.75, maxHeight + 0.05, 0.75).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.75, 0, 0.75).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.75, 0, 0.25).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0.75, maxHeight + 0.05, 0.25).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - } - - tessellator.draw(); - - RenderHelper.enableStandardItemLighting(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderDemonCrucible.java deleted file mode 100644 index 439b9618..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderDemonCrucible.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.client.render.block; - -import WayofTime.bloodmagic.tile.TileDemonCrucible; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.RenderItem; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; - -public class RenderDemonCrucible extends TileEntitySpecialRenderer { - public static Minecraft mc = Minecraft.getMinecraft(); - public static ResourceLocation resource = new ResourceLocation("bloodmagic", "textures/blocks/lifeEssenceStill.png"); - public static float minHeight = 0.6497f; - public static float maxHeight = 0.79f; - - @Override - public void render(TileDemonCrucible tile, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { - ItemStack inputStack = tile.getStackInSlot(0); - - GlStateManager.pushMatrix(); - GlStateManager.translate(x, y, z); - this.renderItem(tile.getWorld(), inputStack, partialTicks); - GlStateManager.popMatrix(); - } - - private void renderItem(World world, ItemStack stack, float partialTicks) { - RenderItem itemRenderer = mc.getRenderItem(); - if (!stack.isEmpty()) { - GlStateManager.translate(0.5, 1.5, 0.5); - EntityItem entityitem = new EntityItem(world, 0.0D, 0.0D, 0.0D, stack); - entityitem.getItem().setCount(1); - entityitem.hoverStart = 0.0F; - GlStateManager.pushMatrix(); - GlStateManager.disableLighting(); - - float rotation = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); - - GlStateManager.rotate(rotation, 0.0F, 1.0F, 0); - GlStateManager.scale(0.5F, 0.5F, 0.5F); - GlStateManager.pushAttrib(); - RenderHelper.enableStandardItemLighting(); - itemRenderer.renderItem(entityitem.getItem(), ItemCameraTransforms.TransformType.FIXED); - RenderHelper.disableStandardItemLighting(); - GlStateManager.popAttrib(); - - GlStateManager.enableLighting(); - GlStateManager.popMatrix(); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderFakeBlocks.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderFakeBlocks.java deleted file mode 100644 index df87dc07..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderFakeBlocks.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.bloodmagic.client.render.block; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import org.lwjgl.opengl.GL11; - -public class RenderFakeBlocks { - public static void drawFakeBlock(TextureAtlasSprite texture, double minX, double minY, double minZ) { - if (texture == null) - return; - - double maxX = minX + 1; - double maxY = minY + 1; - double maxZ = minZ + 1; - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - - wr.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); - - float texMinU = texture.getMinU(); - float texMinV = texture.getMinV(); - float texMaxU = texture.getMaxU(); - float texMaxV = texture.getMaxV(); - - wr.pos(minX, minY, minZ).tex(texMinU, texMinV).endVertex(); - wr.pos(maxX, minY, minZ).tex(texMaxU, texMinV).endVertex(); - wr.pos(maxX, minY, maxZ).tex(texMaxU, texMaxV).endVertex(); - wr.pos(minX, minY, maxZ).tex(texMinU, texMaxV).endVertex(); - - wr.pos(minX, maxY, maxZ).tex(texMinU, texMaxV).endVertex(); - wr.pos(maxX, maxY, maxZ).tex(texMaxU, texMaxV).endVertex(); - wr.pos(maxX, maxY, minZ).tex(texMaxU, texMinV).endVertex(); - wr.pos(minX, maxY, minZ).tex(texMinU, texMinV).endVertex(); - - wr.pos(maxX, minY, minZ).tex(texMinU, texMaxV).endVertex(); - wr.pos(minX, minY, minZ).tex(texMaxU, texMaxV).endVertex(); - wr.pos(minX, maxY, minZ).tex(texMaxU, texMinV).endVertex(); - wr.pos(maxX, maxY, minZ).tex(texMinU, texMinV).endVertex(); - - wr.pos(minX, minY, maxZ).tex(texMinU, texMaxV).endVertex(); - wr.pos(maxX, minY, maxZ).tex(texMaxU, texMaxV).endVertex(); - wr.pos(maxX, maxY, maxZ).tex(texMaxU, texMinV).endVertex(); - wr.pos(minX, maxY, maxZ).tex(texMinU, texMinV).endVertex(); - - wr.pos(minX, minY, minZ).tex(texMinU, texMaxV).endVertex(); - wr.pos(minX, minY, maxZ).tex(texMaxU, texMaxV).endVertex(); - wr.pos(minX, maxY, maxZ).tex(texMaxU, texMinV).endVertex(); - wr.pos(minX, maxY, minZ).tex(texMinU, texMinV).endVertex(); - - wr.pos(maxX, minY, maxZ).tex(texMinU, texMaxV).endVertex(); - wr.pos(maxX, minY, minZ).tex(texMaxU, texMaxV).endVertex(); - wr.pos(maxX, maxY, minZ).tex(texMaxU, texMinV).endVertex(); - wr.pos(maxX, maxY, maxZ).tex(texMinU, texMinV).endVertex(); - - tessellator.draw(); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java deleted file mode 100644 index d4cab8a7..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderItemRoutingNode.java +++ /dev/null @@ -1,110 +0,0 @@ -package WayofTime.bloodmagic.client.render.block; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.iface.INodeRenderer; -import WayofTime.bloodmagic.client.helper.ShaderHelper; -import WayofTime.bloodmagic.tile.routing.TileRoutingNode; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import org.lwjgl.opengl.GL11; - -import java.util.List; - -public class RenderItemRoutingNode extends TileEntitySpecialRenderer { - private static final ResourceLocation beamTexture = new ResourceLocation(BloodMagic.MODID, "textures/entities/nodeBeam.png"); - private static final Minecraft mc = Minecraft.getMinecraft(); - - @Override - public void render(TileRoutingNode tileNode, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { - if (mc.player.getHeldItemMainhand().getItem() instanceof INodeRenderer || ConfigHandler.client.alwaysRenderRoutingLines) { - List connectionList = tileNode.getConnected(); - for (BlockPos wantedPos : connectionList) { - BlockPos offsetPos = wantedPos.subtract(tileNode.getPos()); - - //The beam renders towards the east by default. - - int xd = offsetPos.getX(); - int yd = offsetPos.getY(); - int zd = offsetPos.getZ(); - double distance = Math.sqrt(xd * xd + yd * yd + zd * zd); - double subLength = MathHelper.sqrt(xd * xd + zd * zd); - float rotYaw = -((float) (Math.atan2(zd, xd) * 180.0D / Math.PI)); - float rotPitch = ((float) (Math.atan2(yd, subLength) * 180.0D / Math.PI)); - - GlStateManager.pushMatrix(); - float f1 = 1.0f; - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - this.bindTexture(beamTexture); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); - GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); - GlStateManager.disableLighting(); - GlStateManager.disableCull(); - float f2 = 0; - float f3 = -f2 * 0.2F - (float) MathHelper.floor(-f2 * 0.1F); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - double width = 0.06; - - float test = (tileNode.getWorld().getTotalWorldTime() + partialTicks) / 5f; - - double d18 = -width / 2; - double d19 = -width / 2; - double d20 = width / 2; - double d21 = -width / 2; - double d22 = -width / 2; - double d23 = width / 2; - double d24 = width / 2; - double d25 = width / 2; - double d26 = distance * f1; - double d27 = 0.0D; - double d28 = 1.0D; - double d29 = (double) (f3) + test; - double d30 = distance * f1 + d29; - - GlStateManager.translate(x + 0.5, y + 0.5, z + 0.5); - - GlStateManager.rotate(rotYaw, 0, 1, 0); - GlStateManager.rotate(rotPitch, 0, 0, 1); - -// tessellator.setBrightness(240); -// float s = 1F / 16F; - wr.begin(7, DefaultVertexFormats.POSITION_TEX); -// tessellator.setColorRGBA(255, 255, 255, 100); - wr.pos(d26, d18, d19).tex(d28, d30).endVertex(); - wr.pos(0, d18, d19).tex(d28, d29).endVertex(); - wr.pos(0, d20, d21).tex(d27, d29).endVertex(); - wr.pos(d26, d20, d21).tex(d27, d30).endVertex(); - wr.pos(d26, d24, d25).tex(d28, d30).endVertex(); - wr.pos(0, d24, d25).tex(d28, d29).endVertex(); - wr.pos(0, d22, d23).tex(d27, d29).endVertex(); - wr.pos(d26, d22, d23).tex(d27, d30).endVertex(); - wr.pos(d26, d20, d21).tex(d28, d30).endVertex(); - wr.pos(0, d20, d21).tex(d28, d29).endVertex(); - wr.pos(0, d24, d25).tex(d27, d29).endVertex(); - wr.pos(d26, d24, d25).tex(d27, d30).endVertex(); - wr.pos(d26, d22, d23).tex(d28, d30).endVertex(); - wr.pos(0, d22, d23).tex(d28, d29).endVertex(); - wr.pos(0, d18, d19).tex(d27, d29).endVertex(); - wr.pos(d26, d18, d19).tex(d27, d30).endVertex(); - - ShaderHelper.useShader(ShaderHelper.psiBar, (int) tileNode.getWorld().getTotalWorldTime()); - tessellator.draw(); - ShaderHelper.releaseShader(); - - GlStateManager.enableLighting(); - GlStateManager.enableTexture2D(); - GlStateManager.popMatrix(); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderMimic.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderMimic.java deleted file mode 100644 index 8909df07..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderMimic.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.bloodmagic.client.render.block; - -import WayofTime.bloodmagic.tile.TileMimic; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class RenderMimic extends TileEntitySpecialRenderer { - public void render(TileMimic mimic, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { - if (mimic.getStackInSlot(0) != null) { - TileEntity testTile = mimic.mimicedTile; - if (mimic != null) { - TileEntityRendererDispatcher.instance.render(testTile, x, y, z, partialTicks, destroyStage); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/BloodLightRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/BloodLightRenderFactory.java deleted file mode 100644 index 1237c0c7..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/BloodLightRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class BloodLightRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderEntityBloodLight(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedChickenRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedChickenRenderFactory.java deleted file mode 100644 index 6429a137..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedChickenRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedChicken; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class CorruptedChickenRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderCorruptedChicken(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedSheepRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedSheepRenderFactory.java deleted file mode 100644 index 20c9c2c9..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedSheepRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class CorruptedSheepRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderCorruptedSheep(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedSpiderRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedSpiderRenderFactory.java deleted file mode 100644 index 95debc39..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedSpiderRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSpider; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class CorruptedSpiderRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderCorruptedSpider(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedZombieRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedZombieRenderFactory.java deleted file mode 100644 index 2e29c50e..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/CorruptedZombieRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedZombie; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class CorruptedZombieRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderCorruptedZombie(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/MeteorRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/MeteorRenderFactory.java deleted file mode 100644 index 5b57d12d..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/MeteorRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.projectile.EntityMeteor; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class MeteorRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderEntityMeteor(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/MimicRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/MimicRenderFactory.java deleted file mode 100644 index bc015688..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/MimicRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.mob.EntityMimic; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class MimicRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderEntityMimic(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedChicken.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedChicken.java deleted file mode 100644 index 6db0f642..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedChicken.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.client.render.entity.layer.LayerWill; -import WayofTime.bloodmagic.client.render.model.ModelCorruptedChicken; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedChicken; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class RenderCorruptedChicken extends RenderLiving { - private static final ResourceLocation CHICKEN_TEXTURES = new ResourceLocation("textures/entity/chicken.png"); - - public RenderCorruptedChicken(RenderManager renderManagerIn) { - super(renderManagerIn, new ModelCorruptedChicken(0), 0.3f); - this.addLayer(new LayerWill<>(this, new ModelCorruptedChicken(1.1f))); - } - - @Override - protected ResourceLocation getEntityTexture(EntityCorruptedChicken entity) { - return CHICKEN_TEXTURES; - } - - @Override - protected float handleRotationFloat(EntityCorruptedChicken livingBase, float partialTicks) { - float f = livingBase.oFlap + (livingBase.wingRotation - livingBase.oFlap) * partialTicks; - float f1 = livingBase.oFlapSpeed + (livingBase.destPos - livingBase.oFlapSpeed) * partialTicks; - return (MathHelper.sin(f) + 1.0F) * f1; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedSheep.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedSheep.java deleted file mode 100644 index d8024973..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedSheep.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.client.render.entity.layer.LayerAlchemyCircle; -import WayofTime.bloodmagic.client.render.entity.layer.LayerCorruptedSheepWool; -import WayofTime.bloodmagic.client.render.entity.layer.LayerWill; -import WayofTime.bloodmagic.client.render.model.ModelCorruptedSheep; -import WayofTime.bloodmagic.client.render.model.ModelCorruptedSheep2; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class RenderCorruptedSheep extends RenderLiving { - private static final ResourceLocation SHEARED_SHEEP_TEXTURES = new ResourceLocation("textures/entity/sheep/sheep.png"); - - public RenderCorruptedSheep(RenderManager renderManagerIn) { - super(renderManagerIn, new ModelCorruptedSheep2(0), 0.7F); - this.addLayer(new LayerCorruptedSheepWool(this)); - this.addLayer(new LayerWill<>(this, new ModelCorruptedSheep(1.1f))); - this.addLayer(new LayerWill<>(this, new ModelCorruptedSheep2(1.1f))); - this.addLayer(new LayerAlchemyCircle<>()); - } - - @Override - protected ResourceLocation getEntityTexture(EntityCorruptedSheep entity) { - return SHEARED_SHEEP_TEXTURES; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedSpider.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedSpider.java deleted file mode 100644 index bef6c894..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedSpider.java +++ /dev/null @@ -1,35 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.client.render.entity.layer.LayerCorruptedSpiderEyes; -import WayofTime.bloodmagic.client.render.entity.layer.LayerWill; -import WayofTime.bloodmagic.client.render.model.ModelCorruptedSpider; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSpider; -import net.minecraft.client.model.ModelSpider; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class RenderCorruptedSpider extends RenderLiving { - private static final ResourceLocation SPIDER_TEXTURES = new ResourceLocation("textures/entity/spider/spider.png"); - - public RenderCorruptedSpider(RenderManager renderManagerIn) { - super(renderManagerIn, new ModelSpider(), 1.0F); - this.addLayer(new LayerCorruptedSpiderEyes(this)); - this.addLayer(new LayerWill<>(this, new ModelCorruptedSpider(1.1f))); - } - - protected float getDeathMaxRotation(EntityCorruptedSpider entityLivingBaseIn) { - return 180.0F; - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called - * unless you call Render.bindEntityTexture. - */ - protected ResourceLocation getEntityTexture(EntityCorruptedSpider entity) { - return SPIDER_TEXTURES; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedZombie.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedZombie.java deleted file mode 100644 index f7ffad16..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderCorruptedZombie.java +++ /dev/null @@ -1,66 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.client.render.entity.layer.LayerWill; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedZombie; -import net.minecraft.client.model.ModelZombie; -import net.minecraft.client.model.ModelZombieVillager; -import net.minecraft.client.renderer.entity.RenderBiped; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; -import net.minecraft.client.renderer.entity.layers.LayerCustomHead; -import net.minecraft.client.renderer.entity.layers.LayerHeldItem; -import net.minecraft.client.renderer.entity.layers.LayerRenderer; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class RenderCorruptedZombie extends RenderBiped { - private static final ResourceLocation ZOMBIE_TEXTURES = new ResourceLocation("textures/entity/zombie/zombie.png"); - private final ModelZombieVillager zombieVillagerModel; - - public RenderCorruptedZombie(RenderManager renderManagerIn) { - super(renderManagerIn, new ModelZombie(), 0.5F); - LayerRenderer layerrenderer = this.layerRenderers.get(0); - this.zombieVillagerModel = new ModelZombieVillager(); - this.addLayer(new LayerHeldItem(this)); - LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) { - protected void initArmor() { - this.modelLeggings = new ModelZombie(0.5F, true); - this.modelArmor = new ModelZombie(1.0F, true); - } - }; - this.addLayer(layerbipedarmor); - - if (layerrenderer instanceof LayerCustomHead) { - layerRenderers.remove(layerrenderer); - this.addLayer(new LayerCustomHead(this.zombieVillagerModel.bipedHead)); - } - - this.layerRenderers.remove(layerbipedarmor); - this.addLayer(new LayerWill<>(this, new ModelZombie(1.2f, false))); - } - - /** - * Allows the render to do state modifications necessary before the model is - * rendered. - */ - protected void preRenderCallback(EntityCorruptedZombie entitylivingbaseIn, float partialTickTime) { - super.preRenderCallback(entitylivingbaseIn, partialTickTime); - } - - /** - * Renders the desired {@code T} type Entity. - */ - public void doRender(EntityCorruptedZombie entity, double x, double y, double z, float entityYaw, float partialTicks) { - super.doRender(entity, x, y, z, entityYaw, partialTicks); - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called - * unless you call Render.bindEntityTexture. - */ - protected ResourceLocation getEntityTexture(EntityCorruptedZombie entity) { - return ZOMBIE_TEXTURES; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityBloodLight.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityBloodLight.java deleted file mode 100644 index 64430836..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityBloodLight.java +++ /dev/null @@ -1,38 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; -import WayofTime.bloodmagic.item.types.ComponentTypes; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderItem; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.util.ResourceLocation; - -public class RenderEntityBloodLight extends Render { - private final RenderItem renderItem = Minecraft.getMinecraft().getRenderItem(); - - public RenderEntityBloodLight(RenderManager renderManagerIn) { - super(renderManagerIn); - } - - public void doRender(EntityBloodLight entity, double x, double y, double z, float entityYaw, float partialTicks) { - GlStateManager.pushMatrix(); - GlStateManager.translate((float) x, (float) y, (float) z); - GlStateManager.enableRescaleNormal(); - GlStateManager.scale(0.5F, 0.5F, 0.5F); - GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); - this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - this.renderItem.renderItem(ComponentTypes.REAGENT_BLOOD_LIGHT.getStack(), ItemCameraTransforms.TransformType.GROUND); - GlStateManager.disableRescaleNormal(); - GlStateManager.popMatrix(); - super.doRender(entity, x, y, z, entityYaw, partialTicks); - } - - protected ResourceLocation getEntityTexture(EntityBloodLight entity) { - return TextureMap.LOCATION_BLOCKS_TEXTURE; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMeteor.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMeteor.java deleted file mode 100644 index 77c9cdbc..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMeteor.java +++ /dev/null @@ -1,41 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.render.model.ModelMeteor; -import WayofTime.bloodmagic.entity.projectile.EntityMeteor; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.util.ResourceLocation; - -public class RenderEntityMeteor extends Render { - - private static final ResourceLocation TEXTURE = new ResourceLocation(BloodMagic.MODID, "textures/models/Meteor.png"); - private static final float SCALE = 1; - - public ModelBase model = new ModelMeteor(); - - public RenderEntityMeteor(RenderManager renderManagerIn) { - super(renderManagerIn); - } - - @Override - public void doRender(EntityMeteor entity, double x, double y, double z, float entityYaw, float partialTicks) { - GlStateManager.pushMatrix(); - GlStateManager.translate((float) x, (float) y, (float) z); - GlStateManager.enableRescaleNormal(); - GlStateManager.scale(SCALE, SCALE, SCALE); - this.bindTexture(TEXTURE); - model.render(entity, 0, (float) x, (float) y, (float) z, entityYaw, partialTicks); - GlStateManager.disableRescaleNormal(); - GlStateManager.popMatrix(); - - super.doRender(entity, x, y, z, entityYaw, partialTicks); - } - - @Override - protected ResourceLocation getEntityTexture(EntityMeteor entity) { - return TEXTURE; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMimic.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMimic.java deleted file mode 100644 index 27a39056..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMimic.java +++ /dev/null @@ -1,117 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.client.render.model.ModelMimic; -import WayofTime.bloodmagic.entity.mob.EntityMimic; -import com.mojang.authlib.GameProfile; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer; -import net.minecraft.init.Items; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.Item; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTUtil; -import net.minecraft.tileentity.TileEntitySkull; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StringUtils; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class RenderEntityMimic extends RenderLiving { - private static final ResourceLocation SPIDER_TEXTURES = new ResourceLocation("textures/entity/spider/spider.png"); - Minecraft minecraft = Minecraft.getMinecraft(); - - public RenderEntityMimic(RenderManager renderManagerIn) { - super(renderManagerIn, new ModelMimic(), 1.0F); - } - - @Override - public void doRender(EntityMimic mimic, double x, double y, double z, float entityYaw, float partialTicks) { - super.doRender(mimic, x, y, z, entityYaw, partialTicks); - - GlStateManager.pushMatrix(); - if (mimic.getMimicItemStack() != null) { - GlStateManager.pushMatrix(); - - if (this.renderOutlines) { - GlStateManager.enableColorMaterial(); - GlStateManager.enableOutlineMode(this.getTeamColor(mimic)); - } - - GlStateManager.translate(x, y, z); - - ItemStack itemstack = mimic.getMimicItemStack(); - Item item = itemstack.getItem(); - Minecraft minecraft = Minecraft.getMinecraft(); - GlStateManager.pushMatrix(); - - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - - if (item == Items.SKULL) { - float f2 = 1.1875F; - GlStateManager.scale(1.1875F, -1.1875F, -1.1875F); - - GameProfile gameprofile = null; - - if (itemstack.hasTagCompound()) { - NBTTagCompound nbttagcompound = itemstack.getTagCompound(); - - if (nbttagcompound.hasKey("SkullOwner", 10)) { - gameprofile = NBTUtil.readGameProfileFromNBT(nbttagcompound.getCompoundTag("SkullOwner")); - } else if (nbttagcompound.hasKey("SkullOwner", 8)) { - String s = nbttagcompound.getString("SkullOwner"); - - if (!StringUtils.isNullOrEmpty(s)) { - gameprofile = TileEntitySkull.updateGameprofile(new GameProfile(null, s)); - nbttagcompound.setTag("SkullOwner", NBTUtil.writeGameProfile(new NBTTagCompound(), gameprofile)); - } - } - } - - TileEntitySkullRenderer.instance.renderSkull(-0.5F, 0.0F, -0.5F, EnumFacing.UP, 180.0F, itemstack.getMetadata(), gameprofile, -1, 0); - } else if (!(item instanceof ItemArmor) || ((ItemArmor) item).getEquipmentSlot() != EntityEquipmentSlot.HEAD) { - GlStateManager.translate(0, 0.5f, 0); - GlStateManager.rotate(-(mimic.prevRotationYawHead + partialTicks * (mimic.rotationYawHead - mimic.prevRotationYawHead)) - 180, 0, 1, 0); - - minecraft.getItemRenderer().renderItem(mimic, itemstack, ItemCameraTransforms.TransformType.HEAD); - } - - GlStateManager.popMatrix(); - - if (this.renderOutlines) { - GlStateManager.disableOutlineMode(); - GlStateManager.disableColorMaterial(); - } - - GlStateManager.popMatrix(); - super.doRender(mimic, x, y, z, entityYaw, partialTicks); - - } - GlStateManager.popMatrix(); - - if (!this.renderOutlines) { - this.renderLeash(mimic, x, y, z, entityYaw, partialTicks); - } - } - - @Override - protected float getDeathMaxRotation(EntityMimic mimic) { - return 180.0F; - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called - * unless you call Render.bindEntityTexture. - */ - @Override - protected ResourceLocation getEntityTexture(EntityMimic mimic) { - return SPIDER_TEXTURES; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntitySentientArrow.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntitySentientArrow.java deleted file mode 100644 index 3e522850..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntitySentientArrow.java +++ /dev/null @@ -1,108 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.opengl.GL11; - -@SideOnly(Side.CLIENT) -public class RenderEntitySentientArrow extends Render { - private static final ResourceLocation defaultTexture = new ResourceLocation("bloodmagic:textures/entities/soulArrow.png"); - private static final ResourceLocation corrosiveTexture = new ResourceLocation("bloodmagic:textures/entities/soulArrow_corrosive.png"); - private static final ResourceLocation vengefulTexture = new ResourceLocation("bloodmagic:textures/entities/soulArrow_vengeful.png"); - private static final ResourceLocation destructiveTexture = new ResourceLocation("bloodmagic:textures/entities/soulArrow_destructive.png"); - private static final ResourceLocation steadfastTexture = new ResourceLocation("bloodmagic:textures/entities/soulArrow_steadfast.png"); - - public RenderEntitySentientArrow(RenderManager renderManagerIn) { - super(renderManagerIn); - } - - public void doRender(EntitySentientArrow entity, double x, double y, double z, float entityYaw, float partialTicks) { - this.bindEntityTexture(entity); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager.pushMatrix(); - GlStateManager.translate((float) x, (float) y, (float) z); - GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks, 0.0F, 0.0F, 1.0F); - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder worldrenderer = tessellator.getBuffer(); - int i = 0; - float f = 0.0F; - float f1 = 0.5F; - float f2 = (float) (i * 10) / 32.0F; - float f3 = (float) (5 + i * 10) / 32.0F; - float f4 = 0.0F; - float f5 = 0.15625F; - float f6 = (float) (5 + i * 10) / 32.0F; - float f7 = (float) (10 + i * 10) / 32.0F; - float f8 = 0.05625F; - GlStateManager.enableRescaleNormal(); - float f9 = (float) entity.arrowShake - partialTicks; - - if (f9 > 0.0F) { - float f10 = -MathHelper.sin(f9 * 3.0F) * f9; - GlStateManager.rotate(f10, 0.0F, 0.0F, 1.0F); - } - - GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.scale(f8, f8, f8); - GlStateManager.translate(-4.0F, 0.0F, 0.0F); - GL11.glNormal3f(f8, 0.0F, 0.0F); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double) f4, (double) f6).endVertex(); - worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double) f5, (double) f6).endVertex(); - worldrenderer.pos(-7.0D, 2.0D, 2.0D).tex((double) f5, (double) f7).endVertex(); - worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double) f4, (double) f7).endVertex(); - tessellator.draw(); - GL11.glNormal3f(-f8, 0.0F, 0.0F); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos(-7.0D, 2.0D, -2.0D).tex((double) f4, (double) f6).endVertex(); - worldrenderer.pos(-7.0D, 2.0D, 2.0D).tex((double) f5, (double) f6).endVertex(); - worldrenderer.pos(-7.0D, -2.0D, 2.0D).tex((double) f5, (double) f7).endVertex(); - worldrenderer.pos(-7.0D, -2.0D, -2.0D).tex((double) f4, (double) f7).endVertex(); - tessellator.draw(); - - for (int j = 0; j < 4; ++j) { - GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); - GL11.glNormal3f(0.0F, 0.0F, f8); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos(-8.0D, -2.0D, 0.0D).tex((double) f, (double) f2).endVertex(); - worldrenderer.pos(8.0D, -2.0D, 0.0D).tex((double) f1, (double) f2).endVertex(); - worldrenderer.pos(8.0D, 2.0D, 0.0D).tex((double) f1, (double) f3).endVertex(); - worldrenderer.pos(-8.0D, 2.0D, 0.0D).tex((double) f, (double) f3).endVertex(); - tessellator.draw(); - } - - GlStateManager.disableRescaleNormal(); - GlStateManager.popMatrix(); - super.doRender(entity, x, y, z, entityYaw, partialTicks); - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called - * unless you call Render.bindEntityTexture. - */ - protected ResourceLocation getEntityTexture(EntitySentientArrow entity) { - switch (entity.type) { - case CORROSIVE: - return corrosiveTexture; - case DESTRUCTIVE: - return destructiveTexture; - case STEADFAST: - return steadfastTexture; - case VENGEFUL: - return vengefulTexture; - case DEFAULT: - default: - return defaultTexture; - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntitySoulSnare.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntitySoulSnare.java deleted file mode 100644 index cfe46aed..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntitySoulSnare.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.entity.projectile.EntitySoulSnare; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderItem; -import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class RenderEntitySoulSnare extends Render { - private final RenderItem renderItem = Minecraft.getMinecraft().getRenderItem(); - - public RenderEntitySoulSnare(RenderManager renderManagerIn) { - super(renderManagerIn); - } - - public void doRender(EntitySoulSnare entity, double x, double y, double z, float entityYaw, float partialTicks) { - GlStateManager.pushMatrix(); - GlStateManager.translate((float) x, (float) y, (float) z); - GlStateManager.enableRescaleNormal(); - GlStateManager.scale(0.5F, 0.5F, 0.5F); - GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); - this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - this.renderItem.renderItem(new ItemStack(RegistrarBloodMagicItems.SOUL_SNARE), ItemCameraTransforms.TransformType.GROUND); - GlStateManager.disableRescaleNormal(); - GlStateManager.popMatrix(); - super.doRender(entity, x, y, z, entityYaw, partialTicks); - } - - protected ResourceLocation getEntityTexture(EntitySoulSnare entity) { - return TextureMap.LOCATION_BLOCKS_TEXTURE; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderSentientSpecter.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderSentientSpecter.java deleted file mode 100644 index 4c8ab7fe..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderSentientSpecter.java +++ /dev/null @@ -1,110 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.entity.RenderBiped; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.layers.LayerArrow; -import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; -import net.minecraft.client.renderer.entity.layers.LayerCustomHead; -import net.minecraft.client.renderer.entity.layers.LayerHeldItem; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHandSide; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class RenderSentientSpecter extends RenderBiped { - public static final ResourceLocation texture = new ResourceLocation("bloodmagic", "textures/entities/specter.png"); - - public RenderSentientSpecter(RenderManager renderManager) { - super(renderManager, new ModelBiped(0.0F), 0); - this.addLayer(new LayerBipedArmor(this)); - this.addLayer(new LayerHeldItem(this)); - this.addLayer(new LayerArrow(this)); - this.addLayer(new LayerCustomHead(this.getMainModel().bipedHead)); - } - - public ModelBiped getMainModel() { - return (ModelBiped) super.getMainModel(); - } - - /** - * Renders the desired {@code T} type Entity. - */ - public void doRender(EntitySentientSpecter entity, double x, double y, double z, float entityYaw, float partialTicks) { - this.setModelVisibilities(entity); - super.doRender(entity, x, y, z, entityYaw, partialTicks); - } - - private void setModelVisibilities(EntitySentientSpecter clientPlayer) { - ModelBiped modelplayer = this.getMainModel(); - - ItemStack itemstack = clientPlayer.getHeldItemMainhand(); - ItemStack itemstack1 = clientPlayer.getHeldItemOffhand(); - modelplayer.setVisible(false); - - modelplayer.isSneak = clientPlayer.isSneaking(); - ModelBiped.ArmPose modelbiped$armpose = ModelBiped.ArmPose.EMPTY; - ModelBiped.ArmPose modelbiped$armpose1 = ModelBiped.ArmPose.EMPTY; - - if (!itemstack.isEmpty()) { - modelbiped$armpose = ModelBiped.ArmPose.ITEM; - - if (clientPlayer.getItemInUseCount() > 0) { - EnumAction enumaction = itemstack.getItemUseAction(); - - if (enumaction == EnumAction.BLOCK) { - modelbiped$armpose = ModelBiped.ArmPose.BLOCK; - } else if (enumaction == EnumAction.BOW) { - modelbiped$armpose = ModelBiped.ArmPose.BOW_AND_ARROW; - } - } - } - - if (!itemstack1.isEmpty()) { - modelbiped$armpose1 = ModelBiped.ArmPose.ITEM; - - if (clientPlayer.getItemInUseCount() > 0) { - EnumAction enumaction1 = itemstack1.getItemUseAction(); - - if (enumaction1 == EnumAction.BLOCK) { - modelbiped$armpose1 = ModelBiped.ArmPose.BLOCK; - } - } - } - - if (clientPlayer.getPrimaryHand() == EnumHandSide.RIGHT) { - modelplayer.rightArmPose = modelbiped$armpose; - modelplayer.leftArmPose = modelbiped$armpose1; - } else { - modelplayer.rightArmPose = modelbiped$armpose1; - modelplayer.leftArmPose = modelbiped$armpose; - } - - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called - * unless you call Render.bindEntityTexture. - */ - protected ResourceLocation getEntityTexture(EntitySentientSpecter entity) { - return texture; - } - - public void transformHeldFull3DItemLayer() { - GlStateManager.translate(0.0F, 0.1875F, 0.0F); - } - - /** - * Allows the render to do state modifications necessary before the model is - * rendered. - */ - protected void preRenderCallback(EntitySentientSpecter entitylivingbaseIn, float partialTickTime) { - float f = 0.9375F; - GlStateManager.scale(0.9375F, 0.9375F, 0.9375F); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/SentientArrowRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/SentientArrowRenderFactory.java deleted file mode 100644 index 49ec7093..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/SentientArrowRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class SentientArrowRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderEntitySentientArrow(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/SentientSpecterRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/SentientSpecterRenderFactory.java deleted file mode 100644 index 8e92253c..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/SentientSpecterRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class SentientSpecterRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderSentientSpecter(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/SoulSnareRenderFactory.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/SoulSnareRenderFactory.java deleted file mode 100644 index 0ced4e40..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/SoulSnareRenderFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity; - -import WayofTime.bloodmagic.entity.projectile.EntitySoulSnare; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraftforge.fml.client.registry.IRenderFactory; - -public class SoulSnareRenderFactory implements IRenderFactory { - @Override - public Render createRenderFor(RenderManager manager) { - return new RenderEntitySoulSnare(manager); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerAlchemyCircle.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerAlchemyCircle.java deleted file mode 100644 index 5e5da140..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerAlchemyCircle.java +++ /dev/null @@ -1,82 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity.layer; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.entity.layers.LayerRenderer; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class LayerAlchemyCircle implements LayerRenderer { - private static final ResourceLocation ARRAY_TEXTURE = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png"); - - float rotationspeed = 10; - - public LayerAlchemyCircle() { - - } - - @Override - public void doRenderLayer(EntityCorruptedSheep demon, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { - if (demon.getCastTimer() <= 0) { - return; - } - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder wr = tessellator.getBuffer(); - - GlStateManager.pushMatrix(); - float rot = this.rotationspeed * (partialTicks + demon.ticksExisted); - float secondaryRot = 0; - - float size = 3.0F; - - // Bind the texture to the circle - Minecraft.getMinecraft().renderEngine.bindTexture(ARRAY_TEXTURE); - - GlStateManager.disableCull(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 1); - GlStateManager.translate(0, 1.5, 0); - GlStateManager.rotate(90.0f, 1, 0, 0); - - GlStateManager.pushMatrix(); -// GlStateManager.translate(0, 0.5f, 0); - - GlStateManager.pushMatrix(); - GlStateManager.rotate(rot, 0, 0, 1); - GlStateManager.rotate(secondaryRot, 1, 0, 0); - GlStateManager.rotate(secondaryRot * 0.45812f, 0, 0, 1); - double var31 = 0.0D; - double var33 = 1.0D; - double var35 = 0; - double var37 = 1; - - GlStateManager.color(1f, 1f, 1f, 1f); - wr.begin(7, DefaultVertexFormats.POSITION_TEX); - // wr.setBrightness(200); - wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); - wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); - tessellator.draw(); - - GlStateManager.popMatrix(); - - GlStateManager.disableBlend(); - GlStateManager.enableCull(); - - GlStateManager.popMatrix(); - GlStateManager.popMatrix(); - } - - @Override - public boolean shouldCombineTextures() { - return false; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerCorruptedSheepWool.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerCorruptedSheepWool.java deleted file mode 100644 index 92c55940..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerCorruptedSheepWool.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity.layer; - -import WayofTime.bloodmagic.client.render.entity.RenderCorruptedSheep; -import WayofTime.bloodmagic.client.render.model.ModelCorruptedSheep; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.entity.layers.LayerRenderer; -import net.minecraft.item.EnumDyeColor; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class LayerCorruptedSheepWool implements LayerRenderer { - private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/sheep/sheep_fur.png"); - private final RenderCorruptedSheep sheepRenderer; - private final ModelCorruptedSheep sheepModel = new ModelCorruptedSheep(1); - - public LayerCorruptedSheepWool(RenderCorruptedSheep renderCorruptedSheep) { - this.sheepRenderer = renderCorruptedSheep; - } - - public void doRenderLayer(EntityCorruptedSheep entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { - if (!entitylivingbaseIn.getSheared() && !entitylivingbaseIn.isInvisible()) { - this.sheepRenderer.bindTexture(TEXTURE); - - if (entitylivingbaseIn.hasCustomName() && "jeb_".equals(entitylivingbaseIn.getCustomNameTag())) { - int i1 = 25; - int i = entitylivingbaseIn.ticksExisted / 25 + entitylivingbaseIn.getEntityId(); - int j = EnumDyeColor.values().length; - int k = i % j; - int l = (i + 1) % j; - float f = ((float) (entitylivingbaseIn.ticksExisted % 25) + partialTicks) / 25.0F; - float[] afloat1 = EntityCorruptedSheep.getDyeRgb(EnumDyeColor.byMetadata(k)); - float[] afloat2 = EntityCorruptedSheep.getDyeRgb(EnumDyeColor.byMetadata(l)); - GlStateManager.color(afloat1[0] * (1.0F - f) + afloat2[0] * f, afloat1[1] * (1.0F - f) + afloat2[1] * f, afloat1[2] * (1.0F - f) + afloat2[2] * f); - } else { - float[] afloat = EntityCorruptedSheep.getDyeRgb(entitylivingbaseIn.getFleeceColor()); - GlStateManager.color(afloat[0], afloat[1], afloat[2]); - } - - this.sheepModel.setModelAttributes(this.sheepRenderer.getMainModel()); - this.sheepModel.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks); - this.sheepModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); - } - } - - public boolean shouldCombineTextures() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerCorruptedSpiderEyes.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerCorruptedSpiderEyes.java deleted file mode 100644 index 3d975c05..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerCorruptedSpiderEyes.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity.layer; - -import WayofTime.bloodmagic.client.render.entity.RenderCorruptedSpider; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSpider; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.entity.layers.LayerRenderer; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class LayerCorruptedSpiderEyes implements LayerRenderer { - private static final ResourceLocation SPIDER_EYES = new ResourceLocation("textures/entity/spider_eyes.png"); - private final RenderCorruptedSpider spiderRenderer; - - public LayerCorruptedSpiderEyes(RenderCorruptedSpider spiderRendererIn) { - this.spiderRenderer = spiderRendererIn; - } - - public void doRenderLayer(EntityCorruptedSpider entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { - this.spiderRenderer.bindTexture(SPIDER_EYES); - GlStateManager.enableBlend(); - GlStateManager.disableAlpha(); - GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); - - if (entitylivingbaseIn.isInvisible()) { - GlStateManager.depthMask(false); - } else { - GlStateManager.depthMask(true); - } - - int i = 61680; - int j = i % 65536; - int k = i / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.spiderRenderer.getMainModel().render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); - i = entitylivingbaseIn.getBrightnessForRender(); - j = i % 65536; - k = i / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); - this.spiderRenderer.setLightmap(entitylivingbaseIn); - GlStateManager.disableBlend(); - GlStateManager.enableAlpha(); - } - - public boolean shouldCombineTextures() { - return false; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerWill.java b/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerWill.java deleted file mode 100644 index f4a55e6d..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/entity/layer/LayerWill.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.bloodmagic.client.render.entity.layer; - -import WayofTime.bloodmagic.entity.mob.EntityDemonBase; -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.client.renderer.entity.layers.LayerRenderer; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class LayerWill implements LayerRenderer { - private static final ResourceLocation RAW_TEXTURE = new ResourceLocation("bloodmagic", "textures/entities/overlay/overlay_raw.png"); - private final RenderLiving renderer; - private final ModelBase model; - - public LayerWill(RenderLiving rendererIn, ModelBase model) { - this.renderer = rendererIn; - this.model = model; - } - - @Override - public void doRenderLayer(EntityDemonBase demon, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { -// if (demon.getPowered()) - - if (demon.isInvisible()) { - return; //TODO: Make this also check if the demon wants the Will layer - } - - boolean flag = demon.isInvisible(); - GlStateManager.depthMask(!flag); - this.renderer.bindTexture(RAW_TEXTURE); - GlStateManager.matrixMode(5890); - GlStateManager.loadIdentity(); - float f = (float) demon.ticksExisted + partialTicks; - GlStateManager.translate(f * 0.01F, f * 0.01F, 0.0F); - GlStateManager.matrixMode(5888); - GlStateManager.enableBlend(); - float f1 = 0.5F; - GlStateManager.color(f1, f1, f1, 1.0F); - GlStateManager.disableLighting(); - GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); - this.model.setModelAttributes(this.renderer.getMainModel()); - this.model.render(demon, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); - GlStateManager.matrixMode(5890); - GlStateManager.loadIdentity(); - GlStateManager.matrixMode(5888); - GlStateManager.enableLighting(); - GlStateManager.disableBlend(); - GlStateManager.depthMask(flag); - } - - @Override - public boolean shouldCombineTextures() { - return false; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedChicken.java b/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedChicken.java deleted file mode 100644 index 578cac99..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedChicken.java +++ /dev/null @@ -1,102 +0,0 @@ -package WayofTime.bloodmagic.client.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ModelCorruptedChicken extends ModelBase { - public ModelRenderer head; - public ModelRenderer body; - public ModelRenderer rightLeg; - public ModelRenderer leftLeg; - public ModelRenderer rightWing; - public ModelRenderer leftWing; - public ModelRenderer bill; - public ModelRenderer chin; - - public ModelCorruptedChicken(float scale) { - this.head = new ModelRenderer(this, 0, 0); - this.head.addBox(-2.0F, -6.0F, -2.0F, 4, 6, 3, scale); - this.head.setRotationPoint(0.0F, 15.0F, -4.0F); - this.bill = new ModelRenderer(this, 14, 0); - this.bill.addBox(-2.0F, -4.0F, -4.0F, 4, 2, 2, scale); - this.bill.setRotationPoint(0.0F, 15.0F, -4.0F); - this.chin = new ModelRenderer(this, 14, 4); - this.chin.addBox(-1.0F, -2.0F, -3.0F, 2, 2, 2, scale); - this.chin.setRotationPoint(0.0F, 15.0F, -4.0F); - this.body = new ModelRenderer(this, 0, 9); - this.body.addBox(-3.0F, -4.0F, -3.0F, 6, 8, 6, scale); - this.body.setRotationPoint(0.0F, 16.0F, 0.0F); - this.rightLeg = new ModelRenderer(this, 26, 0); - this.rightLeg.addBox(-1.0F, 0.0F, -3.0F, 3, 5, 3, scale); - this.rightLeg.setRotationPoint(-2.0F, 19.0F, 1.0F); - this.leftLeg = new ModelRenderer(this, 26, 0); - this.leftLeg.addBox(-1.0F, 0.0F, -3.0F, 3, 5, 3, scale); - this.leftLeg.setRotationPoint(1.0F, 19.0F, 1.0F); - this.rightWing = new ModelRenderer(this, 24, 13); - this.rightWing.addBox(0.0F, 0.0F, -3.0F, 1, 4, 6, scale); - this.rightWing.setRotationPoint(-4.0F, 13.0F, 0.0F); - this.leftWing = new ModelRenderer(this, 24, 13); - this.leftWing.addBox(-1.0F, 0.0F, -3.0F, 1, 4, 6, scale); - this.leftWing.setRotationPoint(4.0F, 13.0F, 0.0F); - } - - /** - * Sets the models various rotation angles then renders the model. - */ - public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) { - this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); - - if (this.isChild) { - GlStateManager.pushMatrix(); - GlStateManager.translate(0.0F, 5.0F * scale, 2.0F * scale); - this.head.render(scale); - this.bill.render(scale); - this.chin.render(scale); - GlStateManager.popMatrix(); - GlStateManager.pushMatrix(); - GlStateManager.scale(0.5F, 0.5F, 0.5F); - GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); - this.body.render(scale); - this.rightLeg.render(scale); - this.leftLeg.render(scale); - this.rightWing.render(scale); - this.leftWing.render(scale); - GlStateManager.popMatrix(); - } else { - this.head.render(scale); - this.bill.render(scale); - this.chin.render(scale); - this.body.render(scale); - this.rightLeg.render(scale); - this.leftLeg.render(scale); - this.rightWing.render(scale); - this.leftWing.render(scale); - } - } - - /** - * Sets the model's various rotation angles. For bipeds, par1 and par2 are - * used for animating the movement of arms and legs, where par1 represents - * the time(so that arms and legs swing back and forth) and par2 represents - * how "far" arms and legs can swing at most. - */ - public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) { - this.head.rotateAngleX = headPitch * 0.017453292F; - this.head.rotateAngleY = netHeadYaw * 0.017453292F; - this.bill.rotateAngleX = this.head.rotateAngleX; - this.bill.rotateAngleY = this.head.rotateAngleY; - this.chin.rotateAngleX = this.head.rotateAngleX; - this.chin.rotateAngleY = this.head.rotateAngleY; - this.body.rotateAngleX = ((float) Math.PI / 2F); - this.rightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; - this.leftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float) Math.PI) * 1.4F * limbSwingAmount; - this.rightWing.rotateAngleZ = ageInTicks; - this.leftWing.rotateAngleZ = -ageInTicks; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSheep.java b/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSheep.java deleted file mode 100644 index a1c27e01..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSheep.java +++ /dev/null @@ -1,59 +0,0 @@ -package WayofTime.bloodmagic.client.render.model; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; -import net.minecraft.client.model.ModelQuadruped; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ModelCorruptedSheep extends ModelQuadruped { - private float headRotationAngleX; - - public ModelCorruptedSheep(float scale) { - super(12, scale); - this.head = new ModelRenderer(this, 0, 0); - this.head.addBox(-3.0F, -4.0F, -4.0F, 6, 6, 6, 0.6F * scale); - this.head.setRotationPoint(0.0F, 6.0F, -8.0F); - this.body = new ModelRenderer(this, 28, 8); - this.body.addBox(-4.0F, -10.0F, -7.0F, 8, 16, 6, 1.75F * scale); - this.body.setRotationPoint(0.0F, 5.0F, 2.0F); - float f = 0.5F; - this.leg1 = new ModelRenderer(this, 0, 16); - this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.5F * scale); - this.leg1.setRotationPoint(-3.0F, 12.0F, 7.0F); - this.leg2 = new ModelRenderer(this, 0, 16); - this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.5F * scale); - this.leg2.setRotationPoint(3.0F, 12.0F, 7.0F); - this.leg3 = new ModelRenderer(this, 0, 16); - this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.5F * scale); - this.leg3.setRotationPoint(-3.0F, 12.0F, -5.0F); - this.leg4 = new ModelRenderer(this, 0, 16); - this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.5F * scale); - this.leg4.setRotationPoint(3.0F, 12.0F, -5.0F); - } - - /** - * Used for easily adding entity-dependent animations. The second and third - * float params here are the same second and third as in the - * setRotationAngles method. - */ - public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime) { - super.setLivingAnimations(entitylivingbaseIn, p_78086_2_, p_78086_3_, partialTickTime); - this.head.rotationPointY = 6.0F + ((EntityCorruptedSheep) entitylivingbaseIn).getHeadRotationPointY(partialTickTime) * 9.0F; - this.headRotationAngleX = ((EntityCorruptedSheep) entitylivingbaseIn).getHeadRotationAngleX(partialTickTime); - } - - /** - * Sets the model's various rotation angles. For bipeds, par1 and par2 are - * used for animating the movement of arms and legs, where par1 represents - * the time(so that arms and legs swing back and forth) and par2 represents - * how "far" arms and legs can swing at most. - */ - public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) { - super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); - this.head.rotateAngleX = this.headRotationAngleX; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSheep2.java b/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSheep2.java deleted file mode 100644 index fb5d5497..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSheep2.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.bloodmagic.client.render.model; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; -import net.minecraft.client.model.ModelQuadruped; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ModelCorruptedSheep2 extends ModelQuadruped { - private float headRotationAngleX; - - public ModelCorruptedSheep2(float scale) { - super(12, scale); - this.head = new ModelRenderer(this, 0, 0); - this.head.addBox(-3.0F, -4.0F, -6.0F, 6, 6, 8, scale); - this.head.setRotationPoint(0.0F, 6.0F, -8.0F); - this.body = new ModelRenderer(this, 28, 8); - this.body.addBox(-4.0F, -10.0F, -7.0F, 8, 16, 6, scale); - this.body.setRotationPoint(0.0F, 5.0F, 2.0F); - } - - /** - * Used for easily adding entity-dependent animations. The second and third - * float params here are the same second and third as in the - * setRotationAngles method. - */ - public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime) { - super.setLivingAnimations(entitylivingbaseIn, p_78086_2_, p_78086_3_, partialTickTime); - this.head.rotationPointY = 6.0F + ((EntityCorruptedSheep) entitylivingbaseIn).getHeadRotationPointY(partialTickTime) * 9.0F; - this.headRotationAngleX = ((EntityCorruptedSheep) entitylivingbaseIn).getHeadRotationAngleX(partialTickTime); - } - - /** - * Sets the model's various rotation angles. For bipeds, par1 and par2 are - * used for animating the movement of arms and legs, where par1 represents - * the time(so that arms and legs swing back and forth) and par2 represents - * how "far" arms and legs can swing at most. - */ - public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) { - super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); - this.head.rotateAngleX = this.headRotationAngleX; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSpider.java b/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSpider.java deleted file mode 100644 index 3f92fad3..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelCorruptedSpider.java +++ /dev/null @@ -1,166 +0,0 @@ -package WayofTime.bloodmagic.client.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ModelCorruptedSpider extends ModelBase { - /** - * The spider's head box - */ - public ModelRenderer spiderHead; - /** - * The spider's neck box - */ - public ModelRenderer spiderNeck; - /** - * The spider's body box - */ - public ModelRenderer spiderBody; - /** - * Spider's first leg - */ - public ModelRenderer spiderLeg1; - /** - * Spider's second leg - */ - public ModelRenderer spiderLeg2; - /** - * Spider's third leg - */ - public ModelRenderer spiderLeg3; - /** - * Spider's fourth leg - */ - public ModelRenderer spiderLeg4; - /** - * Spider's fifth leg - */ - public ModelRenderer spiderLeg5; - /** - * Spider's sixth leg - */ - public ModelRenderer spiderLeg6; - /** - * Spider's seventh leg - */ - public ModelRenderer spiderLeg7; - /** - * Spider's eight leg - */ - public ModelRenderer spiderLeg8; - - public ModelCorruptedSpider(float scale) { - float f = 0.0F; - int i = 15; - this.spiderHead = new ModelRenderer(this, 32, 4); - this.spiderHead.addBox(-4.0F, -4.0F, -8.0F, 8, 8, 8, scale); - this.spiderHead.setRotationPoint(0.0F, 15.0F, -3.0F); - this.spiderNeck = new ModelRenderer(this, 0, 0); - this.spiderNeck.addBox(-3.0F, -3.0F, -3.0F, 6, 6, 6, scale); - this.spiderNeck.setRotationPoint(0.0F, 15.0F, 0.0F); - this.spiderBody = new ModelRenderer(this, 0, 12); - this.spiderBody.addBox(-5.0F, -4.0F, -6.0F, 10, 8, 12, scale); - this.spiderBody.setRotationPoint(0.0F, 15.0F, 9.0F); - this.spiderLeg1 = new ModelRenderer(this, 18, 0); - this.spiderLeg1.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, scale); - this.spiderLeg1.setRotationPoint(-4.0F, 15.0F, 2.0F); - this.spiderLeg2 = new ModelRenderer(this, 18, 0); - this.spiderLeg2.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, scale); - this.spiderLeg2.setRotationPoint(4.0F, 15.0F, 2.0F); - this.spiderLeg3 = new ModelRenderer(this, 18, 0); - this.spiderLeg3.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, scale); - this.spiderLeg3.setRotationPoint(-4.0F, 15.0F, 1.0F); - this.spiderLeg4 = new ModelRenderer(this, 18, 0); - this.spiderLeg4.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, scale); - this.spiderLeg4.setRotationPoint(4.0F, 15.0F, 1.0F); - this.spiderLeg5 = new ModelRenderer(this, 18, 0); - this.spiderLeg5.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, scale); - this.spiderLeg5.setRotationPoint(-4.0F, 15.0F, 0.0F); - this.spiderLeg6 = new ModelRenderer(this, 18, 0); - this.spiderLeg6.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, scale); - this.spiderLeg6.setRotationPoint(4.0F, 15.0F, 0.0F); - this.spiderLeg7 = new ModelRenderer(this, 18, 0); - this.spiderLeg7.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, scale); - this.spiderLeg7.setRotationPoint(-4.0F, 15.0F, -1.0F); - this.spiderLeg8 = new ModelRenderer(this, 18, 0); - this.spiderLeg8.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, scale); - this.spiderLeg8.setRotationPoint(4.0F, 15.0F, -1.0F); - } - - /** - * Sets the models various rotation angles then renders the model. - */ - public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) { - this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); - this.spiderHead.render(scale); - this.spiderNeck.render(scale); - this.spiderBody.render(scale); - this.spiderLeg1.render(scale); - this.spiderLeg2.render(scale); - this.spiderLeg3.render(scale); - this.spiderLeg4.render(scale); - this.spiderLeg5.render(scale); - this.spiderLeg6.render(scale); - this.spiderLeg7.render(scale); - this.spiderLeg8.render(scale); - } - - /** - * Sets the model's various rotation angles. For bipeds, par1 and par2 are - * used for animating the movement of arms and legs, where par1 represents - * the time(so that arms and legs swing back and forth) and par2 represents - * how "far" arms and legs can swing at most. - */ - public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) { - this.spiderHead.rotateAngleY = netHeadYaw * 0.017453292F; - this.spiderHead.rotateAngleX = headPitch * 0.017453292F; - float f = ((float) Math.PI / 4F); - this.spiderLeg1.rotateAngleZ = -((float) Math.PI / 4F); - this.spiderLeg2.rotateAngleZ = ((float) Math.PI / 4F); - this.spiderLeg3.rotateAngleZ = -0.58119464F; - this.spiderLeg4.rotateAngleZ = 0.58119464F; - this.spiderLeg5.rotateAngleZ = -0.58119464F; - this.spiderLeg6.rotateAngleZ = 0.58119464F; - this.spiderLeg7.rotateAngleZ = -((float) Math.PI / 4F); - this.spiderLeg8.rotateAngleZ = ((float) Math.PI / 4F); - float f1 = -0.0F; - float f2 = 0.3926991F; - this.spiderLeg1.rotateAngleY = ((float) Math.PI / 4F); - this.spiderLeg2.rotateAngleY = -((float) Math.PI / 4F); - this.spiderLeg3.rotateAngleY = 0.3926991F; - this.spiderLeg4.rotateAngleY = -0.3926991F; - this.spiderLeg5.rotateAngleY = -0.3926991F; - this.spiderLeg6.rotateAngleY = 0.3926991F; - this.spiderLeg7.rotateAngleY = -((float) Math.PI / 4F); - this.spiderLeg8.rotateAngleY = ((float) Math.PI / 4F); - float f3 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + 0.0F) * 0.4F) * limbSwingAmount; - float f4 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + (float) Math.PI) * 0.4F) * limbSwingAmount; - float f5 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + ((float) Math.PI / 2F)) * 0.4F) * limbSwingAmount; - float f6 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + ((float) Math.PI * 3F / 2F)) * 0.4F) * limbSwingAmount; - float f7 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + 0.0F) * 0.4F) * limbSwingAmount; - float f8 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + (float) Math.PI) * 0.4F) * limbSwingAmount; - float f9 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + ((float) Math.PI / 2F)) * 0.4F) * limbSwingAmount; - float f10 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + ((float) Math.PI * 3F / 2F)) * 0.4F) * limbSwingAmount; - this.spiderLeg1.rotateAngleY += f3; - this.spiderLeg2.rotateAngleY += -f3; - this.spiderLeg3.rotateAngleY += f4; - this.spiderLeg4.rotateAngleY += -f4; - this.spiderLeg5.rotateAngleY += f5; - this.spiderLeg6.rotateAngleY += -f5; - this.spiderLeg7.rotateAngleY += f6; - this.spiderLeg8.rotateAngleY += -f6; - this.spiderLeg1.rotateAngleZ += f7; - this.spiderLeg2.rotateAngleZ += -f7; - this.spiderLeg3.rotateAngleZ += f8; - this.spiderLeg4.rotateAngleZ += -f8; - this.spiderLeg5.rotateAngleZ += f9; - this.spiderLeg6.rotateAngleZ += -f9; - this.spiderLeg7.rotateAngleZ += f10; - this.spiderLeg8.rotateAngleZ += -f10; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelMeteor.java b/src/main/java/WayofTime/bloodmagic/client/render/model/ModelMeteor.java deleted file mode 100644 index 8e75b6c8..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelMeteor.java +++ /dev/null @@ -1,89 +0,0 @@ -package WayofTime.bloodmagic.client.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -/** - * This is a direct copy of the meteor model from 1.7.10. As such it probably - * needs to be... better. - */ -public class ModelMeteor extends ModelBase { - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - ModelRenderer Shape6; - ModelRenderer Shape7; - - public ModelMeteor() { - textureWidth = 64; - textureHeight = 64; - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(-8F, -8F, -8F, 16, 16, 16); - Shape1.setRotationPoint(0F, 0F, 0F); - Shape1.setTextureSize(64, 64); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 32); - Shape2.addBox(3F, -10F, -1F, 12, 12, 12); - Shape2.setRotationPoint(0F, 0F, 0F); - Shape2.setTextureSize(64, 64); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 32); - Shape3.addBox(0F, 0F, -10F, 12, 12, 12); - Shape3.setRotationPoint(0F, 0F, 0F); - Shape3.setTextureSize(64, 64); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 32); - Shape4.addBox(1F, 2F, 2F, 12, 12, 12); - Shape4.setRotationPoint(0F, 0F, 0F); - Shape4.setTextureSize(64, 64); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 0, 32); - Shape5.addBox(-12F, -5F, 0F, 12, 12, 12); - Shape5.setRotationPoint(0F, 0F, 0F); - Shape5.setTextureSize(64, 64); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 0, 32); - Shape6.addBox(-13F, -2F, -11F, 12, 12, 12); - Shape6.setRotationPoint(0F, 0F, 0F); - Shape6.setTextureSize(64, 64); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 0, 32); - Shape7.addBox(-6F, -14F, -9F, 12, 12, 12); - Shape7.setRotationPoint(0F, 0F, 0F); - Shape7.setTextureSize(64, 64); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - Shape6.render(f5); - Shape7.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelMimic.java b/src/main/java/WayofTime/bloodmagic/client/render/model/ModelMimic.java deleted file mode 100644 index e06c1220..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/ModelMimic.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.bloodmagic.client.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class ModelMimic extends ModelBase { - /** - * Spider's first leg - */ - public ModelRenderer mimicLeg1; - /** - * Spider's second leg - */ - public ModelRenderer mimicLeg2; - /** - * Spider's third leg - */ - public ModelRenderer mimicLeg3; - /** - * Spider's fourth leg - */ - public ModelRenderer mimicLeg4; - /** - * Spider's fifth leg - */ - public ModelRenderer mimicLeg5; - /** - * Spider's sixth leg - */ - public ModelRenderer mimicLeg6; - /** - * Spider's seventh leg - */ - public ModelRenderer mimicLeg7; - /** - * Spider's eight leg - */ - public ModelRenderer mimicLeg8; - - public ModelMimic() { - this.mimicLeg1 = new ModelRenderer(this, 18, 0); - this.mimicLeg1.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); - this.mimicLeg1.setRotationPoint(-4.0F, 15.0F, 2.0F); - this.mimicLeg2 = new ModelRenderer(this, 18, 0); - this.mimicLeg2.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); - this.mimicLeg2.setRotationPoint(4.0F, 15.0F, 2.0F); - this.mimicLeg3 = new ModelRenderer(this, 18, 0); - this.mimicLeg3.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); - this.mimicLeg3.setRotationPoint(-4.0F, 15.0F, 1.0F); - this.mimicLeg4 = new ModelRenderer(this, 18, 0); - this.mimicLeg4.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); - this.mimicLeg4.setRotationPoint(4.0F, 15.0F, 1.0F); - this.mimicLeg5 = new ModelRenderer(this, 18, 0); - this.mimicLeg5.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); - this.mimicLeg5.setRotationPoint(-4.0F, 15.0F, 0.0F); - this.mimicLeg6 = new ModelRenderer(this, 18, 0); - this.mimicLeg6.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); - this.mimicLeg6.setRotationPoint(4.0F, 15.0F, 0.0F); - this.mimicLeg7 = new ModelRenderer(this, 18, 0); - this.mimicLeg7.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); - this.mimicLeg7.setRotationPoint(-4.0F, 15.0F, -1.0F); - this.mimicLeg8 = new ModelRenderer(this, 18, 0); - this.mimicLeg8.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); - this.mimicLeg8.setRotationPoint(4.0F, 15.0F, -1.0F); - } - - /** - * Sets the models various rotation angles then renders the model. - */ - public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) { - this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); - this.mimicLeg1.render(scale); - this.mimicLeg2.render(scale); - this.mimicLeg3.render(scale); - this.mimicLeg4.render(scale); - this.mimicLeg5.render(scale); - this.mimicLeg6.render(scale); - this.mimicLeg7.render(scale); - this.mimicLeg8.render(scale); - } - - /** - * Sets the model's various rotation angles. For bipeds, par1 and par2 are - * used for animating the movement of arms and legs, where par1 represents - * the time(so that arms and legs swing back and forth) and par2 represents - * how "far" arms and legs can swing at most. - */ - public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) { - this.mimicLeg1.rotateAngleZ = -((float) Math.PI / 4F); - this.mimicLeg2.rotateAngleZ = ((float) Math.PI / 4F); - this.mimicLeg3.rotateAngleZ = -0.58119464F; - this.mimicLeg4.rotateAngleZ = 0.58119464F; - this.mimicLeg5.rotateAngleZ = -0.58119464F; - this.mimicLeg6.rotateAngleZ = 0.58119464F; - this.mimicLeg7.rotateAngleZ = -((float) Math.PI / 4F); - this.mimicLeg8.rotateAngleZ = ((float) Math.PI / 4F); - - this.mimicLeg1.rotateAngleY = ((float) Math.PI / 4F); - this.mimicLeg2.rotateAngleY = -((float) Math.PI / 4F); - this.mimicLeg3.rotateAngleY = 0.3926991F; - this.mimicLeg4.rotateAngleY = -0.3926991F; - this.mimicLeg5.rotateAngleY = -0.3926991F; - this.mimicLeg6.rotateAngleY = 0.3926991F; - this.mimicLeg7.rotateAngleY = -((float) Math.PI / 4F); - this.mimicLeg8.rotateAngleY = ((float) Math.PI / 4F); - float f3 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + 0.0F) * 0.4F) * limbSwingAmount; - float f4 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + (float) Math.PI) * 0.4F) * limbSwingAmount; - float f5 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + ((float) Math.PI / 2F)) * 0.4F) * limbSwingAmount; - float f6 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + ((float) Math.PI * 3F / 2F)) * 0.4F) * limbSwingAmount; - float f7 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + 0.0F) * 0.4F) * limbSwingAmount; - float f8 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + (float) Math.PI) * 0.4F) * limbSwingAmount; - float f9 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + ((float) Math.PI / 2F)) * 0.4F) * limbSwingAmount; - float f10 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + ((float) Math.PI * 3F / 2F)) * 0.4F) * limbSwingAmount; - this.mimicLeg1.rotateAngleY += f3; - this.mimicLeg2.rotateAngleY += -f3; - this.mimicLeg3.rotateAngleY += f4; - this.mimicLeg4.rotateAngleY += -f4; - this.mimicLeg5.rotateAngleY += f5; - this.mimicLeg6.rotateAngleY += -f5; - this.mimicLeg7.rotateAngleY += f6; - this.mimicLeg8.rotateAngleY += -f6; - this.mimicLeg1.rotateAngleZ += f7; - this.mimicLeg2.rotateAngleZ += -f7; - this.mimicLeg3.rotateAngleZ += f8; - this.mimicLeg4.rotateAngleZ += -f8; - this.mimicLeg5.rotateAngleZ += f9; - this.mimicLeg6.rotateAngleZ += -f9; - this.mimicLeg7.rotateAngleZ += f10; - this.mimicLeg8.rotateAngleZ += -f10; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java b/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java deleted file mode 100644 index 81eb9063..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/CommandBloodMagic.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.bloodmagic.command; - -import WayofTime.bloodmagic.command.sub.SubCommandBind; -import WayofTime.bloodmagic.command.sub.SubCommandNetwork; -import WayofTime.bloodmagic.command.sub.SubCommandOrb; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.text.TextComponentString; -import net.minecraftforge.server.command.CommandTreeBase; - -public class CommandBloodMagic extends CommandTreeBase { - public CommandBloodMagic() { - addSubcommand(new SubCommandBind()); - addSubcommand(new SubCommandNetwork()); - addSubcommand(new SubCommandOrb()); - } - - @Override - public String getName() { - return "bloodmagic"; - } - - @Override - public String getUsage(ICommandSender sender) { - return "/bloodmagic help"; - } - - @Override - public int getRequiredPermissionLevel() { - return 2; - } - - public static void displayHelpString(ICommandSender commandSender, String display, Object... info) { - commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); - } - - public static void displayErrorString(ICommandSender commandSender, String display, Object... info) { - commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); - } - - public static void displaySuccessString(ICommandSender commandSender, String display, Object... info) { - commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect(display, info))); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java deleted file mode 100644 index f229ad5b..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandBind.java +++ /dev/null @@ -1,78 +0,0 @@ -package WayofTime.bloodmagic.command.sub; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.util.helper.BindableHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.CommandBase; -import net.minecraft.command.CommandException; -import net.minecraft.command.ICommandSender; -import net.minecraft.command.PlayerNotFoundException; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.text.TextComponentTranslation; - -public class SubCommandBind extends CommandBase { - @Override - public String getName() { - return "bind"; - } - - @Override - public String getUsage(ICommandSender commandSender) { - return TextHelper.localizeEffect("commands.bloodmagic.bind.usage"); - } - - @Override - public int getRequiredPermissionLevel() { - return 2; - } - - @Override - public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { - if (commandSender.getEntityWorld().isRemote) - return; - - try { - EntityPlayer player = CommandBase.getCommandSenderAsPlayer(commandSender); - ItemStack held = player.getHeldItemMainhand(); - boolean bind = true; - - if (held.getItem() instanceof IBindable) { - if (args.length > 0) { - - if (args[0].equalsIgnoreCase("help")) - return; - - if (isBoolean(args[0])) { - bind = Boolean.parseBoolean(args[0]); - - if (args.length > 2) - player = CommandBase.getPlayer(server, commandSender, args[1]); - } else { - player = CommandBase.getPlayer(server, commandSender, args[0]); - } - } - - if (bind) { - Binding binding = new Binding(player.getGameProfile().getId(), player.getGameProfile().getName()); - BindableHelper.applyBinding(held, binding); - commandSender.sendMessage(new TextComponentTranslation("commands.bloodmagic.bind.success")); - } else { - Binding binding = ((IBindable) held.getItem()).getBinding(held); - if (binding != null) { - held.getTagCompound().removeTag("binding"); - commandSender.sendMessage(new TextComponentTranslation("commands.bloodmagic.bind.remove.success")); - } - } - } - } catch (PlayerNotFoundException e) { - commandSender.sendMessage(new TextComponentTranslation(TextHelper.localizeEffect("commands.bloodmagic.error.404"))); - } - } - - private boolean isBoolean(String string) { - return string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java deleted file mode 100644 index 12db2d7f..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandNetwork.java +++ /dev/null @@ -1,183 +0,0 @@ -package WayofTime.bloodmagic.command.sub; - -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.command.CommandBloodMagic; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.CommandBase; -import net.minecraft.command.CommandException; -import net.minecraft.command.ICommandSender; -import net.minecraft.command.PlayerNotFoundException; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.text.TextComponentString; - -import java.util.Locale; - -public class SubCommandNetwork extends CommandBase { - @Override - public String getName() { - return "network"; - } - - @Override - public String getUsage(ICommandSender commandSender) { - return TextHelper.localizeEffect("commands.bloodmagic.network.usage"); - } - - @Override - public int getRequiredPermissionLevel() { - return 2; - } - - @Override - public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { - if (args.length > 1) { - if (args[0].equalsIgnoreCase("help")) - return; - - try { - EntityPlayer player = CommandBase.getPlayer(server, commandSender, args[1]); - - try { - ValidCommands command = ValidCommands.valueOf(args[0].toUpperCase(Locale.ENGLISH)); - command.run(player, commandSender, args.length > 0 && args.length < 2, args); - } catch (IllegalArgumentException e) { - - } - } catch (PlayerNotFoundException e) { - CommandBloodMagic.displayErrorString(commandSender, e.getLocalizedMessage()); - } - } else { - CommandBloodMagic.displayErrorString(commandSender, "commands.bloodmagic.error.arg.missing"); - } - } - - private enum ValidCommands { - SYPHON("commands.bloodmagic.network.syphon.help") { - @Override - public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) { - if (displayHelp) { - CommandBloodMagic.displayHelpString(sender, this.help); - return; - } - - if (args.length == 3) { - if (Utils.isInteger(args[2])) { - int amount = Integer.parseInt(args[2]); - NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.command(sender, "syphon", amount)); - CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.syphon.success", amount, player.getDisplayName().getFormattedText()); - } else { - CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.invalid"); - } - } else { - CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.missing"); - } - } - }, - ADD("commands.bloodmagic.network.add.help") { - @Override - public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) { - if (displayHelp) { - CommandBloodMagic.displayHelpString(sender, this.help); - return; - } - - SoulNetwork network = NetworkHelper.getSoulNetwork(player); - - if (args.length == 3) { - if (Utils.isInteger(args[2])) { - int amount = Integer.parseInt(args[2]); - int maxOrb = NetworkHelper.getMaximumForTier(network.getOrbTier()); - CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.add.success", network.add(SoulTicket.command(sender, "add", amount), maxOrb), player.getDisplayName().getFormattedText()); - } else { - CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.invalid"); - } - } else { - CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.missing"); - } - } - }, - SET("commands.bloodmagic.network.set.help") { - @Override - public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) { - if (displayHelp) { - CommandBloodMagic.displayHelpString(sender, this.help); - return; - } - - SoulNetwork network = NetworkHelper.getSoulNetwork(player); - - if (args.length == 3) { - if (Utils.isInteger(args[2])) { - int amount = Integer.parseInt(args[2]); - network.setCurrentEssence(amount); - CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.set.success", player.getDisplayName().getFormattedText(), amount); - } else { - CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.invalid"); - } - } else { - CommandBloodMagic.displayErrorString(sender, "commands.bloodmagic.error.arg.missing"); - } - } - }, - GET("commands.bloodmagic.network.get.help") { - @Override - public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) { - if (displayHelp) { - CommandBloodMagic.displayHelpString(sender, this.help); - return; - } - - SoulNetwork network = NetworkHelper.getSoulNetwork(player); - - if (args.length > 1) - sender.sendMessage(new TextComponentString(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.divination.currentEssence", network.getCurrentEssence()))); - - } - }, - FILL("commands.bloodmagic.network.fill.help") { - @Override - public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) { - if (displayHelp) { - CommandBloodMagic.displayHelpString(sender, this.help, Integer.MAX_VALUE); - return; - } - - SoulNetwork network = NetworkHelper.getSoulNetwork(player); - - if (args.length > 1) { - network.setCurrentEssence(Integer.MAX_VALUE); - CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.fill.success", player.getDisplayName().getFormattedText()); - } - } - }, - CAP("commands.bloodmagic.network.cap.help") { - @Override - public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) { - if (displayHelp) { - CommandBloodMagic.displayHelpString(sender, this.help); - return; - } - - SoulNetwork network = NetworkHelper.getSoulNetwork(player); - - if (args.length > 1) { - int maxOrb = NetworkHelper.getMaximumForTier(network.getOrbTier()); - network.setCurrentEssence(maxOrb); - CommandBloodMagic.displaySuccessString(sender, "commands.bloodmagic.network.cap.success", player.getDisplayName().getFormattedText()); - } - } - },; - - public String help; - - ValidCommands(String help) { - this.help = help; - } - - public abstract void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java b/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java deleted file mode 100644 index cdba93a2..00000000 --- a/src/main/java/WayofTime/bloodmagic/command/sub/SubCommandOrb.java +++ /dev/null @@ -1,107 +0,0 @@ -package WayofTime.bloodmagic.command.sub; - -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.command.CommandBloodMagic; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.command.CommandBase; -import net.minecraft.command.CommandException; -import net.minecraft.command.ICommandSender; -import net.minecraft.command.PlayerNotFoundException; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.text.TextComponentString; - -import java.util.Locale; - -public class SubCommandOrb extends CommandBase { - @Override - public String getName() { - return "orb"; - } - - @Override - public String getUsage(ICommandSender commandSender) { - return TextHelper.localizeEffect("commands.bloodmagic.orb.usage"); - } - - @Override - public int getRequiredPermissionLevel() { - return 2; - } - - @Override - public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException { - if (args.length > 0) { - - if (args[0].equalsIgnoreCase("help")) - return; - - try { - String givenName = commandSender.getName(); - - if (args.length > 1) - givenName = args[1]; - - EntityPlayer player = CommandBase.getPlayer(server, commandSender, givenName); - String uuid = PlayerHelper.getUUIDFromPlayer(player).toString(); - SoulNetwork network = NetworkHelper.getSoulNetwork(uuid); - - boolean displayHelp = args.length > 0 && args.length < 2; - - try { - switch (ValidCommands.valueOf(args[0].toUpperCase(Locale.ENGLISH))) { - case SET: { - if (displayHelp) { - CommandBloodMagic.displayHelpString(commandSender, ValidCommands.SET.help); - break; - } - - if (args.length == 3) { - if (Utils.isInteger(args[2])) { - int amount = Integer.parseInt(args[2]); - network.setOrbTier(amount); - CommandBloodMagic.displaySuccessString(commandSender, "commands.bloodmagic.success"); - } else { - CommandBloodMagic.displayErrorString(commandSender, "commands.bloodmagic.error.arg.invalid"); - } - } else { - CommandBloodMagic.displayErrorString(commandSender, "commands.bloodmagic.error.arg.missing"); - } - - break; - } - case GET: { - if (displayHelp) { - CommandBloodMagic.displayHelpString(commandSender, ValidCommands.GET.help); - break; - } - - if (args.length > 1) - commandSender.sendMessage(new TextComponentString(TextHelper.localizeEffect("message.orb.currenttier", network.getOrbTier()))); - - break; - } - } - } catch (IllegalArgumentException e) { - CommandBloodMagic.displayErrorString(commandSender, "commands.bloodmagic.error.404"); - } - } catch (PlayerNotFoundException e) { - CommandBloodMagic.displayErrorString(commandSender, "commands.bloodmagic.error.404"); - } - } - } - - private enum ValidCommands { - SET("commands.bloodmagic.orb.set.help"), - GET("commands.bloodmagic.orb.get.help"); - - public String help; - - ValidCommands(String help) { - this.help = help; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/BookUtils.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/BookUtils.java deleted file mode 100644 index c8b7e847..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/BookUtils.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi; - -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import WayofTime.bloodmagic.core.registry.AlchemyArrayRecipeRegistry; -import WayofTime.bloodmagic.client.render.alchemyArray.DualAlchemyCircleRenderer; -import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray; -import amerifrance.guideapi.page.PageIRecipe; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.List; - -public class BookUtils { - - public static PageAlchemyArray getAlchemyPage(String key) { - ItemStack[] recipe = AlchemyArrayRecipeRegistry.getRecipeForArrayEffect(key); - if (recipe[0] != null) { - ItemStack inputStack = recipe[0]; - ItemStack catalystStack = recipe[1]; - - AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack); - if (renderer instanceof DualAlchemyCircleRenderer) { - List resources = new ArrayList<>(); - resources.add(((DualAlchemyCircleRenderer) renderer).arrayResource); - resources.add(((DualAlchemyCircleRenderer) renderer).secondaryArrayResource); - return new PageAlchemyArray(resources, inputStack, catalystStack); - } else { - return new PageAlchemyArray(renderer.arrayResource, inputStack, catalystStack); - } - } - - return null; - } - - public static PageAlchemyArray getAlchemyPage(ItemStack outputStack) { - ItemStack[] recipe = AlchemyArrayRecipeRegistry.getRecipeForOutputStack(outputStack); - if (recipe[0] != null) { - ItemStack inputStack = recipe[0]; - ItemStack catalystStack = recipe[1]; - - AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack); - if (renderer != null) { - if (renderer instanceof DualAlchemyCircleRenderer) { - List resources = new ArrayList<>(); - resources.add(((DualAlchemyCircleRenderer) renderer).arrayResource); - resources.add(((DualAlchemyCircleRenderer) renderer).secondaryArrayResource); - return new PageAlchemyArray(resources, inputStack, catalystStack, outputStack); - } else { - return new PageAlchemyArray(renderer.arrayResource, inputStack, catalystStack, outputStack); - } - } - } - - return null; - } - - public static PageIRecipe getPageForRecipe(IRecipe recipe) { - return new PageIRecipe(recipe); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java deleted file mode 100644 index e1ba4eee..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/GuideBloodMagic.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.compat.guideapi.book.CategoryAlchemy; -import WayofTime.bloodmagic.compat.guideapi.book.CategoryArchitect; -import WayofTime.bloodmagic.compat.guideapi.book.CategoryDemon; -import WayofTime.bloodmagic.compat.guideapi.book.CategoryRitual; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import amerifrance.guideapi.api.GuideAPI; -import amerifrance.guideapi.api.GuideBook; -import amerifrance.guideapi.api.IGuideBook; -import amerifrance.guideapi.api.impl.Book; -import amerifrance.guideapi.category.CategoryItemStack; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.oredict.ShapelessOreRecipe; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.awt.Color; - -@GuideBook(priority = EventPriority.HIGHEST) -public class GuideBloodMagic implements IGuideBook { - - public static final Book GUIDE_BOOK = new Book(); - - @Nullable - @Override - public Book buildBook() { - GUIDE_BOOK.setTitle("guide.bloodmagic.title"); - GUIDE_BOOK.setDisplayName("guide.bloodmagic.display"); - GUIDE_BOOK.setWelcomeMessage("guide.bloodmagic.welcome"); - GUIDE_BOOK.setAuthor("guide.bloodmagic.author"); - GUIDE_BOOK.setRegistryName(new ResourceLocation(BloodMagic.MODID, "guide")); - GUIDE_BOOK.setColor(Color.RED); - - return GUIDE_BOOK; - } - - @Override - public void handlePost(ItemStack bookStack) { - GUIDE_BOOK.addCategory(new CategoryItemStack(CategoryAlchemy.buildCategory(), "guide.bloodmagic.category.alchemy", new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES))); - GUIDE_BOOK.addCategory(new CategoryItemStack(CategoryArchitect.buildCategory(), "guide.bloodmagic.category.architect", new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION))); - GUIDE_BOOK.addCategory(new CategoryItemStack(CategoryDemon.buildCategory(), "guide.bloodmagic.category.demon", new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD))); - GUIDE_BOOK.addCategory(new CategoryItemStack(CategoryRitual.buildCategory(), "guide.bloodmagic.category.ritual", new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER))); -// guideBook.addCategory(new CategoryItemStack(CategorySpell.buildCategory(), "guide.bloodmagic.category.spell", new ItemStack(ModItems.ritualDiviner))); - } - - @Nullable - @Override - public IRecipe getRecipe(@Nonnull ItemStack bookStack) { - return new ShapelessOreRecipe(new ResourceLocation(BloodMagic.MODID, "guide"), GuideAPI.getStackFromBook(GUIDE_BOOK), new ItemStack(Items.BOOK), "blockGlass", "feather").setRegistryName("bloodmagic_guide"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryAlchemy.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryAlchemy.java deleted file mode 100644 index 307cc083..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryAlchemy.java +++ /dev/null @@ -1,154 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.book; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.compat.guideapi.BookUtils; -import WayofTime.bloodmagic.compat.guideapi.entry.EntryText; -import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray; -import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.helper.RecipeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.IPage; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import amerifrance.guideapi.api.util.PageHelper; -import amerifrance.guideapi.page.PageText; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -public class CategoryAlchemy -{ - public static Map buildCategory() - { - Map entries = new LinkedHashMap<>(); - String keyBase = "guide." + BloodMagic.MODID + ".entry.alchemy."; - - List introPages = new ArrayList<>(); - introPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "intro" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "intro"), new EntryText(introPages, TextHelper.localize(keyBase + "intro"), true)); - - List ashPages = new ArrayList<>(); - - TartaricForgeRecipe ashRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES)); - if (ashRecipe != null) - { - ashPages.add(new PageTartaricForgeRecipe(ashRecipe)); - } - ashPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ash" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "ash"), new EntryText(ashPages, TextHelper.localize(keyBase + "ash"), true)); - - List furnacePages = new ArrayList<>(); - - PageAlchemyArray furnaceRecipePage = BookUtils.getAlchemyPage("furnace"); - if (furnaceRecipePage != null) - { - furnacePages.add(furnaceRecipePage); - } - furnacePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "furnace" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "furnace"), new EntryText(furnacePages, TextHelper.localize(keyBase + "furnace"), true)); - - List speedPages = new ArrayList<>(); - - PageAlchemyArray speedRecipePage = BookUtils.getAlchemyPage("movement"); - if (speedRecipePage != null) - { - speedPages.add(speedRecipePage); - } - speedPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "speed" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "speed"), new EntryText(speedPages, TextHelper.localize(keyBase + "speed"), true)); - - List updraftPages = new ArrayList<>(); - - PageAlchemyArray updraftRecipePage = BookUtils.getAlchemyPage("updraft"); - if (updraftRecipePage != null) - { - updraftPages.add(updraftRecipePage); - } - updraftPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "updraft" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "updraft"), new EntryText(updraftPages, TextHelper.localize(keyBase + "updraft"), true)); - - List turretPages = new ArrayList<>(); - - PageAlchemyArray turretRecipePage = BookUtils.getAlchemyPage("skeletonTurret"); - if (turretRecipePage != null) - { - turretPages.add(turretRecipePage); - } - turretPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "turret" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "turret"), new EntryText(turretPages, TextHelper.localize(keyBase + "turret"), true)); - - List bouncePages = new ArrayList<>(); - - PageAlchemyArray bounceRecipePage = BookUtils.getAlchemyPage("bounce"); - if (bounceRecipePage != null) - { - bouncePages.add(bounceRecipePage); - } - bouncePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bounce" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "bounce"), new EntryText(bouncePages, TextHelper.localize(keyBase + "bounce"), true)); - - List teleportPages = new ArrayList<>(); - - PageAlchemyArray teleportRecipePage = BookUtils.getAlchemyPage("teleport"); - if (teleportRecipePage != null) - { - teleportPages.add(teleportRecipePage); - } - teleportPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "teleport" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "teleport"), new EntryText(teleportPages, TextHelper.localize(keyBase + "teleport"), true)); - - List standardTurretPages = new ArrayList<>(); - - PageAlchemyArray standardTurretRecipePage = BookUtils.getAlchemyPage("turret"); - if (standardTurretRecipePage != null) - { - standardTurretPages.add(standardTurretRecipePage); - } - standardTurretPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "standardTurret" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "standardTurret"), new EntryText(standardTurretPages, TextHelper.localize(keyBase + "standardTurret"), true)); - - List laputaPages = new ArrayList<>(); - - PageAlchemyArray laputaRecipePage = BookUtils.getAlchemyPage("laputa"); - if (laputaRecipePage != null) - { - laputaPages.add(laputaRecipePage); - } - laputaPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "laputa" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "laputa"), new EntryText(laputaPages, TextHelper.localize(keyBase + "laputa"), true)); - - List buffPages = new ArrayList<>(); - - buffPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "buff" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "buff"), new EntryText(buffPages, TextHelper.localize(keyBase + "buff"), true)); - - List fastMinerPages = new ArrayList<>(); - - PageAlchemyArray fastMinerRecipePage = BookUtils.getAlchemyPage("fastMiner"); - if (fastMinerRecipePage != null) - { - fastMinerPages.add(fastMinerRecipePage); - } - fastMinerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "fastMiner" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "fastMiner"), new EntryText(fastMinerPages, TextHelper.localize(keyBase + "fastMiner"), true)); - - for (Entry entry : entries.entrySet()) - { - for (IPage page : entry.getValue().pageList) - { - if (page instanceof PageText) - { - ((PageText) page).setUnicodeFlag(true); - } - } - } - - return entries; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryArchitect.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryArchitect.java deleted file mode 100644 index ac330963..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryArchitect.java +++ /dev/null @@ -1,726 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.book; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.core.registry.AltarRecipeRegistry.AltarRecipe; -import WayofTime.bloodmagic.core.registry.OrbRegistry; -import WayofTime.bloodmagic.compat.guideapi.BookUtils; -import WayofTime.bloodmagic.compat.guideapi.entry.EntryText; -import WayofTime.bloodmagic.compat.guideapi.page.PageAlchemyArray; -import WayofTime.bloodmagic.compat.guideapi.page.PageAltarRecipe; -import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.types.ComponentTypes; -import WayofTime.bloodmagic.util.helper.RecipeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.IPage; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import amerifrance.guideapi.api.util.PageHelper; -import amerifrance.guideapi.page.PageText; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -public class CategoryArchitect -{ - public static Map buildCategory() - { - Map entries = new LinkedHashMap<>(); - String keyBase = "guide." + BloodMagic.MODID + ".entry.architect."; - - List introPages = new ArrayList<>(); - introPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "intro" + ".info"), 370)); -// introPages.add(new PageImage(new ResourceLocation("bloodmagicguide", "textures/guide/" + ritual.getName() + ".png"))); - entries.put(new ResourceLocation(keyBase + "intro"), new EntryText(introPages, TextHelper.localize(keyBase + "intro"), true)); - - List altarPages = new ArrayList<>(); - - IRecipe altarRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.ALTAR)); - if (altarRecipe != null) - { - altarPages.add(BookUtils.getPageForRecipe(altarRecipe)); - } - - altarPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bloodaltar" + ".info.1"), 370)); - - IRecipe daggerRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SACRIFICIAL_DAGGER)); - if (daggerRecipe != null) - { - altarPages.add(BookUtils.getPageForRecipe(daggerRecipe)); - } - - altarPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bloodaltar" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "bloodaltar"), new EntryText(altarPages, TextHelper.localize(keyBase + "bloodaltar"), true)); - - List ashPages = new ArrayList<>(); - - TartaricForgeRecipe ashRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES)); - if (ashRecipe != null) - { - ashPages.add(new PageTartaricForgeRecipe(ashRecipe)); - } - ashPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ash" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "ash"), new EntryText(ashPages, TextHelper.localize(keyBase + "ash"), true)); - - List divinationPages = new ArrayList<>(); - - PageAlchemyArray divinationRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION)); - if (divinationRecipePage != null) - { - divinationPages.add(divinationRecipePage); - } - - divinationPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "divination" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "divination"), new EntryText(divinationPages, TextHelper.localize(keyBase + "divination"), true)); - - List soulnetworkPages = new ArrayList<>(); - - soulnetworkPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "soulnetwork" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "soulnetwork"), new EntryText(soulnetworkPages, TextHelper.localize(keyBase + "soulnetwork"), true)); - - List weakorbPages = new ArrayList<>(); - weakorbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "weakorb" + ".info.1"), 370)); - - AltarRecipe weakorbRecipe = RecipeHelper.getAltarRecipeForOutput(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK)); - if (weakorbRecipe != null) - { - weakorbPages.add(new PageAltarRecipe(weakorbRecipe)); - } - - weakorbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "weakorb" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "weakorb"), new EntryText(weakorbPages, TextHelper.localize(keyBase + "weakorb"), true)); - - List incensePages = new ArrayList<>(); - - IRecipe incenseRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.INCENSE_ALTAR)); - if (incenseRecipe != null) - { - incensePages.add(BookUtils.getPageForRecipe(incenseRecipe)); - } - - incensePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "incense" + ".info.1"), 370)); - - IRecipe woodPathRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.PATH, 1, 0)); - if (woodPathRecipe != null) - { - incensePages.add(BookUtils.getPageForRecipe(woodPathRecipe)); - } - - incensePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "incense" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "incense"), new EntryText(incensePages, TextHelper.localize(keyBase + "incense"), true)); - - List runePages = new ArrayList<>(); - - IRecipe runeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 0)); - if (runeRecipe != null) - { - runePages.add(BookUtils.getPageForRecipe(runeRecipe)); - } - - runePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bloodrune" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "bloodrune"), new EntryText(runePages, TextHelper.localize(keyBase + "bloodrune"), true)); - - List inspectPages = new ArrayList<>(); - - AltarRecipe inspectRecipe = RecipeHelper.getAltarRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SANGUINE_BOOK)); - if (inspectRecipe != null) - { - inspectPages.add(new PageAltarRecipe(inspectRecipe)); - } - - inspectPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "inspectoris" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "inspectoris"), new EntryText(inspectPages, TextHelper.localize(keyBase + "inspectoris"), true)); - - List speedRunePages = new ArrayList<>(); - - IRecipe speedRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 1)); - if (speedRecipe != null) - { - speedRunePages.add(BookUtils.getPageForRecipe(speedRecipe)); - } - - speedRunePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSpeed" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "runeSpeed"), new EntryText(speedRunePages, TextHelper.localize(keyBase + "runeSpeed"), true)); - - List waterPages = new ArrayList<>(); - - TartaricForgeRecipe waterRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_WATER.getStack()); - if (waterRecipe != null) - { - waterPages.add(new PageTartaricForgeRecipe(waterRecipe)); - } - - PageAlchemyArray waterRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_WATER)); - if (waterRecipePage != null) - { - waterPages.add(waterRecipePage); - } - - waterPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "water" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "water"), new EntryText(waterPages, TextHelper.localize(keyBase + "water"), true)); - - List lavaPages = new ArrayList<>(); - - TartaricForgeRecipe lavaRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_LAVA.getStack()); - if (lavaRecipe != null) - { - lavaPages.add(new PageTartaricForgeRecipe(lavaRecipe)); - } - - PageAlchemyArray lavaRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_LAVA)); - if (lavaRecipePage != null) - { - lavaPages.add(lavaRecipePage); - } - - lavaPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lava" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "lava"), new EntryText(lavaPages, TextHelper.localize(keyBase + "lava"), true)); - - List lavaCrystalPages = new ArrayList<>(); - - IRecipe lavaCrystalRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.LAVA_CRYSTAL)); - if (lavaCrystalRecipe != null) - { - lavaCrystalPages.add(BookUtils.getPageForRecipe(lavaCrystalRecipe)); - } - - lavaCrystalPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lavaCrystal" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "lavaCrystal"), new EntryText(lavaCrystalPages, TextHelper.localize(keyBase + "lavaCrystal"), true)); - - List apprenticeorbPages = new ArrayList<>(); - - AltarRecipe apprenticeorbRecipe = RecipeHelper.getAltarRecipeForOutput(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE)); - if (apprenticeorbRecipe != null) - { - apprenticeorbPages.add(new PageAltarRecipe(apprenticeorbRecipe)); - } - - apprenticeorbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "apprenticeorb" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "apprenticeorb"), new EntryText(apprenticeorbPages, TextHelper.localize(keyBase + "apprenticeorb"), true)); - - List daggerPages = new ArrayList<>(); - - AltarRecipe daggerOfSacrificeRecipe = RecipeHelper.getAltarRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.DAGGER_OF_SACRIFICE)); - if (daggerOfSacrificeRecipe != null) - { - daggerPages.add(new PageAltarRecipe(daggerOfSacrificeRecipe)); - } - - daggerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "dagger" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "dagger"), new EntryText(daggerPages, TextHelper.localize(keyBase + "dagger"), true)); - - List runeSacrificePages = new ArrayList<>(); - - IRecipe runeSacrificeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 3)); - if (runeSacrificeRecipe != null) - { - runeSacrificePages.add(BookUtils.getPageForRecipe(runeSacrificeRecipe)); - } - - runeSacrificePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSacrifice" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "runeSacrifice"), new EntryText(runeSacrificePages, TextHelper.localize(keyBase + "runeSacrifice"), true)); - - List runeSelfSacrificePages = new ArrayList<>(); - - IRecipe runeSelfSacrificeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 4)); - if (runeSelfSacrificeRecipe != null) - { - runeSelfSacrificePages.add(BookUtils.getPageForRecipe(runeSelfSacrificeRecipe)); - } - - runeSelfSacrificePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeSelfSacrifice" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "runeSelfSacrifice"), new EntryText(runeSelfSacrificePages, TextHelper.localize(keyBase + "runeSelfSacrifice"), true)); - - List holdingPages = new ArrayList<>(); - - TartaricForgeRecipe holdingRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_HOLDING.getStack()); - if (holdingRecipe != null) - { - holdingPages.add(new PageTartaricForgeRecipe(holdingRecipe)); - } - - PageAlchemyArray holdingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_HOLDING)); - if (holdingRecipePage != null) - { - holdingPages.add(holdingRecipePage); - } - - holdingPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "holding" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "holding"), new EntryText(holdingPages, TextHelper.localize(keyBase + "holding"), true)); - - List airPages = new ArrayList<>(); - - TartaricForgeRecipe airRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_AIR.getStack()); - if (airRecipe != null) - { - airPages.add(new PageTartaricForgeRecipe(airRecipe)); - } - - PageAlchemyArray airRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_AIR)); - if (airRecipePage != null) - { - airPages.add(airRecipePage); - } - - airPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "air" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "air"), new EntryText(airPages, TextHelper.localize(keyBase + "air"), true)); - - List voidPages = new ArrayList<>(); - - TartaricForgeRecipe voidRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_VOID.getStack()); - if (voidRecipe != null) - { - voidPages.add(new PageTartaricForgeRecipe(voidRecipe)); - } - - PageAlchemyArray voidRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_VOID)); - if (voidRecipePage != null) - { - voidPages.add(voidRecipePage); - } - - voidPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "void" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "void"), new EntryText(voidPages, TextHelper.localize(keyBase + "void"), true)); - - List greenGrovePages = new ArrayList<>(); - - TartaricForgeRecipe greenGroveRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_GROWTH.getStack()); - if (greenGroveRecipe != null) - { - greenGrovePages.add(new PageTartaricForgeRecipe(greenGroveRecipe)); - } - - PageAlchemyArray greenGroveRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_GREEN_GROVE)); - if (greenGroveRecipePage != null) - { - greenGrovePages.add(greenGroveRecipePage); - } - - greenGrovePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "greenGrove" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "greenGrove"), new EntryText(greenGrovePages, TextHelper.localize(keyBase + "greenGrove"), true)); - - List fastMinerPages = new ArrayList<>(); - - TartaricForgeRecipe fastMinerRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_FAST_MINER.getStack()); - if (fastMinerRecipe != null) - { - fastMinerPages.add(new PageTartaricForgeRecipe(fastMinerRecipe)); - } - - PageAlchemyArray fastMinerRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_FAST_MINER)); - if (fastMinerRecipePage != null) - { - fastMinerPages.add(fastMinerRecipePage); - } - - fastMinerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "fastMiner" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "fastMiner"), new EntryText(fastMinerPages, TextHelper.localize(keyBase + "fastMiner"), true)); - - List seerPages = new ArrayList<>(); - - TartaricForgeRecipe seerRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_SIGHT.getStack()); - if (seerRecipe != null) - { - seerPages.add(new PageTartaricForgeRecipe(seerRecipe)); - } - - PageAlchemyArray seerRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_SEER)); - if (seerRecipePage != null) - { - seerPages.add(seerRecipePage); - } - - seerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "seer" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "seer"), new EntryText(seerPages, TextHelper.localize(keyBase + "seer"), true)); - - List magicianOrbPages = new ArrayList<>(); - - AltarRecipe magicianOrbRecipe = RecipeHelper.getAltarRecipeForOutput(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN)); - if (magicianOrbRecipe != null) - { - magicianOrbPages.add(new PageAltarRecipe(magicianOrbRecipe)); - } - - List tier3Pages = new ArrayList<>(); - - tier3Pages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "tier3" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "tier3"), new EntryText(tier3Pages, TextHelper.localize(keyBase + "tier3"), true)); - - magicianOrbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "magicianOrb" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "magicianOrb"), new EntryText(magicianOrbPages, TextHelper.localize(keyBase + "magicianOrb"), true)); - - List capacityPages = new ArrayList<>(); - - IRecipe capacityRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 4)); - if (capacityRecipe != null) - { - capacityPages.add(BookUtils.getPageForRecipe(capacityRecipe)); - } - - capacityPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "capacity" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "capacity"), new EntryText(capacityPages, TextHelper.localize(keyBase + "capacity"), true)); - - List displacementPages = new ArrayList<>(); - - IRecipe displacementRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 4)); - if (displacementRecipe != null) - { - displacementPages.add(BookUtils.getPageForRecipe(displacementRecipe)); - } - - displacementPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "displacement" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "displacement"), new EntryText(displacementPages, TextHelper.localize(keyBase + "displacement"), true)); - - List affinityPages = new ArrayList<>(); - - TartaricForgeRecipe affinityRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_AFFINITY.getStack()); - if (affinityRecipe != null) - { - affinityPages.add(new PageTartaricForgeRecipe(affinityRecipe)); - } - - PageAlchemyArray affinityRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_ELEMENTAL_AFFINITY)); - if (affinityRecipePage != null) - { - affinityPages.add(affinityRecipePage); - } - - affinityPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "affinity" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "affinity"), new EntryText(affinityPages, TextHelper.localize(keyBase + "affinity"), true)); - - List lampPages = new ArrayList<>(); - - TartaricForgeRecipe lampRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_BLOOD_LIGHT.getStack()); - if (lampRecipe != null) - { - lampPages.add(new PageTartaricForgeRecipe(lampRecipe)); - } - - PageAlchemyArray lampRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_BLOOD_LIGHT)); - if (lampRecipePage != null) - { - lampPages.add(lampRecipePage); - } - - lampPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lamp" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "lamp"), new EntryText(lampPages, TextHelper.localize(keyBase + "lamp"), true)); - - List magnetismPages = new ArrayList<>(); - - TartaricForgeRecipe magnetismRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_MAGNETISM.getStack()); - if (magnetismRecipe != null) - { - magnetismPages.add(new PageTartaricForgeRecipe(magnetismRecipe)); - } - - PageAlchemyArray magnetismRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_MAGNETISM)); - if (magnetismRecipePage != null) - { - magnetismPages.add(magnetismRecipePage); - } - - magnetismPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "magnetism" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "magnetism"), new EntryText(magnetismPages, TextHelper.localize(keyBase + "magnetism"), true)); - - List peritiaPages = new ArrayList<>(); - - IRecipe peritiaRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.EXPERIENCE_TOME)); - if (peritiaRecipe != null) - { - peritiaPages.add(BookUtils.getPageForRecipe(peritiaRecipe)); - } - - peritiaPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "peritia" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "peritia"), new EntryText(peritiaPages, TextHelper.localize(keyBase + "peritia"), true)); - - List livingArmourPages = new ArrayList<>(); - - TartaricForgeRecipe bindingRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_BINDING.getStack()); - if (bindingRecipe != null) - { - livingArmourPages.add(new PageTartaricForgeRecipe(bindingRecipe)); - } - - PageAlchemyArray bindingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST)); - if (bindingRecipePage != null) - { - livingArmourPages.add(bindingRecipePage); - } - - bindingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET)); - if (bindingRecipePage != null) - { - livingArmourPages.add(bindingRecipePage); - } - - bindingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS)); - if (bindingRecipePage != null) - { - livingArmourPages.add(bindingRecipePage); - } - - bindingRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS)); - if (bindingRecipePage != null) - { - livingArmourPages.add(bindingRecipePage); - } - - livingArmourPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "livingArmour" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "livingArmour"), new EntryText(livingArmourPages, TextHelper.localize(keyBase + "livingArmour"), true)); - - List upgradePages = new ArrayList<>(); - - upgradePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "upgradeTome" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "upgradeTome"), new EntryText(upgradePages, TextHelper.localize(keyBase + "upgradeTome"), true)); - - List downgradePages = new ArrayList<>(); - - downgradePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "downgrade" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "downgrade"), new EntryText(downgradePages, TextHelper.localize(keyBase + "downgrade"), true)); - - List teleposerPages = new ArrayList<>(); - - AltarRecipe teleposerFocusRecipe = RecipeHelper.getAltarRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS)); - if (teleposerFocusRecipe != null) - { - teleposerPages.add(new PageAltarRecipe(teleposerFocusRecipe)); - } - - IRecipe teleposerRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.TELEPOSER)); - if (teleposerRecipe != null) - { - teleposerPages.add(BookUtils.getPageForRecipe(teleposerRecipe)); - } - - teleposerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "teleposer" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "teleposer"), new EntryText(teleposerPages, TextHelper.localize(keyBase + "teleposer"), true)); - - List boundBladePages = new ArrayList<>(); - - PageAlchemyArray boundBladePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_SWORD)); - if (boundBladePage != null) - { - boundBladePages.add(boundBladePage); - } - - boundBladePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "boundBlade" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "boundBlade"), new EntryText(boundBladePages, TextHelper.localize(keyBase + "boundBlade"), true)); - - List boundToolPages = new ArrayList<>(); - - PageAlchemyArray boundToolPage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_PICKAXE)); - if (boundToolPage != null) - { - boundToolPages.add(boundToolPage); - } - - boundToolPage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_AXE)); - if (boundToolPage != null) - { - boundToolPages.add(boundToolPage); - } - - boundToolPage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.BOUND_SHOVEL)); - if (boundToolPage != null) - { - boundToolPages.add(boundToolPage); - } - - boundToolPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "boundTool" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "boundTool"), new EntryText(boundToolPages, TextHelper.localize(keyBase + "boundTool"), true)); - - List weakShardPages = new ArrayList<>(); - - weakShardPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "weakShard" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "weakShard"), new EntryText(weakShardPages, TextHelper.localize(keyBase + "weakShard"), true)); - - List masterOrbPages = new ArrayList<>(); - - AltarRecipe masterOrbRecipe = RecipeHelper.getAltarRecipeForOutput(OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER)); - if (magicianOrbRecipe != null) - { - masterOrbPages.add(new PageAltarRecipe(masterOrbRecipe)); - } - - masterOrbPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "masterOrb" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "masterOrb"), new EntryText(masterOrbPages, TextHelper.localize(keyBase + "masterOrb"), true)); - - List orbRunePages = new ArrayList<>(); - - IRecipe orbRuneRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 8)); - if (orbRuneRecipe != null) - { - orbRunePages.add(BookUtils.getPageForRecipe(orbRuneRecipe)); - } - - orbRunePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "runeOrb" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "runeOrb"), new EntryText(orbRunePages, TextHelper.localize(keyBase + "runeOrb"), true)); - - List augmentedCapacityPages = new ArrayList<>(); - - IRecipe augmentedCapacityRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 7)); - if (orbRuneRecipe != null) - { - augmentedCapacityPages.add(BookUtils.getPageForRecipe(augmentedCapacityRecipe)); - } - - augmentedCapacityPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "augmentedCapacity" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "augmentedCapacity"), new EntryText(augmentedCapacityPages, TextHelper.localize(keyBase + "augmentedCapacity"), true)); - - List chargingPages = new ArrayList<>(); - - IRecipe chargingRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 10)); - if (orbRuneRecipe != null) - { - chargingPages.add(BookUtils.getPageForRecipe(chargingRecipe)); - } - - chargingPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "charging" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "charging"), new EntryText(chargingPages, TextHelper.localize(keyBase + "charging"), true)); - - List accelerationPages = new ArrayList<>(); - - IRecipe accelerationRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.BLOOD_RUNE, 1, 9)); - if (orbRuneRecipe != null) - { - accelerationPages.add(BookUtils.getPageForRecipe(accelerationRecipe)); - } - - accelerationPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "acceleration" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "acceleration"), new EntryText(accelerationPages, TextHelper.localize(keyBase + "acceleration"), true)); - - List suppressionPages = new ArrayList<>(); - - TartaricForgeRecipe suppressionRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_SUPPRESSION.getStack()); - if (suppressionRecipe != null) - { - suppressionPages.add(new PageTartaricForgeRecipe(suppressionRecipe)); - } - - PageAlchemyArray suppressionRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_SUPPRESSION)); - if (suppressionRecipePage != null) - { - suppressionPages.add(suppressionRecipePage); - } - - suppressionPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "suppression" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "suppression"), new EntryText(suppressionPages, TextHelper.localize(keyBase + "suppression"), true)); - - List hastePages = new ArrayList<>(); - - TartaricForgeRecipe hasteRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_HASTE.getStack()); - if (hasteRecipe != null) - { - hastePages.add(new PageTartaricForgeRecipe(hasteRecipe)); - } - - PageAlchemyArray hasteRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_HASTE)); - if (hasteRecipePage != null) - { - hastePages.add(hasteRecipePage); - } - - hastePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "haste" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "haste"), new EntryText(hastePages, TextHelper.localize(keyBase + "haste"), true)); - - List severancePages = new ArrayList<>(); - - TartaricForgeRecipe severanceRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_SEVERANCE.getStack()); - if (severanceRecipe != null) - { - severancePages.add(new PageTartaricForgeRecipe(severanceRecipe)); - } - - PageAlchemyArray severanceRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_ENDER_SEVERANCE)); - if (severanceRecipePage != null) - { - severancePages.add(severanceRecipePage); - } - - severancePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "severance" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "severance"), new EntryText(severancePages, TextHelper.localize(keyBase + "severance"), true)); - - List telepositionPages = new ArrayList<>(); - - TartaricForgeRecipe telepositionRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_TELEPOSITION.getStack()); - if (telepositionRecipe != null) - { - telepositionPages.add(new PageTartaricForgeRecipe(telepositionRecipe)); - } - - PageAlchemyArray telepositionRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_TELEPOSITION)); - if (telepositionRecipePage != null) - { - telepositionPages.add(telepositionRecipePage); - } - - telepositionPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "teleposition" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "teleposition"), new EntryText(telepositionPages, TextHelper.localize(keyBase + "teleposition"), true)); - - List compressionPages = new ArrayList<>(); - - TartaricForgeRecipe compressionRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_COMPRESSION.getStack()); - if (compressionRecipe != null) - { - compressionPages.add(new PageTartaricForgeRecipe(compressionRecipe)); - } - - PageAlchemyArray compressionRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_COMPRESSION)); - if (compressionRecipePage != null) - { - compressionPages.add(compressionRecipePage); - } - - compressionPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "compression" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "compression"), new EntryText(compressionPages, TextHelper.localize(keyBase + "compression"), true)); - - List bridgePages = new ArrayList<>(); - - TartaricForgeRecipe bridgeRecipe = RecipeHelper.getForgeRecipeForOutput(ComponentTypes.REAGENT_BRIDGE.getStack()); - if (bridgeRecipe != null) - { - bridgePages.add(new PageTartaricForgeRecipe(bridgeRecipe)); - } - - PageAlchemyArray bridgeRecipePage = BookUtils.getAlchemyPage(new ItemStack(RegistrarBloodMagicItems.SIGIL_PHANTOM_BRIDGE)); - if (bridgeRecipePage != null) - { - bridgePages.add(bridgeRecipePage); - } - - bridgePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "bridge" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "bridge"), new EntryText(bridgePages, TextHelper.localize(keyBase + "bridge"), true)); - - List mimicPages = new ArrayList<>(); - - IRecipe mimicRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.MIMIC, 1, 1)); - if (mimicRecipe != null) - { - mimicPages.add(BookUtils.getPageForRecipe(mimicRecipe)); - } - - mimicPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "mimic" + ".info.1"), 370)); - entries.put(new ResourceLocation(keyBase + "mimic"), new EntryText(mimicPages, TextHelper.localize(keyBase + "mimic"), true)); - - for (Entry entry : entries.entrySet()) - { - for (IPage page : entry.getValue().pageList) - { - if (page instanceof PageText) - { - ((PageText) page).setUnicodeFlag(true); - } - } - } - - return entries; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryDemon.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryDemon.java deleted file mode 100644 index eb26e3a4..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryDemon.java +++ /dev/null @@ -1,191 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.book; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.compat.guideapi.BookUtils; -import WayofTime.bloodmagic.compat.guideapi.entry.EntryText; -import WayofTime.bloodmagic.compat.guideapi.page.PageTartaricForgeRecipe; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.helper.RecipeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.IPage; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import amerifrance.guideapi.api.util.PageHelper; -import amerifrance.guideapi.page.PageText; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -public class CategoryDemon { - //TODO: Add Forge recipe pages - public static Map buildCategory() { - Map entries = new LinkedHashMap<>(); - String keyBase = "guide." + BloodMagic.MODID + ".entry.demon."; - - List introPages = new ArrayList<>(); - introPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "intro" + ".info"), 370)); -// introPages.add(new PageImage(new ResourceLocation("bloodmagicguide", "textures/guide/" + ritual.getName() + ".png"))); - entries.put(new ResourceLocation(keyBase + "intro"), new EntryText(introPages, TextHelper.localize(keyBase + "intro"), true)); - - List snarePages = new ArrayList<>(); - snarePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "snare" + ".info.1"), 370)); - - IRecipe snareRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SOUL_SNARE)); - if (snareRecipe != null) { - snarePages.add(BookUtils.getPageForRecipe(snareRecipe)); - } - - snarePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "snare" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "snare"), new EntryText(snarePages, TextHelper.localize(keyBase + "snare"), true)); - - List forgePages = new ArrayList<>(); - forgePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "forge" + ".info.1"), 370)); - - IRecipe forgeRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.SOUL_FORGE)); - if (forgeRecipe != null) { - forgePages.add(BookUtils.getPageForRecipe(forgeRecipe)); - } - - forgePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "forge" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "forge"), new EntryText(forgePages, TextHelper.localize(keyBase + "forge"), true)); - - List pettyPages = new ArrayList<>(); - pettyPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "petty" + ".info.1"), 370)); - TartaricForgeRecipe pettyRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM)); - if (pettyRecipe != null) { - pettyPages.add(new PageTartaricForgeRecipe(pettyRecipe)); - } - pettyPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "petty" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "petty"), new EntryText(pettyPages, TextHelper.localize(keyBase + "petty"), true)); - - List swordPages = new ArrayList<>(); - swordPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sword" + ".info.1"), 370)); - TartaricForgeRecipe swordRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SWORD)); - if (swordRecipe != null) { - swordPages.add(new PageTartaricForgeRecipe(swordRecipe)); - } - swordPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sword" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "sword"), new EntryText(swordPages, TextHelper.localize(keyBase + "sword"), true)); - - List lesserPages = new ArrayList<>(); - lesserPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lesser" + ".info.1"), 370)); - TartaricForgeRecipe lesserRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1)); - if (lesserRecipe != null) { - lesserPages.add(new PageTartaricForgeRecipe(lesserRecipe)); - } - lesserPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "lesser" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "lesser"), new EntryText(lesserPages, TextHelper.localize(keyBase + "lesser"), true)); - - List reactionsPages = new ArrayList<>(); - reactionsPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "reactions" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "reactions"), new EntryText(reactionsPages, TextHelper.localize(keyBase + "reactions"), true)); - - List sentientGemPages = new ArrayList<>(); - sentientGemPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sentientGem" + ".info.1"), 370)); - sentientGemPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sentientGem" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "sentientGem"), new EntryText(sentientGemPages, TextHelper.localize(keyBase + "sentientGem"), true)); - - List routingPages = new ArrayList<>(); - TartaricForgeRecipe nodeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE)); - if (nodeRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(nodeRecipe)); - } - TartaricForgeRecipe inputNodeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE)); - if (inputNodeRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(inputNodeRecipe)); - } - TartaricForgeRecipe outputNodeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE)); - if (outputNodeRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(outputNodeRecipe)); - } - TartaricForgeRecipe masterNodeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE)); - if (masterNodeRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(masterNodeRecipe)); - } - - TartaricForgeRecipe nodeRouterRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.NODE_ROUTER)); - if (nodeRouterRecipe != null) { - routingPages.add(new PageTartaricForgeRecipe(nodeRouterRecipe)); - } - - routingPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "routing" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "routing"), new EntryText(routingPages, TextHelper.localize(keyBase + "routing"), true)); - - List auraPages = new ArrayList<>(); - - auraPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "aura" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "aura"), new EntryText(auraPages, TextHelper.localize(keyBase + "aura"), true)); - - List typesPages = new ArrayList<>(); - - typesPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "types" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "types"), new EntryText(typesPages, TextHelper.localize(keyBase + "types"), true)); - - List cruciblePages = new ArrayList<>(); - - TartaricForgeRecipe crucibleRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRUCIBLE)); - if (crucibleRecipe != null) { - cruciblePages.add(new PageTartaricForgeRecipe(crucibleRecipe)); - } - - cruciblePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "crucible" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "crucible"), new EntryText(cruciblePages, TextHelper.localize(keyBase + "crucible"), true)); - - List crystallizerPages = new ArrayList<>(); - - TartaricForgeRecipe crystallizerRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTALLIZER)); - if (crystallizerRecipe != null) { - crystallizerPages.add(new PageTartaricForgeRecipe(crystallizerRecipe)); - } - - crystallizerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "crystallizer" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "crystallizer"), new EntryText(crystallizerPages, TextHelper.localize(keyBase + "crystallizer"), true)); - - List clusterPages = new ArrayList<>(); - - TartaricForgeRecipe clusterRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL)); - if (clusterRecipe != null) { - clusterPages.add(new PageTartaricForgeRecipe(clusterRecipe)); - } - - clusterPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "cluster" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "cluster"), new EntryText(clusterPages, TextHelper.localize(keyBase + "cluster"), true)); - - List pylonPages = new ArrayList<>(); - - TartaricForgeRecipe pylonRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.DEMON_PYLON)); - if (pylonRecipe != null) { - pylonPages.add(new PageTartaricForgeRecipe(pylonRecipe)); - } - - pylonPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "pylon" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "pylon"), new EntryText(pylonPages, TextHelper.localize(keyBase + "pylon"), true)); - - List gaugePages = new ArrayList<>(); - - TartaricForgeRecipe gaugeRecipe = RecipeHelper.getForgeRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.DEMON_WILL_GAUGE)); - if (gaugeRecipe != null) { - gaugePages.add(new PageTartaricForgeRecipe(gaugeRecipe)); - } - - gaugePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "gauge" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "gauge"), new EntryText(gaugePages, TextHelper.localize(keyBase + "gauge"), true)); - - for (Entry entry : entries.entrySet()) { - for (IPage page : entry.getValue().pageList) { - if (page instanceof PageText) { - ((PageText) page).setUnicodeFlag(true); - } - } - } - - return entries; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryRitual.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryRitual.java deleted file mode 100644 index 0a82b197..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategoryRitual.java +++ /dev/null @@ -1,140 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.book; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.registry.AltarRecipeRegistry.AltarRecipe; -import WayofTime.bloodmagic.ritual.EnumRuneType; -import WayofTime.bloodmagic.compat.guideapi.BookUtils; -import WayofTime.bloodmagic.compat.guideapi.entry.EntryText; -import WayofTime.bloodmagic.compat.guideapi.page.PageAltarRecipe; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.helper.RecipeHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.IPage; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import amerifrance.guideapi.api.util.PageHelper; -import amerifrance.guideapi.page.PageText; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -public class CategoryRitual -{ - static String keyBase = "guide." + BloodMagic.MODID + ".entry.ritual."; - - public static Map buildCategory() - { - Map entries = new LinkedHashMap<>(); - - addRitualPagesToEntries("intro", entries); - addRitualPagesToEntries("basics", entries); - - List ritualStonePages = new ArrayList<>(); - - IRecipe ritualStoneRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_STONE)); - if (ritualStoneRecipe != null) - { - ritualStonePages.add(BookUtils.getPageForRecipe(ritualStoneRecipe)); - } - - ritualStonePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ritualStone" + ".info.1"), 370)); - - for (int i = 1; i < 5; i++) - { - EnumRuneType type = EnumRuneType.values()[i]; - AltarRecipe scribeRecipe = RecipeHelper.getAltarRecipeForOutput(type.getStack()); - if (scribeRecipe != null) - { - ritualStonePages.add(new PageAltarRecipe(scribeRecipe)); - } - } - - ritualStonePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "ritualStone" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "ritualStone"), new EntryText(ritualStonePages, TextHelper.localize(keyBase + "ritualStone"), true)); - - List masterRitualStonePages = new ArrayList<>(); - - IRecipe masterRitualStoneRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER, 1, 0)); - if (masterRitualStoneRecipe != null) - { - masterRitualStonePages.add(BookUtils.getPageForRecipe(masterRitualStoneRecipe)); - } - - masterRitualStonePages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "masterRitualStone" + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + "masterRitualStone"), new EntryText(masterRitualStonePages, TextHelper.localize(keyBase + "masterRitualStone"), true)); - - List activationCrystalPages = new ArrayList<>(); - - activationCrystalPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "activationCrystal" + ".info.1"), 370)); - - AltarRecipe crystalRecipe = RecipeHelper.getAltarRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL)); - if (crystalRecipe != null) - { - activationCrystalPages.add(new PageAltarRecipe(crystalRecipe)); - } - - activationCrystalPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "activationCrystal" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "activationCrystal"), new EntryText(activationCrystalPages, TextHelper.localize(keyBase + "activationCrystal"), true)); - - List divinerPages = new ArrayList<>(); - - divinerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "diviner" + ".info.1"), 370)); - - IRecipe divinerRecipe = RecipeHelper.getRecipeForOutput(new ItemStack(RegistrarBloodMagicItems.RITUAL_DIVINER)); - if (divinerRecipe != null) - { - divinerPages.add(BookUtils.getPageForRecipe(divinerRecipe)); - } - - divinerPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "diviner" + ".info.2"), 370)); - entries.put(new ResourceLocation(keyBase + "diviner"), new EntryText(divinerPages, TextHelper.localize(keyBase + "diviner"), true)); - - addRitualPagesToEntries("fullSpring", entries); - addRitualPagesToEntries("lava", entries); - addRitualPagesToEntries("greenGrove", entries); - addRitualPagesToEntries("magnetism", entries); - addRitualPagesToEntries("crusher", entries); - addRitualPagesToEntries("highJump", entries); - addRitualPagesToEntries("speed", entries); - addRitualPagesToEntries("wellOfSuffering", entries); - addRitualPagesToEntries("featheredKnife", entries); - addRitualPagesToEntries("regen", entries); - addRitualPagesToEntries("harvest", entries); - addRitualPagesToEntries("interdiction", entries); - addRitualPagesToEntries("containment", entries); - addRitualPagesToEntries("suppression", entries); - addRitualPagesToEntries("expulsion", entries); - addRitualPagesToEntries("zephyr", entries); - addRitualPagesToEntries("laying", entries); - addRitualPagesToEntries("timberman", entries); - addRitualPagesToEntries("meteor", entries); - addRitualPagesToEntries("downgrade", entries); - addRitualPagesToEntries("crystalSplit", entries); - - for (Entry entry : entries.entrySet()) - { - for (IPage page : entry.getValue().pageList) - { - if (page instanceof PageText) - { - ((PageText) page).setUnicodeFlag(true); - } - } - } - - return entries; - } - - public static void addRitualPagesToEntries(String name, Map entries) - { - List pages = new ArrayList<>(); - pages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + name + ".info"), 370)); - entries.put(new ResourceLocation(keyBase + name), new EntryText(pages, TextHelper.localize(keyBase + name), true)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategorySpell.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategorySpell.java deleted file mode 100644 index 680bffda..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/book/CategorySpell.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.book; - -import WayofTime.bloodmagic.util.Constants; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import net.minecraft.util.ResourceLocation; - -import java.util.LinkedHashMap; -import java.util.Map; - -public class CategorySpell { - public static Map buildCategory() { - Map entries = new LinkedHashMap<>(); - String keyBase = Constants.Mod.DOMAIN + "spell_"; - - return entries; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/entry/EntryText.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/entry/EntryText.java deleted file mode 100644 index 577e4f85..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/entry/EntryText.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.entry; - -import amerifrance.guideapi.api.IPage; -import amerifrance.guideapi.api.impl.Book; -import amerifrance.guideapi.api.impl.abstraction.CategoryAbstract; -import amerifrance.guideapi.api.util.GuiHelper; -import amerifrance.guideapi.entry.EntryResourceLocation; -import amerifrance.guideapi.gui.GuiBase; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.Collections; -import java.util.List; - -public class EntryText extends EntryResourceLocation { - - public EntryText(List pageList, String unlocEntryName, boolean unicode) { - super(pageList, unlocEntryName, new ResourceLocation("bloodmagicguide", "textures/gui/bullet_point.png"), unicode); - } - - public EntryText(List pageList, String unlocEntryName) { - this(pageList, unlocEntryName, false); - } - - @Override - @SideOnly(Side.CLIENT) - public void drawExtras(Book book, CategoryAbstract category, int entryX, int entryY, int entryWidth, int entryHeight, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRendererObj) { - Minecraft.getMinecraft().getTextureManager().bindTexture(image); - GuiHelper.drawSizedIconWithoutColor(entryX + 4, entryY + 2, 8, 8, 1F); - - boolean startFlag = fontRendererObj.getUnicodeFlag(); - fontRendererObj.setUnicodeFlag(false); - - // Cutting code ripped from GuiButtonExt#drawButton(...) - int strWidth = fontRendererObj.getStringWidth(getLocalizedName()); - boolean cutString = false; - - if (strWidth > guiBase.xSize - 80 && strWidth > fontRendererObj.getStringWidth("...")) - cutString = true; - - if (GuiHelper.isMouseBetween(mouseX, mouseY, entryX, entryY, entryWidth, entryHeight) && cutString) { - - guiBase.drawHoveringText(Collections.singletonList(getLocalizedName()), entryX, entryY + 12); - fontRendererObj.setUnicodeFlag(unicode); - } - - fontRendererObj.setUnicodeFlag(startFlag); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAlchemyArray.java deleted file mode 100644 index caa0df9a..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAlchemyArray.java +++ /dev/null @@ -1,94 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.page; - -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.impl.Book; -import amerifrance.guideapi.api.impl.Page; -import amerifrance.guideapi.api.impl.abstraction.CategoryAbstract; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import amerifrance.guideapi.api.util.GuiHelper; -import amerifrance.guideapi.gui.GuiBase; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class PageAlchemyArray extends Page { - public static final double scale = 58d / 256d; - public final ItemStack inputStack; - public final ItemStack catalystStack; - public final ItemStack outputStack; - public List arrayResources = new ArrayList<>(); - - public PageAlchemyArray(List arrayResources, ItemStack inputStack, ItemStack catalystStack, ItemStack outputStack) { - this.arrayResources = arrayResources; - this.inputStack = inputStack; - this.catalystStack = catalystStack; - this.outputStack = outputStack; - } - - public PageAlchemyArray(List resources, ItemStack inputStack, ItemStack catalystStack) { - this(resources, inputStack, catalystStack, ItemStack.EMPTY); - } - - public PageAlchemyArray(ResourceLocation resource, ItemStack inputStack, ItemStack catalystStack, ItemStack outputStack) { - this(Collections.singletonList(resource), inputStack, catalystStack, outputStack); - } - - public PageAlchemyArray(ResourceLocation resource, ItemStack inputStack, ItemStack catalystStack) { - this(Collections.singletonList(resource), inputStack, catalystStack); - } - - @Override - @SideOnly(Side.CLIENT) - public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) { - int x = guiLeft + 65; - int y = guiTop + 30; - - Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("bloodmagicguide" + ":textures/gui/alchemyArrayCrafting.png")); - guiBase.drawTexturedModalRect(x, y, 0, 0, 62, 88 + (outputStack.isEmpty() ? 0 : 26)); - - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.alchemyArray"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0); - - for (ResourceLocation arrayResource : arrayResources) { - Minecraft.getMinecraft().getTextureManager().bindTexture(arrayResource); - GlStateManager.pushMatrix(); - GlStateManager.translate(x + 2, y + 28, 0); - GlStateManager.scale(scale, scale, scale); - guiBase.drawTexturedModalRect(0, 0, 0, 0, 256, 256); - GlStateManager.popMatrix(); - } - - int inputX = x + 3; - int inputY = y + 3; - GuiHelper.drawItemStack(inputStack, inputX, inputY); - - int catalystX = x + 43; - int catalystY = y + 3; - GuiHelper.drawItemStack(catalystStack, catalystX, catalystY); - - if (GuiHelper.isMouseBetween(mouseX, mouseY, inputX, inputY, 15, 15)) { - guiBase.renderToolTip(inputStack, mouseX, mouseY); - } - - if (GuiHelper.isMouseBetween(mouseX, mouseY, catalystX, catalystY, 15, 15)) { - guiBase.renderToolTip(catalystStack, mouseX, mouseY); - } - - if (!outputStack.isEmpty()) { - int outputX = x + 43; - int outputY = y + 95; - - GuiHelper.drawItemStack(outputStack, outputX, outputY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) { - guiBase.renderToolTip(outputStack, mouseX, mouseY); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java deleted file mode 100644 index eca0eff2..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageAltarRecipe.java +++ /dev/null @@ -1,70 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.page; - -import WayofTime.bloodmagic.util.ItemStackWrapper; -import WayofTime.bloodmagic.core.registry.AltarRecipeRegistry; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.impl.Book; -import amerifrance.guideapi.api.impl.Page; -import amerifrance.guideapi.api.impl.abstraction.CategoryAbstract; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import amerifrance.guideapi.api.util.GuiHelper; -import amerifrance.guideapi.gui.GuiBase; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class PageAltarRecipe extends Page { - - public List input; - public ItemStack output; - public int tier; - public int bloodRequired; - - public PageAltarRecipe(AltarRecipeRegistry.AltarRecipe recipe) { - this.input = ItemStackWrapper.toStackList(recipe.getInput()); - this.output = recipe.getOutput(); - this.tier = recipe.getMinTier().toInt(); - this.bloodRequired = recipe.getSyphon(); - } - - @Override - @SideOnly(Side.CLIENT) - public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) { - Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("bloodmagicguide" + ":textures/gui/altar.png")); - guiBase.drawTexturedModalRect(guiLeft + 42, guiTop + 53, 0, 0, 146, 104); - - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.bloodAltar"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0); - - int inputX = (1 + 1) * 20 + (guiLeft + guiBase.xSize / 7) + 1; - int inputY = (20) + (guiTop + guiBase.ySize / 5) - 1; //1 * 20 - GuiHelper.drawItemStack(input.get(0), inputX, inputY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, inputX, inputY, 15, 15)) { - guiBase.renderToolTip(input.get(0), mouseX, mouseY); - } - - if (output.isEmpty()) { - output = new ItemStack(Blocks.BARRIER); - } - int outputX = (5 * 20) + (guiLeft + guiBase.xSize / 7) + 1; - int outputY = (20) + (guiTop + guiBase.xSize / 5) - 1; // 1 * 20 - GuiHelper.drawItemStack(output, outputX, outputY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) { - guiBase.renderToolTip(output, outputX, outputY); - } - - if (output.getItem() == Item.getItemFromBlock(Blocks.BARRIER)) { - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("text.furnace.error"), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0xED073D); - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("bm.string.tier") + ": " + String.valueOf(tier), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 15, 0); - guiBase.drawCenteredString(fontRenderer, "LP: " + String.valueOf(bloodRequired), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 30, 0); - } - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.tier", String.valueOf(tier)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0); - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.lp", String.valueOf(bloodRequired)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 15, 0); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageTartaricForgeRecipe.java b/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageTartaricForgeRecipe.java deleted file mode 100644 index a26dd233..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/guideapi/page/PageTartaricForgeRecipe.java +++ /dev/null @@ -1,125 +0,0 @@ -package WayofTime.bloodmagic.compat.guideapi.page; - -import WayofTime.bloodmagic.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.core.registry.OrbRegistry; -import WayofTime.bloodmagic.util.helper.TextHelper; -import amerifrance.guideapi.api.impl.Book; -import amerifrance.guideapi.api.impl.Page; -import amerifrance.guideapi.api.impl.abstraction.CategoryAbstract; -import amerifrance.guideapi.api.impl.abstraction.EntryAbstract; -import amerifrance.guideapi.api.util.GuiHelper; -import amerifrance.guideapi.gui.GuiBase; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.oredict.OreDictionary; - -import java.util.List; -import java.util.Random; - -public class PageTartaricForgeRecipe extends Page { - public List input; - public ItemStack output; - public int tier; - public double minimumWill; - public double drainedWill; - - private int cycleIdx = 0; - private Random rand = new Random(); - - public PageTartaricForgeRecipe(TartaricForgeRecipe recipe) { - this.input = recipe.getInput(); - this.output = recipe.getRecipeOutput(); - this.tier = 0; - this.minimumWill = recipe.getMinimumSouls(); - this.drainedWill = recipe.getSoulsDrained(); - } - - @SuppressWarnings("unchecked") - @Override - @SideOnly(Side.CLIENT) - public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) { - Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("bloodmagicguide" + ":textures/gui/soulForge.png")); - guiBase.drawTexturedModalRect(guiLeft + 42, guiTop + 53, 0, 0, 146, 104); - - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.soulForge"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0); - -// int inputX = (1 + 1) * 20 + (guiLeft + guiBase.xSize / 7) + 1; -// int inputY = (20) + (guiTop + guiBase.ySize / 5) - 1; //1 * 20 - - for (int y = 0; y < 2; y++) { - for (int x = 0; x < 2; x++) { - int stackX = (x + 1) * 20 + (guiLeft + guiBase.xSize / 7) + 1; - int stackY = (y + 1) * 20 + (guiTop + guiBase.ySize / 5) - 1; - Object component = input.size() > y * 2 + x ? input.get(y * 2 + x) : null;//recipe.getInput()[y * 2 + x]; - if (component != null) { - if (component instanceof ItemStack) { - ItemStack input = (ItemStack) component; - if (input.getItemDamage() == OreDictionary.WILDCARD_VALUE) - input.setItemDamage(0); - - GuiHelper.drawItemStack((ItemStack) component, stackX, stackY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// tooltips = GuiHelper.getTooltip((ItemStack) component); - guiBase.renderToolTip((ItemStack) component, mouseX, mouseY); - } - } else if (component instanceof Integer) { - List list = OrbRegistry.getOrbsDownToTier((Integer) component); - if (!list.isEmpty()) { - ItemStack stack = list.get(getRandomizedCycle(x + (y * 2), list.size())); - GuiHelper.drawItemStack(stack, stackX, stackY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// tooltips = GuiHelper.getTooltip(stack); - guiBase.renderToolTip(stack, mouseX, mouseY); - } - } - } else { - List list = (List) component; - if (!list.isEmpty()) { - ItemStack stack = list.get(getRandomizedCycle(x + (y * 2), list.size())); - GuiHelper.drawItemStack(stack, stackX, stackY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) { -// tooltips = GuiHelper.getTooltip(stack); - guiBase.renderToolTip(stack, mouseX, mouseY); - } - } - } - } - } - } - -// GuiHelper.drawItemStack(input.get(0), inputX, inputY); -// if (GuiHelper.isMouseBetween(mouseX, mouseY, inputX, inputY, 15, 15)) -// { -// guiBase.renderToolTip(input.get(0), mouseX, mouseY); -// } - - if (output == null) { - output = new ItemStack(Blocks.BARRIER); - } - int outputX = (5 * 20) + (guiLeft + guiBase.xSize / 7) + 1; - int outputY = (20) + (guiTop + guiBase.xSize / 5) + 10; // 1 * 20 - GuiHelper.drawItemStack(output, outputX, outputY); - if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) { - guiBase.renderToolTip(output, outputX, outputY); - } - - if (output.getItem() == Item.getItemFromBlock(Blocks.BARRIER)) { - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("text.furnace.error"), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0xED073D); - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("bm.string.tier") + ": " + String.valueOf(tier), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 15, 0); -// guiBase.drawCenteredString(fontRenderer, "LP: " + String.valueOf(bloodRequired), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 + 30, 0); - } - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.minimumWill", String.valueOf(minimumWill)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6 - 15, 0); - guiBase.drawCenteredString(fontRenderer, TextHelper.localize("guide.bloodmagic.page.drainedWill", String.valueOf(drainedWill)), guiLeft + guiBase.xSize / 2, guiTop + 4 * guiBase.ySize / 6, 0); - } - - protected int getRandomizedCycle(int index, int max) { - rand.setSeed(index); - return (index + rand.nextInt(max) + cycleIdx) % max; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java deleted file mode 100644 index 7f82a21a..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicJEIPlugin.java +++ /dev/null @@ -1,121 +0,0 @@ -package WayofTime.bloodmagic.compat.jei; - -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyArray; -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyTable; -import WayofTime.bloodmagic.api.impl.recipe.RecipeBloodAltar; -import WayofTime.bloodmagic.api.impl.recipe.RecipeTartaricForge; -import WayofTime.bloodmagic.compat.jei.alchemyTable.AlchemyTableRecipeJEI; -import WayofTime.bloodmagic.core.registry.AlchemyTableRecipeRegistry; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTableRecipe; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.livingArmour.LivingArmourHandler; -import WayofTime.bloodmagic.util.helper.ItemHelper.LivingUpgrades; -import WayofTime.bloodmagic.client.gui.GuiSoulForge; -import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingCategory; -import WayofTime.bloodmagic.compat.jei.alchemyArray.AlchemyArrayCraftingRecipeJEI; -import WayofTime.bloodmagic.compat.jei.alchemyTable.AlchemyTableRecipeCategory; -import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeCategory; -import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeJEI; -import WayofTime.bloodmagic.compat.jei.armourDowngrade.ArmourDowngradeRecipeCategory; -import WayofTime.bloodmagic.compat.jei.armourDowngrade.ArmourDowngradeRecipeHandler; -import WayofTime.bloodmagic.compat.jei.armourDowngrade.ArmourDowngradeRecipeMaker; -import WayofTime.bloodmagic.compat.jei.binding.BindingRecipeCategory; -import WayofTime.bloodmagic.compat.jei.binding.BindingRecipeHandler; -import WayofTime.bloodmagic.compat.jei.binding.BindingRecipeMaker; -import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeCategory; -import WayofTime.bloodmagic.compat.jei.forge.TartaricForgeRecipeJEI; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import mezz.jei.api.*; -import mezz.jei.api.recipe.IRecipeCategoryRegistration; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; -import java.util.Map; - -@JEIPlugin -public class BloodMagicJEIPlugin implements IModPlugin { - public static IJeiHelpers jeiHelper; - - @Override - public void register(@Nonnull IModRegistry registry) { - jeiHelper = registry.getJeiHelpers(); - - registry.addRecipeHandlers( - new BindingRecipeHandler(), - new ArmourDowngradeRecipeHandler() - ); - - registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAltarRecipes(), Constants.Compat.JEI_CATEGORY_ALTAR); - registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForgeRecipes(), Constants.Compat.JEI_CATEGORY_SOULFORGE); - registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyArrayRecipes(), Constants.Compat.JEI_CATEGORY_ALCHEMYARRAY); - registry.addRecipes(BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyRecipes(), Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); - registry.addRecipes(AlchemyTableRecipeRegistry.getRecipeList(), Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); - - registry.handleRecipes(RecipeBloodAltar.class, AltarRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALTAR); - registry.handleRecipes(RecipeTartaricForge.class, TartaricForgeRecipeJEI::new, Constants.Compat.JEI_CATEGORY_SOULFORGE); - registry.handleRecipes(RecipeAlchemyArray.class, AlchemyArrayCraftingRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALCHEMYARRAY); - registry.handleRecipes(RecipeAlchemyTable.class, AlchemyTableRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); - registry.handleRecipes(AlchemyTableRecipe.class, AlchemyTableRecipeJEI::new, Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); - - registry.addRecipes(BindingRecipeMaker.getRecipes()); - registry.addRecipes(ArmourDowngradeRecipeMaker.getRecipes()); - - registry.addIngredientInfo(new ItemStack(RegistrarBloodMagicItems.ALTAR_MAKER), ItemStack.class, "jei.bloodmagic.desc.altarBuilder"); - registry.addIngredientInfo(new ItemStack(RegistrarBloodMagicItems.MONSTER_SOUL), ItemStack.class, "jei.bloodmagic.desc.demonicWill"); - - for (Map.Entry entry : LivingArmourHandler.upgradeMaxLevelMap.entrySet()) { - String key = entry.getKey(); - int maxLevel = entry.getValue(); - for (int i = 0; i < maxLevel - 1; i++) { - ItemStack stack = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); - LivingUpgrades.setKey(stack, key); - LivingUpgrades.setLevel(stack, i); - jeiHelper.getIngredientBlacklist().addIngredientToBlacklist(stack); - } - } - - registry.addRecipeClickArea(GuiSoulForge.class, 115, 15, 16, 88, Constants.Compat.JEI_CATEGORY_SOULFORGE); - - registry.addRecipeCatalyst(new ItemStack(RegistrarBloodMagicBlocks.ALTAR), Constants.Compat.JEI_CATEGORY_ALTAR); - registry.addRecipeCatalyst(new ItemStack(RegistrarBloodMagicBlocks.SOUL_FORGE), Constants.Compat.JEI_CATEGORY_SOULFORGE); - registry.addRecipeCatalyst(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES), Constants.Compat.JEI_CATEGORY_ALCHEMYARRAY); - registry.addRecipeCatalyst(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES), Constants.Compat.JEI_CATEGORY_BINDING); - registry.addRecipeCatalyst(new ItemStack(RegistrarBloodMagicBlocks.ALCHEMY_TABLE), Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); - registry.addRecipeCatalyst(new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER), Constants.Compat.JEI_CATEGORY_ARMOURDOWNGRADE); - } - - @Override - public void registerItemSubtypes(ISubtypeRegistry subtypeRegistry) { - subtypeRegistry.useNbtForSubtypes(RegistrarBloodMagicItems.UPGRADE_TOME); - subtypeRegistry.useNbtForSubtypes(RegistrarBloodMagicItems.POTION_FLASK); - subtypeRegistry.registerSubtypeInterpreter(RegistrarBloodMagicItems.BLOOD_ORB, stack -> { - if (!(stack.getItem() instanceof IBloodOrb)) - return ISubtypeRegistry.ISubtypeInterpreter.NONE; - - BloodOrb orb = ((IBloodOrb) stack.getItem()).getOrb(stack); - if (orb == null) - return ISubtypeRegistry.ISubtypeInterpreter.NONE; - - return orb.getRegistryName().toString(); - }); - } - - @Override - public void registerCategories(IRecipeCategoryRegistration registry) { - if (jeiHelper == null) - jeiHelper = registry.getJeiHelpers(); - - registry.addRecipeCategories( - new AltarRecipeCategory(), - new BindingRecipeCategory(), - new AlchemyArrayCraftingCategory(), - new TartaricForgeRecipeCategory(), - new AlchemyTableRecipeCategory(), - new ArmourDowngradeRecipeCategory() - ); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java deleted file mode 100644 index b6284e66..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingCategory.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.alchemyArray; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mezz.jei.api.gui.IDrawable; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeCategory; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class AlchemyArrayCraftingCategory implements IRecipeCategory { - private static final int INPUT_SLOT = 0; - private static final int CATALYST_SLOT = 1; - private static final int OUTPUT_SLOT = 2; - - @Nonnull - private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); - @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.alchemyArrayCrafting"); - - @Nonnull - @Override - public String getUid() { - return Constants.Compat.JEI_CATEGORY_ALCHEMYARRAY; - } - - @Nonnull - @Override - public String getTitle() { - return localizedName; - } - - @Nonnull - @Override - public IDrawable getBackground() { - return background; - } - - @Override - public void drawExtras(Minecraft minecraft) { - - } - - @Nullable - @Override - public IDrawable getIcon() { - return null; - } - - @Override - public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { - recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); - recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 29, 3); - recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 73, 5); - - if (recipeWrapper instanceof AlchemyArrayCraftingRecipeJEI) { - recipeLayout.getItemStacks().set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); - recipeLayout.getItemStacks().set(CATALYST_SLOT, ingredients.getInputs(ItemStack.class).get(1)); - recipeLayout.getItemStacks().set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); - } - } - - @Override - public String getModName() { - return BloodMagic.NAME; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeJEI.java deleted file mode 100644 index ce5ec8a6..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyArray/AlchemyArrayCraftingRecipeJEI.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.alchemyArray; - -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyArray; -import com.google.common.collect.Lists; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.List; - -public class AlchemyArrayCraftingRecipeJEI implements IRecipeWrapper { - @Nonnull - private final List inputs; - @Nullable - private final List catalyst; - @Nonnull - private final ItemStack output; - - public AlchemyArrayCraftingRecipeJEI(RecipeAlchemyArray array) { - this.inputs = NonNullList.from(ItemStack.EMPTY, array.getInput().getMatchingStacks()); - this.catalyst = NonNullList.from(ItemStack.EMPTY, array.getCatalyst().getMatchingStacks()); - this.output = array.getOutput(); - } - - @Override - public void getIngredients(IIngredients ingredients) { - ingredients.setInputLists(ItemStack.class, Lists.newArrayList(inputs, catalyst)); - ingredients.setOutput(ItemStack.class, output); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java deleted file mode 100644 index c15e1db3..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeCategory.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.alchemyTable; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.core.registry.OrbRegistry; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mezz.jei.api.gui.ICraftingGridHelper; -import mezz.jei.api.gui.IDrawable; -import mezz.jei.api.gui.IGuiItemStackGroup; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeCategory; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import javax.annotation.Nonnull; - -public class AlchemyTableRecipeCategory implements IRecipeCategory { - - private static final int OUTPUT_SLOT = 0; - private static final int ORB_SLOT = 1; - private static final int INPUT_SLOT = 2; - - @Nonnull - private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); - @Nonnull - private final ICraftingGridHelper craftingGridHelper; - - public AlchemyTableRecipeCategory() { - craftingGridHelper = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); - } - - @Nonnull - @Override - public String getUid() { - return Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE; - } - - @Nonnull - @Override - public String getTitle() { - return TextHelper.localize("jei.bloodmagic.recipe.alchemyTable"); - } - - @Nonnull - @Override - public IDrawable getBackground() { - return background; - } - - @Override - public void setRecipe(IRecipeLayout recipeLayout, AlchemyTableRecipeJEI recipeWrapper, IIngredients ingredients) { - IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); - - guiItemStacks.init(OUTPUT_SLOT, false, 91, 13); - guiItemStacks.init(ORB_SLOT, true, 60, 0); - - for (int y = 0; y < 3; ++y) { - for (int x = 0; x < 3; ++x) { - int index = INPUT_SLOT + x + (y * 3); - guiItemStacks.init(index, true, x * 18, y * 18 - 18); - } - } - - guiItemStacks.set(ORB_SLOT, OrbRegistry.getOrbsDownToTier(recipeWrapper.getTier())); - guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); - craftingGridHelper.setInputs(guiItemStacks, ingredients.getInputs(ItemStack.class), 3, 2); - } - - @Override - public String getModName() { - return BloodMagic.NAME; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java deleted file mode 100644 index ba639936..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/alchemyTable/AlchemyTableRecipeJEI.java +++ /dev/null @@ -1,60 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.alchemyTable; - -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyTable; -import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTableRecipe; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.Lists; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.item.ItemStack; - -import java.util.ArrayList; -import java.util.List; - -public class AlchemyTableRecipeJEI implements IRecipeWrapper { - - private final List input; - private final ItemStack output; - private final int tier; - private final int syphon; - private final int ticks; - - public AlchemyTableRecipeJEI(AlchemyTableRecipe recipe) { - this.input = recipe.getInput(); - this.output = recipe.getRecipeOutput(Lists.newArrayList()); - this.tier = recipe.getTierRequired(); - this.syphon = recipe.getLpDrained(); - this.ticks = recipe.getTicksRequired(); - } - - public AlchemyTableRecipeJEI(RecipeAlchemyTable recipe) { - this.input = recipe.getInput(); - this.output = recipe.getOutput(); - this.tier = recipe.getMinimumTier(); - this.syphon = recipe.getSyphon(); - this.ticks = recipe.getTicks(); - } - - @Override - public void getIngredients(IIngredients ingredients) { - List> expanded = BloodMagicJEIPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(input); - ingredients.setInputLists(ItemStack.class, expanded); - ingredients.setOutput(ItemStack.class, output); - } - - @Override - public List getTooltipStrings(int mouseX, int mouseY) { - ArrayList ret = new ArrayList<>(); - if (mouseX >= 58 && mouseX <= 78 && mouseY >= 21 && mouseY <= 34) { - ret.add(TextHelper.localize("tooltip.bloodmagic.tier", tier)); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.lpDrained", syphon)); - ret.add(TextHelper.localize("jei.bloodmagic.recipe.ticksRequired", ticks)); - } - return ret; - } - - public int getTier() { - return tier; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java deleted file mode 100644 index 281e9b42..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.altar; - -import WayofTime.bloodmagic.api.impl.recipe.RecipeBloodAltar; -import WayofTime.bloodmagic.util.helper.NumeralHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.Lists; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; - -import javax.annotation.Nonnull; -import java.awt.Color; -import java.util.List; - -public class AltarRecipeJEI implements IRecipeWrapper { - @Nonnull - private final List input; - @Nonnull - private final ItemStack output; - - private final String[] infoString; - private final int consumptionRate; - private final int drainRate; - - public AltarRecipeJEI(RecipeBloodAltar recipe) { - this.input = NonNullList.from(ItemStack.EMPTY, recipe.getInput().getMatchingStacks()); - this.output = recipe.getOutput(); - - this.infoString = new String[]{TextHelper.localize("jei.bloodmagic.recipe.requiredTier", NumeralHelper.toRoman(recipe.getMinimumTier().toInt())), TextHelper.localize("jei.bloodmagic.recipe.requiredLP", recipe.getSyphon())}; - this.consumptionRate = recipe.getConsumeRate(); - this.drainRate = recipe.getDrainRate(); - } - - @Override - public void getIngredients(@Nonnull IIngredients ingredients) { - ingredients.setInputs(ItemStack.class, input); - ingredients.setOutput(ItemStack.class, output); - } - - @Nonnull - @Override - public List getTooltipStrings(int mouseX, int mouseY) { - List tooltip = Lists.newArrayList(); - if (mouseX >= 13 && mouseX <= 64 && mouseY >= 27 && mouseY <= 58) { - tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.consumptionRate", consumptionRate)); - tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.drainRate", drainRate)); - } - return tooltip; - } - - @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { - minecraft.fontRenderer.drawString(infoString[0], 90 - minecraft.fontRenderer.getStringWidth(infoString[0]) / 2, 0, Color.gray.getRGB()); - minecraft.fontRenderer.drawString(infoString[1], 90 - minecraft.fontRenderer.getStringWidth(infoString[1]) / 2, 10, Color.gray.getRGB()); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java deleted file mode 100644 index b14c69fd..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeCategory.java +++ /dev/null @@ -1,93 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.armourDowngrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mezz.jei.api.gui.ICraftingGridHelper; -import mezz.jei.api.gui.IDrawable; -import mezz.jei.api.gui.IGuiItemStackGroup; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeCategory; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class ArmourDowngradeRecipeCategory implements IRecipeCategory { - private static final int OUTPUT_SLOT = 0; - private static final int KEY_SLOT = 1; - private static final int INPUT_SLOT = 2; - - @Nonnull - private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/alchemyTable.png"), 0, 0, 118, 40); - @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.armourDowngrade"); - @Nonnull - private final ICraftingGridHelper craftingGridHelper; - - public ArmourDowngradeRecipeCategory() { - craftingGridHelper = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); - } - - @Nonnull - @Override - public String getUid() { - return Constants.Compat.JEI_CATEGORY_ARMOURDOWNGRADE; - } - - @Nonnull - @Override - public String getTitle() { - return localizedName; - } - - @Nonnull - @Override - public IDrawable getBackground() { - return background; - } - - @Override - public void drawExtras(Minecraft minecraft) { - - } - - @Nullable - @Override - public IDrawable getIcon() { - return null; - } - - @Override - @SuppressWarnings("unchecked") - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper, IIngredients ingredients) { - IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); - - guiItemStacks.init(OUTPUT_SLOT, false, 91, 13); - guiItemStacks.init(KEY_SLOT, true, 60, 0); - - for (int y = 0; y < 3; ++y) { - for (int x = 0; x < 3; ++x) { - int index = INPUT_SLOT + x + (y * 3); - guiItemStacks.init(index, true, x * 18, y * 18 - 18); - } - } - - if (recipeWrapper instanceof ArmourDowngradeRecipeJEI) { - guiItemStacks.set(KEY_SLOT, ingredients.getInputs(ItemStack.class).get(ingredients.getInputs(ItemStack.class).size() - 1)); - ingredients.getInputs(ItemStack.class).remove(ingredients.getInputs(ItemStack.class).size() - 1); - guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); - craftingGridHelper.setInputs(guiItemStacks, ingredients.getInputs(ItemStack.class), 3, 2); - } - } - - @Override - public String getModName() { - return BloodMagic.NAME; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeHandler.java deleted file mode 100644 index b5c2fd73..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.armourDowngrade; - -import WayofTime.bloodmagic.util.Constants; -import mezz.jei.api.recipe.IRecipeHandler; -import mezz.jei.api.recipe.IRecipeWrapper; - -import javax.annotation.Nonnull; - -public class ArmourDowngradeRecipeHandler implements IRecipeHandler { - @Nonnull - @Override - public Class getRecipeClass() { - return ArmourDowngradeRecipeJEI.class; - } - - @Nonnull - @Override - public String getRecipeCategoryUid(ArmourDowngradeRecipeJEI recipe) { - return Constants.Compat.JEI_CATEGORY_ARMOURDOWNGRADE; - } - - @Nonnull - @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull ArmourDowngradeRecipeJEI recipe) { - return recipe; - } - - @Override - public boolean isRecipeValid(@Nonnull ArmourDowngradeRecipeJEI recipe) { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java deleted file mode 100644 index ba22f8c5..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeJEI.java +++ /dev/null @@ -1,34 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.armourDowngrade; - -import WayofTime.bloodmagic.recipe.LivingArmourDowngradeRecipe; -import WayofTime.bloodmagic.util.helper.ItemHelper.LivingUpgrades; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import com.google.common.collect.Lists; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; -import net.minecraft.item.ItemStack; - -import java.util.List; - -public class ArmourDowngradeRecipeJEI extends BlankRecipeWrapper { - private LivingArmourDowngradeRecipe recipe; - - public ArmourDowngradeRecipeJEI(LivingArmourDowngradeRecipe recipe) { - this.recipe = recipe; - } - - @Override - public void getIngredients(IIngredients ingredients) { - List> expanded = BloodMagicJEIPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); - expanded.add(Lists.newArrayList(recipe.getKey())); - ingredients.setInputLists(ItemStack.class, expanded); - ItemStack upgradeStack = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); - LivingUpgrades.setUpgrade(upgradeStack, recipe.getRecipeOutput()); - ingredients.setOutput(ItemStack.class, upgradeStack); - } - - public LivingArmourDowngradeRecipe getRecipe() { - return recipe; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeMaker.java b/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeMaker.java deleted file mode 100644 index 90ca286d..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/armourDowngrade/ArmourDowngradeRecipeMaker.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.armourDowngrade; - -import WayofTime.bloodmagic.recipe.LivingArmourDowngradeRecipe; -import WayofTime.bloodmagic.core.registry.LivingArmourDowngradeRecipeRegistry; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; - -public class ArmourDowngradeRecipeMaker { - @Nonnull - public static List getRecipes() { - List recipeList = LivingArmourDowngradeRecipeRegistry.getRecipeList(); - ArrayList recipes = new ArrayList<>(); - - for (LivingArmourDowngradeRecipe recipe : recipeList) - recipes.add(new ArmourDowngradeRecipeJEI(recipe)); - - return recipes; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java deleted file mode 100644 index a2493fbd..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeCategory.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.binding; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mezz.jei.api.gui.IDrawable; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeCategory; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class BindingRecipeCategory implements IRecipeCategory { - private static final int INPUT_SLOT = 0; - private static final int CATALYST_SLOT = 1; - private static final int OUTPUT_SLOT = 2; - - @Nonnull - private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/binding.png"), 0, 0, 100, 30); - @Nonnull - private final String localizedName = TextHelper.localize("jei.bloodmagic.recipe.binding"); - - @Nonnull - @Override - public String getUid() { - return Constants.Compat.JEI_CATEGORY_BINDING; - } - - @Nonnull - @Override - public String getTitle() { - return localizedName; - } - - @Nonnull - @Override - public IDrawable getBackground() { - return background; - } - - @Override - public void drawExtras(Minecraft minecraft) { - - } - - @Nullable - @Override - public IDrawable getIcon() { - return null; - } - - @Override - public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper, IIngredients ingredients) { - recipeLayout.getItemStacks().init(INPUT_SLOT, true, 0, 5); - recipeLayout.getItemStacks().init(CATALYST_SLOT, true, 29, 3); - recipeLayout.getItemStacks().init(OUTPUT_SLOT, false, 73, 5); - - if (recipeWrapper instanceof BindingRecipeJEI) { - recipeLayout.getItemStacks().set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); - recipeLayout.getItemStacks().set(CATALYST_SLOT, ingredients.getInputs(ItemStack.class).get(1)); - recipeLayout.getItemStacks().set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); - } - } - - @Override - public String getModName() { - return BloodMagic.NAME; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeHandler.java deleted file mode 100644 index 3d429211..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.binding; - -import WayofTime.bloodmagic.util.Constants; -import mezz.jei.api.recipe.IRecipeHandler; -import mezz.jei.api.recipe.IRecipeWrapper; - -import javax.annotation.Nonnull; - -public class BindingRecipeHandler implements IRecipeHandler { - @Nonnull - @Override - public Class getRecipeClass() { - return BindingRecipeJEI.class; - } - - @Override - public String getRecipeCategoryUid(@Nonnull BindingRecipeJEI recipe) { - return Constants.Compat.JEI_CATEGORY_BINDING; - } - - @Nonnull - @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull BindingRecipeJEI recipe) { - return recipe; - } - - @Override - public boolean isRecipeValid(@Nonnull BindingRecipeJEI recipe) { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeJEI.java deleted file mode 100644 index 8a4adb82..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeJEI.java +++ /dev/null @@ -1,34 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.binding; - -import com.google.common.collect.Lists; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; -import java.util.List; - -public class BindingRecipeJEI extends BlankRecipeWrapper { - @Nonnull - private final List inputs; - - @Nonnull - private final ItemStack catalyst; - - @Nonnull - private final ItemStack output; - - @SuppressWarnings("unchecked") - public BindingRecipeJEI(@Nonnull List input, @Nonnull ItemStack catalyst, @Nonnull ItemStack output) { - this.inputs = input; - this.catalyst = catalyst; - this.output = output; - } - - @Override - public void getIngredients(IIngredients ingredients) { - - ingredients.setInputLists(ItemStack.class, Lists.newArrayList(inputs, Lists.newArrayList(catalyst))); - ingredients.setOutput(ItemStack.class, output); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeMaker.java b/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeMaker.java deleted file mode 100644 index d921befc..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/binding/BindingRecipeMaker.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.binding; - -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding; -import WayofTime.bloodmagic.util.ItemStackWrapper; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffect; -import WayofTime.bloodmagic.core.registry.AlchemyArrayRecipeRegistry; -import com.google.common.collect.BiMap; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class BindingRecipeMaker { - @Nonnull - public static List getRecipes() { - Map, AlchemyArrayRecipeRegistry.AlchemyArrayRecipe> alchemyArrayRecipeMap = AlchemyArrayRecipeRegistry.getRecipes(); - - ArrayList recipes = new ArrayList<>(); - - for (Map.Entry, AlchemyArrayRecipeRegistry.AlchemyArrayRecipe> itemStackAlchemyArrayRecipeEntry : alchemyArrayRecipeMap.entrySet()) { - List input = itemStackAlchemyArrayRecipeEntry.getValue().getInput(); - BiMap catalystMap = itemStackAlchemyArrayRecipeEntry.getValue().catalystMap; - - for (Map.Entry entry : catalystMap.entrySet()) { - ItemStack catalyst = entry.getKey().toStack(); - if (AlchemyArrayRecipeRegistry.getAlchemyArrayEffect(input, catalyst) instanceof AlchemyArrayEffectBinding) { - ItemStack output = ((AlchemyArrayEffectBinding) itemStackAlchemyArrayRecipeEntry.getValue().getAlchemyArrayEffectForCatalyst(catalyst)).outputStack; - - BindingRecipeJEI recipe = new BindingRecipeJEI(input, catalyst, output); - recipes.add(recipe); - } - } - } - - return recipes; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java deleted file mode 100644 index 96b7db2f..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeCategory.java +++ /dev/null @@ -1,92 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.forge; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mezz.jei.api.gui.ICraftingGridHelper; -import mezz.jei.api.gui.IDrawable; -import mezz.jei.api.gui.IGuiItemStackGroup; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeCategory; -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.List; - -public class TartaricForgeRecipeCategory implements IRecipeCategory { - private static final int OUTPUT_SLOT = 0; - private static final int GEM_SLOT = 1; - private static final int INPUT_SLOT = 2; - - @Nonnull - private final IDrawable background = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/soulForge.png"), 0, 0, 100, 40); - @Nonnull - private final ICraftingGridHelper craftingGridHelper; - - public TartaricForgeRecipeCategory() { - craftingGridHelper = BloodMagicJEIPlugin.jeiHelper.getGuiHelper().createCraftingGridHelper(INPUT_SLOT, OUTPUT_SLOT); - } - - @Nonnull - @Override - public String getUid() { - return Constants.Compat.JEI_CATEGORY_SOULFORGE; - } - - @Nonnull - @Override - public String getTitle() { - return TextHelper.localize("jei.bloodmagic.recipe.soulForge"); - } - - @Nonnull - @Override - public IDrawable getBackground() { - return background; - } - - @Override - public void drawExtras(Minecraft minecraft) { - - } - - @Nullable - @Override - public IDrawable getIcon() { - return null; - } - - @Override - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull TartaricForgeRecipeJEI recipeWrapper, @Nonnull IIngredients ingredients) { - IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); - - guiItemStacks.init(OUTPUT_SLOT, false, 73, 13); - guiItemStacks.init(GEM_SLOT, true, 42, 0); - - for (int y = 0; y < 3; ++y) { - for (int x = 0; x < 3; ++x) { - int index = INPUT_SLOT + x + (y * 3); - guiItemStacks.init(index, true, x * 18, y * 18); - } - } - - List> inputs = ingredients.getInputs(ItemStack.class); - - guiItemStacks.set(GEM_SLOT, ingredients.getInputs(ItemStack.class).get(ingredients.getInputs(ItemStack.class).size() - 1)); - inputs.remove(ingredients.getInputs(ItemStack.class).size() - 1); - guiItemStacks.set(OUTPUT_SLOT, ingredients.getOutputs(ItemStack.class).get(0)); - guiItemStacks.set(INPUT_SLOT, ingredients.getInputs(ItemStack.class).get(0)); - craftingGridHelper.setInputs(guiItemStacks, inputs); - } - - @Nonnull - @Override - public String getModName() { - return BloodMagic.NAME; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java deleted file mode 100644 index 16870613..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/jei/forge/TartaricForgeRecipeJEI.java +++ /dev/null @@ -1,66 +0,0 @@ -package WayofTime.bloodmagic.compat.jei.forge; - -import WayofTime.bloodmagic.api.impl.recipe.RecipeTartaricForge; -import WayofTime.bloodmagic.compat.jei.BloodMagicJEIPlugin; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.Lists; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; -import java.util.List; - -public class TartaricForgeRecipeJEI implements IRecipeWrapper { - private RecipeTartaricForge recipe; - private List validGems = Lists.newArrayList(); - - public TartaricForgeRecipeJEI(RecipeTartaricForge recipe) { - this.recipe = recipe; - - for (DefaultWill will : DefaultWill.values()) - if (will.minSouls >= recipe.getMinimumSouls()) - this.validGems.add(will.willStack); - } - - @Override - public void getIngredients(@Nonnull IIngredients ingredients) { - List> expandedInputs = BloodMagicJEIPlugin.jeiHelper.getStackHelper().expandRecipeItemStackInputs(recipe.getInput()); - expandedInputs.add(validGems); - ingredients.setInputLists(ItemStack.class, expandedInputs); - ingredients.setOutput(ItemStack.class, recipe.getOutput()); - } - - @Nonnull - @Override - public List getTooltipStrings(int mouseX, int mouseY) { - List tooltip = Lists.newArrayList(); - if (mouseX >= 40 && mouseX <= 60 && mouseY >= 21 && mouseY <= 34) { - tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.minimumSouls", recipe.getMinimumSouls())); - tooltip.add(TextHelper.localize("jei.bloodmagic.recipe.soulsDrained", recipe.getSoulDrain())); - } - return tooltip; - } - - public RecipeTartaricForge getRecipe() { - return recipe; - } - - public enum DefaultWill { - SOUL(new ItemStack(RegistrarBloodMagicItems.MONSTER_SOUL, 1, 0), 64), - PETTY(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 0), 64), - LESSER(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), 256), - COMMON(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 2), 1024), - GREATER(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 3), 4096), - GRAND(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 4), 16384); - - public final ItemStack willStack; - public final double minSouls; - - DefaultWill(ItemStack willStack, double minSouls) { - this.willStack = willStack; - this.minSouls = minSouls; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java b/src/main/java/WayofTime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java deleted file mode 100644 index 46e16f45..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/BloodMagicHwylaPlugin.java +++ /dev/null @@ -1,42 +0,0 @@ -package WayofTime.bloodmagic.compat.waila; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.compat.waila.provider.*; -import WayofTime.bloodmagic.tile.*; -import mcp.mobius.waila.api.IWailaPlugin; -import mcp.mobius.waila.api.IWailaRegistrar; -import mcp.mobius.waila.api.WailaPlugin; - -@WailaPlugin -public class BloodMagicHwylaPlugin implements IWailaPlugin { - - @Override - public void register(IWailaRegistrar registrar) { - registrar.registerBodyProvider(DataProviderBloodAltar.INSTANCE, TileAltar.class); - registrar.registerNBTProvider(DataProviderBloodAltar.INSTANCE, TileAltar.class); - registrar.addConfig(BloodMagic.MODID, Constants.Compat.WAILA_CONFIG_ALTAR, true); - - registrar.registerBodyProvider(DataProviderTeleposer.INSTANCE, TileTeleposer.class); - registrar.registerNBTProvider(DataProviderTeleposer.INSTANCE, TileTeleposer.class); - registrar.addConfig(BloodMagic.MODID, Constants.Compat.WAILA_CONFIG_TELEPOSER, true); - - registrar.registerBodyProvider(DataProviderRitualController.INSTANCE, TileMasterRitualStone.class); - registrar.registerNBTProvider(DataProviderRitualController.INSTANCE, TileMasterRitualStone.class); - registrar.registerBodyProvider(DataProviderRitualController.INSTANCE, TileImperfectRitualStone.class); - registrar.registerNBTProvider(DataProviderRitualController.INSTANCE, TileImperfectRitualStone.class); - registrar.addConfig(BloodMagic.MODID, Constants.Compat.WAILA_CONFIG_RITUAL, true); - - registrar.registerBodyProvider(DataProviderBloodTank.INSTANCE, TileBloodTank.class); - registrar.registerNBTProvider(DataProviderBloodTank.INSTANCE, TileBloodTank.class); - registrar.addConfig(BloodMagic.MODID, Constants.Compat.WAILA_CONFIG_BLOOD_TANK, true); - - registrar.registerStackProvider(DataProviderAlchemyArray.INSTANCE, TileAlchemyArray.class); - registrar.registerBodyProvider(DataProviderAlchemyArray.INSTANCE, TileAlchemyArray.class); - registrar.registerNBTProvider(DataProviderAlchemyArray.INSTANCE, TileAlchemyArray.class); - registrar.addConfig(BloodMagic.MODID, Constants.Compat.WAILA_CONFIG_ARRAY, true); - - registrar.registerStackProvider(DataProviderMimic.INSTANCE, TileMimic.class); - registrar.registerNBTProvider(DataProviderMimic.INSTANCE, TileMimic.class); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderAlchemyArray.java deleted file mode 100644 index bc8ade1c..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderAlchemyArray.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.compat.waila.provider; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; -import mcp.mobius.waila.api.IWailaDataProvider; -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.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; -import java.util.List; - -public class DataProviderAlchemyArray implements IWailaDataProvider { - - public static final IWailaDataProvider INSTANCE = new DataProviderAlchemyArray(); - - @Nonnull - @Override - public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) { - return new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES).setStackDisplayName(TextHelper.getFormattedText(RegistrarBloodMagicBlocks.ALCHEMY_ARRAY.getLocalizedName())); - } - - @Nonnull - @Override - public List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (!config.getConfig(Constants.Compat.WAILA_CONFIG_ARRAY)) - return currenttip; - - if (accessor.getNBTData().hasKey("reagent")) - currenttip.add(TextHelper.localize("waila.bloodmagic.array.reagent", accessor.getNBTData().getString("reagent"))); - if (accessor.getNBTData().hasKey("catalyst")) - currenttip.add(TextHelper.localize("waila.bloodmagic.array.catalyst", accessor.getNBTData().getString("catalyst"))); - - return currenttip; - } - - @Nonnull - @Override - public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { - TileAlchemyArray alchemyArray = (TileAlchemyArray) te; - if (!alchemyArray.getStackInSlot(0).isEmpty()) - tag.setString("reagent", alchemyArray.getStackInSlot(0).getDisplayName()); - if (!alchemyArray.getStackInSlot(1).isEmpty()) - tag.setString("catalyst", alchemyArray.getStackInSlot(1).getDisplayName()); - return tag; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java deleted file mode 100644 index 1614bee5..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java +++ /dev/null @@ -1,122 +0,0 @@ -package WayofTime.bloodmagic.compat.waila.provider; - -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.sigil.ItemSigilDivination; -import WayofTime.bloodmagic.tile.TileAltar; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; -import mcp.mobius.waila.api.IWailaDataProvider; -import net.minecraft.entity.player.EntityPlayer; -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.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; -import java.util.List; - -/** - * Integrated from WailaPlugins by tterrag1098. Originally implemented - * in ImLookingAtBlood by Pokefenn. - */ -public class DataProviderBloodAltar implements IWailaDataProvider { - - public static final IWailaDataProvider INSTANCE = new DataProviderBloodAltar(); - - @Nonnull - @Override - public List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (!config.getConfig(Constants.Compat.WAILA_CONFIG_ALTAR)) - return currenttip; - - if (accessor.getNBTData().hasKey("altar")) { - NBTTagCompound altarData = accessor.getNBTData().getCompoundTag("altar"); - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.seer.currentAltarTier", altarData.getInteger("tier"))); - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.seer.currentAltarCapacity", altarData.getInteger("capacity"))); - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.seer.currentEssence", altarData.getInteger("stored"))); - - if (altarData.hasKey("charge")) { - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent", altarData.getInteger("progress") + "%")); - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.seer.currentCharge", altarData.getInteger("charge"))); - } - } - - return currenttip; - } - - @Nonnull - @Override - public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { - TileAltar altar = (TileAltar) te; - - boolean hasSigil = false; - boolean hasSeer = false; - - switch (ConfigHandler.compat.wailaAltarDisplayMode) { - case ALWAYS: { - hasSigil = hasSeer = true; - break; - } - case SIGIL_HELD: { - hasSeer = holdingSeerSigil(player); - hasSigil = hasSeer || holdingDivinationSigil(player); - break; - } - case SIGIL_CONTAINED: { - hasSeer = hasStack(new ItemStack(RegistrarBloodMagicItems.SIGIL_SEER), player); - hasSigil = hasSeer || hasStack(new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION), player); - break; - } - } - - if (!hasSeer && !hasSigil) - return tag; - - NBTTagCompound altarData = new NBTTagCompound(); - altarData.setInteger("tier", altar.getTier().toInt()); - altarData.setInteger("capacity", altar.getCapacity()); - altarData.setInteger("stored", altar.getCurrentBlood()); - if (hasSeer) { - altarData.setInteger("progress", (int) (((double) altar.getProgress() / (double) altar.getLiquidRequired() * 100) / altar.getStackInSlot(0).getCount())); - altarData.setInteger("charge", altar.getTotalCharge()); - } - - tag.setTag("altar", altarData); - - return tag; - } - - public static boolean hasStack(ItemStack stack, EntityPlayer player) { - for (ItemStack inventoryStack : player.inventory.mainInventory) - if (inventoryStack != null && inventoryStack.isItemEqual(stack)) - return true; - - return false; - } - - private static boolean holdingSeerSigil(EntityPlayer player) { - if (player.getHeldItemMainhand().getItem() == RegistrarBloodMagicItems.SIGIL_SEER) - return true; - - if (player.getHeldItemOffhand().getItem() == RegistrarBloodMagicItems.SIGIL_SEER) - return true; - - return false; - } - - private static boolean holdingDivinationSigil(EntityPlayer player) { - if (player.getHeldItemMainhand().getItem() instanceof ItemSigilDivination) - return true; - - if (!player.getHeldItemOffhand().isEmpty() && player.getHeldItemOffhand().getItem() instanceof ItemSigilDivination) - return true; - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodTank.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodTank.java deleted file mode 100644 index b664531c..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodTank.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.bloodmagic.compat.waila.provider; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.tile.TileBloodTank; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; -import mcp.mobius.waila.api.IWailaDataProvider; -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.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; - -import javax.annotation.Nonnull; -import java.util.List; - -public class DataProviderBloodTank implements IWailaDataProvider { - - public static final IWailaDataProvider INSTANCE = new DataProviderBloodTank(); - - @Nonnull - @Override - public List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (!config.getConfig(Constants.Compat.WAILA_CONFIG_BLOOD_TANK) && !config.getConfig("capability.tankinfo")) - return currenttip; - - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.tier", accessor.getNBTData().getInteger("tier"))); - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.fluid.capacity", accessor.getNBTData().getInteger("capacity"))); - if (accessor.getNBTData().hasKey("fluid")) { - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(accessor.getNBTData().getCompoundTag("fluid")); - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.fluid.type", fluidStack.getLocalizedName())); - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.fluid.amount", fluidStack.amount, accessor.getNBTData().getInteger("capacity"))); - } - - return currenttip; - } - - @Nonnull - @Override - public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { - TileBloodTank tank = (TileBloodTank) te; - tag.setInteger("tier", tank.getBlockMetadata() + 1); - tag.setInteger("capacity", tank.capacity); - if (tank.getTank().getFluid() != null) - tag.setTag("fluid", tank.getTank().getFluid().writeToNBT(new NBTTagCompound())); - return tag; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderMimic.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderMimic.java deleted file mode 100644 index e4bf0264..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderMimic.java +++ /dev/null @@ -1,57 +0,0 @@ -package WayofTime.bloodmagic.compat.waila.provider; - -import WayofTime.bloodmagic.tile.TileMimic; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; -import mcp.mobius.waila.api.IWailaDataProvider; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -import javax.annotation.Nonnull; - -public class DataProviderMimic implements IWailaDataProvider { - - public static final IWailaDataProvider INSTANCE = new DataProviderMimic(); - - @Nonnull - @Override - public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (accessor.getNBTData().hasKey("mimiced")) { - NBTTagCompound mimiced = accessor.getNBTData().getCompoundTag("mimiced"); - Item item = ForgeRegistries.ITEMS.getValue(new ResourceLocation(mimiced.getString("id"))); - int meta = mimiced.getInteger("data"); - ItemStack ret = new ItemStack(item, 1, meta); - if (mimiced.hasKey("nbt")) - ret.setTagCompound(mimiced.getCompoundTag("nbt")); - - return ret; - } - - return ItemStack.EMPTY; - } - - @Nonnull - @Override - public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { - TileMimic mimic = (TileMimic) te; - ItemStack mimiced = mimic.getStackInSlot(0); - if (!mimiced.isEmpty()) { - NBTTagCompound item = new NBTTagCompound(); - item.setString("id", mimiced.getItem().getRegistryName().toString()); - item.setInteger("data", mimiced.getMetadata()); - NBTTagCompound shareTag = mimiced.getItem().getNBTShareTag(mimiced); - if (shareTag != null) - item.setTag("nbt", shareTag); - - tag.setTag("mimiced", item); - } - return tag; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderRitualController.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderRitualController.java deleted file mode 100644 index cadada2e..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderRitualController.java +++ /dev/null @@ -1,80 +0,0 @@ -package WayofTime.bloodmagic.compat.waila.provider; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.tile.TileMasterRitualStone; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; -import mcp.mobius.waila.api.IWailaDataProvider; -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.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; -import java.util.List; - -public class DataProviderRitualController implements IWailaDataProvider { - - public static final IWailaDataProvider INSTANCE = new DataProviderRitualController(); - - @Nonnull - @Override - public List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (!config.getConfig(Constants.Compat.WAILA_CONFIG_RITUAL)) - return currenttip; - - NBTTagCompound tag = accessor.getNBTData(); - if (tag.getBoolean("master")) { - if (tag.hasKey("ritual")) { - currenttip.add(TextHelper.localizeEffect(tag.getString("ritual"))); - if (tag.hasKey("owner")) - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", tag.getString("owner"))); - if (!tag.getBoolean("active")) - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.deactivated")); - if (!tag.getBoolean("enabled")) - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.config.disabled")); - } - } else { - if (tag.hasKey("ritual")) { - currenttip.add(TextHelper.localizeEffect(tag.getString("ritual"))); - if (!tag.getBoolean("enabled")) - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.config.disabled")); - } - } - - return currenttip; - } - - @Nonnull - @Override - public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { - - if (te instanceof TileMasterRitualStone) { - TileMasterRitualStone mrs = (TileMasterRitualStone) te; - tag.setBoolean("master", true); - if (mrs.getCurrentRitual() != null) { - tag.setString("ritual", mrs.getCurrentRitual().getUnlocalizedName()); - tag.setBoolean("active", mrs.isActive()); - if (mrs.getOwner() != null) - tag.setString("owner", PlayerHelper.getUsernameFromUUID(mrs.getOwner())); - tag.setBoolean("enabled", BloodMagic.RITUAL_MANAGER.enabled(BloodMagic.RITUAL_MANAGER.getId(mrs.getCurrentRitual()), false)); - } - } else { - tag.setBoolean("master", false); - - ImperfectRitual ritual = BloodMagic.RITUAL_MANAGER.getImperfectRitual(world.getBlockState(pos.up())); - if (ritual != null) { - tag.setString("ritual", ritual.getUnlocalizedName()); - tag.setBoolean("enabled", BloodMagic.RITUAL_MANAGER.enabled(BloodMagic.RITUAL_MANAGER.getId(ritual), false)); - } - } - - return tag; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderTeleposer.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderTeleposer.java deleted file mode 100644 index 8f21ea90..00000000 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderTeleposer.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.bloodmagic.compat.waila.provider; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.item.ItemTelepositionFocus; -import WayofTime.bloodmagic.tile.TileTeleposer; -import WayofTime.bloodmagic.util.helper.TextHelper; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; -import mcp.mobius.waila.api.IWailaDataProvider; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTUtil; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import org.apache.commons.lang3.text.WordUtils; - -import javax.annotation.Nonnull; -import java.util.List; - -public class DataProviderTeleposer implements IWailaDataProvider { - - public static final IWailaDataProvider INSTANCE = new DataProviderTeleposer(); - - @Nonnull - @Override - public List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (!config.getConfig(Constants.Compat.WAILA_CONFIG_TELEPOSER)) - return currenttip; - - if (accessor.getNBTData().hasKey("focus")) { - NBTTagCompound focusData = accessor.getNBTData().getCompoundTag("focus"); - BlockPos boundPos = NBTUtil.getPosFromTag(focusData.getCompoundTag("pos")); - int boundDim = focusData.getInteger("dim"); - String dimName = WordUtils.capitalizeFully(DimensionManager.getProviderType(boundDim).getName().replace("_", " ")); - - currenttip.add(TextHelper.localizeEffect("tooltip.bloodmagic.telepositionFocus.bound", dimName, boundPos.getX(), boundPos.getY(), boundPos.getZ())); - } - - return currenttip; - } - - @Override - public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { - TileTeleposer teleposer = (TileTeleposer) te; - ItemStack contained = teleposer.getStackInSlot(0); - if (!contained.isEmpty() && contained.hasTagCompound()) { - ItemTelepositionFocus focus = (ItemTelepositionFocus) contained.getItem(); - NBTTagCompound focusData = new NBTTagCompound(); - focusData.setTag("pos", NBTUtil.createPosTag(focus.getBlockPos(contained))); - focusData.setInteger("dim", contained.getTagCompound().getInteger(Constants.NBT.DIMENSION_ID)); - tag.setTag("focus", focusData); - } - return tag; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compress/AdvancedCompressionHandler.java b/src/main/java/WayofTime/bloodmagic/compress/AdvancedCompressionHandler.java deleted file mode 100644 index 2050f6b7..00000000 --- a/src/main/java/WayofTime/bloodmagic/compress/AdvancedCompressionHandler.java +++ /dev/null @@ -1,138 +0,0 @@ -package WayofTime.bloodmagic.compress; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class AdvancedCompressionHandler extends CompressionHandler { - @Override - public ItemStack compressInventory(ItemStack[] inv, World world) { - return test(inv, true, world); - } - - public ItemStack test(ItemStack[] inv, boolean doDrain, World world) { - for (ItemStack invStack : inv) { - if (invStack.isEmpty()) { - continue; - } - - for (int i = 2; i <= 3; i++) { - ItemStack stack = getRecipe(invStack, world, i); - if (!stack.isEmpty()) { - int threshold = CompressionRegistry.getItemThreshold(invStack); - - int needed = i * i; - int neededLeft = iterateThroughInventory(invStack, threshold + invStack.getMaxStackSize() - needed, inv, needed, false); - if (neededLeft <= 0) { - iterateThroughInventory(invStack, 0, inv, needed, true); - return stack; - } - } - } - } - - return ItemStack.EMPTY; - } - - public int iterateThroughInventory(ItemStack required, int kept, ItemStack[] inv, int needed, boolean doDrain) { - int i = -1; - - for (ItemStack invStack : inv) { - i++; - - if (invStack.isEmpty()) { - continue; - } - - if (invStack.isItemEqual(required) && (invStack.getTagCompound() == null ? required.getTagCompound() == null : invStack.getTagCompound().equals(required.getTagCompound()))) { - int stackSize = invStack.getCount(); - int used = 0; - if (kept > 0) { - int remainingFromStack = Math.max(stackSize - kept, 0); - used += stackSize - remainingFromStack; - } - - kept -= used; - - if (kept <= 0 && needed > 0) { - int remainingFromStack = Math.max(stackSize - used - needed, 0); - if (doDrain) { - invStack.setCount(remainingFromStack + used); - if (invStack.isEmpty()) { - inv[i] = ItemStack.EMPTY; - } - } - - needed -= (stackSize - used - remainingFromStack); - } - - if (needed <= 0) { - return 0; - } - } - } - - return needed; - } - - public static boolean isResultStackReversible(ItemStack stack, int gridSize, World world) { - if (stack.isEmpty()) { - return false; - } - InventoryCrafting inventory = new InventoryCrafting(new Container() { - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, 2, 2); - - inventory.setInventorySlotContents(0, stack); - - ItemStack returnStack = StorageBlockCraftingManager.getInstance().findMatchingRecipe(inventory, world); - if (returnStack.isEmpty()) { - return false; - } - - ItemStack compressedStack = ItemStack.EMPTY; - switch (gridSize) { - case 2: - compressedStack = get22Recipe(returnStack, world); - break; - case 3: - compressedStack = get33Recipe(returnStack, world); - break; - } - - return !compressedStack.isEmpty() && CompressionRegistry.areItemStacksEqual(stack, compressedStack); - } - - public static ItemStack getRecipe(ItemStack stack, World world, int gridSize) { - InventoryCrafting inventory = new InventoryCrafting(new Container() { - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, gridSize, gridSize); - for (int i = 0; i < inventory.getSizeInventory(); i++) { - inventory.setInventorySlotContents(i, stack); - } - - return StorageBlockCraftingManager.getInstance().findMatchingRecipe(inventory, world); - } - - public static boolean has22Recipe(ItemStack stack, World world) { - return !get22Recipe(stack, world).isEmpty(); - } - - public static ItemStack get22Recipe(ItemStack stack, World world) { - return getRecipe(stack, world, 2); - } - - public static boolean has33Recipe(ItemStack stack, World world) { - return !get33Recipe(stack, world).isEmpty(); - } - - public static ItemStack get33Recipe(ItemStack stack, World world) { - return getRecipe(stack, world, 3); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compress/BaseCompressionHandler.java b/src/main/java/WayofTime/bloodmagic/compress/BaseCompressionHandler.java deleted file mode 100644 index 1af4b63b..00000000 --- a/src/main/java/WayofTime/bloodmagic/compress/BaseCompressionHandler.java +++ /dev/null @@ -1,91 +0,0 @@ -package WayofTime.bloodmagic.compress; - -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class BaseCompressionHandler extends CompressionHandler { - private final ItemStack required; - private final ItemStack result; - private final int leftover; - - public BaseCompressionHandler(ItemStack requested, ItemStack result, int leftover) { - super(); - this.required = requested; - this.result = result; - this.leftover = leftover; - } - - public ItemStack getResultStack() { - return this.result.copy(); - } - - public ItemStack getRequiredStack() { - return this.required.copy(); - } - - @Override - public ItemStack compressInventory(ItemStack[] inv, World world) { - int remaining = this.getRemainingNeeded(inv); - if (remaining <= 0) { - this.drainInventory(inv); - return this.getResultStack(); - } - - return ItemStack.EMPTY; - } - - public int getRemainingNeeded(ItemStack[] inv) { - return iterateThroughInventory(inv, false); - } - - public int drainInventory(ItemStack[] inv) { - return iterateThroughInventory(inv, true); - } - - public int iterateThroughInventory(ItemStack[] inv, boolean doDrain) { - int needed = this.required.getCount(); - int kept = this.getLeftover(); - int i = -1; - - for (ItemStack invStack : inv) { - i++; - - if (invStack == null) { - continue; - } - - if (invStack.isItemEqual(this.required) && (invStack.getTagCompound() == null ? this.required.getTagCompound() == null : invStack.getTagCompound().equals(this.required.getTagCompound()))) { - int stackSize = invStack.getCount(); - int used = 0; - if (kept > 0) { - int remainingFromStack = Math.max(stackSize - kept, 0); - used += stackSize - remainingFromStack; - } - - kept -= used; - - if (kept <= 0 && needed > 0) { - int remainingFromStack = Math.max(stackSize - used - needed, 0); - if (doDrain) { - invStack.setCount(remainingFromStack + used); - if (invStack.isEmpty()) { - inv[i] = ItemStack.EMPTY; - } - } - - needed -= (stackSize - used - remainingFromStack); - } - - if (needed <= 0) { - return 0; - } - } - } - - return needed; - } - - public int getLeftover() { - return this.leftover; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compress/CompressionHandler.java b/src/main/java/WayofTime/bloodmagic/compress/CompressionHandler.java deleted file mode 100644 index b7da216d..00000000 --- a/src/main/java/WayofTime/bloodmagic/compress/CompressionHandler.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.bloodmagic.compress; - -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public abstract class CompressionHandler { - /** - * Called to look at the inventory and syphons the required stack. Returns - * resultant stack if successful, and null if not. - * - * @param inv The inventory iterated through - * @return The result of the compression - */ - public abstract ItemStack compressInventory(ItemStack[] inv, World world); -} diff --git a/src/main/java/WayofTime/bloodmagic/compress/CompressionRegistry.java b/src/main/java/WayofTime/bloodmagic/compress/CompressionRegistry.java deleted file mode 100644 index 2d975531..00000000 --- a/src/main/java/WayofTime/bloodmagic/compress/CompressionRegistry.java +++ /dev/null @@ -1,93 +0,0 @@ -package WayofTime.bloodmagic.compress; - -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * A registry aimed to help compress items in an inventory into its compressible - * form. - */ -public class CompressionRegistry { - public static List compressionRegistry = new ArrayList<>(); - public static Map thresholdMap = new HashMap<>(); - - public static void registerHandler(CompressionHandler handler) { - compressionRegistry.add(handler); - } - - /** - * Registers an item so that it only compresses while above this threshold - * - * @param stack item/block to be compressed - * @param threshold amount that is to be compressed - */ - public static void registerItemThreshold(ItemStack stack, int threshold) { - thresholdMap.put(stack, threshold); - } - - public static ItemStack compressInventory(ItemStack[] inv, World world) { - for (CompressionHandler handler : compressionRegistry) { - ItemStack stack = handler.compressInventory(inv, world); - if (stack != null) { - return stack; - } - } - - return null; - } - - public static Pair compressInventory(TileEntity tile, World world) { - if (tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null)) { - IItemHandler itemHandler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); - ItemStack[] inventory = new ItemStack[itemHandler.getSlots()]; //THIS MUST NOT BE EDITED! - ItemStack[] copyInventory = new ItemStack[itemHandler.getSlots()]; - - for (int slot = 0; slot < itemHandler.getSlots(); slot++) { - inventory[slot] = itemHandler.extractItem(slot, 64, true); - copyInventory[slot] = inventory[slot].copy(); - } - - for (CompressionHandler handler : compressionRegistry) { - ItemStack stack = handler.compressInventory(copyInventory, world); - if (!stack.isEmpty()) { - for (int slot = 0; slot < itemHandler.getSlots(); slot++) { - if (inventory[slot] != null && !ItemStack.areItemStacksEqual(inventory[slot], copyInventory[slot])) { - itemHandler.extractItem(slot, inventory[slot].getCount(), false); - if (copyInventory[slot] != null) { - itemHandler.insertItem(slot, copyInventory[slot], false); - } - } - } - - return Pair.of(Utils.insertStackIntoTile(stack, itemHandler), true); - } - } - } - - return Pair.of(ItemStack.EMPTY, false); - } - - public static int getItemThreshold(ItemStack stack) { - for (Map.Entry entry : thresholdMap.entrySet()) { - if (areItemStacksEqual(entry.getKey(), stack)) { - return entry.getValue(); - } - } - - return 0; - } - - public static boolean areItemStacksEqual(ItemStack stack, ItemStack compressedStack) { - return stack.isItemEqual(compressedStack) && (stack.getTagCompound() == null ? !compressedStack.hasTagCompound() : stack.getTagCompound().equals(compressedStack.getTagCompound())); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingManager.java b/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingManager.java deleted file mode 100644 index 19e06bb4..00000000 --- a/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingManager.java +++ /dev/null @@ -1,138 +0,0 @@ -package WayofTime.bloodmagic.compress; - -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.world.World; - -import java.util.LinkedList; -import java.util.List; - -public class StorageBlockCraftingManager { - private static final StorageBlockCraftingManager instance = new StorageBlockCraftingManager(); - private List recipes = new LinkedList(); - - public void addStorageBlockRecipes() { -// this.recipes = new StorageBlockCraftingRecipeAssimilator().getPackingRecipes(); - - BMLog.DEBUG.info("Total number of compression recipes: " + this.recipes.size()); - } - - public ItemStack findMatchingRecipe(InventoryCrafting craftingInventory, World world) { - return this.findMatchingRecipe(craftingInventory, world, this.recipes); - } - - private ItemStack findMatchingRecipe(InventoryCrafting craftingInventory, World world, List list) { - int i = 0; - ItemStack itemstack = ItemStack.EMPTY; - ItemStack itemstack1 = ItemStack.EMPTY; - int j; - - for (j = 0; j < craftingInventory.getSizeInventory(); ++j) { - ItemStack itemstack2 = craftingInventory.getStackInSlot(j); - - if (!itemstack2.isEmpty()) { - if (i == 0) { - itemstack = itemstack2; - } - - if (i == 1) { - itemstack1 = itemstack2; - } - - ++i; - } - } - - if (i == 2 && itemstack.getItem() == itemstack1.getItem() && itemstack.getCount() == 1 && itemstack1.getCount() == 1 && itemstack.getItem().isRepairable()) { - Item item = itemstack.getItem(); - int j1 = item.getMaxDamage(itemstack) - itemstack.getItemDamage(); - int k = item.getMaxDamage(itemstack) - itemstack1.getItemDamage(); - int l = j1 + k + item.getMaxDamage(itemstack) * 5 / 100; - int i1 = item.getMaxDamage(itemstack) - l; - - if (i1 < 0) { - i1 = 0; - } - - return new ItemStack(itemstack.getItem(), 1, i1); - } else { - for (j = 0; j < list.size(); ++j) { - IRecipe irecipe = (IRecipe) list.get(j); - - if (irecipe.matches(craftingInventory, world)) { - return irecipe.getCraftingResult(craftingInventory); - } - } - - return ItemStack.EMPTY; - } - } - - public static StorageBlockCraftingManager getInstance() { - return instance; - } - - private static boolean isResultStackReversible(ItemStack stack, int gridSize, World world, List list) { - if (stack.isEmpty()) { - return false; - } - InventoryCrafting inventory = new InventoryCrafting(new Container() { - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, 2, 2); - - inventory.setInventorySlotContents(0, stack); - - ItemStack returnStack = StorageBlockCraftingManager.getInstance().findMatchingRecipe(inventory, world, list); - if (returnStack.isEmpty()) { - return false; - } - - ItemStack compressedStack = ItemStack.EMPTY; - switch (gridSize) { - case 2: - compressedStack = get22Recipe(returnStack, world, list); - break; - case 3: - compressedStack = get33Recipe(returnStack, world, list); - break; - } - - return !compressedStack.isEmpty() && CompressionRegistry.areItemStacksEqual(stack, compressedStack); - } - - private static ItemStack getRecipe(ItemStack stack, World world, int gridSize, List list) { - InventoryCrafting inventory = new InventoryCrafting(new Container() { - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, gridSize, gridSize); - for (int i = 0; i < inventory.getSizeInventory(); i++) { - inventory.setInventorySlotContents(i, stack); - } - - return StorageBlockCraftingManager.getInstance().findMatchingRecipe(inventory, world, list); - } - - private static boolean has22Recipe(ItemStack stack, World world, List list) { - return !get22Recipe(stack, world, list).isEmpty(); - } - - private static ItemStack get22Recipe(ItemStack stack, World world, List list) { - return getRecipe(stack, world, 2, list); - } - - private static boolean has33Recipe(ItemStack stack, World world, List list) { - return !get33Recipe(stack, world, list).isEmpty(); - } - - private static ItemStack get33Recipe(ItemStack stack, World world, List list) { - return getRecipe(stack, world, 3, list); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingRecipeAssimilator.java b/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingRecipeAssimilator.java deleted file mode 100644 index b5870b6d..00000000 --- a/src/main/java/WayofTime/bloodmagic/compress/StorageBlockCraftingRecipeAssimilator.java +++ /dev/null @@ -1,285 +0,0 @@ -package WayofTime.bloodmagic.compress; - -public class StorageBlockCraftingRecipeAssimilator { -// public static final List ignore = new ArrayList(); -// -// public List getPackingRecipes() -// { -// // grab all recipes potentially suitable for packing or unpacking -// -// List packingRecipes = new LinkedList(); -// List unpackingRecipes = new ArrayList(); -// -// for (IRecipe recipe : getCraftingRecipes()) -// { -// if (ignore.contains(recipe.getClass())) -// continue; -// -// ItemStack output = recipe.getRecipeOutput(); -// if (output.isEmpty()) -// continue; -// -// if (output.getCount() == 1) -// { -// PackingRecipe packingRecipe = getPackingRecipe(recipe); -// -// if (packingRecipe != null) -// { -// packingRecipes.add(packingRecipe); -// } -// } else if ((output.getCount() == 4 || output.getCount() == 9) && recipe.canFit(1, 1)) -// { -// unpackingRecipes.add(recipe); -// } -// } -// -// // grab all packing recipes which accept the output of any of the -// // unpacking recipes -// -// Container container = makeDummyContainer(); -// InventoryCrafting inventoryUnpack = new InventoryCrafting(container, 2, 2); -// InventoryCrafting inventory2x2 = new InventoryCrafting(container, 2, 2); -// InventoryCrafting inventory3x3 = new InventoryCrafting(container, 3, 3); -// World world = null; // TODO: use a proper dummy world? -// -// List ret = new ArrayList(); -// -// for (IRecipe recipeUnpack : unpackingRecipes) -// { -// if (ignore.contains(recipeUnpack.getClass())) -// continue; -// -// ItemStack unpacked = recipeUnpack.getRecipeOutput(); -// InventoryCrafting inventory = null; -// -// for (Iterator it = packingRecipes.iterator(); it.hasNext();) -// { -// PackingRecipe recipePack = it.next(); -// -// // check if the packing recipe accepts the unpacking recipe's output -// -// boolean matched = false; -// -// if (recipePack.possibleInputs != null) -// { -// // the recipe could be parsed, use its inputs directly since that's faster verify recipe size -// -// if (recipePack.inputCount != unpacked.getCount()) -// continue; -// -// // check if any of the input options matches the unpacked -// // item stack -// -// for (ItemStack stack : recipePack.possibleInputs) -// { -// if (areInputsIdentical(unpacked, stack)) -// { -// matched = true; -// break; -// } -// } -// } else -// { -// // unknown IRecipe, check through the recipe conventionally verify recipe size for 3x3 to skip anything smaller quickly -// -// if (unpacked.getCount() == 9 && recipePack.recipe.getIngredients().size() < 9) -// continue; -// -// // initialize inventory late, but only once per unpack recipe -// -// if (inventory == null) -// { -// if (unpacked.getCount() == 4) -// { -// inventory = inventory2x2; -// } else -// { -// inventory = inventory3x3; -// } -// -// for (int i = 0; i < unpacked.getCount(); i++) -// { -// inventory.setInventorySlotContents(i, unpacked.copy()); -// } -// } -// -// // check if the packing recipe accepts the unpacked item -// // stack -// -// matched = recipePack.recipe.matches(inventory, world); -// } -// -// if (matched) -// { -// // check if the unpacking recipe accepts the packing -// // recipe's output -// -// ItemStack packOutput = recipePack.recipe.getRecipeOutput(); -// inventoryUnpack.setInventorySlotContents(0, packOutput.copy()); -// -// if (recipeUnpack.matches(inventoryUnpack, world)) -// { -// ret.add(recipePack.recipe); -// it.remove(); -// } -// } -// } -// } -// -// return ret; -// } -// -// @SuppressWarnings("unchecked") -// private List getCraftingRecipes() -// { -// return ForgeRegistries.RECIPES.getValues(); -// } -// -// private Container makeDummyContainer() -// { -// return new Container() -// { -// @Override -// public boolean canInteractWith(EntityPlayer player) -// { -// return true; -// } -// }; -// } -// -// private PackingRecipe getPackingRecipe(IRecipe recipe) -// { -// if (recipe.getIngredients().size() < 4) -// return null; -// -// List inputs = recipe.getIngredients(); -// -// // check if the recipe inputs are size 4 or 9 -// -// int count = 0; -// -// for (Object o : inputs) -// { -// if (o != null) -// count++; -// } -// -// if (count != 4 && count != 9) -// return null; -// -// // grab identical inputs -// -// List identicalInputs = getIdenticalInputs(inputs); -// if (identicalInputs == null) -// return null; -// -// return new PackingRecipe(recipe, identicalInputs, count); -// } -// -// /** -// * Determine the item stacks from the provided inputs which are suitable for -// * every input element. -// * -// * @param inputs -// * List of all inputs, null elements are being ignored. -// * @return List List of all options. -// */ -// @SuppressWarnings("unchecked") -// private List getIdenticalInputs(List inputs) -// { -// List options = null; -// -// for (Ingredient input : inputs) -// { -// if (input == null) -// continue; -// -// List offers; -// -// if (input. instanceof ItemStack) -// { -// offers = Collections.singletonList((ItemStack) input); -// } else if (input instanceof List) -// { -// offers = (List) input; -// -// if (offers.isEmpty()) -// return null; -// } else -// { -// throw new RuntimeException("invalid input: " + input.getClass()); -// } -// -// if (options == null) -// { -// options = new ArrayList(offers); -// continue; -// } -// -// for (Iterator it = options.iterator(); it.hasNext();) -// { -// ItemStack stackReq = it.next(); -// boolean found = false; -// -// for (ItemStack stackCmp : offers) -// { -// if (areInputsIdentical(stackReq, stackCmp)) -// { -// found = true; -// break; -// } -// } -// -// if (!found) -// { -// it.remove(); -// -// if (options.isEmpty()) -// return null; -// } -// } -// } -// -// return options; -// } -// -// private boolean areInputsIdentical(ItemStack a, ItemStack b) -// { -// -// try -// { -// if (a.getItem() != b.getItem()) -// return false; -// -// int dmgA = a.getItemDamage(); -// int dmgB = b.getItemDamage(); -// -// return dmgA == dmgB || dmgA == OreDictionary.WILDCARD_VALUE || dmgB == OreDictionary.WILDCARD_VALUE; -// } catch (NullPointerException e) -// { -// -// BloodMagic.instance.getLogger().error("A mod in this instance has registered an item with a null input. Known problem mods are:"); -// -// // String err = ""; -// // for (String problem : problemMods) -// // err += (err.length() > 0 ? ", " : "") + problem; -// // BloodMagic.instance.getLogger().error(err); -// -// return false; -// } -// } -// -// private static class PackingRecipe -// { -// PackingRecipe(IRecipe recipe, List possibleInputs, int inputCount) -// { -// this.recipe = recipe; -// this.possibleInputs = possibleInputs; -// this.inputCount = inputCount; -// } -// -// final IRecipe recipe; -// final List possibleInputs; -// final int inputCount; -// } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java deleted file mode 100644 index c039399d..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagic.java +++ /dev/null @@ -1,157 +0,0 @@ -package WayofTime.bloodmagic.core; - -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.init.MobEffects; -import net.minecraft.potion.Potion; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.common.registry.EntityEntryBuilder; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.registries.IForgeRegistry; -import net.minecraftforge.registries.RegistryBuilder; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.registry.OrbRegistry; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedChicken; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSpider; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedZombie; -import WayofTime.bloodmagic.entity.mob.EntityMimic; -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; -import WayofTime.bloodmagic.entity.projectile.EntityMeteor; -import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow; -import WayofTime.bloodmagic.entity.projectile.EntitySoulSnare; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.potion.PotionBloodMagic; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -@GameRegistry.ObjectHolder(BloodMagic.MODID) -public class RegistrarBloodMagic -{ - - private static final BloodOrb ORB_DEF = new BloodOrb("", 0, 0, 0); - @GameRegistry.ObjectHolder("weak") - public static final BloodOrb ORB_WEAK = ORB_DEF; - @GameRegistry.ObjectHolder("apprentice") - public static final BloodOrb ORB_APPRENTICE = ORB_DEF; - @GameRegistry.ObjectHolder("magician") - public static final BloodOrb ORB_MAGICIAN = ORB_DEF; - @GameRegistry.ObjectHolder("master") - public static final BloodOrb ORB_MASTER = ORB_DEF; - @GameRegistry.ObjectHolder("archmage") - public static final BloodOrb ORB_ARCHMAGE = ORB_DEF; - @GameRegistry.ObjectHolder("transcendent") - public static final BloodOrb ORB_TRANSCENDENT = ORB_DEF; - - public static final Potion BOOST = MobEffects.HASTE; - public static final Potion WHIRLWIND = MobEffects.HASTE; - public static final Potion PLANAR_BINDING = MobEffects.HASTE; - public static final Potion SOUL_SNARE = MobEffects.HASTE; - public static final Potion SOUL_FRAY = MobEffects.HASTE; - public static final Potion FIRE_FUSE = MobEffects.HASTE; - public static final Potion CONSTRICT = MobEffects.HASTE; - public static final Potion PLANT_LEECH = MobEffects.HASTE; - public static final Potion DEAFNESS = MobEffects.HASTE; - public static final Potion BOUNCE = MobEffects.HASTE; - public static final Potion CLING = MobEffects.HASTE; - public static final Potion SACRIFICIAL_LAMB = MobEffects.HASTE; - public static final Potion FLIGHT = MobEffects.HASTE; - - public static IForgeRegistry BLOOD_ORBS = null; - - @SubscribeEvent - public static void registerBloodOrbs(RegistryEvent.Register event) - { - ResourceLocation orb = RegistrarBloodMagicItems.BLOOD_ORB.getRegistryName(); - event.getRegistry().registerAll( - new BloodOrb("weak", 1, 5000, 2).withModel(new ModelResourceLocation(orb, "type=weak")).setRegistryName("weak"), - new BloodOrb("apprentice", 2, 25000, 5).withModel(new ModelResourceLocation(orb, "type=apprentice")).setRegistryName("apprentice"), - new BloodOrb("magician", 3, 150000, 15).withModel(new ModelResourceLocation(orb, "type=magician")).setRegistryName("magician"), - new BloodOrb("master", 4, 1000000, 25).withModel(new ModelResourceLocation(orb, "type=master")).setRegistryName("master"), - new BloodOrb("archmage", 5, 10000000, 50).withModel(new ModelResourceLocation(orb, "type=archmage")).setRegistryName("archmage"), - new BloodOrb("transcendent", 6, 30000000, 50).withModel(new ModelResourceLocation(orb, "type=transcendent")).setRegistryName("transcendent") - ); - } - - @SubscribeEvent - public static void registerPotions(RegistryEvent.Register event) - { - event.getRegistry().registerAll( - new PotionBloodMagic("Boost", false, 0xFFFFFF, 0, 0).setRegistryName("boost"), - new PotionBloodMagic("Planar Binding", false, 0, 2, 0).setRegistryName("planar_binding"), - new PotionBloodMagic("Soul Snare", false, 0xFFFFFF, 3, 0).setRegistryName("soul_snare"), - new PotionBloodMagic("Soul Fray", true, 0xFFFFFF, 4, 0).setRegistryName("soul_fray"), - new PotionBloodMagic("Fire Fuse", true, 0xFF3333, 5, 0).setRegistryName("fire_fuse"), - new PotionBloodMagic("Constriction", true, 0x000000, 6, 0).setRegistryName("constrict"), - new PotionBloodMagic("Plant Leech", true, 0x000000, 7, 0).setRegistryName("plant_leech"), - new PotionBloodMagic("Deaf", true, 0x000000, 0, 1).setRegistryName("deafness"), - new PotionBloodMagic("Bounce", false, 0x000000, 1, 1).setRegistryName("bounce"), - new PotionBloodMagic("Cling", false, 0x000000, 2, 1).setRegistryName("cling"), - new PotionBloodMagic("S. Lamb", false, 0x000000, 3, 1).setRegistryName("sacrificial_lamb"), - new PotionBloodMagic("Flight", false, 0x000000, 4, 0).setRegistryName("flight") - ); - } - - @SubscribeEvent - public static void registerEntities(RegistryEvent.Register event) - { - int entities = 0; - - event.getRegistry().registerAll( - EntityEntryBuilder.create().id("blood_light", ++entities).entity(EntityBloodLight.class).name("blood_light").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("soul_snare", ++entities).entity(EntitySoulSnare.class).name("soul_snare").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("soul_arrow", ++entities).entity(EntitySentientArrow.class).name("sentient_arrow").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("meteor", ++entities).entity(EntityMeteor.class).name("meteor").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("sentient_specter", ++entities).entity(EntitySentientSpecter.class).name("sentient_specter").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("mimic", ++entities).entity(EntityMimic.class).name("mimic").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("corrupted_zombie", ++entities).entity(EntityCorruptedZombie.class).name("corrupted_zombie").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("corrupted_sheep", ++entities).entity(EntityCorruptedSheep.class).name("corrupted_sheep").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("corrupted_chicken", ++entities).entity(EntityCorruptedChicken.class).name("corrupted_chicken").tracker(16 * 4, 3, true).build(), - EntityEntryBuilder.create().id("corrupted_spider", ++entities).entity(EntityCorruptedSpider.class).name("corrupted_spider").tracker(16 * 4, 3, true).build() - ); - } - - @SubscribeEvent - public static void onRegistryCreation(RegistryEvent.NewRegistry event) - { - BLOOD_ORBS = new RegistryBuilder() - .setName(new ResourceLocation(BloodMagic.MODID, "blood_orb")) - .setIDRange(0, Short.MAX_VALUE) - .setType(BloodOrb.class) - .addCallback((IForgeRegistry.AddCallback) (owner, stage, id, obj, oldObj) -> OrbRegistry.tierMap.put(obj.getTier(), OrbRegistry.getOrbStack(obj))) - .create(); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void registerModels(ModelRegistryEvent event) - { - for (BloodOrb orb : BLOOD_ORBS) - { - ModelResourceLocation modelLocation = orb.getModelLocation(); - if (modelLocation == null) - modelLocation = new ModelResourceLocation(orb.getRegistryName(), "inventory"); - - ModelLoader.registerItemVariants(RegistrarBloodMagicItems.BLOOD_ORB, modelLocation); - } - - ModelLoader.setCustomMeshDefinition(RegistrarBloodMagicItems.BLOOD_ORB, stack -> - { - if (!stack.hasTagCompound()) - return new ModelResourceLocation(ORB_WEAK.getRegistryName(), "inventory"); - - BloodOrb orb = BLOOD_ORBS.getValue(new ResourceLocation(stack.getTagCompound().getString("orb"))); - if (orb == null || orb.getModelLocation() == null) - return new ModelResourceLocation(ORB_WEAK.getRegistryName(), "inventory"); - - return orb.getModelLocation(); - }); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicBlocks.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicBlocks.java deleted file mode 100644 index 7838a879..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicBlocks.java +++ /dev/null @@ -1,167 +0,0 @@ -package WayofTime.bloodmagic.core; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.*; -import WayofTime.bloodmagic.block.enums.*; -import WayofTime.bloodmagic.tile.*; -import WayofTime.bloodmagic.tile.routing.TileInputRoutingNode; -import WayofTime.bloodmagic.tile.routing.TileItemRoutingNode; -import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode; -import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode; -import com.google.common.collect.Lists; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.client.renderer.block.statemap.StateMapperBase; -import net.minecraft.init.Blocks; -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -@GameRegistry.ObjectHolder(BloodMagic.MODID) -@SuppressWarnings("unused") -public class RegistrarBloodMagicBlocks { - public static final Block ALTAR = Blocks.AIR; - public static final Block BLOOD_RUNE = Blocks.AIR; - public static final Block RITUAL_CONTROLLER = Blocks.AIR; - public static final Block RITUAL_STONE = Blocks.AIR; - public static final Block BLOOD_LIGHT = Blocks.AIR; - public static final Block TELEPOSER = Blocks.AIR; - public static final Block ALCHEMY_ARRAY = Blocks.AIR; - public static final Block SPECTRAL = Blocks.AIR; - public static final Block PHANTOM = Blocks.AIR; - public static final Block SOUL_FORGE = Blocks.AIR; - public static final Block INCENSE_ALTAR = Blocks.AIR; - public static final Block DEMON_CRUCIBLE = Blocks.AIR; - public static final Block DEMON_PYLON = Blocks.AIR; - public static final Block DEMON_CRYSTALLIZER = Blocks.AIR; - public static final Block DEMON_CRYSTAL = Blocks.AIR; - public static final Block ALCHEMY_TABLE = Blocks.AIR; - public static final Block LIFE_ESSENCE = Blocks.AIR; - public static final Block DECORATIVE_BRICK = Blocks.AIR; - public static final Block PATH = Blocks.AIR; - public static final Block MASTER_ROUTING_NODE = Blocks.AIR; - public static final Block INPUT_ROUTING_NODE = Blocks.AIR; - public static final Block OUTPUT_ROUTING_NODE = Blocks.AIR; - public static final Block ITEM_ROUTING_NODE = Blocks.AIR; - public static final Block DIMENSIONAL_PORTAL = Blocks.AIR; - public static final Block BLOOD_TANK = Blocks.AIR; - public static final Block MIMIC = Blocks.AIR; - public static final Block DEMON_BRICK_1 = Blocks.AIR; - public static final Block DEMON_BRICK_2 = Blocks.AIR; - public static final Block DEMON_EXTRAS = Blocks.AIR; - public static final Block DEMON_PILLAR_1 = Blocks.AIR; - public static final Block DEMON_PILLAR_2 = Blocks.AIR; - public static final Block DEMON_PILLAR_CAP_1 = Blocks.AIR; - public static final Block DEMON_PILLAR_CAP_2 = Blocks.AIR; - public static final Block DEMON_PILLAR_CAP_3 = Blocks.AIR; - public static final Block DEMON_LIGHT = Blocks.AIR; - public static final Block DEMON_WALL_1 = Blocks.AIR; - public static final Block DEMON_STAIRS_1 = Blocks.AIR; - public static final Block DEMON_STAIRS_2 = Blocks.AIR; - public static final Block DEMON_STAIRS_3 = Blocks.AIR; - public static final Block INVERSION_PILLAR = Blocks.AIR; - public static final Block INVERSION_PILLAR_END = Blocks.AIR; - - static List blocks; - - @SubscribeEvent - public static void registerBlocks(RegistryEvent.Register event) { - FluidRegistry.registerFluid(BlockLifeEssence.getLifeEssence()); - FluidRegistry.addBucketForFluid(BlockLifeEssence.getLifeEssence()); - - blocks = Lists.newArrayList( - new BlockAltar().setRegistryName("altar"), - new BlockBloodRune().setRegistryName("blood_rune"), - new BlockRitualController().setRegistryName("ritual_controller"), - new BlockRitualStone().setRegistryName("ritual_stone"), - new BlockBloodLight().setRegistryName("blood_light"), - new BlockTeleposer().setRegistryName("teleposer"), - new BlockAlchemyArray().setRegistryName("alchemy_array"), - new BlockSpectral().setRegistryName("spectral"), - new BlockPhantom().setRegistryName("phantom"), - new BlockSoulForge().setRegistryName("soul_forge"), - new BlockIncenseAltar().setRegistryName("incense_altar"), - new BlockDemonCrucible().setRegistryName("demon_crucible"), - new BlockDemonPylon().setRegistryName("demon_pylon"), - new BlockDemonCrystallizer().setRegistryName("demon_crystallizer"), - new BlockDemonCrystal().setRegistryName("demon_crystal"), - new BlockAlchemyTable().setRegistryName("alchemy_table"), - new BlockLifeEssence().setRegistryName("life_essence"), - new BlockDecorative().setRegistryName("decorative_brick"), - new BlockPath().setRegistryName("path"), - new BlockMasterRoutingNode().setRegistryName("master_routing_node"), - new BlockInputRoutingNode().setRegistryName("input_routing_node"), - new BlockOutputRoutingNode().setRegistryName("output_routing_node"), - new BlockItemRoutingNode().setRegistryName("item_routing_node"), - new BlockDimensionalPortal().setRegistryName("dimensional_portal"), - new BlockBloodTank().setRegistryName("blood_tank"), - new BlockMimic().setRegistryName("mimic"), - new BlockDemonBase<>("bricks1", EnumDemonBlock1.class).setRegistryName("demon_brick_1"), - new BlockDemonBase<>("bricks2", EnumDemonBlock2.class).setRegistryName("demon_brick_2"), - new BlockDemonBase<>("extras", EnumDemonBlock3.class).setRegistryName("demon_extras"), - new BlockDemonPillarBase<>("pillar1", Material.ROCK, EnumSubWillType.class).setRegistryName("demon_pillar_1"), - new BlockDemonPillarBase<>("pillar2", Material.ROCK, EnumSubWillType.class).setRegistryName("demon_pillar_2"), - new BlockDemonPillarCapBase<>("pillarCap1", Material.ROCK, EnumSubWillType1.class).setRegistryName("demon_pillar_cap_1"), - new BlockDemonPillarCapBase<>("pillarCap2", Material.ROCK, EnumSubWillType2.class).setRegistryName("demon_pillar_cap_2"), - new BlockDemonPillarCapBase<>("pillarCap3", Material.ROCK, EnumSubWillType3.class).setRegistryName("demon_pillar_cap_3"), - new BlockDemonLight().setRegistryName("demon_light"), - new BlockDemonWallBase<>("wall1", Material.ROCK, EnumWillWall.class).setRegistryName("demon_wall_1"), - new BlockDemonStairsBase<>("stairs1", Material.ROCK, EnumSubWillType1.class).setRegistryName("demon_stairs_1"), - new BlockDemonStairsBase<>("stairs2", Material.ROCK, EnumSubWillType2.class).setRegistryName("demon_stairs_2"), - new BlockDemonStairsBase<>("stairs3", Material.ROCK, EnumSubWillType3.class).setRegistryName("demon_stairs_3"), - new BlockInversionPillar().setRegistryName("inversion_pillar"), - new BlockInversionPillarEnd().setRegistryName("inversion_pillar_end") - ); - - event.getRegistry().registerAll(blocks.toArray(new Block[0])); - - registerTileEntities(); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void registerModels(ModelRegistryEvent event) { - ModelLoader.setCustomStateMapper(LIFE_ESSENCE, new StateMapperBase() { - @Override - protected ModelResourceLocation getModelResourceLocation(IBlockState state) { - return new ModelResourceLocation(state.getBlock().getRegistryName(), "fluid"); - } - }); - } - - private static void registerTileEntities() { - GameRegistry.registerTileEntity(TileAltar.class, BloodMagic.MODID + ":altar"); - GameRegistry.registerTileEntity(TileImperfectRitualStone.class, BloodMagic.MODID + ":imperfect_ritual_stone"); - GameRegistry.registerTileEntity(TileMasterRitualStone.class, BloodMagic.MODID + ":master_ritual_stone"); - GameRegistry.registerTileEntity(TileAlchemyArray.class, BloodMagic.MODID + ":alchemy_array"); - GameRegistry.registerTileEntity(TileSpectralBlock.class, BloodMagic.MODID + ":spectral_block"); - GameRegistry.registerTileEntity(TilePhantomBlock.class, BloodMagic.MODID + ":phantom_block"); - GameRegistry.registerTileEntity(TileTeleposer.class, BloodMagic.MODID + ":teleposer"); - GameRegistry.registerTileEntity(TileSoulForge.class, BloodMagic.MODID + ":soul_forge"); - GameRegistry.registerTileEntity(TileMasterRoutingNode.class, BloodMagic.MODID + ":master_routing_node"); - GameRegistry.registerTileEntity(TileInputRoutingNode.class, BloodMagic.MODID + ":input_routing_node"); - GameRegistry.registerTileEntity(TileOutputRoutingNode.class, BloodMagic.MODID + ":output_routing_node"); - GameRegistry.registerTileEntity(TileItemRoutingNode.class, BloodMagic.MODID + ":item_routing_node"); - GameRegistry.registerTileEntity(TileIncenseAltar.class, BloodMagic.MODID + ":incense_altar"); - GameRegistry.registerTileEntity(TileDemonCrucible.class, BloodMagic.MODID + ":demon_crucible"); - GameRegistry.registerTileEntity(TileDemonPylon.class, BloodMagic.MODID + ":demon_pylon"); - GameRegistry.registerTileEntity(TileDemonCrystallizer.class, BloodMagic.MODID + ":demon_crystallizer"); - GameRegistry.registerTileEntity(TileDemonCrystal.class, BloodMagic.MODID + ":demon_crystal"); - GameRegistry.registerTileEntity(TileAlchemyTable.class, BloodMagic.MODID + ":alchemy_table"); - GameRegistry.registerTileEntity(TileDimensionalPortal.class, BloodMagic.MODID + ":dimensional_portal"); - GameRegistry.registerTileEntity(TileBloodTank.class, BloodMagic.MODID + ":blood_tank"); - GameRegistry.registerTileEntity(TileMimic.class, BloodMagic.MODID + ":mimic"); - GameRegistry.registerTileEntity(TileInversionPillar.class, BloodMagic.MODID + ":inversion_pillar"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java deleted file mode 100644 index fd76818f..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java +++ /dev/null @@ -1,311 +0,0 @@ -package WayofTime.bloodmagic.core; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; - -import java.util.List; -import java.util.Set; - -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.init.Items; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.Item; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.block.IBMBlock; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.ItemActivationCrystal; -import WayofTime.bloodmagic.item.ItemAlchemicVial; -import WayofTime.bloodmagic.item.ItemAltarMaker; -import WayofTime.bloodmagic.item.ItemArcaneAshes; -import WayofTime.bloodmagic.item.ItemBloodOrb; -import WayofTime.bloodmagic.item.ItemBoundAxe; -import WayofTime.bloodmagic.item.ItemBoundPickaxe; -import WayofTime.bloodmagic.item.ItemBoundShovel; -import WayofTime.bloodmagic.item.ItemBoundSword; -import WayofTime.bloodmagic.item.ItemDaggerOfSacrifice; -import WayofTime.bloodmagic.item.ItemDemonCrystal; -import WayofTime.bloodmagic.item.ItemDemonWillGauge; -import WayofTime.bloodmagic.item.ItemEnum; -import WayofTime.bloodmagic.item.ItemExperienceBook; -import WayofTime.bloodmagic.item.ItemInscriptionTool; -import WayofTime.bloodmagic.item.ItemLavaCrystal; -import WayofTime.bloodmagic.item.ItemPotionFlask; -import WayofTime.bloodmagic.item.ItemRitualDiviner; -import WayofTime.bloodmagic.item.ItemRitualReader; -import WayofTime.bloodmagic.item.ItemSacrificialDagger; -import WayofTime.bloodmagic.item.ItemSanguineBook; -import WayofTime.bloodmagic.item.ItemSlate; -import WayofTime.bloodmagic.item.ItemTelepositionFocus; -import WayofTime.bloodmagic.item.ItemUpgradeTome; -import WayofTime.bloodmagic.item.ItemUpgradeTrainer; -import WayofTime.bloodmagic.item.alchemy.ItemCuttingFluid; -import WayofTime.bloodmagic.item.alchemy.ItemLivingArmourPointsUpgrade; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.item.armour.ItemSentientArmour; -import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; -import WayofTime.bloodmagic.item.gear.ItemPackSelfSacrifice; -import WayofTime.bloodmagic.item.routing.ItemFluidRouterFilter; -import WayofTime.bloodmagic.item.routing.ItemNodeRouter; -import WayofTime.bloodmagic.item.routing.ItemRouterFilter; -import WayofTime.bloodmagic.item.sigil.ItemSigilAir; -import WayofTime.bloodmagic.item.sigil.ItemSigilBloodLight; -import WayofTime.bloodmagic.item.sigil.ItemSigilBounce; -import WayofTime.bloodmagic.item.sigil.ItemSigilClaw; -import WayofTime.bloodmagic.item.sigil.ItemSigilCompression; -import WayofTime.bloodmagic.item.sigil.ItemSigilDivination; -import WayofTime.bloodmagic.item.sigil.ItemSigilElementalAffinity; -import WayofTime.bloodmagic.item.sigil.ItemSigilEnderSeverance; -import WayofTime.bloodmagic.item.sigil.ItemSigilFastMiner; -import WayofTime.bloodmagic.item.sigil.ItemSigilFrost; -import WayofTime.bloodmagic.item.sigil.ItemSigilGreenGrove; -import WayofTime.bloodmagic.item.sigil.ItemSigilHaste; -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import WayofTime.bloodmagic.item.sigil.ItemSigilLava; -import WayofTime.bloodmagic.item.sigil.ItemSigilMagnetism; -import WayofTime.bloodmagic.item.sigil.ItemSigilPhantomBridge; -import WayofTime.bloodmagic.item.sigil.ItemSigilSuppression; -import WayofTime.bloodmagic.item.sigil.ItemSigilTeleposition; -import WayofTime.bloodmagic.item.sigil.ItemSigilTransposition; -import WayofTime.bloodmagic.item.sigil.ItemSigilVoid; -import WayofTime.bloodmagic.item.sigil.ItemSigilWater; -import WayofTime.bloodmagic.item.sigil.ItemSigilWhirlwind; -import WayofTime.bloodmagic.item.soul.ItemMonsterSoul; -import WayofTime.bloodmagic.item.soul.ItemSentientArmourGem; -import WayofTime.bloodmagic.item.soul.ItemSentientAxe; -import WayofTime.bloodmagic.item.soul.ItemSentientBow; -import WayofTime.bloodmagic.item.soul.ItemSentientPickaxe; -import WayofTime.bloodmagic.item.soul.ItemSentientShovel; -import WayofTime.bloodmagic.item.soul.ItemSentientSword; -import WayofTime.bloodmagic.item.soul.ItemSoulGem; -import WayofTime.bloodmagic.item.soul.ItemSoulSnare; -import WayofTime.bloodmagic.item.soulBreath.ItemFlightScroll; -import WayofTime.bloodmagic.item.types.ComponentTypes; -import WayofTime.bloodmagic.item.types.ShardType; - -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -@GameRegistry.ObjectHolder(BloodMagic.MODID) -@SuppressWarnings("unchecked") -public class RegistrarBloodMagicItems -{ - - public static final Item BLOOD_ORB = Items.AIR; - public static final Item ACTIVATION_CRYSTAL = Items.AIR; - public static final Item SLATE = Items.AIR; - public static final Item INSCRIPTION_TOOL = Items.AIR; - public static final Item SACRIFICIAL_DAGGER = Items.AIR; - public static final Item PACK_SELF_SACRIFICE = Items.AIR; - public static final Item PACK_SACRIFICE = Items.AIR; - public static final Item DAGGER_OF_SACRIFICE = Items.AIR; - public static final Item RITUAL_DIVINER = Items.AIR; - public static final Item RITUAL_READER = Items.AIR; - public static final Item LAVA_CRYSTAL = Items.AIR; - public static final Item BOUND_SWORD = Items.AIR; - public static final Item BOUND_PICKAXE = Items.AIR; - public static final Item BOUND_AXE = Items.AIR; - public static final Item BOUND_SHOVEL = Items.AIR; - public static final Item SIGIL_DIVINATION = Items.AIR; - public static final Item SIGIL_AIR = Items.AIR; - public static final Item SIGIL_WATER = Items.AIR; - public static final Item SIGIL_LAVA = Items.AIR; - public static final Item SIGIL_VOID = Items.AIR; - public static final Item SIGIL_GREEN_GROVE = Items.AIR; - public static final Item SIGIL_BLOOD_LIGHT = Items.AIR; - public static final Item SIGIL_ELEMENTAL_AFFINITY = Items.AIR; - public static final Item SIGIL_HASTE = Items.AIR; - public static final Item SIGIL_MAGNETISM = Items.AIR; - public static final Item SIGIL_SUPPRESSION = Items.AIR; - public static final Item SIGIL_FAST_MINER = Items.AIR; - public static final Item SIGIL_SEER = Items.AIR; - public static final Item SIGIL_ENDER_SEVERANCE = Items.AIR; - public static final Item SIGIL_WHIRLWIND = Items.AIR; - public static final Item SIGIL_PHANTOM_BRIDGE = Items.AIR; - public static final Item SIGIL_COMPRESSION = Items.AIR; - public static final Item SIGIL_HOLDING = Items.AIR; - public static final Item SIGIL_TELEPOSITION = Items.AIR; - public static final Item SIGIL_TRANSPOSITION = Items.AIR; - public static final Item SIGIL_CLAW = Items.AIR; - public static final Item SIGIL_BOUNCE = Items.AIR; - public static final Item SIGIL_FROST = Items.AIR; - public static final Item COMPONENT = Items.AIR; - public static final Item ITEM_DEMON_CRYSTAL = Items.AIR; - public static final Item TELEPOSITION_FOCUS = Items.AIR; - public static final Item EXPERIENCE_TOME = Items.AIR; - public static final Item BLOOD_SHARD = Items.AIR; - public static final Item LIVING_ARMOUR_HELMET = Items.AIR; - public static final Item LIVING_ARMOUR_CHEST = Items.AIR; - public static final Item LIVING_ARMOUR_LEGGINGS = Items.AIR; - public static final Item LIVING_ARMOUR_BOOTS = Items.AIR; - public static final Item SENTIENT_ARMOUR_HELMET = Items.AIR; - public static final Item SENTIENT_ARMOUR_CHEST = Items.AIR; - public static final Item SENTIENT_ARMOUR_LEGGINGS = Items.AIR; - public static final Item SENTIENT_ARMOUR_BOOTS = Items.AIR; - public static final Item ALTAR_MAKER = Items.AIR; - public static final Item UPGRADE_TOME = Items.AIR; - public static final Item UPGRADE_TRAINER = Items.AIR; - public static final Item ARCANE_ASHES = Items.AIR; - public static final Item MONSTER_SOUL = Items.AIR; - public static final Item SOUL_GEM = Items.AIR; - public static final Item SOUL_SNARE = Items.AIR; - public static final Item SENTIENT_SWORD = Items.AIR; - public static final Item SENTIENT_BOW = Items.AIR; - public static final Item SENTIENT_ARMOUR_GEM = Items.AIR; - public static final Item SENTIENT_AXE = Items.AIR; - public static final Item SENTIENT_PICKAXE = Items.AIR; - public static final Item SENTIENT_SHOVEL = Items.AIR; - public static final Item NODE_ROUTER = Items.AIR; - public static final Item BASE_ITEM_FILTER = Items.AIR; - public static final Item BASE_FLUID_FILTER = Items.AIR; - public static final Item CUTTING_FLUID = Items.AIR; - public static final Item SANGUINE_BOOK = Items.AIR; - public static final Item POINTS_UPGRADE = Items.AIR; - public static final Item DEMON_WILL_GAUGE = Items.AIR; - public static final Item POTION_FLASK = Items.AIR; - public static final Item ALCHEMIC_VIAL = Items.AIR; - public static final Item ICARUS_SCROLL = Items.AIR; - - public static Item.ToolMaterial BOUND_TOOL_MATERIAL = EnumHelper.addToolMaterial("bound", 4, 1, 10, 8, 50); - public static Item.ToolMaterial SOUL_TOOL_MATERIAL = EnumHelper.addToolMaterial("demonic", 4, 520, 7, 8, 50); - - public static List items; - - @SubscribeEvent - public static void registerItems(RegistryEvent.Register event) - { - items = Lists.newArrayList(); - - RegistrarBloodMagicBlocks.blocks.stream().filter(block -> block instanceof IBMBlock && ((IBMBlock) block).getItem() != null).forEach(block -> - { - IBMBlock bmBlock = (IBMBlock) block; - items.add(bmBlock.getItem().setRegistryName(block.getRegistryName())); - }); - - items.addAll(Lists.newArrayList( - new ItemBloodOrb().setRegistryName("blood_orb"), - new ItemActivationCrystal().setRegistryName("activation_crystal"), - new ItemSlate().setRegistryName("slate"), - new ItemInscriptionTool().setRegistryName("inscription_tool"), - new ItemSacrificialDagger().setRegistryName("sacrificial_dagger"), - new ItemPackSacrifice().setRegistryName("pack_sacrifice"), - new ItemPackSelfSacrifice().setRegistryName("pack_self_sacrifice"), - new ItemDaggerOfSacrifice().setRegistryName("dagger_of_sacrifice"), - new ItemRitualDiviner().setRegistryName("ritual_diviner"), - new ItemRitualReader().setRegistryName("ritual_reader"), - new ItemLavaCrystal().setRegistryName("lava_crystal"), - new ItemBoundSword().setRegistryName("bound_sword"), - new ItemBoundPickaxe().setRegistryName("bound_pickaxe"), - new ItemBoundAxe().setRegistryName("bound_axe"), - new ItemBoundShovel().setRegistryName("bound_shovel"), - new ItemSigilDivination(true).setRegistryName("sigil_divination"), - new ItemSigilAir().setRegistryName("sigil_air"), - new ItemSigilWater().setRegistryName("sigil_water"), - new ItemSigilLava().setRegistryName("sigil_lava"), - new ItemSigilVoid().setRegistryName("sigil_void"), - new ItemSigilGreenGrove().setRegistryName("sigil_green_grove"), - new ItemSigilBloodLight().setRegistryName("sigil_blood_light"), - new ItemSigilElementalAffinity().setRegistryName("sigil_elemental_affinity"), - new ItemSigilMagnetism().setRegistryName("sigil_magnetism"), - new ItemSigilSuppression().setRegistryName("sigil_suppression"), - new ItemSigilHaste().setRegistryName("sigil_haste"), - new ItemSigilFastMiner().setRegistryName("sigil_fast_miner"), - new ItemSigilDivination(false).setRegistryName("sigil_seer"), - new ItemSigilPhantomBridge().setRegistryName("sigil_phantom_bridge"), - new ItemSigilWhirlwind().setRegistryName("sigil_whirlwind"), - new ItemSigilCompression().setRegistryName("sigil_compression"), - new ItemSigilEnderSeverance().setRegistryName("sigil_ender_severance"), - new ItemSigilHolding().setRegistryName("sigil_holding"), - new ItemSigilTeleposition().setRegistryName("sigil_teleposition"), - new ItemSigilTransposition().setRegistryName("sigil_transposition"), - new ItemSigilClaw().setRegistryName("sigil_claw"), - new ItemSigilBounce().setRegistryName("sigil_bounce"), - new ItemSigilFrost().setRegistryName("sigil_frost"), - new ItemEnum.Variant<>(ComponentTypes.class, "baseComponent").setRegistryName("component"), - new ItemDemonCrystal().setRegistryName("item_demon_crystal"), - new ItemTelepositionFocus().setRegistryName("teleposition_focus"), - new ItemExperienceBook().setRegistryName("experience_tome"), - new ItemEnum.Variant<>(ShardType.class, "blood_shard").setRegistryName("blood_shard"), - new ItemLivingArmour(EntityEquipmentSlot.HEAD).setRegistryName("living_armour_helmet"), - new ItemLivingArmour(EntityEquipmentSlot.CHEST).setRegistryName("living_armour_chest"), - new ItemLivingArmour(EntityEquipmentSlot.LEGS).setRegistryName("living_armour_leggings"), - new ItemLivingArmour(EntityEquipmentSlot.FEET).setRegistryName("living_armour_boots"), - new ItemSentientArmour(EntityEquipmentSlot.HEAD).setRegistryName("sentient_armour_helmet"), - new ItemSentientArmour(EntityEquipmentSlot.CHEST).setRegistryName("sentient_armour_chest"), - new ItemSentientArmour(EntityEquipmentSlot.LEGS).setRegistryName("sentient_armour_leggings"), - new ItemSentientArmour(EntityEquipmentSlot.FEET).setRegistryName("sentient_armour_boots"), - new ItemAltarMaker().setRegistryName("altar_maker"), - new ItemUpgradeTome().setRegistryName("upgrade_tome"), - new ItemUpgradeTrainer().setRegistryName("upgrade_trainer"), - new ItemArcaneAshes().setRegistryName("arcane_ashes"), - new ItemMonsterSoul().setRegistryName("monster_soul"), - new ItemSoulGem().setRegistryName("soul_gem"), - new ItemSoulSnare().setRegistryName("soul_snare"), - new ItemSentientSword().setRegistryName("sentient_sword"), - new ItemSentientBow().setRegistryName("sentient_bow"), - new ItemSentientArmourGem().setRegistryName("sentient_armour_gem"), - new ItemSentientAxe().setRegistryName("sentient_axe"), - new ItemSentientPickaxe().setRegistryName("sentient_pickaxe"), - new ItemSentientShovel().setRegistryName("sentient_shovel"), - new ItemNodeRouter().setRegistryName("node_router"), - new ItemRouterFilter().setRegistryName("base_item_filter"), - new ItemFluidRouterFilter().setRegistryName("base_fluid_filter"), - new ItemCuttingFluid().setRegistryName("cutting_fluid"), - new ItemSanguineBook().setRegistryName("sanguine_book"), - new ItemLivingArmourPointsUpgrade().setRegistryName("points_upgrade"), - new ItemDemonWillGauge().setRegistryName("demon_will_gauge"), - new ItemPotionFlask().setRegistryName("potion_flask"), - new ItemAlchemicVial().setRegistryName("alchemic_vial"), - new ItemFlightScroll().setRegistryName("icarus_scroll") - )); - - event.getRegistry().registerAll(items.toArray(new Item[0])); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void registerRenders(ModelRegistryEvent event) - { - items.stream().filter(i -> i instanceof IVariantProvider).forEach(i -> - { - Int2ObjectMap variants = new Int2ObjectOpenHashMap<>(); - ((IVariantProvider) i).gatherVariants(variants); - for (Int2ObjectMap.Entry variant : variants.int2ObjectEntrySet()) - ModelLoader.setCustomModelResourceLocation(i, variant.getIntKey(), new ModelResourceLocation(i.getRegistryName(), variant.getValue())); - }); - - items.stream().filter(i -> i instanceof IMeshProvider).forEach(i -> - { - IMeshProvider mesh = (IMeshProvider) i; - ResourceLocation loc = mesh.getCustomLocation(); - if (loc == null) - loc = i.getRegistryName(); - - Set variants = Sets.newHashSet(); - mesh.gatherVariants(variants::add); - for (String variant : variants) - ModelLoader.registerItemVariants(i, new ModelResourceLocation(loc, variant)); - - ModelLoader.setCustomMeshDefinition(i, mesh.getMeshDefinition()); - }); - - RegistrarBloodMagicBlocks.blocks.stream().filter(b -> b instanceof IVariantProvider).forEach(b -> - { - Int2ObjectMap variants = new Int2ObjectOpenHashMap<>(); - ((IVariantProvider) b).gatherVariants(variants); - for (Int2ObjectMap.Entry variant : variants.int2ObjectEntrySet()) - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(b), variant.getIntKey(), new ModelResourceLocation(b.getRegistryName(), variant.getValue())); - }); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicRecipes.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicRecipes.java deleted file mode 100644 index caa7f823..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicRecipes.java +++ /dev/null @@ -1,245 +0,0 @@ -package WayofTime.bloodmagic.core; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.impl.BloodMagicRecipeRegistrar; -import WayofTime.bloodmagic.altar.AltarTier; -import WayofTime.bloodmagic.core.registry.OrbRegistry; -import WayofTime.bloodmagic.item.ItemSlate; -import WayofTime.bloodmagic.ritual.EnumRuneType; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.block.BlockLifeEssence; -import WayofTime.bloodmagic.item.alchemy.ItemCuttingFluid; -import WayofTime.bloodmagic.item.alchemy.ItemLivingArmourPointsUpgrade; -import WayofTime.bloodmagic.item.soul.ItemSoulGem; -import WayofTime.bloodmagic.item.types.ComponentTypes; -import WayofTime.bloodmagic.util.PluginUtil; -import com.google.common.collect.Sets; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.init.PotionTypes; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.potion.PotionUtils; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.oredict.OreDictionary; -import net.minecraftforge.oredict.OreIngredient; -import net.minecraftforge.oredict.ShapelessOreRecipe; - -import java.util.List; -import java.util.Set; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class RegistrarBloodMagicRecipes -{ - - @SubscribeEvent - public static void registerRecipes(RegistryEvent.Register event) - { - for (int i = 0; i < ItemSoulGem.names.length; i++) - { - for (EnumDemonWillType willType : EnumDemonWillType.values()) - { - ItemStack baseGemStack = new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, i); - ItemStack newGemStack = new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, i); - - ((ItemSoulGem) RegistrarBloodMagicItems.SOUL_GEM).setCurrentType(willType, newGemStack); - ShapelessOreRecipe shapeless = new ShapelessOreRecipe(new ResourceLocation(BloodMagic.MODID, "soul_gem"), newGemStack, baseGemStack, willType.getStack()); - event.getRegistry().register(shapeless.setRegistryName("soul_gem_" + willType.getName())); - } - } - - OreDictionary.registerOre("dustIron", ComponentTypes.SAND_IRON.getStack()); - OreDictionary.registerOre("dustGold", ComponentTypes.SAND_GOLD.getStack()); - OreDictionary.registerOre("dustCoal", ComponentTypes.SAND_COAL.getStack()); - - PluginUtil.handlePluginStep(PluginUtil.RegistrationStep.RECIPE_REGISTER); - } - - public static void registerAltarRecipes(BloodMagicRecipeRegistrar registrar) - { - // ONE - registrar.addBloodAltar(new OreIngredient("gemDiamond"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_WEAK), AltarTier.ONE.ordinal(), 2000, 2, 1); - registrar.addBloodAltar(new OreIngredient("stone"), ItemSlate.SlateType.BLANK.getStack(), AltarTier.ONE.ordinal(), 1000, 5, 5); - registrar.addBloodAltar(Ingredient.fromItem(Items.BUCKET), FluidUtil.getFilledBucket(new FluidStack(BlockLifeEssence.getLifeEssence(), Fluid.BUCKET_VOLUME)), AltarTier.ONE.ordinal(), 1000, 5, 0); - registrar.addBloodAltar(Ingredient.fromItem(Items.BOOK), new ItemStack(RegistrarBloodMagicItems.SANGUINE_BOOK), AltarTier.ONE.ordinal(), 1000, 20, 0); - - // TWO - registrar.addBloodAltar(new OreIngredient("blockRedstone"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_APPRENTICE), AltarTier.TWO.ordinal(), 5000, 5, 5); - registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.BLANK.getStack()), ItemSlate.SlateType.REINFORCED.getStack(), AltarTier.TWO.ordinal(), 2000, 5, 5); - registrar.addBloodAltar(Ingredient.fromItem(Items.IRON_SWORD), new ItemStack(RegistrarBloodMagicItems.DAGGER_OF_SACRIFICE), AltarTier.TWO.ordinal(), 3000, 5, 5); - - // THREE - registrar.addBloodAltar(new OreIngredient("blockGold"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MAGICIAN), AltarTier.THREE.ordinal(), 25000, 20, 20); - registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.REINFORCED.getStack()), ItemSlate.SlateType.IMBUED.getStack(), AltarTier.THREE.ordinal(), 5000, 15, 10); - registrar.addBloodAltar(new OreIngredient("obsidian"), EnumRuneType.EARTH.getStack(), AltarTier.THREE.ordinal(), 1000, 5, 5); - registrar.addBloodAltar(new OreIngredient("blockLapis"), EnumRuneType.WATER.getStack(), AltarTier.THREE.ordinal(), 1000, 5, 5); - registrar.addBloodAltar(Ingredient.fromItem(Items.MAGMA_CREAM), EnumRuneType.FIRE.getStack(), AltarTier.THREE.ordinal(), 1000, 5, 5); - registrar.addBloodAltar(Ingredient.fromItem(Items.GHAST_TEAR), EnumRuneType.AIR.getStack(), AltarTier.THREE.ordinal(), 1000, 5, 5); - registrar.addBloodAltar(Ingredient.fromItem(RegistrarBloodMagicItems.LAVA_CRYSTAL), new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL), AltarTier.THREE.ordinal(), 10000, 20, 10); - - // FOUR - registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD)), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_MASTER), AltarTier.FOUR.ordinal(), 40000, 30, 50); - registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.IMBUED.getStack()), ItemSlate.SlateType.DEMONIC.getStack(), AltarTier.FOUR.ordinal(), 15000, 20, 20); - registrar.addBloodAltar(new OreIngredient("blockCoal"), EnumRuneType.DUSK.getStack(), AltarTier.FOUR.ordinal(), 2000, 20, 10); - registrar.addBloodAltar(new OreIngredient("enderpearl"), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS), AltarTier.FOUR.ordinal(), 2000, 10, 10); - registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS)), new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, 1, 1), AltarTier.FOUR.ordinal(), 10000, 20, 10); - - // FIVE - registrar.addBloodAltar(new OreIngredient("netherStar"), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_ARCHMAGE), AltarTier.FIVE.ordinal(), 80000, 50, 100); - registrar.addBloodAltar(Ingredient.fromStacks(ItemSlate.SlateType.DEMONIC.getStack()), ItemSlate.SlateType.ETHEREAL.getStack(), AltarTier.FIVE.ordinal(), 30000, 40, 100); - - // SIX - registrar.addBloodAltar(Ingredient.fromStacks(new ItemStack(RegistrarBloodMagicBlocks.DECORATIVE_BRICK, 1, 2)), OrbRegistry.getOrbStack(RegistrarBloodMagic.ORB_TRANSCENDENT), AltarTier.SIX.ordinal(), 200000, 100, 200); - registrar.addBloodAltar(new OreIngredient("glowstone"), EnumRuneType.DAWN.getStack(), AltarTier.SIX.ordinal(), 200000, 100, 200); - } - - public static void registerAlchemyTableRecipes(BloodMagicRecipeRegistrar registrar) - { - registrar.addAlchemyTable(new ItemStack(Items.STRING, 4), 0, 100, 0, Blocks.WOOL, Items.FLINT); - registrar.addAlchemyTable(new ItemStack(Items.FLINT, 2), 0, 20, 0, Blocks.GRAVEL, Items.FLINT); - registrar.addAlchemyTable(new ItemStack(Items.LEATHER, 4), 100, 200, 1, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.ROTTEN_FLESH, Items.FLINT, Items.WATER_BUCKET); - registrar.addAlchemyTable(ItemCuttingFluid.FluidType.EXPLOSIVE.getStack(), 500, 200, 1, "gunpowder", "gunpowder", "dustCoal"); - registrar.addAlchemyTable(new ItemStack(Items.BREAD), 100, 200, 1, Items.WHEAT, Items.SUGAR); - registrar.addAlchemyTable(new ItemStack(Blocks.GRASS), 200, 200, 1, Blocks.DIRT, new ItemStack(Items.DYE, 1, 15), Items.WHEAT_SEEDS); - registrar.addAlchemyTable(new ItemStack(Items.CLAY_BALL, 4), 50, 100, 2, Items.WATER_BUCKET, "sand"); - registrar.addAlchemyTable(new ItemStack(Blocks.CLAY, 5), 200, 200, 1, Items.WATER_BUCKET, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY, Blocks.HARDENED_CLAY); - registrar.addAlchemyTable(new ItemStack(Blocks.OBSIDIAN), 50, 50, 1, Items.WATER_BUCKET, Items.LAVA_BUCKET); - registrar.addAlchemyTable(ComponentTypes.SULFUR.getStack(8), 0, 100, 0, Items.LAVA_BUCKET); - registrar.addAlchemyTable(ComponentTypes.SALTPETER.getStack(4), 0, 100, 0, ComponentTypes.PLANT_OIL.getStack(), ComponentTypes.PLANT_OIL.getStack(), "dustCoal"); - registrar.addAlchemyTable(new ItemStack(Items.GUNPOWDER, 3), 0, 100, 0, "dustSaltpeter", "dustSulfur", new ItemStack(Items.COAL, 1, 1)); - registrar.addAlchemyTable(ComponentTypes.SAND_COAL.getStack(4), 100, 100, 1, new ItemStack(Items.COAL, 1, 0), new ItemStack(Items.COAL, 1, 0), Items.FLINT); - registrar.addAlchemyTable(ItemCuttingFluid.FluidType.BASIC.getStack(), 1000, 400, 1, "dustCoal", "gunpowder", Items.REDSTONE, Items.SUGAR, ComponentTypes.PLANT_OIL.getStack(), PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WATER)); - registrar.addAlchemyTable(ComponentTypes.SAND_IRON.getStack(2), 400, 200, 1, "oreIron", ItemCuttingFluid.FluidType.BASIC.getStack()); - registrar.addAlchemyTable(ComponentTypes.SAND_GOLD.getStack(2), 400, 200, 1, "oreGold", ItemCuttingFluid.FluidType.BASIC.getStack()); - registrar.addAlchemyTable(new ItemStack(Items.REDSTONE, 8), 400, 200, 1, "oreRedstone", ItemCuttingFluid.FluidType.BASIC.getStack()); - registrar.addAlchemyTable(new ItemStack(Blocks.GRAVEL), 50, 50, 1, "cobblestone", ItemCuttingFluid.FluidType.EXPLOSIVE.getStack()); - registrar.addAlchemyTable(new ItemStack(Blocks.SAND), 50, 50, 1, Blocks.GRAVEL, ItemCuttingFluid.FluidType.EXPLOSIVE.getStack()); - registrar.addAlchemyTable(ComponentTypes.PLANT_OIL.getStack(), 100, 100, 1, "cropCarrot", "cropCarrot", "cropCarrot", new ItemStack(Items.DYE, 1, 15)); - registrar.addAlchemyTable(ComponentTypes.PLANT_OIL.getStack(), 100, 100, 1, "cropPotato", "cropPotato", new ItemStack(Items.DYE, 1, 15)); - registrar.addAlchemyTable(ComponentTypes.PLANT_OIL.getStack(), 100, 100, 1, "cropWheat", "cropWheat", new ItemStack(Items.DYE, 1, 15)); - registrar.addAlchemyTable(ComponentTypes.PLANT_OIL.getStack(), 100, 100, 1, Items.BEETROOT, Items.BEETROOT, Items.BEETROOT, new ItemStack(Items.DYE, 1, 15)); - registrar.addAlchemyTable(ComponentTypes.NEURO_TOXIN.getStack(), 1000, 100, 2, new ItemStack(Items.FISH, 1, 3)); - registrar.addAlchemyTable(ComponentTypes.ANTISEPTIC.getStack(2), 1000, 200, 2, ComponentTypes.PLANT_OIL.getStack(), "nuggetGold", "cropWheat", Items.SUGAR, Blocks.BROWN_MUSHROOM, Blocks.RED_MUSHROOM); - registrar.addAlchemyTable(ItemLivingArmourPointsUpgrade.UpgradeType.DRAFT_ANGELUS.getStack(), 20000, 400, 3, ComponentTypes.NEURO_TOXIN.getStack(), ComponentTypes.ANTISEPTIC.getStack(), "dustGold", Items.FERMENTED_SPIDER_EYE, new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD, 1, 0), Items.GHAST_TEAR); - registrar.addAlchemyTable(new ItemStack(RegistrarBloodMagicItems.POTION_FLASK), 1000, 200, 2, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WATER), "cropNetherWart", "dustRedstone", "dustGlowstone"); - registrar.addAlchemyTable(ComponentTypes.CATALYST_LENGTH_1.getStack(), 1000, 100, 2, "gunpowder", "cropNetherWart", "gemLapis"); - registrar.addAlchemyTable(ComponentTypes.CATALYST_POWER_1.getStack(), 1000, 100, 2, "gunpowder", "cropNetherWart", "dustRedstone"); - - Set addedOreRecipeList = Sets.newHashSet("oreIron", "oreGold", "oreCoal", "oreRedstone"); // We already added these above - String[] oreList = OreDictionary.getOreNames().clone(); - for (String ore : oreList) - { - if (ore.startsWith("ore") && !addedOreRecipeList.contains(ore)) - { - String dustName = ore.replaceFirst("ore", "dust"); - - List discoveredOres = OreDictionary.getOres(ore); - List dustList = OreDictionary.getOres(dustName); - if (dustList != null && !dustList.isEmpty() && discoveredOres != null && !discoveredOres.isEmpty()) - { - ItemStack dustStack = dustList.get(0).copy(); - dustStack.setCount(2); - registrar.addAlchemyTable(dustStack, 400, 200, 1, ore, ItemCuttingFluid.FluidType.BASIC.getStack()); - addedOreRecipeList.add(ore); - } - } - } - } - - public static void registerTartaricForgeRecipes(BloodMagicRecipeRegistrar registrar) - { - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), 1, 1, "dustRedstone", "ingotGold", "blockGlass", "dyeBlue"); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), 60, 20, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), "gemDiamond", "blockRedstone", "blockLapis"); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 2), 240, 50, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), "gemDiamond", "blockGold", ItemSlate.SlateType.IMBUED.getStack()); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 3), 1000, 100, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 2), ItemSlate.SlateType.DEMONIC.getStack(), new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD), EnumDemonWillType.DEFAULT.getStack()); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 4), 4000, 500, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 3), Items.NETHER_STAR); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SWORD), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_SWORD)); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_AXE), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_AXE)); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_PICKAXE), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_PICKAXE)); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_SHOVEL), 0, 0, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM), new ItemStack(Items.IRON_SHOVEL)); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_BOW), 70, 0, new ItemStack(Items.BOW), new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), "string", "string"); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.ARCANE_ASHES), 0, 0, "dustRedstone", "dyeWhite", "gunpowder", Items.COAL); - registrar.addTartaricForge(ComponentTypes.REAGENT_WATER.getStack(), 10, 3, new ItemStack(Items.SUGAR), new ItemStack(Items.WATER_BUCKET), new ItemStack(Items.WATER_BUCKET)); - registrar.addTartaricForge(ComponentTypes.REAGENT_LAVA.getStack(), 32, 10, Items.LAVA_BUCKET, "dustRedstone", "cobblestone", "blockCoal"); - registrar.addTartaricForge(ComponentTypes.REAGENT_VOID.getStack(), 64, 10, Items.BUCKET, "string", "string", "gunpowder"); - registrar.addTartaricForge(ComponentTypes.REAGENT_GROWTH.getStack(), 128, 20, "treeSapling", "treeSapling", "sugarcane", Items.SUGAR); - registrar.addTartaricForge(ComponentTypes.REAGENT_AIR.getStack(), 128, 20, Items.GHAST_TEAR, "feather", "feather"); - registrar.addTartaricForge(ComponentTypes.REAGENT_SIGHT.getStack(), 64, 0, RegistrarBloodMagicItems.SIGIL_DIVINATION, "blockGlass", "blockGlass", "dustGlowstone"); - registrar.addTartaricForge(ComponentTypes.REAGENT_HOLDING.getStack(), 64, 20, "chestWood", "leather", "string", "string"); - registrar.addTartaricForge(ComponentTypes.REAGENT_FAST_MINER.getStack(), 128, 10, Items.IRON_PICKAXE, Items.IRON_AXE, Items.IRON_SHOVEL, Items.GUNPOWDER); - registrar.addTartaricForge(ComponentTypes.REAGENT_AFFINITY.getStack(), 300, 30, RegistrarBloodMagicItems.SIGIL_WATER, RegistrarBloodMagicItems.SIGIL_AIR, RegistrarBloodMagicItems.SIGIL_LAVA, Blocks.OBSIDIAN); - registrar.addTartaricForge(ComponentTypes.REAGENT_SUPPRESSION.getStack(), 500, 50, RegistrarBloodMagicBlocks.TELEPOSER, Items.WATER_BUCKET, Items.LAVA_BUCKET, Items.BLAZE_ROD); - registrar.addTartaricForge(ComponentTypes.REAGENT_BINDING.getStack(), 400, 10, "dustGlowstone", "dustRedstone", "nuggetGold", Items.GUNPOWDER); - registrar.addTartaricForge(ComponentTypes.REAGENT_BLOOD_LIGHT.getStack(), 300, 10, "glowstone", Blocks.TORCH, "dustRedstone", "dustRedstone"); - registrar.addTartaricForge(ComponentTypes.REAGENT_MAGNETISM.getStack(), 600, 10, "string", "ingotGold", "blockIron", "ingotGold"); - registrar.addTartaricForge(ComponentTypes.REAGENT_HASTE.getStack(), 1400, 100, Items.COOKIE, Items.SUGAR, Items.COOKIE, "stone"); - registrar.addTartaricForge(ComponentTypes.REAGENT_BRIDGE.getStack(), 600, 50, Blocks.SOUL_SAND, Blocks.SOUL_SAND, "stone", Blocks.OBSIDIAN); - registrar.addTartaricForge(ComponentTypes.REAGENT_SEVERANCE.getStack(), 800, 70, Items.ENDER_EYE, Items.ENDER_PEARL, "ingotGold", "ingotGold"); - registrar.addTartaricForge(ComponentTypes.REAGENT_COMPRESSION.getStack(), 2000, 200, "blockIron", "blockGold", Blocks.OBSIDIAN, "cobblestone"); - registrar.addTartaricForge(ComponentTypes.REAGENT_TELEPOSITION.getStack(), 1500, 200, RegistrarBloodMagicBlocks.TELEPOSER, "glowstone", "blockRedstone", "ingotGold"); - registrar.addTartaricForge(ComponentTypes.REAGENT_TRANSPOSITION.getStack(), 1500, 200, RegistrarBloodMagicBlocks.TELEPOSER, "gemDiamond", Items.ENDER_PEARL, Blocks.OBSIDIAN); - registrar.addTartaricForge(ComponentTypes.REAGENT_CLAW.getStack(), 800, 120, Items.FLINT, Items.FLINT, ItemCuttingFluid.FluidType.BASIC.getStack()); - registrar.addTartaricForge(ComponentTypes.REAGENT_BOUNCE.getStack(), 200, 20, Blocks.SLIME_BLOCK, Blocks.SLIME_BLOCK, Items.LEATHER, "string"); - registrar.addTartaricForge(ComponentTypes.REAGENT_FROST.getStack(), 80, 10, Blocks.ICE, Items.SNOWBALL, Items.SNOWBALL, "dustRedstone"); - - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.SENTIENT_ARMOUR_GEM), 240, 150, Items.DIAMOND_CHESTPLATE, new ItemStack(RegistrarBloodMagicItems.SOUL_GEM, 1, 1), Blocks.IRON_BLOCK, Blocks.OBSIDIAN); - - registrar.addTartaricForge(ComponentTypes.FRAME_PART.getStack(), 400, 10, "blockGlass", "stone", ItemSlate.SlateType.BLANK.getStack()); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.NODE_ROUTER), 400, 5, "stickWood", ItemSlate.SlateType.REINFORCED.getStack(), "gemLapis", "gemLapis"); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE), 400, 5, "dustGlowstone", "dustRedstone", "blockGlass", "stone"); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE), 400, 25, "dustGlowstone", "dustRedstone", "ingotIron", new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE)); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE), 400, 25, "dustGlowstone", "dustRedstone", "ingotGold", new ItemStack(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE)); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE), 400, 200, "blockIron", "gemDiamond", ItemSlate.SlateType.IMBUED.getStack()); - - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 0), 1200, 100, EnumDemonWillType.DEFAULT.getStack(), EnumDemonWillType.DEFAULT.getStack(), EnumDemonWillType.DEFAULT.getStack(), EnumDemonWillType.DEFAULT.getStack()); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 1), 1200, 100, EnumDemonWillType.CORROSIVE.getStack(), EnumDemonWillType.CORROSIVE.getStack(), EnumDemonWillType.CORROSIVE.getStack(), EnumDemonWillType.CORROSIVE.getStack()); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 2), 1200, 100, EnumDemonWillType.DESTRUCTIVE.getStack(), EnumDemonWillType.DESTRUCTIVE.getStack(), EnumDemonWillType.DESTRUCTIVE.getStack(), EnumDemonWillType.DESTRUCTIVE.getStack()); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 3), 1200, 100, EnumDemonWillType.VENGEFUL.getStack(), EnumDemonWillType.VENGEFUL.getStack(), EnumDemonWillType.VENGEFUL.getStack(), EnumDemonWillType.VENGEFUL.getStack()); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTAL, 1, 4), 1200, 100, EnumDemonWillType.STEADFAST.getStack(), EnumDemonWillType.STEADFAST.getStack(), EnumDemonWillType.STEADFAST.getStack(), EnumDemonWillType.STEADFAST.getStack()); - - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRUCIBLE), 400, 100, Items.CAULDRON, "stone", "gemLapis", "gemDiamond"); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_PYLON), 400, 50, "blockIron", "stone", "gemLapis", RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicBlocks.DEMON_CRYSTALLIZER), 500, 100, RegistrarBloodMagicBlocks.SOUL_FORGE, "stone", "gemLapis", "blockGlass"); - registrar.addTartaricForge(new ItemStack(RegistrarBloodMagicItems.DEMON_WILL_GAUGE), 400, 50, "ingotGold", "dustRedstone", "blockGlass", RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL); - } - - public static void registerAlchemyArrayRecipes(BloodMagicRecipeRegistrar registrar) - { - registrar.addAlchemyArray(new ItemStack(Items.REDSTONE), ItemSlate.SlateType.BLANK.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_DIVINATION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/DivinationSigil.png")); - - registrar.addAlchemyArray(ComponentTypes.REAGENT_WATER.getStack(), ItemSlate.SlateType.BLANK.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_WATER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WaterSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_LAVA.getStack(), ItemSlate.SlateType.BLANK.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_LAVA), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/LavaSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_AIR.getStack(), ItemSlate.SlateType.REINFORCED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_AIR), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/AirSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_FAST_MINER.getStack(), ItemSlate.SlateType.REINFORCED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_FAST_MINER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_VOID.getStack(), ItemSlate.SlateType.REINFORCED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_VOID), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/VoidSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_GROWTH.getStack(), ItemSlate.SlateType.REINFORCED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_GREEN_GROVE), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/GrowthSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_AFFINITY.getStack(), ItemSlate.SlateType.IMBUED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_ELEMENTAL_AFFINITY), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/ElementalAffinitySigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_SIGHT.getStack(), ItemSlate.SlateType.REINFORCED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_SEER), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SightSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_HOLDING.getStack(), ItemSlate.SlateType.IMBUED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_HOLDING), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_BLOOD_LIGHT.getStack(), ItemSlate.SlateType.IMBUED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_BLOOD_LIGHT), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/LightSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_MAGNETISM.getStack(), ItemSlate.SlateType.IMBUED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_MAGNETISM), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MagnetismSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_SUPPRESSION.getStack(), ItemSlate.SlateType.DEMONIC.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_SUPPRESSION), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SuppressionSigil.png")); - registrar.addAlchemyArray(ComponentTypes.REAGENT_HASTE.getStack(), ItemSlate.SlateType.DEMONIC.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_HASTE), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_BRIDGE.getStack(), ItemSlate.SlateType.DEMONIC.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_PHANTOM_BRIDGE), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_COMPRESSION.getStack(), ItemSlate.SlateType.DEMONIC.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_COMPRESSION), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_SEVERANCE.getStack(), ItemSlate.SlateType.DEMONIC.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_ENDER_SEVERANCE), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_TELEPOSITION.getStack(), ItemSlate.SlateType.DEMONIC.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_TELEPOSITION), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_TRANSPOSITION.getStack(), ItemSlate.SlateType.DEMONIC.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_TRANSPOSITION), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_CLAW.getStack(), ItemSlate.SlateType.IMBUED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_CLAW), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_BOUNCE.getStack(), ItemSlate.SlateType.REINFORCED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_BOUNCE), null); - registrar.addAlchemyArray(ComponentTypes.REAGENT_FROST.getStack(), ItemSlate.SlateType.REINFORCED.getStack(), new ItemStack(RegistrarBloodMagicItems.SIGIL_FROST), null); - - } - - public static void registerSacrificeCraftRecipes(BloodMagicRecipeRegistrar registrar) - { - registrar.addSacrificeCraft(new ItemStack(RegistrarBloodMagicBlocks.TELEPOSER), 10, Items.REDSTONE); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/data/BMWorldSavedData.java b/src/main/java/WayofTime/bloodmagic/core/data/BMWorldSavedData.java deleted file mode 100644 index 70338a16..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/data/BMWorldSavedData.java +++ /dev/null @@ -1,58 +0,0 @@ -package WayofTime.bloodmagic.core.data; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.world.storage.WorldSavedData; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class BMWorldSavedData extends WorldSavedData { - public static final String ID = "BloodMagic-SoulNetworks"; - - private Map soulNetworks = new HashMap<>(); - - public BMWorldSavedData(String id) { - super(id); - } - - public BMWorldSavedData() { - this(ID); - } - - public SoulNetwork getNetwork(EntityPlayer player) { - return getNetwork(PlayerHelper.getUUIDFromPlayer(player)); - } - - public SoulNetwork getNetwork(UUID playerId) { - if (!soulNetworks.containsKey(playerId)) - soulNetworks.put(playerId, SoulNetwork.newEmpty(playerId).setParent(this)); - return soulNetworks.get(playerId); - } - - @Override - public void readFromNBT(NBTTagCompound tagCompound) { - NBTTagList networkData = tagCompound.getTagList("networkData", 10); - - for (int i = 0; i < networkData.tagCount(); i++) { - NBTTagCompound data = networkData.getCompoundTagAt(i); - SoulNetwork network = SoulNetwork.fromNBT(data); - network.setParent(this); - soulNetworks.put(network.getPlayerId(), network); - } - } - - @Override - public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) { - NBTTagList networkData = new NBTTagList(); - for (SoulNetwork soulNetwork : soulNetworks.values()) - networkData.appendTag(soulNetwork.serializeNBT()); - - tagCompound.setTag("networkData", networkData); - - return tagCompound; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/data/SoulNetwork.java b/src/main/java/WayofTime/bloodmagic/core/data/SoulNetwork.java deleted file mode 100644 index 4ba15109..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/data/SoulNetwork.java +++ /dev/null @@ -1,255 +0,0 @@ -package WayofTime.bloodmagic.core.data; - -import WayofTime.bloodmagic.event.SoulNetworkEvent; -import WayofTime.bloodmagic.util.BMLog; -import WayofTime.bloodmagic.util.BooleanResult; -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import com.google.common.collect.EvictingQueue; -import com.google.common.collect.ImmutableList; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.INBTSerializable; - -import javax.annotation.Nullable; -import java.util.List; -import java.util.Queue; -import java.util.UUID; - -public class SoulNetwork implements INBTSerializable { - - private final Queue ticketHistory; - private BMWorldSavedData parent; - private EntityPlayer cachedPlayer; - private UUID playerId; - private int currentEssence; - private int orbTier; - - private SoulNetwork() { - // No-op - For creation via NBT only - ticketHistory = EvictingQueue.create(16); - } - - public void clear() { - ticketHistory.clear(); - } - - public int add(SoulTicket ticket, int maximum) { - SoulNetworkEvent.Fill event = new SoulNetworkEvent.Fill(this, ticket, maximum); - if (MinecraftForge.EVENT_BUS.post(event)) - return 0; - - int currEss = getCurrentEssence(); - - if (currEss >= event.getMaximum()) - return 0; - - int newEss = Math.min(event.getMaximum(), currEss + event.getTicket().getAmount()); - setCurrentEssence(newEss); - - if (ticketHistory.contains(ticket)) - ticketHistory.remove(ticket); // "Pops" the existing ticket to the top of the queue - - ticketHistory.add(ticket); - - return newEss - currEss; - } - - /** - * @deprecated For future proofing, use {@link #add(SoulTicket, int)} instead. - */ - @Deprecated - public int add(int toAdd, int maximum) { - return add(new SoulTicket(toAdd), maximum); - } - - /** - * @deprecated Use {@link #add(SoulTicket, int)} instead. - */ - @Deprecated - public int addLifeEssence(int toAdd, int maximum) { - return add(toAdd, maximum); - } - - public int syphon(SoulTicket ticket) { - return syphon(ticket, false); - } - - public int syphon(SoulTicket ticket, boolean skipEvent) { - SoulNetworkEvent.Syphon event = new SoulNetworkEvent.Syphon(this, ticket); - if (!skipEvent && MinecraftForge.EVENT_BUS.post(event)) - return 0; - - int syphon = event.getTicket().getAmount(); - if (getCurrentEssence() >= syphon) { - setCurrentEssence(getCurrentEssence() - syphon); - if (ticketHistory.contains(ticket)) - ticketHistory.remove(ticket); - - ticketHistory.add(ticket); - return syphon; - } - - return 0; - } - - /** - * @deprecated For future proofing, use {@link #syphon(SoulTicket)} instead. - */ - @Deprecated - public int syphon(int amount) { - return syphon(new SoulTicket(amount)); - } - - public BooleanResult syphonAndDamage(EntityPlayer user, SoulTicket ticket) { - if (user.getEntityWorld().isRemote) - return BooleanResult.newResult(false, 0); - - SoulNetworkEvent.Syphon.User event = new SoulNetworkEvent.Syphon.User(this, ticket, user); - - if (MinecraftForge.EVENT_BUS.post(event)) - return BooleanResult.newResult(false, 0); - - int drainAmount = syphon(event.getTicket(), true); - - if (drainAmount <= 0 || event.shouldDamage()) - hurtPlayer(user, event.getTicket().getAmount()); - - if (ticketHistory.contains(ticket)) - ticketHistory.remove(ticket); - - ticketHistory.add(ticket); - - return BooleanResult.newResult(true, event.getTicket().getAmount()); - } - - /** - * @deprecated Use {@link #syphonAndDamage(EntityPlayer, SoulTicket)} instead. - */ - @Deprecated - public boolean syphonAndDamage(EntityPlayer user, int amount) { - return syphonAndDamage(user, new SoulTicket(amount)).isSuccess(); - } - - public void causeNausea() { - if (getPlayer() != null) - getPlayer().addPotionEffect(new PotionEffect(MobEffects.NAUSEA, 99)); - } - - /** - * @deprecated - Please use {@link #causeNausea()} - */ - @Deprecated - public void causeNauseaToPlayer() { - causeNausea(); - } - - public void hurtPlayer(EntityPlayer user, float syphon) { - if (user != null) { - if (syphon < 100 && syphon > 0) { - if (!user.capabilities.isCreativeMode) { - user.hurtResistantTime = 0; - user.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 1.0F); - } - - } else if (syphon >= 100) { - if (!user.capabilities.isCreativeMode) { - for (int i = 0; i < ((syphon + 99) / 100); i++) { - user.hurtResistantTime = 0; - user.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 1.0F); - } - } - } - } - } - - private void markDirty() { - if (getParent() != null) - getParent().markDirty(); - else - BMLog.DEFAULT.error("A SoulNetwork was created, but a parent was not set to allow saving."); - } - - @Nullable - public EntityPlayer getPlayer() { - if (cachedPlayer == null) - cachedPlayer = PlayerHelper.getPlayerFromUUID(playerId); - - return cachedPlayer; - } - - public BMWorldSavedData getParent() { - return parent; - } - - public SoulNetwork setParent(BMWorldSavedData parent) { - this.parent = parent; - markDirty(); - return this; - } - - public EntityPlayer getCachedPlayer() { - return cachedPlayer; - } - - public UUID getPlayerId() { - return playerId; - } - - public int getCurrentEssence() { - return currentEssence; - } - - public SoulNetwork setCurrentEssence(int currentEssence) { - this.currentEssence = currentEssence; - markDirty(); - return this; - } - - public int getOrbTier() { - return orbTier; - } - - public SoulNetwork setOrbTier(int orbTier) { - this.orbTier = orbTier; - markDirty(); - return this; - } - - public List getTicketHistory() { - return ImmutableList.copyOf(ticketHistory); - } - - // INBTSerializable - - @Override - public NBTTagCompound serializeNBT() { - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setString("playerId", getPlayerId().toString()); - tagCompound.setInteger("currentEssence", getCurrentEssence()); - tagCompound.setInteger("orbTier", getOrbTier()); - return tagCompound; - } - - @Override - public void deserializeNBT(NBTTagCompound nbt) { - this.playerId = UUID.fromString(nbt.getString("playerId")); - this.currentEssence = nbt.getInteger("currentEssence"); - this.orbTier = nbt.getInteger("orbTier"); - } - - public static SoulNetwork fromNBT(NBTTagCompound tagCompound) { - SoulNetwork soulNetwork = new SoulNetwork(); - soulNetwork.deserializeNBT(tagCompound); - return soulNetwork; - } - - public static SoulNetwork newEmpty(UUID uuid) { - SoulNetwork network = new SoulNetwork(); - network.playerId = uuid; - return network; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/data/SoulTicket.java b/src/main/java/WayofTime/bloodmagic/core/data/SoulTicket.java deleted file mode 100644 index 6d209dd5..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/data/SoulTicket.java +++ /dev/null @@ -1,85 +0,0 @@ -package WayofTime.bloodmagic.core.data; - -import net.minecraft.command.ICommandSender; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.world.World; - -public class SoulTicket { - - private static final ITextComponent EMPTY = new TextComponentString(""); - - private final ITextComponent description; - private final int amount; - - public SoulTicket(ITextComponent description, int amount) { - this.description = description; - this.amount = amount; - } - - public SoulTicket(int amount) { - this(EMPTY, amount); - } - - public boolean isSyphon() { - return amount < 0; - } - - public ITextComponent getDescription() { - return description; - } - - public int getAmount() { - return amount; - } - - /** - * @return A description in the format block|dimensionID|pos - */ - public static SoulTicket block(World world, BlockPos pos, int amount) { - return new SoulTicket(new TextComponentString("block|" + world.provider.getDimension() + "|" + pos.toLong()), amount); - } - - /** - * @return A description in the format item|item registry name|dimensionID|entityName|entityPos - */ - public static SoulTicket item(ItemStack itemStack, World world, Entity entity, int amount) { - return new SoulTicket(new TextComponentString("item|" + itemStack.getItem().getRegistryName() + "|" + world.provider.getDimension() + "|" + entity.getPersistentID()), amount); - } - - /** - * @return A description in the format item|item registry name|dimensionID|pos - */ - public static SoulTicket item(ItemStack itemStack, World world, BlockPos pos, int amount) { - return new SoulTicket(new TextComponentString("item|" + itemStack.getItem().getRegistryName() + "|" + world.provider.getDimension() + "|" + pos.toLong()), amount); - } - - /** - * @return A description in the format item|item registry name|dimensionID - */ - public static SoulTicket item(ItemStack itemStack, int amount) { - return new SoulTicket(new TextComponentString("item|" + itemStack.getItem().getRegistryName()), amount); - } - - public static SoulTicket command(ICommandSender sender, String command, int amount) { - return new SoulTicket(new TextComponentString("command|" + command + "|" + sender.getName()), amount); - } - - // TODO maybe make it check the amount?? - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o instanceof SoulTicket) - return ((SoulTicket) o).getDescription().equals(description); - - return false; - } - - @Override - public int hashCode() { - return description.hashCode(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/registry/AlchemyArrayRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/core/registry/AlchemyArrayRecipeRegistry.java deleted file mode 100644 index bc28b170..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/registry/AlchemyArrayRecipeRegistry.java +++ /dev/null @@ -1,350 +0,0 @@ -package WayofTime.bloodmagic.core.registry; - -import WayofTime.bloodmagic.util.ItemStackWrapper; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffect; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectCrafting; -import WayofTime.bloodmagic.alchemyArray.AlchemyCircleRenderer; -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.oredict.OreDictionary; - -import javax.annotation.Nullable; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; - -public class AlchemyArrayRecipeRegistry { - public static final AlchemyCircleRenderer DEFAULT_RENDERER = new AlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BaseArray.png")); - - private static BiMap, AlchemyArrayRecipe> recipes = HashBiMap.create(); - private static HashMap effectMap = new HashMap<>(); - - /** - * General case for creating an AlchemyArrayEffect for a given input. - * - * @param input - Input item(s) that is used to change the Alchemy Circle into the - * circle that you are making - * @param catalystStack - Catalyst item that, when right-clicked onto the array, will - * cause an effect - * @param arrayEffect - The effect that will be activated once the array is activated - * @param circleRenderer - Circle rendered when the array is passive - can be substituted - * for a special renderer - */ - public static void registerRecipe(List input, @Nullable ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer) { - effectMap.put(arrayEffect.getKey(), arrayEffect); - - for (Entry, AlchemyArrayRecipe> entry : recipes.entrySet()) { - AlchemyArrayRecipe arrayRecipe = entry.getValue(); - if (arrayRecipe.doesInputMatchRecipe(input)) { - AlchemyArrayEffect eff = arrayRecipe.getAlchemyArrayEffectForCatalyst(catalystStack); - if (eff != null) { - return; // Recipe already exists! - } else { - arrayRecipe.catalystMap.put(ItemStackWrapper.getHolder(catalystStack), arrayEffect); - if (circleRenderer != null) { - if (arrayRecipe.defaultCircleRenderer == null) { - arrayRecipe.defaultCircleRenderer = circleRenderer; - } else { - arrayRecipe.circleMap.put(ItemStackWrapper.getHolder(catalystStack), circleRenderer); - } - } - return; - } - } - } - - recipes.put(input, new AlchemyArrayRecipe(input, catalystStack, arrayEffect, circleRenderer == null ? DEFAULT_RENDERER : circleRenderer)); - } - - public static AlchemyArrayEffect getAlchemyArrayEffect(String key) { - return effectMap.get(key); - } - - /** - * @param key - * @return an array of two ItemStacks - first index is the input stack, - * second is the catalyst stack. Returns {null, null} if no recipe - * is valid. - */ - public static ItemStack[] getRecipeForArrayEffect(String key) { - for (Entry, AlchemyArrayRecipe> entry : recipes.entrySet()) { - AlchemyArrayRecipe recipe = entry.getValue(); - if (recipe != null && entry.getKey().size() > 0) { - for (Entry effectEntry : recipe.catalystMap.entrySet()) { - if (effectEntry.getValue() != null && effectEntry.getValue().key.equals(key)) { - return new ItemStack[]{entry.getKey().get(0), effectEntry.getKey().toStack()}; - } - } - } - } - - return new ItemStack[]{null, null}; - } - - /** - * @param stack of the recipe - * @return an array of two ItemStacks - first index is the input stack, - * second is the catalyst stack. Returns {null, null} if no recipe - * is valid. - */ - public static ItemStack[] getRecipeForOutputStack(ItemStack stack) { - for (Entry, AlchemyArrayRecipe> entry : recipes.entrySet()) { - AlchemyArrayRecipe recipe = entry.getValue(); - if (recipe != null && entry.getKey().size() > 0) { - for (Entry effectEntry : recipe.catalystMap.entrySet()) { - if (effectEntry.getValue() instanceof AlchemyArrayEffectCrafting) { - AlchemyArrayEffectCrafting craftingEffect = (AlchemyArrayEffectCrafting) effectEntry.getValue(); - ItemStack resultStack = craftingEffect.outputStack; - if (!resultStack.isEmpty()) { - if (resultStack.getItem() == stack.getItem() && resultStack.getItemDamage() == stack.getItemDamage()) { - return new ItemStack[]{entry.getKey().get(0), effectEntry.getKey().toStack()}; - } - } - } - } - } - } - - return new ItemStack[]{null, null}; - } - - public static void registerCraftingRecipe(ItemStack input, ItemStack catalystStack, ItemStack outputStack, ResourceLocation arrayResource) { - registerRecipe(input, catalystStack, new AlchemyArrayEffectCrafting(outputStack), arrayResource); - } - - public static void registerCraftingRecipe(List inputStacks, ItemStack catalystStack, ItemStack outputStack, ResourceLocation arrayResource) { - registerRecipe(inputStacks, catalystStack, new AlchemyArrayEffectCrafting(outputStack), arrayResource); - } - - public static void registerCraftingRecipe(String inputOreDict, ItemStack catalystStack, ItemStack outputStack, ResourceLocation arrayResource) { - registerRecipe(OreDictionary.doesOreNameExist(inputOreDict) && OreDictionary.getOres(inputOreDict).size() > 0 ? OreDictionary.getOres(inputOreDict) : Collections.emptyList(), catalystStack, new AlchemyArrayEffectCrafting(outputStack), arrayResource); - } - - public static void registerCraftingRecipe(ItemStack input, ItemStack catalystStack, ItemStack outputStack) { - registerRecipe(input, catalystStack, new AlchemyArrayEffectCrafting(outputStack)); - } - - public static void registerCraftingRecipe(List inputStacks, ItemStack catalystStack, ItemStack outputStack) { - registerRecipe(inputStacks, catalystStack, new AlchemyArrayEffectCrafting(outputStack)); - } - - public static void registerCraftingRecipe(String inputOreDict, ItemStack catalystStack, ItemStack outputStack) { - registerRecipe(OreDictionary.doesOreNameExist(inputOreDict) && OreDictionary.getOres(inputOreDict).size() > 0 ? OreDictionary.getOres(inputOreDict) : Collections.emptyList(), catalystStack, new AlchemyArrayEffectCrafting(outputStack)); - } - - public static void registerRecipe(ItemStack inputStacks, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, ResourceLocation arrayResource) { - AlchemyCircleRenderer circleRenderer = arrayResource == null ? DEFAULT_RENDERER : new AlchemyCircleRenderer(arrayResource); - registerRecipe(Collections.singletonList(inputStacks), catalystStack, arrayEffect, circleRenderer); - } - - public static void registerRecipe(ItemStack inputStacks, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer) { - registerRecipe(Collections.singletonList(inputStacks), catalystStack, arrayEffect, circleRenderer); - } - - public static void registerRecipe(List inputStacks, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, ResourceLocation arrayResource) { - AlchemyCircleRenderer circleRenderer = arrayResource == null ? DEFAULT_RENDERER : new AlchemyCircleRenderer(arrayResource); - registerRecipe(inputStacks, catalystStack, arrayEffect, circleRenderer); - } - - public static void registerRecipe(String inputOreDict, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, ResourceLocation arrayResource) { - AlchemyCircleRenderer circleRenderer = arrayResource == null ? DEFAULT_RENDERER : new AlchemyCircleRenderer(arrayResource); - registerRecipe(OreDictionary.doesOreNameExist(inputOreDict) && OreDictionary.getOres(inputOreDict).size() > 0 ? OreDictionary.getOres(inputOreDict) : Collections.emptyList(), catalystStack, arrayEffect, circleRenderer); - } - - public static void registerRecipe(ItemStack input, ItemStack catalystStack, AlchemyArrayEffect arrayEffect) { - registerRecipe(Collections.singletonList(input), catalystStack, arrayEffect, (AlchemyCircleRenderer) null); - } - - public static void registerRecipe(List inputStacks, ItemStack catalystStack, AlchemyArrayEffect arrayEffect) { - registerRecipe(inputStacks, catalystStack, arrayEffect, (AlchemyCircleRenderer) null); - } - - public static void registerRecipe(String inputOreDict, ItemStack catalystStack, AlchemyArrayEffect arrayEffect) { - registerRecipe(OreDictionary.doesOreNameExist(inputOreDict) && OreDictionary.getOres(inputOreDict).size() > 0 ? OreDictionary.getOres(inputOreDict) : Collections.emptyList(), catalystStack, arrayEffect, (AlchemyCircleRenderer) null); - } - - public static void replaceAlchemyCircle(List input, AlchemyCircleRenderer circleRenderer) { - if (circleRenderer == null) - return; - - for (Entry, AlchemyArrayRecipe> entry : recipes.entrySet()) { - AlchemyArrayRecipe arrayRecipe = entry.getValue(); - if (arrayRecipe.doesInputMatchRecipe(input)) - arrayRecipe.defaultCircleRenderer = circleRenderer; - } - } - - public static AlchemyArrayRecipe getRecipeForInput(List input) { - return recipes.get(input); - } - - public static AlchemyArrayEffect getAlchemyArrayEffect(List input, @Nullable ItemStack catalystStack) { - for (Entry, AlchemyArrayRecipe> entry : recipes.entrySet()) { - AlchemyArrayRecipe arrayRecipe = entry.getValue(); - if (input.size() == 1 && arrayRecipe.getInput().size() == 1) { - if (ItemStack.areItemsEqual(input.get(0), arrayRecipe.input.get(0))) { - AlchemyArrayEffect effect = arrayRecipe.getAlchemyArrayEffectForCatalyst(catalystStack); - if (effect != null) { - return effect.getNewCopy(); - } else { - return null; - } - } - } else { - if (input.equals(arrayRecipe.getInput())) { - AlchemyArrayEffect effect = arrayRecipe.getAlchemyArrayEffectForCatalyst(catalystStack); - if (effect != null) { - return effect.getNewCopy(); - } else { - return null; - } - } - } - } - - return null; - } - - public static AlchemyArrayEffect getAlchemyArrayEffect(ItemStack input, @Nullable ItemStack catalystStack) { - return getAlchemyArrayEffect(Collections.singletonList(input), catalystStack); - } - - public static AlchemyCircleRenderer getAlchemyCircleRenderer(List input, @Nullable ItemStack catalystStack) { - for (Entry, AlchemyArrayRecipe> entry : recipes.entrySet()) { - AlchemyArrayRecipe arrayRecipe = entry.getValue(); - if (arrayRecipe.doesInputMatchRecipe(input)) { - return arrayRecipe.getAlchemyArrayRendererForCatalyst(catalystStack); - } - } - - return DEFAULT_RENDERER; - } - - public static AlchemyCircleRenderer getAlchemyCircleRenderer(ItemStack itemStack, @Nullable ItemStack catalystStack) { - return getAlchemyCircleRenderer(Collections.singletonList(itemStack), catalystStack); - } - - public static BiMap, AlchemyArrayRecipe> getRecipes() { - return HashBiMap.create(recipes); - } - - public static class AlchemyArrayRecipe { - public final List input; - public final BiMap catalystMap = HashBiMap.create(); - public final BiMap circleMap = HashBiMap.create(); - public AlchemyCircleRenderer defaultCircleRenderer; - - private AlchemyArrayRecipe(List input, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer, boolean useless) { - this.input = input; - - catalystMap.put(ItemStackWrapper.getHolder(catalystStack), arrayEffect); - - this.defaultCircleRenderer = circleRenderer; - } - - public AlchemyArrayRecipe(ItemStack inputStack, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer) { - this(Collections.singletonList(inputStack), catalystStack, arrayEffect, circleRenderer, false); - } - - public AlchemyArrayRecipe(String inputOreDict, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer) { - this(OreDictionary.doesOreNameExist(inputOreDict) && OreDictionary.getOres(inputOreDict).size() > 0 ? OreDictionary.getOres(inputOreDict) : Collections.emptyList(), catalystStack, arrayEffect, circleRenderer, false); - } - - public AlchemyArrayRecipe(List inputStacks, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer) { - this(inputStacks, catalystStack, arrayEffect, circleRenderer, false); - } - - /** - * Compares the inputed list of ItemStacks to see if it matches with the - * recipe's list. - * - * @param comparedList - The list to compare with - * @return - True if the ItemStack(s) is a compatible item - */ - public boolean doesInputMatchRecipe(List comparedList) { - return !(comparedList == null || this.input == null) && (this.input.size() == 1 && comparedList.size() == 1 ? this.input.get(0).isItemEqual(comparedList.get(0)) : this.input.equals(comparedList)); - } - - /** - * Gets the actual AlchemyArrayEffect for the given catalyst. - * - * @param comparedStack The catalyst that is being checked - * @return - The effect - */ - public AlchemyArrayEffect getAlchemyArrayEffectForCatalyst(@Nullable ItemStack comparedStack) { - for (Entry entry : catalystMap.entrySet()) { - ItemStack catalystStack = entry.getKey().toStack(); - - if (comparedStack == null && catalystStack == null) - return entry.getValue(); - - if (comparedStack == null || catalystStack == null) - continue; - - if (catalystStack.isItemEqual(comparedStack)) - return entry.getValue(); - } - - return null; - } - - public AlchemyCircleRenderer getAlchemyArrayRendererForCatalyst(@Nullable ItemStack comparedStack) { - for (Entry entry : circleMap.entrySet()) { - ItemStack catalystStack = entry.getKey().toStack(); - - if (comparedStack == null && catalystStack == null) - return entry.getValue(); - - if (comparedStack == null || catalystStack == null) - continue; - - if (catalystStack.isItemEqual(comparedStack)) - return entry.getValue(); - } - - return defaultCircleRenderer; - } - - public AlchemyCircleRenderer getDefaultCircleRenderer() { - return defaultCircleRenderer; - } - - public List getInput() { - return input; - } - - public BiMap getCatalystMap() { - return catalystMap; - } - - public BiMap getCircleMap() { - return circleMap; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof AlchemyArrayRecipe)) return false; - - AlchemyArrayRecipe that = (AlchemyArrayRecipe) o; - - if (defaultCircleRenderer != null ? !defaultCircleRenderer.equals(that.defaultCircleRenderer) : that.defaultCircleRenderer != null) - return false; - if (input != null ? !input.equals(that.input) : that.input != null) return false; - if (catalystMap != null ? !catalystMap.equals(that.catalystMap) : that.catalystMap != null) return false; - return circleMap != null ? circleMap.equals(that.circleMap) : that.circleMap == null; - } - - @Override - public int hashCode() { - int result = defaultCircleRenderer != null ? defaultCircleRenderer.hashCode() : 0; - result = 31 * result + (input != null ? input.hashCode() : 0); - result = 31 * result + (catalystMap != null ? catalystMap.hashCode() : 0); - result = 31 * result + (circleMap != null ? circleMap.hashCode() : 0); - return result; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/registry/AlchemyTableRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/core/registry/AlchemyTableRecipeRegistry.java deleted file mode 100644 index d27e99c1..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/registry/AlchemyTableRecipeRegistry.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.core.registry; - -import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTableRecipe; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class AlchemyTableRecipeRegistry { - private static List recipeList = new ArrayList<>(); - - public static void registerRecipe(AlchemyTableRecipe recipe) { - recipeList.add(recipe); - } - - public static void registerRecipe(ItemStack outputStack, int lpDrained, int ticksRequired, int tierRequired, Object... objects) { - registerRecipe(new AlchemyTableRecipe(outputStack, lpDrained, ticksRequired, tierRequired, objects)); - } - - public static void removeRecipe(AlchemyTableRecipe recipe) { - recipeList.remove(recipe); - } - - public static AlchemyTableRecipe getMatchingRecipe(List itemList, World world, BlockPos pos) { - for (AlchemyTableRecipe recipe : recipeList) { - if (recipe.matches(itemList, world, pos)) { - return recipe; - } - } - - return null; - } - - public static List getRecipeList() { - return new ArrayList<>(recipeList); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/core/registry/AltarRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/core/registry/AltarRecipeRegistry.java deleted file mode 100644 index c0c74d3a..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/registry/AltarRecipeRegistry.java +++ /dev/null @@ -1,215 +0,0 @@ -package WayofTime.bloodmagic.core.registry; - -import WayofTime.bloodmagic.util.BMLog; -import WayofTime.bloodmagic.util.ItemStackWrapper; -import WayofTime.bloodmagic.altar.AltarTier; -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; -import org.apache.commons.lang3.builder.ToStringBuilder; - -import java.util.Collections; -import java.util.List; - -public class AltarRecipeRegistry { - private static BiMap, AltarRecipe> recipes = HashBiMap.create(); - - /** - * Registers an {@link AltarRecipe} for the Blood Altar. This can be a - * {@code ItemStack}, {@code List}, or {@code String} - * OreDictionary entry. - *

- * If the OreDictionary entry does not exist or is empty, it will not be - * registered. - * - * @param altarRecipe - The AltarRecipe to register - */ - public static void registerRecipe(AltarRecipe altarRecipe) { - if (!recipes.containsValue(altarRecipe) && altarRecipe.getInput().size() > 0) - recipes.put(altarRecipe.getInput(), altarRecipe); - else - BMLog.DEFAULT.error("Error adding altar recipe for input [{}].", altarRecipe.toString()); - } - - public static void registerFillRecipe(ItemStack orbStack, AltarTier tier, int maxForOrb, int consumeRate, int drainRate) { - registerRecipe(new AltarRecipe(orbStack, orbStack, tier, maxForOrb, consumeRate, drainRate, true)); - } - - public static void removeRecipe(AltarRecipe altarRecipe) { - recipes.remove(altarRecipe.getInput()); - } - - /** - * Gets the recipe that the provided input is registered to. - * - * @param input - The input ItemStack to get the recipe for - * @return - The recipe that the provided input is registered to. - */ - public static AltarRecipe getRecipeForInput(List input) { - List wrapperList = ItemStackWrapper.toWrapperList(input); - if (recipes.keySet().contains(wrapperList)) - return recipes.get(wrapperList); - - return null; - } - - //TODO: Determine a more time-effective method - public static AltarRecipe getRecipeForInput(ItemStack input) { - for (AltarRecipe recipe : recipes.values()) { - if (recipe.doesRequiredItemMatch(input, recipe.getMinTier())) { - return recipe; - } - } - - return null; - } - - public static AltarRecipe getRecipeForInput(String input) { - return getRecipeForInput(OreDictionary.getOres(input)); - } - - public static BiMap, AltarRecipe> getRecipes() { - return HashBiMap.create(recipes); - } - - public static class AltarRecipe { - private final List input; - private final ItemStack output; - private final AltarTier minTier; - private final int syphon, consumeRate, drainRate; - private final boolean fillable; - - /** - * Allows creation of a recipe for the - * {@link WayofTime.bloodmagic.block.BlockAltar} / - * {@link WayofTime.bloodmagic.tile.TileAltar}. The output ItemStack is - * allowed to be null as some recipes do not contain an output. (Blood - * Orbs) - * - * @param input - The input ItemStack - * @param output - The ItemStack obtained from the recipe - * @param minTier - The minimum tier of Altar required - * @param syphon - The amount of LP to syphon from the Altar - * @param consumeRate - The rate at which LP is consumed during crafting - * @param drainRate - The rate at which LP is drained during crafting - * @param fillable - Whether the input item can be filled with LP. IE: Orbs - */ - public AltarRecipe(List input, ItemStack output, AltarTier minTier, int syphon, int consumeRate, int drainRate, boolean fillable) { - this.input = ItemStackWrapper.toWrapperList(input); - this.output = output; - this.minTier = minTier; - this.syphon = syphon < 0 ? -syphon : syphon; - this.consumeRate = consumeRate < 0 ? -consumeRate : consumeRate; - this.drainRate = drainRate < 0 ? -drainRate : drainRate; - this.fillable = fillable; - } - - public AltarRecipe(List input, ItemStack output, AltarTier minTier, int syphon, int consumeRate, int drainRate) { - this(input, output, minTier, syphon, consumeRate, drainRate, false); - } - - public AltarRecipe(ItemStack input, ItemStack output, AltarTier minTier, int syphon, int consumeRate, int drainRate, boolean fillable) { - this(Collections.singletonList(input), output, minTier, syphon, consumeRate, drainRate, fillable); - } - - public AltarRecipe(ItemStack input, ItemStack output, AltarTier minTier, int syphon, int consumeRate, int drainRate) { - this(Collections.singletonList(input), output, minTier, syphon, consumeRate, drainRate, false); - } - - public AltarRecipe(String inputEntry, ItemStack output, AltarTier minTier, int syphon, int consumeRate, int drainRate, boolean fillable) { - this(OreDictionary.doesOreNameExist(inputEntry) && OreDictionary.getOres(inputEntry).size() > 0 ? OreDictionary.getOres(inputEntry) : Collections.emptyList(), output, minTier, syphon, consumeRate, drainRate, fillable); - } - - public AltarRecipe(String inputEntry, ItemStack output, AltarTier minTier, int syphon, int consumeRate, int drainRate) { - this(OreDictionary.doesOreNameExist(inputEntry) && OreDictionary.getOres(inputEntry).size() > 0 ? OreDictionary.getOres(inputEntry) : Collections.emptyList(), output, minTier, syphon, consumeRate, drainRate, false); - } - - public boolean doesRequiredItemMatch(ItemStack comparedStack, AltarTier tierCheck) { - if (comparedStack == null || this.input == null) - return false; - - if (tierCheck.ordinal() < minTier.ordinal()) - return false; - - for (ItemStackWrapper stack : input) { - if (comparedStack.isItemEqual(stack.toStack())) - return true; - - if (comparedStack.getItem() == stack.item && stack.meta == OreDictionary.WILDCARD_VALUE) - return true; - } - - return false; - } - - public List getInput() { - return input; - } - - public ItemStack getOutput() { - return output; - } - - public AltarTier getMinTier() { - return minTier; - } - - public int getSyphon() { - return syphon; - } - - public int getConsumeRate() { - return consumeRate; - } - - public int getDrainRate() { - return drainRate; - } - - public boolean isFillable() { - return fillable; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof AltarRecipe)) return false; - - AltarRecipe that = (AltarRecipe) o; - - if (syphon != that.syphon) return false; - if (consumeRate != that.consumeRate) return false; - if (drainRate != that.drainRate) return false; - if (fillable != that.fillable) return false; - if (input != null ? !input.equals(that.input) : that.input != null) return false; - if (output != null ? !output.equals(that.output) : that.output != null) return false; - return minTier == that.minTier; - } - - @Override - public int hashCode() { - int result = input != null ? input.hashCode() : 0; - result = 31 * result + (output != null ? output.hashCode() : 0); - result = 31 * result + (minTier != null ? minTier.hashCode() : 0); - result = 31 * result + syphon; - result = 31 * result + consumeRate; - result = 31 * result + drainRate; - result = 31 * result + (fillable ? 1 : 0); - return result; - } - - @Override - public String toString() { - return new ToStringBuilder(this) - .append("input", input) - .append("output", output) - .append("minTier", minTier) - .append("syphon", syphon) - .append("consumeRate", consumeRate) - .append("drainRate", drainRate) - .append("fillable", fillable) - .toString(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/core/registry/LivingArmourDowngradeRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/core/registry/LivingArmourDowngradeRecipeRegistry.java deleted file mode 100644 index 61a28fb5..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/registry/LivingArmourDowngradeRecipeRegistry.java +++ /dev/null @@ -1,60 +0,0 @@ -package WayofTime.bloodmagic.core.registry; - -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.recipe.LivingArmourDowngradeRecipe; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -public class LivingArmourDowngradeRecipeRegistry { - private static List recipeList = new ArrayList<>(); - private static Map>> dialogueMap = new HashMap<>(); - - public static void registerRecipe(LivingArmourDowngradeRecipe recipe) { - recipeList.add(recipe); - } - - public static void registerDialog(ItemStack keyStack, Map> map) { - dialogueMap.put(keyStack, map); - } - - public static List getDialogForProcessTick(ItemStack keyStack, int tick) { - for (Entry>> entry : dialogueMap.entrySet()) { - ItemStack key = entry.getKey(); - if (OreDictionary.itemMatches(key, keyStack, false)) { - Map> map = entry.getValue(); - if (map.containsKey(tick)) { - return map.get(tick); - } - } - } - - return null; - } - - public static void registerRecipe(LivingArmourUpgrade upgrade, ItemStack keyStack, Object... recipe) { - registerRecipe(new LivingArmourDowngradeRecipe(upgrade, keyStack, recipe)); - } - - public static LivingArmourDowngradeRecipe getMatchingRecipe(ItemStack keyStack, List itemList, World world, BlockPos pos) { - for (LivingArmourDowngradeRecipe recipe : recipeList) { - if (recipe.matches(keyStack, itemList, world, pos)) { - return recipe; - } - } - - return null; - } - - public static List getRecipeList() { - return new ArrayList<>(recipeList); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/core/registry/OrbRegistry.java b/src/main/java/WayofTime/bloodmagic/core/registry/OrbRegistry.java deleted file mode 100644 index 81267670..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/registry/OrbRegistry.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.bloodmagic.core.registry; - -import WayofTime.bloodmagic.altar.AltarTier; -import WayofTime.bloodmagic.orb.BloodOrb; -import com.google.common.collect.ArrayListMultimap; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.common.registry.GameRegistry; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * This is only for those who wish to add a basic {@link BloodOrb}. If you need - * custom handling, you will need your own item class. - */ -@Deprecated -public class OrbRegistry { - @GameRegistry.ObjectHolder("bloodmagic:blood_orb") - private static final Item ORB_ITEM = null; - public static ArrayListMultimap tierMap = ArrayListMultimap.create(); - private static List orbs = new ArrayList<>(); - - public static List getOrbsForTier(int tier) { - if (getTierMap().containsKey(tier)) - return getTierMap().get(tier); - - return Collections.emptyList(); - } - - public static List getOrbsUpToTier(int tier) { - List ret = new ArrayList<>(); - - for (int i = 1; i <= tier; i++) - ret.addAll(getOrbsForTier(i)); - - return ret; - } - - public static List getOrbsDownToTier(int tier) { - List ret = new ArrayList<>(); - - for (int i = AltarTier.MAXTIERS; i >= tier; i--) - ret.addAll(getOrbsForTier(i)); - - return ret; - } - - public static ItemStack getOrbStack(BloodOrb orb) { - ItemStack ret = new ItemStack(ORB_ITEM); - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("orb", orb.getRegistryName().toString()); - ret.setTagCompound(tag); - return ret; - } - - public static ArrayListMultimap getTierMap() { - return ArrayListMultimap.create(tierMap); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/core/registry/TartaricForgeRecipeRegistry.java b/src/main/java/WayofTime/bloodmagic/core/registry/TartaricForgeRecipeRegistry.java deleted file mode 100644 index 595310ae..00000000 --- a/src/main/java/WayofTime/bloodmagic/core/registry/TartaricForgeRecipeRegistry.java +++ /dev/null @@ -1,39 +0,0 @@ -package WayofTime.bloodmagic.core.registry; - -import WayofTime.bloodmagic.recipe.TartaricForgeRecipe; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class TartaricForgeRecipeRegistry { - private static List recipeList = new ArrayList<>(); - - public static void registerRecipe(TartaricForgeRecipe recipe) { - recipeList.add(recipe); - } - - public static void registerRecipe(ItemStack outputStack, double minimulSouls, double drain, Object... objects) { - registerRecipe(new TartaricForgeRecipe(outputStack, minimulSouls, drain, objects)); - } - - public static void removeRecipe(TartaricForgeRecipe recipe) { - recipeList.remove(recipe); - } - - public static TartaricForgeRecipe getMatchingRecipe(List itemList, World world, BlockPos pos) { - for (TartaricForgeRecipe recipe : recipeList) { - if (recipe.matches(itemList, world, pos)) { - return recipe; - } - } - - return null; - } - - public static List getRecipeList() { - return new ArrayList<>(recipeList); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/demonAura/PosXY.java b/src/main/java/WayofTime/bloodmagic/demonAura/PosXY.java deleted file mode 100644 index f2b3f4c3..00000000 --- a/src/main/java/WayofTime/bloodmagic/demonAura/PosXY.java +++ /dev/null @@ -1,65 +0,0 @@ -package WayofTime.bloodmagic.demonAura; - -import org.apache.commons.lang3.builder.ToStringBuilder; - -public class PosXY implements Comparable { - public int x; - public int y; - - public PosXY() { - } - - public PosXY(int x, int y) { - this.x = x; - this.y = y; - } - - @Override - public int compareTo(PosXY c) { - return this.y == c.y ? this.x - c.x : this.y - c.y; - } - - public float getDistanceSquared(int x, int z) { - float f = this.x - x; - float f2 = this.y - z; - return f * f + f2 * f2; - } - - public float getDistanceSquaredToChunkCoordinates(PosXY c) { - return getDistanceSquared(c.x, c.y); - } - - public void setX(int x) { - this.x = x; - } - - public void setY(int y) { - this.y = y; - } - - @Override - public String toString() { - return new ToStringBuilder(this) - .append("x", x) - .append("y", y) - .toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof PosXY)) return false; - - PosXY posXY = (PosXY) o; - - if (x != posXY.x) return false; - return y == posXY.y; - } - - @Override - public int hashCode() { - int result = x; - result = 31 * result + y; - return result; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/demonAura/WillChunk.java b/src/main/java/WayofTime/bloodmagic/demonAura/WillChunk.java deleted file mode 100644 index 658280f0..00000000 --- a/src/main/java/WayofTime/bloodmagic/demonAura/WillChunk.java +++ /dev/null @@ -1,60 +0,0 @@ -package WayofTime.bloodmagic.demonAura; - -import WayofTime.bloodmagic.soul.DemonWillHolder; -import net.minecraft.world.chunk.Chunk; - -import java.lang.ref.WeakReference; - -public class WillChunk { - PosXY loc; - private short base; - private DemonWillHolder currentWill = new DemonWillHolder(); - private WeakReference chunkRef; - - public WillChunk(PosXY loc) { - this.loc = loc; - } - - public WillChunk(Chunk chunk, short base, DemonWillHolder currentWill) { - this.loc = new PosXY(chunk.x, chunk.z); - this.chunkRef = new WeakReference(chunk); - this.base = base; - this.currentWill = currentWill; - } - - public boolean isModified() { - return (this.chunkRef != null) && (this.chunkRef.get() != null) && this.chunkRef.get().needsSaving(false); - } - - public PosXY getLoc() { - return loc; - } - - public void setLoc(PosXY loc) { - this.loc = loc; - } - - public short getBase() { - return base; - } - - public void setBase(short base) { - this.base = base; - } - - public DemonWillHolder getCurrentWill() { - return currentWill; - } - - public void setCurrentWill(DemonWillHolder currentWill) { - this.currentWill = currentWill; - } - - public WeakReference getChunkRef() { - return chunkRef; - } - - public void setChunkRef(WeakReference chunkRef) { - this.chunkRef = chunkRef; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/demonAura/WillWorld.java b/src/main/java/WayofTime/bloodmagic/demonAura/WillWorld.java deleted file mode 100644 index 76bf8a75..00000000 --- a/src/main/java/WayofTime/bloodmagic/demonAura/WillWorld.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.bloodmagic.demonAura; - -import java.util.concurrent.ConcurrentHashMap; - -public class WillWorld { - int dim; - ConcurrentHashMap willChunks = new ConcurrentHashMap<>(); - -// private static ConcurrentHashMap nodeTickets = new ConcurrentHashMap(); - - public WillWorld(int dim) { - this.dim = dim; - } - - public WillChunk getWillChunkAt(int x, int y) { - return getWillChunkAt(new PosXY(x, y)); - } - - public WillChunk getWillChunkAt(PosXY loc) { - return this.willChunks.get(loc); - } - - public ConcurrentHashMap getWillChunks() { - return willChunks; - } - - public void setWillChunks(ConcurrentHashMap willChunks) { - this.willChunks = willChunks; - } - -// public static ConcurrentHashMap getNodeTickets() -// { -// return nodeTickets; -// } -// -// public static void setNodeTickets(ConcurrentHashMap nodeTickets) -// { -// nodeTickets = nodeTickets; -// } -} diff --git a/src/main/java/WayofTime/bloodmagic/demonAura/WorldDemonWillHandler.java b/src/main/java/WayofTime/bloodmagic/demonAura/WorldDemonWillHandler.java deleted file mode 100644 index bd37857a..00000000 --- a/src/main/java/WayofTime/bloodmagic/demonAura/WorldDemonWillHandler.java +++ /dev/null @@ -1,178 +0,0 @@ -package WayofTime.bloodmagic.demonAura; - -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; - -import javax.annotation.Nullable; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; - -public class WorldDemonWillHandler { - public static ConcurrentHashMap> dirtyChunks = new ConcurrentHashMap<>(); - static ConcurrentHashMap containedWills = new ConcurrentHashMap<>(); - - @Nullable - public static DemonWillHolder getWillHolder(int dim, int x, int y) { - WillChunk chunk = getWillChunk(dim, x, y); - if (chunk != null) { - return chunk.getCurrentWill(); - } - - return null; - } - - public static DemonWillHolder getWillHolder(World world, BlockPos pos) { - return getWillHolder(world.provider.getDimension(), pos.getX() >> 4, pos.getZ() >> 4); - } - - public static WillWorld getWillWorld(int dim) { - return containedWills.get(dim); - } - - @Nullable - public static WillChunk getWillChunk(int dim, int x, int y) { - if (!containedWills.containsKey(dim)) { - addWillWorld(dim); - } - - return (containedWills.get(dim)).getWillChunkAt(x, y); - } - - public static void addWillWorld(int dim) { - if (!containedWills.containsKey(dim)) { - containedWills.put(dim, new WillWorld(dim)); - BMLog.DEBUG.info("Creating demon will cache for world {}", dim); - } - } - - public static void removeWillWorld(int dim) { - containedWills.remove(dim); - BMLog.DEBUG.info("Removing demon will cache for world {}", dim); - } - - public static void addWillChunk(int dim, Chunk chunk, short base, DemonWillHolder currentWill) { - WillWorld aw = containedWills.get(dim); - if (aw == null) { - aw = new WillWorld(dim); - } - aw.getWillChunks().put(new PosXY(chunk.x, chunk.z), new WillChunk(chunk, base, currentWill)); - - containedWills.put(dim, aw); - } - - public static void removeWillChunk(int dim, int x, int y) { - WillWorld aw = containedWills.get(dim); - if (aw != null) { - WillChunk chunk = aw.getWillChunks().remove(new PosXY(x, y)); - if (chunk != null) { - markChunkAsDirty(chunk, dim); - } - } - } - - public static EnumDemonWillType getHighestDemonWillType(World world, BlockPos pos) { - double currentMax = 0; - EnumDemonWillType currentHighest = EnumDemonWillType.DEFAULT; - - WillChunk willChunk = getWillChunk(world, pos); - - DemonWillHolder currentWill = willChunk.getCurrentWill(); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - if (currentWill.getWill(type) > currentMax) { - currentMax = currentWill.getWill(type); - currentHighest = type; - } - } - - return currentHighest; - } - - public static double drainWill(World world, BlockPos pos, EnumDemonWillType type, double amount, boolean doDrain) { - WillChunk willChunk = getWillChunk(world, pos); - - DemonWillHolder currentWill = willChunk.getCurrentWill(); - double drain = Math.min(currentWill.getWill(type), amount); - if (!doDrain) { - return drain; - } - - drain = currentWill.drainWill(type, drain); - markChunkAsDirty(willChunk, world.provider.getDimension()); - - return drain; - } - - public static double fillWillToMaximum(World world, BlockPos pos, EnumDemonWillType type, double amount, double max, boolean doFill) { - WillChunk willChunk = getWillChunk(world, pos); - - DemonWillHolder currentWill = willChunk.getCurrentWill(); - double fill = Math.min(amount, max - currentWill.getWill(type)); - if (!doFill || fill <= 0) { - return fill > 0 ? fill : 0; - } - - fill = currentWill.addWill(type, amount, max); - markChunkAsDirty(willChunk, world.provider.getDimension()); - - return fill; - } - - public static double fillWill(World world, BlockPos pos, EnumDemonWillType type, double amount, boolean doFill) { - WillChunk willChunk = getWillChunk(world, pos); - - DemonWillHolder currentWill = willChunk.getCurrentWill(); - if (!doFill) { - return amount; - } - - currentWill.addWill(type, amount); - markChunkAsDirty(willChunk, world.provider.getDimension()); - - return amount; - } - - public static WillChunk getWillChunk(World world, BlockPos pos) { - WillChunk willChunk = getWillChunk(world.provider.getDimension(), pos.getX() >> 4, pos.getZ() >> 4); - if (willChunk == null) { - Chunk chunk = world.getChunkFromBlockCoords(pos); - generateWill(chunk); - - willChunk = getWillChunk(world.provider.getDimension(), pos.getX() >> 4, pos.getZ() >> 4); - } - - return willChunk; - } - - public static double getCurrentWill(World world, BlockPos pos, EnumDemonWillType type) { - WillChunk willChunk = getWillChunk(world, pos); - - if (willChunk == null) { - return 0; - } - - DemonWillHolder currentWill = willChunk.getCurrentWill(); - return currentWill.getWill(type); - } - - private static void markChunkAsDirty(WillChunk chunk, int dim) { - if (chunk.isModified()) { - return; - } - PosXY pos = new PosXY(chunk.loc.x, chunk.loc.y); - if (!dirtyChunks.containsKey(dim)) { - dirtyChunks.put(dim, new CopyOnWriteArrayList<>()); - } - CopyOnWriteArrayList dc = dirtyChunks.get(dim); - if (!dc.contains(pos)) { - dc.add(pos); - } - } - - public static void generateWill(Chunk chunk) { - addWillChunk(chunk.getWorld().provider.getDimension(), chunk, (short) 1, new DemonWillHolder()); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackRangedBow.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackRangedBow.java deleted file mode 100644 index f6eb575c..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackRangedBow.java +++ /dev/null @@ -1,138 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityDemonBase; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.item.ItemBow; -import net.minecraft.util.EnumHand; - -public class EntityAIAttackRangedBow extends EntityAIBase { - private final EntityDemonBase entity; - private final double moveSpeedAmp; - private final float maxAttackDistance; - private int attackCooldown; - private int attackTime = -1; - private int seeTime; - private boolean strafingClockwise; - private boolean strafingBackwards; - private int strafingTime = -1; - - public EntityAIAttackRangedBow(EntityDemonBase entityDemonBase, double speedAmplifier, int delay, float maxDistance) { - this.entity = entityDemonBase; - this.moveSpeedAmp = speedAmplifier; - this.attackCooldown = delay; - this.maxAttackDistance = maxDistance * maxDistance; - this.setMutexBits(3); - } - - public void setAttackCooldown(int p_189428_1_) { - this.attackCooldown = p_189428_1_; - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - return this.entity.getAttackTarget() != null && this.isBowInMainhand(); - } - - protected boolean isBowInMainhand() { - return this.entity.getHeldItemMainhand().getItem() instanceof ItemBow; - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean continueExecuting() { - return (this.shouldExecute() || !this.entity.getNavigator().noPath()) && this.isBowInMainhand(); - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - super.startExecuting(); - } - - /** - * Resets the task - */ - public void resetTask() { - super.startExecuting(); - this.seeTime = 0; - this.attackTime = -1; - this.entity.resetActiveHand(); - } - - /** - * Updates the task - */ - public void updateTask() { - EntityLivingBase entitylivingbase = this.entity.getAttackTarget(); - - if (entitylivingbase != null) { - double d0 = this.entity.getDistanceSq(entitylivingbase.posX, entitylivingbase.getEntityBoundingBox().minY, entitylivingbase.posZ); - boolean flag = this.entity.getEntitySenses().canSee(entitylivingbase); - boolean flag1 = this.seeTime > 0; - - if (flag != flag1) { - this.seeTime = 0; - } - - if (flag) { - ++this.seeTime; - } else { - --this.seeTime; - } - - if (d0 <= (double) this.maxAttackDistance && this.seeTime >= 20) { - this.entity.getNavigator().clearPath(); - ++this.strafingTime; - } else { - this.entity.getNavigator().tryMoveToEntityLiving(entitylivingbase, this.moveSpeedAmp); - this.strafingTime = -1; - } - - if (this.strafingTime >= 20) { - if ((double) this.entity.getRNG().nextFloat() < 0.3D) { - this.strafingClockwise = !this.strafingClockwise; - } - - if ((double) this.entity.getRNG().nextFloat() < 0.3D) { - this.strafingBackwards = !this.strafingBackwards; - } - - this.strafingTime = 0; - } - - if (this.strafingTime > -1) { - if (d0 > (double) (this.maxAttackDistance * 0.75F)) { - this.strafingBackwards = false; - } else if (d0 < (double) (this.maxAttackDistance * 0.25F)) { - this.strafingBackwards = true; - } - - this.entity.getMoveHelper().strafe(this.strafingBackwards ? -0.5F : 0.5F, this.strafingClockwise ? 0.5F : -0.5F); - this.entity.faceEntity(entitylivingbase, 30.0F, 30.0F); - } else { - this.entity.getLookHelper().setLookPositionWithEntity(entitylivingbase, 30.0F, 30.0F); - } - - if (this.entity.isHandActive()) { - if (!flag && this.seeTime < -60) { - this.entity.resetActiveHand(); - } else if (flag) { - int i = this.entity.getItemInUseMaxCount(); - - if (i >= 20) { - this.entity.resetActiveHand(); - this.entity.attackEntityWithRangedAttack(entitylivingbase, ItemBow.getArrowVelocity(i)); - this.attackTime = this.attackCooldown; - } - } - } else if (--this.attackTime <= 0 && this.seeTime >= -60) { - this.entity.setActiveHand(EnumHand.MAIN_HAND); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackStealthMelee.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackStealthMelee.java deleted file mode 100644 index 0a2df18c..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIAttackStealthMelee.java +++ /dev/null @@ -1,142 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedChicken; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.pathfinding.Path; -import net.minecraft.util.EnumHand; -import net.minecraft.world.World; - -public class EntityAIAttackStealthMelee extends EntityAIBase { - protected final int attackInterval = 20; - protected EntityCorruptedChicken chicken; - /** - * An amount of decrementing ticks that allows the entity to attack once the - * tick reaches 0. - */ - protected int attackTick; - World worldObj; - /** - * The speed with which the mob will approach the target - */ - double speedTowardsTarget; - /** - * When true, the mob will continue chasing its target, even if it can't - * find a path to them right now. - */ - boolean longMemory; - /** - * The PathEntity of our entity. - */ - Path entityPathEntity; - private int delayCounter; - private double targetX; - private double targetY; - private double targetZ; - private int failedPathFindingPenalty = 0; - private boolean canPenalize = false; - - public EntityAIAttackStealthMelee(EntityCorruptedChicken creature, double speedIn, boolean useLongMemory) { - this.chicken = creature; - this.worldObj = creature.getEntityWorld(); - this.speedTowardsTarget = speedIn; - this.longMemory = useLongMemory; - this.setMutexBits(3); - } - - @Override - public boolean shouldExecute() { - if (chicken.attackStateMachine != 1) { - return false; - } - - EntityLivingBase entitylivingbase = this.chicken.getAttackTarget(); - - if (entitylivingbase == null) { - return false; - } else if (!entitylivingbase.isEntityAlive()) { - return false; - } else { - if (canPenalize) { - if (--this.delayCounter <= 0) { - this.entityPathEntity = this.chicken.getNavigator().getPathToEntityLiving(entitylivingbase); - this.delayCounter = 4 + this.chicken.getRNG().nextInt(7); - return this.entityPathEntity != null; - } else { - return true; - } - } - this.entityPathEntity = this.chicken.getNavigator().getPathToEntityLiving(entitylivingbase); - return this.entityPathEntity != null; - } - } - - @Override - public boolean shouldContinueExecuting() { - return chicken.attackStateMachine == 1 && super.shouldContinueExecuting(); - } - - @Override - public void resetTask() { - if (chicken.attackStateMachine == 1) { - chicken.attackStateMachine = 0; - } - } - - @Override - public void updateTask() { - EntityLivingBase entitylivingbase = this.chicken.getAttackTarget(); - this.chicken.getLookHelper().setLookPositionWithEntity(entitylivingbase, 30.0F, 30.0F); - double d0 = this.chicken.getDistanceSq(entitylivingbase.posX, entitylivingbase.getEntityBoundingBox().minY, entitylivingbase.posZ); - --this.delayCounter; - - if ((this.longMemory || this.chicken.getEntitySenses().canSee(entitylivingbase)) && this.delayCounter <= 0 && (this.targetX == 0.0D && this.targetY == 0.0D && this.targetZ == 0.0D || entitylivingbase.getDistanceSq(this.targetX, this.targetY, this.targetZ) >= 1.0D || this.chicken.getRNG().nextFloat() < 0.05F)) { - this.targetX = entitylivingbase.posX; - this.targetY = entitylivingbase.getEntityBoundingBox().minY; - this.targetZ = entitylivingbase.posZ; - this.delayCounter = 4 + this.chicken.getRNG().nextInt(7); - - if (this.canPenalize) { - this.delayCounter += failedPathFindingPenalty; - if (this.chicken.getNavigator().getPath() != null) { - net.minecraft.pathfinding.PathPoint finalPathPoint = this.chicken.getNavigator().getPath().getFinalPathPoint(); - if (finalPathPoint != null && entitylivingbase.getDistanceSq(finalPathPoint.x, finalPathPoint.y, finalPathPoint.z) < 1) - failedPathFindingPenalty = 0; - else - failedPathFindingPenalty += 10; - } else { - failedPathFindingPenalty += 10; - } - } - - if (d0 > 1024.0D) { - this.delayCounter += 10; - } else if (d0 > 256.0D) { - this.delayCounter += 5; - } - - if (!this.chicken.getNavigator().tryMoveToEntityLiving(entitylivingbase, this.speedTowardsTarget)) { - this.delayCounter += 15; - } - } - - this.attackTick = Math.max(this.attackTick - 1, 0); - this.attackEntity(entitylivingbase, d0); - } - - protected void attackEntity(EntityLivingBase attacked, double distance) { - double d0 = this.getAttackReachSqr(attacked); - - if (distance <= d0 && this.attackTick <= 0) { - this.attackTick = 20; - this.chicken.swingArm(EnumHand.MAIN_HAND); - this.chicken.attackEntityAsMob(attacked); - - chicken.attackStateMachine = 2; - } - } - - protected double getAttackReachSqr(EntityLivingBase attackTarget) { - return (double) (this.chicken.width * 2.0F * this.chicken.width * 2.0F + attackTarget.width); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIEatAndCorruptBlock.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIEatAndCorruptBlock.java deleted file mode 100644 index a7718a6b..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIEatAndCorruptBlock.java +++ /dev/null @@ -1,99 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityAspectedDemonBase; -import WayofTime.bloodmagic.inversion.CorruptionHandler; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class EntityAIEatAndCorruptBlock extends EntityAIBase { - /** - * The entity owner of this AITask - */ - private final EntityAspectedDemonBase grassEaterEntity; - /** - * The world the grass eater entity is eating from - */ - private final World world; - /** - * Number of ticks since the entity started to eat grass - */ - int eatingGrassTimer; - - public EntityAIEatAndCorruptBlock(EntityAspectedDemonBase entity) { - this.grassEaterEntity = entity; - this.world = entity.getEntityWorld(); - this.setMutexBits(7); - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - if (this.grassEaterEntity.getRNG().nextInt(50) != 0) { - return false; - } else { - BlockPos pos = new BlockPos(this.grassEaterEntity.posX, this.grassEaterEntity.posY, this.grassEaterEntity.posZ).down(); - IBlockState offsetState = world.getBlockState(pos); - Block offsetBlock = offsetState.getBlock(); - return CorruptionHandler.isBlockCorruptible(world, grassEaterEntity.getType(), pos, offsetState, offsetBlock); - } - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - this.eatingGrassTimer = 40; - this.world.setEntityState(this.grassEaterEntity, (byte) 10); - this.grassEaterEntity.getNavigator().clearPath(); - } - - /** - * Resets the task - */ - public void resetTask() { - this.eatingGrassTimer = 0; - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean continueExecuting() { - return this.eatingGrassTimer > 0; - } - - /** - * Number of ticks since the entity started to eat grass - */ - public int getEatingGrassTimer() { - return this.eatingGrassTimer; - } - - /** - * Updates the task - */ - public void updateTask() { - this.eatingGrassTimer = Math.max(0, this.eatingGrassTimer - 1); - - if (this.eatingGrassTimer == 4) { - BlockPos blockpos = new BlockPos(this.grassEaterEntity.posX, this.grassEaterEntity.posY, this.grassEaterEntity.posZ); - - BlockPos offsetPos = blockpos.down(); - IBlockState offsetState = world.getBlockState(offsetPos); - Block offsetBlock = offsetState.getBlock(); - - if (CorruptionHandler.isBlockCorruptible(world, grassEaterEntity.getType(), offsetPos, offsetState, offsetBlock)) { -// if (this.world.getGameRules().getBoolean("mobGriefing")) - { - this.world.playEvent(2001, offsetPos, Block.getIdFromBlock(offsetBlock)); - CorruptionHandler.corruptSurroundingBlocks(world, grassEaterEntity.getType(), offsetPos, 2, 0.5, 0.5); - } - - this.grassEaterEntity.eatGrassBonus(); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIFollowOwner.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIFollowOwner.java deleted file mode 100644 index cd82198d..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIFollowOwner.java +++ /dev/null @@ -1,125 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityDemonBase; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.pathfinding.PathNavigate; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.pathfinding.PathNodeType; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; - -public class EntityAIFollowOwner extends EntityAIBase { - World theWorld; - float maxDist; - float minDist; - private EntityDemonBase thePet; - private EntityLivingBase theOwner; - private double followSpeed; - private PathNavigate petPathfinder; - private int timeToRecalcPath; - private float oldWaterCost; - - public EntityAIFollowOwner(EntityDemonBase thePetIn, double followSpeedIn, float minDistIn, float maxDistIn) { - this.thePet = thePetIn; - this.theWorld = thePetIn.getEntityWorld(); - this.followSpeed = followSpeedIn; - this.petPathfinder = thePetIn.getNavigator(); - this.minDist = minDistIn; - this.maxDist = maxDistIn; - this.setMutexBits(3); - - if (!(thePetIn.getNavigator() instanceof PathNavigateGround)) { - throw new IllegalArgumentException("Unsupported mob type for FollowOwnerGoal"); - } - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - EntityLivingBase entitylivingbase = this.thePet.getOwner(); - - if (entitylivingbase == null) { - return false; - } else if (entitylivingbase instanceof EntityPlayer && ((EntityPlayer) entitylivingbase).isSpectator()) { - return false; - } else if (this.thePet.isStationary()) { - return false; - } else if (this.thePet.getDistanceSq(entitylivingbase) < (double) (this.minDist * this.minDist)) { - return false; - } else { - this.theOwner = entitylivingbase; - return true; - } - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean continueExecuting() { - return !this.petPathfinder.noPath() && this.thePet.getDistanceSq(this.theOwner) > (double) (this.maxDist * this.maxDist) && !this.thePet.isStationary(); - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - this.timeToRecalcPath = 0; - this.oldWaterCost = this.thePet.getPathPriority(PathNodeType.WATER); - this.thePet.setPathPriority(PathNodeType.WATER, 0.0F); - } - - /** - * Resets the task - */ - public void resetTask() { - this.theOwner = null; - this.petPathfinder.clearPath(); - this.thePet.setPathPriority(PathNodeType.WATER, this.oldWaterCost); - } - - private boolean isEmptyBlock(BlockPos pos) { - IBlockState iblockstate = this.theWorld.getBlockState(pos); - Block block = iblockstate.getBlock(); - return block == Blocks.AIR || !iblockstate.isFullCube(); - } - - /** - * Updates the task - */ - public void updateTask() { - this.thePet.getLookHelper().setLookPositionWithEntity(this.theOwner, 10.0F, (float) this.thePet.getVerticalFaceSpeed()); - - if (!this.thePet.isStationary()) { - if (--this.timeToRecalcPath <= 0) { - this.timeToRecalcPath = 10; - - if (!this.petPathfinder.tryMoveToEntityLiving(this.theOwner, this.followSpeed)) { - if (!this.thePet.getLeashed()) { - if (this.thePet.getDistanceSq(this.theOwner) >= 144.0D) { - int i = MathHelper.floor(this.theOwner.posX) - 2; - int j = MathHelper.floor(this.theOwner.posZ) - 2; - int k = MathHelper.floor(this.theOwner.getEntityBoundingBox().minY); - - for (int l = 0; l <= 4; ++l) { - for (int i1 = 0; i1 <= 4; ++i1) { - if ((l < 1 || i1 < 1 || l > 3 || i1 > 3) && this.theWorld.getBlockState(new BlockPos(i + l, k - 1, j + i1)).isTopSolid() && this.isEmptyBlock(new BlockPos(i + l, k, j + i1)) && this.isEmptyBlock(new BlockPos(i + l, k + 1, j + i1))) { - this.thePet.setLocationAndAngles((double) ((float) (i + l) + 0.5F), (double) k, (double) ((float) (j + i1) + 0.5F), this.thePet.rotationYaw, this.thePet.rotationPitch); - this.petPathfinder.clearPath(); - return; - } - } - } - } - } - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIGrabEffectsFromOwner.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIGrabEffectsFromOwner.java deleted file mode 100644 index 3b42eec1..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIGrabEffectsFromOwner.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.pathfinding.PathNavigate; -import net.minecraft.pathfinding.PathNavigateGround; -import net.minecraft.pathfinding.PathNodeType; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; - -public class EntityAIGrabEffectsFromOwner extends EntityAIBase { - World theWorld; - float minDist; - private EntitySentientSpecter thePet; - private EntityLivingBase theOwner; - private double followSpeed; - private PathNavigate petPathfinder; - private int timeToRecalcPath; - private float oldWaterCost; - - /** - * In order to steal effects from the owner, the mob has to be close to the - * owner. - */ - public EntityAIGrabEffectsFromOwner(EntitySentientSpecter thePetIn, double followSpeedIn, float minDistIn) { - this.thePet = thePetIn; - this.theWorld = thePetIn.getEntityWorld(); - this.followSpeed = followSpeedIn; - this.petPathfinder = thePetIn.getNavigator(); - this.minDist = minDistIn; - this.setMutexBits(3); - - if (!(thePetIn.getNavigator() instanceof PathNavigateGround)) { - throw new IllegalArgumentException("Unsupported mob type for FollowOwnerGoal"); - } - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - EntityLivingBase entitylivingbase = this.thePet.getOwner(); - - if (entitylivingbase == null) { - return false; - } else if (entitylivingbase instanceof EntityPlayer && ((EntityPlayer) entitylivingbase).isSpectator()) { - return false; - } else if (this.thePet.isStationary()) { - return false; -// } else if (this.thePet.getDistanceSqToEntity(entitylivingbase) < (double) (this.minDist * this.minDist)) -// { -// return false; - } else if (!this.thePet.canStealEffectFromOwner(entitylivingbase)) { - return false; - } else { - this.theOwner = entitylivingbase; - return true; - } - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean continueExecuting() { - return this.thePet.canStealEffectFromOwner(theOwner);// || !this.petPathfinder.noPath() && this.thePet.getDistanceSqToEntity(this.theOwner) > (double) (this.minDist * this.minDist) && !this.thePet.isStationary(); - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - this.timeToRecalcPath = 0; - this.oldWaterCost = this.thePet.getPathPriority(PathNodeType.WATER); - this.thePet.setPathPriority(PathNodeType.WATER, 0.0F); - } - - /** - * Resets the task - */ - public void resetTask() { - this.theOwner = null; - this.petPathfinder.clearPath(); - this.thePet.setPathPriority(PathNodeType.WATER, this.oldWaterCost); - } - - private boolean isEmptyBlock(BlockPos pos) { - IBlockState iblockstate = this.theWorld.getBlockState(pos); - Block block = iblockstate.getBlock(); - return block == Blocks.AIR || !iblockstate.isFullCube(); - } - - /** - * Updates the task - */ - public void updateTask() { - this.thePet.getLookHelper().setLookPositionWithEntity(this.theOwner, 10.0F, (float) this.thePet.getVerticalFaceSpeed()); - - if (this.thePet.getDistanceSq(theOwner) < this.minDist * this.minDist) { - if (this.thePet.stealEffectsFromOwner(theOwner)) { - return; - } - } - - if (!this.thePet.isStationary()) { - if (--this.timeToRecalcPath <= 0) { - this.timeToRecalcPath = 10; - - if (!this.petPathfinder.tryMoveToEntityLiving(this.theOwner, this.followSpeed)) { - if (!this.thePet.getLeashed()) { - if (this.thePet.getDistanceSq(this.theOwner) >= 144.0D) { - int i = MathHelper.floor(this.theOwner.posX) - 2; - int j = MathHelper.floor(this.theOwner.posZ) - 2; - int k = MathHelper.floor(this.theOwner.getEntityBoundingBox().minY); - - for (int l = 0; l <= 4; ++l) { - for (int i1 = 0; i1 <= 4; ++i1) { - if ((l < 1 || i1 < 1 || l > 3 || i1 > 3) && this.theWorld.getBlockState(new BlockPos(i + l, k - 1, j + i1)).isTopSolid() && this.isEmptyBlock(new BlockPos(i + l, k, j + i1)) && this.isEmptyBlock(new BlockPos(i + l, k + 1, j + i1))) { - this.thePet.setLocationAndAngles((double) ((float) (i + l) + 0.5F), (double) k, (double) ((float) (j + i1) + 0.5F), this.thePet.rotationYaw, this.thePet.rotationPitch); - this.petPathfinder.clearPath(); - return; - } - } - } - } - } - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIHurtByTargetIgnoreTamed.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIHurtByTargetIgnoreTamed.java deleted file mode 100644 index 371ed1be..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIHurtByTargetIgnoreTamed.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import net.minecraft.entity.EntityCreature; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IEntityOwnable; -import net.minecraft.entity.ai.EntityAIHurtByTarget; - -import java.util.UUID; - -public class EntityAIHurtByTargetIgnoreTamed extends EntityAIHurtByTarget { - public EntityAIHurtByTargetIgnoreTamed(EntityCreature creatureIn, boolean entityCallsForHelpIn, Class... targetClassesIn) { - super(creatureIn, true, targetClassesIn); - } - - @Override - public boolean isSuitableTarget(EntityLivingBase target, boolean includeInvincibles) { - if (this.taskOwner instanceof IEntityOwnable && target instanceof IEntityOwnable) { - UUID thisId = ((IEntityOwnable) this.taskOwner).getOwnerId(); - UUID targetId = ((IEntityOwnable) target).getOwnerId(); - if (thisId != null && targetId != null && thisId.equals(targetId)) { - return false; - } - } - - return super.isSuitableTarget(target, includeInvincibles); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIMimicReform.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIMimicReform.java deleted file mode 100644 index cf35ee3b..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIMimicReform.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityMimic; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.util.math.BlockPos; - -public class EntityAIMimicReform extends EntityAIBase { - private final EntityMimic theEntity; - - public EntityAIMimicReform(EntityMimic creatureIn) { - this.theEntity = creatureIn; - this.setMutexBits(2); - } - - @Override - public boolean shouldExecute() { - return this.theEntity.ticksExisted > 100 && this.theEntity.hasHome() && this.theEntity.isWithinHomeDistanceCurrentPosition(); - } - - @Override - public void startExecuting() { - BlockPos homePos = this.theEntity.getHomePosition(); - if (theEntity.reformIntoMimicBlock(homePos)) { - this.theEntity.setDead(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIOwnerHurtByTarget.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIOwnerHurtByTarget.java deleted file mode 100644 index 42bfb5fa..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIOwnerHurtByTarget.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityDemonBase; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAITarget; - -public class EntityAIOwnerHurtByTarget extends EntityAITarget { - EntityDemonBase theDefendingTameable; - EntityLivingBase theOwnerAttacker; - private int timestamp; - - public EntityAIOwnerHurtByTarget(EntityDemonBase theDefendingTameableIn) { - super(theDefendingTameableIn, false); - this.theDefendingTameable = theDefendingTameableIn; - this.setMutexBits(1); - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - if (!this.theDefendingTameable.isTamed()) { - return false; - } else { - EntityLivingBase owner = this.theDefendingTameable.getOwner(); - - if (owner == null) { - return false; - } else { - this.theOwnerAttacker = owner.getRevengeTarget(); - int i = owner.getRevengeTimer(); - return i != this.timestamp && this.isSuitableTarget(this.theOwnerAttacker, false) && this.theDefendingTameable.shouldAttackEntity(this.theOwnerAttacker, owner); - } - } - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - this.taskOwner.setAttackTarget(this.theOwnerAttacker); - EntityLivingBase owner = this.theDefendingTameable.getOwner(); - - if (owner != null) { - this.timestamp = owner.getRevengeTimer(); - } - - super.startExecuting(); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIOwnerHurtTarget.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIOwnerHurtTarget.java deleted file mode 100644 index 20ee7204..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIOwnerHurtTarget.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityDemonBase; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAITarget; - -public class EntityAIOwnerHurtTarget extends EntityAITarget { - EntityDemonBase theEntityDemonBase; - EntityLivingBase theTarget; - private int timestamp; - - public EntityAIOwnerHurtTarget(EntityDemonBase theEntityDemonBaseIn) { - super(theEntityDemonBaseIn, false); - this.theEntityDemonBase = theEntityDemonBaseIn; - this.setMutexBits(1); - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - if (!this.theEntityDemonBase.isTamed()) { - return false; - } else { - EntityLivingBase entitylivingbase = this.theEntityDemonBase.getOwner(); - - if (entitylivingbase == null) { - return false; - } else { - this.theTarget = entitylivingbase.getLastAttackedEntity(); - int i = entitylivingbase.getLastAttackedEntityTime(); - return i != this.timestamp && this.isSuitableTarget(this.theTarget, false) && this.theEntityDemonBase.shouldAttackEntity(this.theTarget, entitylivingbase); - } - } - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - this.taskOwner.setAttackTarget(this.theTarget); - EntityLivingBase entitylivingbase = this.theEntityDemonBase.getOwner(); - - if (entitylivingbase != null) { - this.timestamp = entitylivingbase.getLastAttackedEntityTime(); - } - - super.startExecuting(); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIPickUpAlly.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIPickUpAlly.java deleted file mode 100644 index eb69d601..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIPickUpAlly.java +++ /dev/null @@ -1,154 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityAspectedDemonBase; -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.pathfinding.Path; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.world.World; - -import java.util.List; - -public class EntityAIPickUpAlly extends EntityAIBase { - protected final int attackInterval = 20; - protected EntityAspectedDemonBase entity; - /** - * An amount of decrementing ticks that allows the entity to attack once the - * tick reaches 0. - */ - protected int attackTick; - World worldObj; - /** - * The speed with which the mob will approach the target - */ - double speedTowardsTarget; - /** - * When true, the mob will continue chasing its target, even if it can't - * find a path to them right now. - */ - boolean longMemory; - /** - * The PathEntity of our entity. - */ - Path entityPathEntity; - private int delayCounter; - private double targetX; - private double targetY; - private double targetZ; - private int failedPathFindingPenalty = 0; - private boolean canPenalize = false; - - private EntityLivingBase pickupTarget = null; - - public EntityAIPickUpAlly(EntityAspectedDemonBase creature, double speedIn, boolean useLongMemory) { - this.entity = creature; - this.worldObj = creature.getEntityWorld(); - this.speedTowardsTarget = speedIn; - this.longMemory = useLongMemory; - this.setMutexBits(3); - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - if (this.entity.getRidingEntity() != null) { - return false; - } - - AxisAlignedBB bb = new AxisAlignedBB(entity.posX - 0.5, entity.posY - 0.5, entity.posZ - 0.5, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5).grow(5); - List list = this.entity.getEntityWorld().getEntitiesWithinAABB(EntityLivingBase.class, bb, new EntityAspectedDemonBase.WillTypePredicate(entity.getType())); - for (EntityLivingBase testEntity : list) { - if (testEntity != this.entity) { - Path path = this.entity.getNavigator().getPathToEntityLiving(testEntity); - if (path != null) { - this.entityPathEntity = path; - this.pickupTarget = testEntity; - return true; - } - } - } - - return false; - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean continueExecuting() { - return this.entity.getRidingEntity() != null; - } - - /** - * Execute a one shot task or start executing a continuous task - */ - public void startExecuting() { - this.entity.getNavigator().setPath(this.entityPathEntity, this.speedTowardsTarget); - this.delayCounter = 0; - } - - /** - * Resets the task - */ - public void resetTask() { - this.entity.getNavigator().clearPath(); - this.pickupTarget = null; - } - - /** - * Updates the task - */ - public void updateTask() { - EntityLivingBase entitylivingbase = this.pickupTarget; - this.entity.getLookHelper().setLookPositionWithEntity(entitylivingbase, 30.0F, 30.0F); - double d0 = this.entity.getDistanceSq(entitylivingbase.posX, entitylivingbase.getEntityBoundingBox().minY, entitylivingbase.posZ); - --this.delayCounter; - - if ((this.longMemory || this.entity.getEntitySenses().canSee(entitylivingbase)) && this.delayCounter <= 0 && (this.targetX == 0.0D && this.targetY == 0.0D && this.targetZ == 0.0D || entitylivingbase.getDistanceSq(this.targetX, this.targetY, this.targetZ) >= 1.0D || this.entity.getRNG().nextFloat() < 0.05F)) { - this.targetX = entitylivingbase.posX; - this.targetY = entitylivingbase.getEntityBoundingBox().minY; - this.targetZ = entitylivingbase.posZ; - this.delayCounter = 4 + this.entity.getRNG().nextInt(7); - - if (this.canPenalize) { - this.delayCounter += failedPathFindingPenalty; - if (this.entity.getNavigator().getPath() != null) { - net.minecraft.pathfinding.PathPoint finalPathPoint = this.entity.getNavigator().getPath().getFinalPathPoint(); - if (finalPathPoint != null && entitylivingbase.getDistanceSq(finalPathPoint.x, finalPathPoint.y, finalPathPoint.z) < 1) - failedPathFindingPenalty = 0; - else - failedPathFindingPenalty += 10; - } else { - failedPathFindingPenalty += 10; - } - } - - if (d0 > 1024.0D) { - this.delayCounter += 10; - } else if (d0 > 256.0D) { - this.delayCounter += 5; - } - - if (!this.entity.getNavigator().tryMoveToEntityLiving(entitylivingbase, this.speedTowardsTarget)) { - this.delayCounter += 15; - } - } - - this.attackTick = Math.max(this.attackTick - 1, 0); - this.pickUpEntity(entitylivingbase, d0); - } - - protected void pickUpEntity(EntityLivingBase potentialPickup, double distance) { - double d0 = this.getAttackReachSqr(potentialPickup); - - if (distance <= d0 && this.attackTick <= 0 && !potentialPickup.isRiding()) { - BMLog.DEBUG.info("Hai!"); - potentialPickup.startRiding(this.entity, true); - } - } - - protected double getAttackReachSqr(EntityLivingBase attackTarget) { - return (double) (this.entity.width * 2.0F * this.entity.width * 2.0F + attackTarget.width); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIProtectAlly.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIProtectAlly.java deleted file mode 100644 index d831c487..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIProtectAlly.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityAspectedDemonBase; -import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.world.World; - -import java.util.List; - -public class EntityAIProtectAlly extends EntityAIBase { - /** - * The entity owner of this AITask - */ - private final EntityCorruptedSheep entity; - /** - * The world the grass eater entity is eating from - */ - private final World world; - /** - * Number of ticks since the entity started to eat grass - */ - int castTimer; - - public EntityAIProtectAlly(EntityCorruptedSheep entity) { - this.entity = entity; - this.world = entity.getEntityWorld(); - this.setMutexBits(7); - } - - public int getCastTimer() { - return this.castTimer; - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - @Override - public boolean shouldExecute() { - AxisAlignedBB bb = new AxisAlignedBB(entity.posX - 0.5, entity.posY - 0.5, entity.posZ - 0.5, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5).grow(5); - List list = world.getEntitiesWithinAABB(EntityLivingBase.class, bb, new EntityAspectedDemonBase.WillTypePredicate(entity.getType())); - for (EntityLivingBase testEntity : list) { - if (testEntity != this.entity) { - if (this.entity.canProtectAlly(testEntity)) { - return true; - } - } - } - - return false; - } - - /** - * Execute a one shot task or start executing a continuous task - */ - @Override - public void startExecuting() { - this.castTimer = 100; - this.world.setEntityState(this.entity, (byte) 53); - this.entity.getNavigator().clearPath(); - } - - /** - * Resets the task - */ - @Override - public void resetTask() { - this.castTimer = 0; - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - @Override - public boolean shouldContinueExecuting() { - return castTimer > 0; - } - - /** - * Updates the task - */ - @Override - public void updateTask() { - this.castTimer = Math.max(0, this.castTimer - 1); - if (castTimer == 0) { - AxisAlignedBB bb = new AxisAlignedBB(entity.posX - 0.5, entity.posY - 0.5, entity.posZ - 0.5, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5).grow(5); - List list = world.getEntitiesWithinAABB(EntityLivingBase.class, bb, new EntityAspectedDemonBase.WillTypePredicate(entity.getType())); - for (EntityLivingBase testEntity : list) { - if (testEntity != this.entity) { - if (this.entity.applyProtectionToAlly(testEntity)) { - return; - } - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIRetreatToHeal.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIRetreatToHeal.java deleted file mode 100644 index a2468fbe..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIRetreatToHeal.java +++ /dev/null @@ -1,135 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityDemonBase; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; -import net.minecraft.entity.Entity; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.ai.RandomPositionGenerator; -import net.minecraft.pathfinding.Path; -import net.minecraft.pathfinding.PathNavigate; -import net.minecraft.util.EntitySelectors; -import net.minecraft.util.math.Vec3d; - -import java.util.List; - -public class EntityAIRetreatToHeal extends EntityAIBase { - private final Predicate canBeSeenSelector; - /** - * The entity we are attached to - */ - protected EntityDemonBase theEntity; - protected T closestLivingEntity; - private double farSpeed; - private double nearSpeed; - private double safeHealDistance = 3; - private float avoidDistance; - /** - * The PathEntity of our entity - */ - private Path entityPathEntity; - /** - * The PathNavigate of our entity - */ - private PathNavigate entityPathNavigate; - private Class classToAvoid; - private Predicate avoidTargetSelector; - - public EntityAIRetreatToHeal(EntityDemonBase theEntityIn, Class classToAvoidIn, float avoidDistanceIn, double farSpeedIn, double nearSpeedIn) { - this(theEntityIn, classToAvoidIn, Predicates.alwaysTrue(), avoidDistanceIn, farSpeedIn, nearSpeedIn); - } - - public EntityAIRetreatToHeal(EntityDemonBase theEntityIn, Class classToAvoidIn, Predicate avoidTargetSelectorIn, float avoidDistanceIn, double farSpeedIn, double nearSpeedIn) { - this.canBeSeenSelector = p_apply_1_ -> p_apply_1_.isEntityAlive() && EntityAIRetreatToHeal.this.theEntity.getEntitySenses().canSee(p_apply_1_); - this.theEntity = theEntityIn; - this.classToAvoid = classToAvoidIn; - this.avoidTargetSelector = avoidTargetSelectorIn; - this.avoidDistance = avoidDistanceIn; - this.farSpeed = farSpeedIn; - this.nearSpeed = nearSpeedIn; - this.entityPathNavigate = theEntityIn.getNavigator(); - this.setMutexBits(3); - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - @Override - public boolean shouldExecute() { - if (!this.theEntity.shouldEmergencyHeal()) { - return false; - } - - //This part almost doesn't matter - List list = this.theEntity.getEntityWorld().getEntitiesWithinAABB(this.classToAvoid, this.theEntity.getEntityBoundingBox().expand((double) this.avoidDistance, 3.0D, (double) this.avoidDistance), Predicates.and(EntitySelectors.CAN_AI_TARGET, this.canBeSeenSelector, this.avoidTargetSelector)); - - if (list.isEmpty()) { - return true; //No entities nearby, so I can freely heal - } else { - this.closestLivingEntity = list.get(0); - Vec3d vec3d = RandomPositionGenerator.findRandomTargetBlockAwayFrom(this.theEntity, 16, 7, new Vec3d(this.closestLivingEntity.posX, this.closestLivingEntity.posY, this.closestLivingEntity.posZ)); - - if (vec3d == null) { - return false; //Nowhere to run, gotta fight! - } else if (this.closestLivingEntity.getDistanceSq(vec3d.x, vec3d.y, vec3d.z) < this.closestLivingEntity.getDistanceSq(this.theEntity)) { - return false; //I'll be headed off if I choose this direction. - } else { - this.entityPathEntity = this.entityPathNavigate.getPathToXYZ(vec3d.x, vec3d.y, vec3d.z); - return this.entityPathEntity != null; - } - } - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - @Override - public boolean shouldContinueExecuting() { - return this.theEntity.shouldEmergencyHeal();//!this.entityPathNavigate.noPath(); - } - - /** - * Execute a one shot task or start executing a continuous task - */ - @Override - public void startExecuting() { - if (this.entityPathEntity != null) { - this.entityPathNavigate.setPath(this.entityPathEntity, this.farSpeed); - } - } - - /** - * Resets the task - */ - @Override - public void resetTask() { - this.closestLivingEntity = null; - } - - /** - * Updates the task - */ - @Override - public void updateTask() { - if (this.closestLivingEntity != null) { - if (this.theEntity.getDistanceSq(this.closestLivingEntity) < 49.0D) { - this.theEntity.getNavigator().setSpeed(this.nearSpeed); - } else { - this.theEntity.getNavigator().setSpeed(this.farSpeed); - } - - if (this.theEntity.ticksExisted % 20 == 0 && this.theEntity.getDistanceSq(this.closestLivingEntity) >= safeHealDistance * safeHealDistance) { - healEntity(); - return; - } - } - - if (this.theEntity.ticksExisted % 20 == 0) { - healEntity(); - } - } - - public void healEntity() { - this.theEntity.performEmergencyHeal(2); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthRetreat.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthRetreat.java deleted file mode 100644 index 51600496..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthRetreat.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedChicken; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.ai.RandomPositionGenerator; -import net.minecraft.pathfinding.Path; -import net.minecraft.pathfinding.PathNavigate; -import net.minecraft.util.math.Vec3d; - -public class EntityAIStealthRetreat extends EntityAIBase { - private final double farSpeed; - private final double nearSpeed; - private final float avoidDistance; - /** - * The PathNavigate of our entity - */ - private final PathNavigate entityPathNavigate; - /** - * The entity we are attached to - */ - protected EntityCorruptedChicken entity; - /** - * The PathEntity of our entity - */ - private Path entityPathEntity; - private int ticksLeft = 0; - - public EntityAIStealthRetreat(EntityCorruptedChicken theEntityIn, float avoidDistanceIn, double farSpeedIn, double nearSpeedIn) { - this.entity = theEntityIn; - this.avoidDistance = avoidDistanceIn; - this.farSpeed = farSpeedIn; - this.nearSpeed = nearSpeedIn; - this.entityPathNavigate = theEntityIn.getNavigator(); - this.setMutexBits(1); - } - - @Override - public boolean shouldExecute() { - if (this.entity.attackStateMachine == 2) { - EntityLivingBase attacked = this.entity.getAttackTarget(); - if (attacked == null) { - return false; - } - - Vec3d vec3d = RandomPositionGenerator.findRandomTargetBlockAwayFrom(this.entity, 16, 7, new Vec3d(attacked.posX, attacked.posY, attacked.posZ)); - - if (vec3d == null) { - return false; - } else if (attacked.getDistanceSq(vec3d.x, vec3d.y, vec3d.z) < attacked.getDistanceSq(this.entity)) { - return false; - } else { - this.entityPathEntity = this.entityPathNavigate.getPathToXYZ(vec3d.x, vec3d.y, vec3d.z); - return this.entityPathEntity != null; - } - } - - return false; - } - - @Override - public boolean shouldContinueExecuting() { - if (this.entityPathNavigate.noPath()) { - this.entity.attackStateMachine = 0; - return false; - } - - return this.entity.attackStateMachine == 2; - } - - @Override - public void resetTask() { - ticksLeft = 0; - } - - @Override - public void startExecuting() { - ticksLeft = this.entity.getEntityWorld().rand.nextInt(100) + 100; - this.entityPathNavigate.setPath(this.entityPathEntity, this.farSpeed); - } - - @Override - public void updateTask() { - ticksLeft--; - if (ticksLeft <= 0 || this.entity.getAttackTarget() == null) { - this.entity.attackStateMachine = 0; - return; - } - - if (this.entity.getDistanceSq(this.entity.getAttackTarget()) < 49.0D) { - this.entity.getNavigator().setSpeed(this.nearSpeed); - } else { - this.entity.getNavigator().setSpeed(this.farSpeed); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthTowardsTarget.java b/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthTowardsTarget.java deleted file mode 100644 index 74dd9ba6..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/ai/EntityAIStealthTowardsTarget.java +++ /dev/null @@ -1,87 +0,0 @@ -package WayofTime.bloodmagic.entity.ai; - -import WayofTime.bloodmagic.entity.mob.EntityCorruptedChicken; -import net.minecraft.entity.EntityCreature; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.ai.RandomPositionGenerator; -import net.minecraft.util.math.Vec3d; - -public class EntityAIStealthTowardsTarget extends EntityAIBase { - private final EntityCorruptedChicken entity; - private final double speed; - private double xPosition; - private double yPosition; - private double zPosition; - private int ticksLeft = 0; - - public EntityAIStealthTowardsTarget(EntityCorruptedChicken creatureIn, double speedIn) { - this.entity = creatureIn; - this.speed = speedIn; - this.setMutexBits(1); - } - - @Override - public boolean shouldExecute() { - if (this.entity.attackStateMachine != 0 || this.entity.getAttackTarget() == null) { - return false; - } - - EntityLivingBase target = this.entity.getAttackTarget(); - Vec3d vec3d = null; - if (target instanceof EntityCreature) { - vec3d = RandomPositionGenerator.findRandomTarget((EntityCreature) target, 10, 7); - } else { - vec3d = RandomPositionGenerator.findRandomTarget(this.entity, 10, 7); - } - - if (vec3d == null) { - return false; - } else { - ticksLeft = this.entity.getEntityWorld().rand.nextInt(200) + 100; - this.xPosition = vec3d.x; - this.yPosition = vec3d.y; - this.zPosition = vec3d.z; - return true; - } - } - - @Override - public void resetTask() { - ticksLeft = 0; - } - - @Override - public boolean shouldContinueExecuting() { - ticksLeft--; - if (ticksLeft <= 0) { - this.entity.attackStateMachine = 1; - } - - this.entity.cloak(); - - if (this.entity.getNavigator().noPath()) { - EntityLivingBase target = this.entity.getAttackTarget(); - Vec3d vec3d; - if (target instanceof EntityCreature) { - vec3d = RandomPositionGenerator.findRandomTarget((EntityCreature) target, 10, 7); - } else { - vec3d = RandomPositionGenerator.findRandomTarget(this.entity, 10, 7); - } - - if (vec3d != null) { - this.xPosition = vec3d.x; - this.yPosition = vec3d.y; - this.zPosition = vec3d.z; - this.entity.getNavigator().tryMoveToXYZ(this.xPosition, this.yPosition, this.zPosition, this.speed); - } - } - - return this.entity.attackStateMachine == 0; - } - - @Override - public void startExecuting() { - this.entity.getNavigator().tryMoveToXYZ(this.xPosition, this.yPosition, this.zPosition, this.speed); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityAspectedDemonBase.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityAspectedDemonBase.java deleted file mode 100644 index 47f9cf1d..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityAspectedDemonBase.java +++ /dev/null @@ -1,242 +0,0 @@ -package WayofTime.bloodmagic.entity.mob; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.gson.Serializers; -import com.google.common.base.Predicate; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.util.DamageSource; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; - -import java.util.Locale; - -public abstract class EntityAspectedDemonBase extends EntityDemonBase { - protected static final DataParameter TYPE = EntityDataManager.createKey(EntityAspectedDemonBase.class, Serializers.WILL_TYPE_SERIALIZER); - - public EntityAspectedDemonBase(World worldIn) { - super(worldIn); - } - - @Override - protected void entityInit() { - super.entityInit(); - this.dataManager.register(TYPE, EnumDemonWillType.DEFAULT); - } - - public double getMeleeResist() { - return 0; - } - - public double getProjectileResist() { - return 0; - } - - public double getMagicResist() { - return 0; - } - - public double getBaseHP(EnumDemonWillType type) { - double baseHP = 40; - - switch (type) { - case DEFAULT: - break; - case CORROSIVE: - break; - case DESTRUCTIVE: - break; - case VENGEFUL: - baseHP *= 0.8; - break; - case STEADFAST: - baseHP *= 1.25; - break; - } - - return baseHP; - } - - public double getBaseMeleeDamage(EnumDemonWillType type) { - double baseDamage = 8; - - switch (type) { - case DEFAULT: - break; - case CORROSIVE: - baseDamage *= 0.8; - break; - case DESTRUCTIVE: - baseDamage *= 1.5; - break; - case VENGEFUL: - baseDamage *= 0.8; - break; - case STEADFAST: - baseDamage *= 0.6; - break; - } - - return baseDamage; - } - - public double getBaseSpeed(EnumDemonWillType type) { - double baseSpeed = 0.27; - - switch (type) { - case DEFAULT: - break; - case CORROSIVE: - break; - case DESTRUCTIVE: - break; - case VENGEFUL: - baseSpeed *= 1.3; - break; - case STEADFAST: - break; - } - - return baseSpeed; - } - - public double getBaseSprintModifier(EnumDemonWillType type) { - double baseSprint = 1; - - switch (type) { - case DEFAULT: - break; - case CORROSIVE: - break; - case DESTRUCTIVE: - break; - case VENGEFUL: - baseSprint *= 1.2; - break; - case STEADFAST: - break; - } - - return baseSprint; - } - - public double getBaseKnockbackResist(EnumDemonWillType type) { - double baseKnockback = 0; - - switch (type) { - case DEFAULT: - break; - case CORROSIVE: - break; - case DESTRUCTIVE: - break; - case VENGEFUL: - break; - case STEADFAST: - baseKnockback += 0.35; - break; - } - - return baseKnockback; - } - - public void applyEntityAttributes(EnumDemonWillType type) { - this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(this.getBaseHP(type)); - this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(this.getBaseSpeed(type)); - this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(this.getBaseMeleeDamage(type)); - this.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(this.getBaseKnockbackResist(type)); - } - - @Override - public boolean attackEntityFrom(DamageSource source, float amount) { - if (this.isEntityInvulnerable(source)) { - return false; - } else { - float newAmount = amount; - if (source.isProjectile()) { - newAmount *= MathHelper.clamp(1 - getProjectileResist(), 0, 1); - } else { - newAmount *= MathHelper.clamp(1 - getMeleeResist(), 0, 1); - } - - if (source.isMagicDamage()) { - newAmount *= MathHelper.clamp(1 - getMagicResist(), 0, 1); - } - - return super.attackEntityFrom(source, newAmount); - } - } - - public EnumDemonWillType getType() { - return this.dataManager.get(TYPE); - } - - public void setType(EnumDemonWillType type) { - this.dataManager.set(TYPE, type); - this.applyEntityAttributes(type); - this.setCombatTask(); - } - - @Override - public void writeEntityToNBT(NBTTagCompound tag) { - super.writeEntityToNBT(tag); - - tag.setString(Constants.NBT.WILL_TYPE, this.getType().toString()); - } - - @Override - public void readEntityFromNBT(NBTTagCompound tag) { - super.readEntityFromNBT(tag); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - setType(EnumDemonWillType.DEFAULT); - } else { - setType(EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH))); - } - } - - //Returns true if the inputted mob is on the same team. - public static class WillTypePredicate implements Predicate { - private final EnumDemonWillType type; - - public WillTypePredicate(EnumDemonWillType type) { - this.type = type; - } - - //Returns true if this mob is the same type. - @Override - public boolean apply(EntityLivingBase input) { - if (input instanceof EntityAspectedDemonBase) { - if (((EntityAspectedDemonBase) input).getType() == type) { - return true; - } - } - - return false; - } - } - - public class TeamAttackPredicate implements Predicate { - private final EntityAspectedDemonBase demon; - - public TeamAttackPredicate(EntityAspectedDemonBase demon) { - this.demon = demon; - } - - //Returns true if this mob can attack the inputted mob. - @Override - public boolean apply(EntityLivingBase input) { - if (input instanceof EntityAspectedDemonBase) { - if (((EntityAspectedDemonBase) input).getType() == demon.getType()) { - return false; - } - } - - return input != null; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedChicken.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedChicken.java deleted file mode 100644 index 450bb4f9..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedChicken.java +++ /dev/null @@ -1,202 +0,0 @@ -package WayofTime.bloodmagic.entity.mob; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.entity.ai.EntityAIAttackStealthMelee; -import WayofTime.bloodmagic.entity.ai.EntityAIStealthRetreat; -import WayofTime.bloodmagic.entity.ai.EntityAIStealthTowardsTarget; -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.*; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.pathfinding.PathNodeType; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; - -public class EntityCorruptedChicken extends EntityAspectedDemonBase { - private final int attackPriority = 3; - public float wingRotation; - public float destPos; - public float oFlapSpeed; - public float oFlap; - public float wingRotDelta = 1.0F; - /** - * The time until the next egg is spawned. - */ - public int timeUntilNextEgg; - /* - * 0 means the chicken is casting stealth on itself when targeted, running - * to a random location near the target. 1 means the chicken is running - * after the target, attempting to attack it. 2 means it is running away - * from the target for a certain amount of time, before going back into - * state 0. - */ - public int attackStateMachine = 0; - private EntityAIAttackStealthMelee aiAttackOnCollide; - - public EntityCorruptedChicken(World world) { - this(world, EnumDemonWillType.DEFAULT); - } - - public EntityCorruptedChicken(World world, EnumDemonWillType type) { - super(world); - this.setSize(0.4F, 0.7F); - this.timeUntilNextEgg = this.rand.nextInt(600) + 600; - this.setPathPriority(PathNodeType.WATER, 0.0F); - - this.setType(type); - } - - protected void initEntityAI() { - this.tasks.addTask(0, new EntityAISwimming(this)); -// this.tasks.addTask(1, new EntityAIPanic(this, 1.4D)); - this.tasks.addTask(attackPriority, new EntityAIStealthTowardsTarget(this, 1)); - this.tasks.addTask(attackPriority, new EntityAIStealthRetreat(this, 6.0F, 1.4D, 1.4D)); - this.tasks.addTask(5, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); - this.tasks.addTask(7, new EntityAILookIdle(this)); - - this.targetTasks.addTask(1, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); - this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityLivingBase.class, 10, true, false, new EntityAspectedDemonBase.TeamAttackPredicate(this))); - } - - @Override - public void setCombatTask() { - if (aiAttackOnCollide != null) { - this.tasks.removeTask(aiAttackOnCollide); - } - - aiAttackOnCollide = new EntityAIAttackStealthMelee(this, this.getBaseSprintModifier(getType()), false); - this.tasks.addTask(attackPriority, aiAttackOnCollide); - } - - public void cloak() { - this.addPotionEffect(new PotionEffect(MobEffects.INVISIBILITY, 50, 0, false, false)); - } - - @Override - public double getBaseHP(EnumDemonWillType type) { - return super.getBaseHP(type) * 0.5; - } - - @Override - public double getBaseMeleeDamage(EnumDemonWillType type) { - return super.getBaseMeleeDamage(type) * 2.5; - } - - @Override - public double getBaseSpeed(EnumDemonWillType type) { - return super.getBaseSpeed(type); - } - - @Override - public double getBaseSprintModifier(EnumDemonWillType type) { - return super.getBaseSprintModifier(type); - } - - @Override - public double getBaseKnockbackResist(EnumDemonWillType type) { - return super.getBaseKnockbackResist(type); - } - - @Override - public float getEyeHeight() { - return this.height; - } - - @Override - public void onLivingUpdate() { - super.onLivingUpdate(); - -// if (!worldObj.isRemote) -// System.out.println("State machine: " + this.attackStateMachine); - - this.oFlap = this.wingRotation; - this.oFlapSpeed = this.destPos; - this.destPos = (float) ((double) this.destPos + (double) (this.onGround ? -1 : 4) * 0.3D); - this.destPos = MathHelper.clamp(this.destPos, 0.0F, 1.0F); - - if (!this.onGround && this.wingRotDelta < 1.0F) { - this.wingRotDelta = 1.0F; - } - - this.wingRotDelta = (float) ((double) this.wingRotDelta * 0.9D); - - if (!this.onGround && this.motionY < 0.0D) { - this.motionY *= 0.6D; - } - - this.wingRotation += this.wingRotDelta * 2.0F; - - if (!this.getEntityWorld().isRemote && !this.isChild() && --this.timeUntilNextEgg <= 0) { - this.playSound(SoundEvents.ENTITY_CHICKEN_EGG, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); - this.dropItem(Items.EGG, 1); - this.timeUntilNextEgg = this.rand.nextInt(600) + 600; - } - } - - @Override - public void fall(float distance, float damageMultiplier) { - } - - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.ENTITY_CHICKEN_AMBIENT; - } - - @Override - protected SoundEvent getHurtSound() { - return SoundEvents.ENTITY_CHICKEN_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.ENTITY_CHICKEN_DEATH; - } - - @Override - protected float getSoundPitch() { - return super.getSoundPitch() * 0.5f; - } - - @Override - protected void playStepSound(BlockPos pos, Block blockIn) { - this.playSound(SoundEvents.ENTITY_CHICKEN_STEP, 0.15F, 1.0F); - } - - @Override - public void readEntityFromNBT(NBTTagCompound compound) { - super.readEntityFromNBT(compound); - - if (compound.hasKey("EggLayTime")) { - this.timeUntilNextEgg = compound.getInteger("EggLayTime"); - } - } - - @Override - public void writeEntityToNBT(NBTTagCompound compound) { - super.writeEntityToNBT(compound); - compound.setInteger("EggLayTime", this.timeUntilNextEgg); - } - - @Override - public void updatePassenger(Entity passenger) { - super.updatePassenger(passenger); - float f = MathHelper.sin(this.renderYawOffset * 0.017453292F); - float f1 = MathHelper.cos(this.renderYawOffset * 0.017453292F); - float f2 = 0.1F; - float f3 = 0.0F; - passenger.setPosition(this.posX + (double) (0.1F * f), this.posY + (double) (this.height * 0.5F) + passenger.getYOffset() + 0.0D, this.posZ - (double) (0.1F * f1)); - - if (passenger instanceof EntityLivingBase) { - ((EntityLivingBase) passenger).renderYawOffset = this.renderYawOffset; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSheep.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSheep.java deleted file mode 100644 index bd12e3e9..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSheep.java +++ /dev/null @@ -1,354 +0,0 @@ -package WayofTime.bloodmagic.entity.mob; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.entity.ai.EntityAIEatAndCorruptBlock; -import WayofTime.bloodmagic.entity.ai.EntityAIProtectAlly; -import com.google.common.collect.Maps; -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IEntityLivingData; -import net.minecraft.entity.ai.*; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.DifficultyInstance; -import net.minecraft.world.World; -import net.minecraftforge.common.IShearable; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Random; - -public class EntityCorruptedSheep extends EntityAspectedDemonBase implements IShearable { - private static final DataParameter DYE_COLOR = EntityDataManager.createKey(EntityCorruptedSheep.class, DataSerializers.BYTE); - - private static final Map DYE_TO_RGB = Maps.newEnumMap(EnumDyeColor.class); - public static int maxProtectionCooldown = 90 * 20; //90 second cooldown - - static { - DYE_TO_RGB.put(EnumDyeColor.WHITE, new float[]{1.0F, 1.0F, 1.0F}); - DYE_TO_RGB.put(EnumDyeColor.ORANGE, new float[]{0.85F, 0.5F, 0.2F}); - DYE_TO_RGB.put(EnumDyeColor.MAGENTA, new float[]{0.7F, 0.3F, 0.85F}); - DYE_TO_RGB.put(EnumDyeColor.LIGHT_BLUE, new float[]{0.4F, 0.6F, 0.85F}); - DYE_TO_RGB.put(EnumDyeColor.YELLOW, new float[]{0.9F, 0.9F, 0.2F}); - DYE_TO_RGB.put(EnumDyeColor.LIME, new float[]{0.5F, 0.8F, 0.1F}); - DYE_TO_RGB.put(EnumDyeColor.PINK, new float[]{0.95F, 0.5F, 0.65F}); - DYE_TO_RGB.put(EnumDyeColor.GRAY, new float[]{0.3F, 0.3F, 0.3F}); - DYE_TO_RGB.put(EnumDyeColor.SILVER, new float[]{0.6F, 0.6F, 0.6F}); - DYE_TO_RGB.put(EnumDyeColor.CYAN, new float[]{0.3F, 0.5F, 0.6F}); - DYE_TO_RGB.put(EnumDyeColor.PURPLE, new float[]{0.5F, 0.25F, 0.7F}); - DYE_TO_RGB.put(EnumDyeColor.BLUE, new float[]{0.2F, 0.3F, 0.7F}); - DYE_TO_RGB.put(EnumDyeColor.BROWN, new float[]{0.4F, 0.3F, 0.2F}); - DYE_TO_RGB.put(EnumDyeColor.GREEN, new float[]{0.4F, 0.5F, 0.2F}); - DYE_TO_RGB.put(EnumDyeColor.RED, new float[]{0.6F, 0.2F, 0.2F}); - DYE_TO_RGB.put(EnumDyeColor.BLACK, new float[]{0.1F, 0.1F, 0.1F}); - } - - private final int attackPriority = 3; - public int protectionCooldown = 0; - /** - * Used to control movement as well as wool regrowth. Set to 40 on - * handleHealthUpdate and counts down with each tick. - */ - private int sheepTimer; - private int castTimer = 0; - private EntityAIEatAndCorruptBlock entityAIEatGrass; - private EntityAIProtectAlly entityAIProtectAlly; - private EntityAIAttackMelee aiAttackOnCollide; - - public EntityCorruptedSheep(World world) { - this(world, EnumDemonWillType.DEFAULT); - } - - public EntityCorruptedSheep(World world, EnumDemonWillType type) { - super(world); - this.setSize(0.9F, 1.3F); - - this.setType(type); - } - - protected void initEntityAI() { - this.entityAIEatGrass = new EntityAIEatAndCorruptBlock(this); - this.entityAIProtectAlly = new EntityAIProtectAlly(this); - - this.tasks.addTask(0, new EntityAISwimming(this)); - this.tasks.addTask(2, entityAIProtectAlly); - this.tasks.addTask(5, this.entityAIEatGrass); - this.tasks.addTask(6, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); - this.tasks.addTask(8, new EntityAILookIdle(this)); - - this.targetTasks.addTask(1, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); - this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityLivingBase.class, 10, true, false, new EntityAspectedDemonBase.TeamAttackPredicate(this))); - } - - @Override - public void setCombatTask() { - if (aiAttackOnCollide != null) { - this.tasks.removeTask(aiAttackOnCollide); - } - - aiAttackOnCollide = new EntityAIAttackMelee(this, this.getBaseSprintModifier(getType()), false); - this.tasks.addTask(attackPriority, aiAttackOnCollide); - } - - @Override - protected void updateAITasks() { - this.sheepTimer = this.entityAIEatGrass.getEatingGrassTimer(); - this.castTimer = this.entityAIProtectAlly.getCastTimer(); - super.updateAITasks(); - } - - @Override - public void onLivingUpdate() { - if (this.getEntityWorld().isRemote) { - this.sheepTimer = Math.max(0, this.sheepTimer - 1); - this.castTimer = Math.max(0, castTimer - 1); - if (this.castTimer == 70) { - this.playSound(this.getHurtSound(), this.getSoundVolume() * 2, this.getSoundPitch()); - } - } - - this.protectionCooldown = Math.max(0, this.protectionCooldown - 1); - - super.onLivingUpdate(); - } - - public boolean canProtectAlly(EntityLivingBase entity) { - return this.protectionCooldown <= 0 && entity.getHealth() < entity.getMaxHealth() && !entity.isPotionActive(MobEffects.RESISTANCE); - } - - public boolean applyProtectionToAlly(EntityLivingBase entity) { - if (canProtectAlly(entity)) { - entity.addPotionEffect(new PotionEffect(MobEffects.RESISTANCE, 20 * 20, 3)); - this.protectionCooldown = maxProtectionCooldown; - } - - return false; - } - - @Override - public double getBaseHP(EnumDemonWillType type) { - return super.getBaseHP(type) * 0.75; - } - - @Override - public double getBaseMeleeDamage(EnumDemonWillType type) { - return super.getBaseMeleeDamage(type) * 0.75; - } - - @Override - public double getBaseSpeed(EnumDemonWillType type) { - return super.getBaseSpeed(type); - } - - @Override - public double getBaseSprintModifier(EnumDemonWillType type) { - return super.getBaseSprintModifier(type); - } - - @Override - public double getBaseKnockbackResist(EnumDemonWillType type) { - return super.getBaseKnockbackResist(type) + 0.2; - } - - @Override - public double getMeleeResist() { - return 0.2; - } - - @Override - public double getProjectileResist() { - return 0.6; - } - - @Override - protected void entityInit() { - super.entityInit(); - this.dataManager.register(DYE_COLOR, (byte) 0); - } - - @Override - @SideOnly(Side.CLIENT) - public void handleStatusUpdate(byte id) { - if (id == 10) { - this.sheepTimer = 40; - } else if (id == 53) { - this.castTimer = 100; - } else { - super.handleStatusUpdate(id); - } - } - - @SideOnly(Side.CLIENT) - public float getHeadRotationPointY(float partialTick) { - return this.sheepTimer <= 0 ? 0.0F : (this.sheepTimer >= 4 && this.sheepTimer <= 36 ? 1.0F : (this.sheepTimer < 4 ? ((float) this.sheepTimer - partialTick) / 4.0F : -((float) (this.sheepTimer - 40) - partialTick) / 4.0F)); - } - - @SideOnly(Side.CLIENT) - public float getHeadRotationAngleX(float partialTick) { - if (this.sheepTimer > 4 && this.sheepTimer <= 36) { - float f = ((float) (this.sheepTimer - 4) - partialTick) / 32.0F; - return ((float) Math.PI / 5F) + ((float) Math.PI * 7F / 100F) * MathHelper.sin(f * 28.7F); - } else { - return this.sheepTimer > 0 ? ((float) Math.PI / 5F) : this.rotationPitch * 0.017453292F; - } - } - - @Override - public void writeEntityToNBT(NBTTagCompound tag) { - super.writeEntityToNBT(tag); - tag.setBoolean("Sheared", this.getSheared()); - tag.setByte("Color", (byte) this.getFleeceColor().getMetadata()); - tag.setInteger("protection", this.protectionCooldown); - } - - @Override - public void readEntityFromNBT(NBTTagCompound tag) { - super.readEntityFromNBT(tag); - this.setSheared(tag.getBoolean("Sheared")); - this.setFleeceColor(EnumDyeColor.byMetadata(tag.getByte("Color"))); - this.protectionCooldown = tag.getInteger("protection"); - } - - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.ENTITY_SHEEP_AMBIENT; - } - - @Override - protected SoundEvent getHurtSound() { - return SoundEvents.ENTITY_SHEEP_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.ENTITY_SHEEP_DEATH; - } - - @Override - protected float getSoundPitch() { - return super.getSoundPitch() * 0.5f; - } - - @Override - protected void playStepSound(BlockPos pos, Block blockIn) { - this.playSound(SoundEvents.ENTITY_SHEEP_STEP, 0.15F, 1.0F); - } - - /** - * Gets the wool color of this sheep. - */ - public EnumDyeColor getFleeceColor() { - return EnumDyeColor.byMetadata(this.dataManager.get(DYE_COLOR) & 15); - } - - /** - * Sets the wool color of this sheep - */ - public void setFleeceColor(EnumDyeColor color) { - byte b0 = this.dataManager.get(DYE_COLOR); - this.dataManager.set(DYE_COLOR, (byte) (b0 & 240 | color.getMetadata() & 15)); - } - - /** - * returns true if a sheeps wool has been sheared - */ - public boolean getSheared() { - return (this.dataManager.get(DYE_COLOR) & 16) != 0; - } - - /** - * make a sheep sheared if set to true - */ - public void setSheared(boolean sheared) { - byte b0 = this.dataManager.get(DYE_COLOR); - - if (sheared) { - this.dataManager.set(DYE_COLOR, (byte) (b0 | 16)); - } else { - this.dataManager.set(DYE_COLOR, (byte) (b0 & -17)); - } - } - - /** - * This function applies the benefits of growing back wool and faster - * growing up to the acting entity. (This function is used in the - * AIEatGrass) - */ - @Override - public void eatGrassBonus() { - this.setSheared(false); - - if (this.isChild()) { - this.heal(3); - } - } - - /** - * Called only once on an entity when first time spawned, via egg, mob - * spawner, natural spawning etc, but not called when entity is reloaded - * from nbt. Mainly used for initializing attributes and inventory - */ - @Override - public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) { - livingdata = super.onInitialSpawn(difficulty, livingdata); - this.setFleeceColor(getRandomSheepColor(this.getEntityWorld().rand)); - return livingdata; - } - - @Override - public float getEyeHeight() { - return 0.95F * this.height; - } - - @Override - public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos) { - return !this.getSheared() && !this.isChild(); - } - - @Override - public List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) { - this.setSheared(true); - int i = 1 + this.rand.nextInt(3); - - List ret = new ArrayList<>(); - for (int j = 0; j < i; ++j) - ret.add(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, this.getFleeceColor().getMetadata())); - - this.playSound(SoundEvents.ENTITY_SHEEP_SHEAR, 1.0F, 1.0F); - return ret; - } - - public int getCastTimer() { - return castTimer; - } - - public static float[] getDyeRgb(EnumDyeColor dyeColor) { - return DYE_TO_RGB.get(dyeColor); - } - - /** - * Chooses a "vanilla" sheep color based on the provided random. - */ - public static EnumDyeColor getRandomSheepColor(Random random) { - int i = random.nextInt(100); - return i < 5 ? EnumDyeColor.BLACK : (i < 10 ? EnumDyeColor.GRAY : (i < 15 ? EnumDyeColor.SILVER : (i < 18 ? EnumDyeColor.BROWN : (random.nextInt(500) == 0 ? EnumDyeColor.PINK : EnumDyeColor.WHITE)))); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSpider.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSpider.java deleted file mode 100644 index 589f6e72..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedSpider.java +++ /dev/null @@ -1,202 +0,0 @@ -package WayofTime.bloodmagic.entity.mob; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.entity.ai.EntityAIPickUpAlly; -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.EnumCreatureAttribute; -import net.minecraft.entity.ai.*; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.pathfinding.PathNavigate; -import net.minecraft.pathfinding.PathNavigateClimber; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class EntityCorruptedSpider extends EntityAspectedDemonBase { - private static final DataParameter CLIMBING = EntityDataManager.createKey(EntityCorruptedSpider.class, DataSerializers.BYTE); - - public EntityCorruptedSpider(World world) { - this(world, EnumDemonWillType.DEFAULT); - } - - public EntityCorruptedSpider(World world, EnumDemonWillType type) { - super(world); - this.setSize(1.4F, 0.9F); - - this.setType(type); - } - - protected void initEntityAI() { - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); - this.tasks.addTask(3, new EntityAIPickUpAlly(this, 1, true)); - this.tasks.addTask(4, new EntityCorruptedSpider.AISpiderAttack(this)); - this.tasks.addTask(5, new EntityAIWander(this, 0.8D)); - this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); - - this.targetTasks.addTask(1, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); - this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityLivingBase.class, 10, true, false, new EntityAspectedDemonBase.TeamAttackPredicate(this))); - } - - @Override - public double getBaseHP(EnumDemonWillType type) { - return super.getBaseHP(type); - } - - @Override - public double getBaseMeleeDamage(EnumDemonWillType type) { - return super.getBaseMeleeDamage(type); - } - - @Override - public double getBaseSpeed(EnumDemonWillType type) { - return super.getBaseSpeed(type); - } - - @Override - public double getBaseSprintModifier(EnumDemonWillType type) { - return super.getBaseSprintModifier(type); - } - - @Override - public double getBaseKnockbackResist(EnumDemonWillType type) { - return super.getBaseKnockbackResist(type); - } - - @Override - public double getMountedYOffset() { - return (double) (this.height * 0.5F); - } - - @Override - protected PathNavigate createNavigator(World worldIn) { - return new PathNavigateClimber(this, worldIn); - } - - @Override - protected void entityInit() { - super.entityInit(); - this.dataManager.register(CLIMBING, (byte) 0); - } - - @Override - public void onUpdate() { - super.onUpdate(); - - if (!this.getEntityWorld().isRemote) { - this.setBesideClimbableBlock(this.collidedHorizontally); - } - } - - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.ENTITY_SPIDER_AMBIENT; - } - - @Override - protected SoundEvent getHurtSound() { - return SoundEvents.ENTITY_SPIDER_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.ENTITY_SPIDER_DEATH; - } - - @Override - protected float getSoundPitch() { - return super.getSoundPitch() * 0.5f; - } - - @Override - protected void playStepSound(BlockPos pos, Block blockIn) { - this.playSound(SoundEvents.ENTITY_SPIDER_STEP, 0.15F, 1.0F); - } - - @Override - public boolean isOnLadder() { - return this.isBesideClimbableBlock(); - } - - @Override - public void setInWeb() { - } - - @Override - public EnumCreatureAttribute getCreatureAttribute() { - return EnumCreatureAttribute.ARTHROPOD; - } - - @Override - public boolean isPotionApplicable(PotionEffect potioneffectIn) { - return potioneffectIn.getPotion() != MobEffects.POISON && super.isPotionApplicable(potioneffectIn); - } - - public boolean isBesideClimbableBlock() { - return (this.dataManager.get(CLIMBING) & 1) != 0; - } - - public void setBesideClimbableBlock(boolean climbing) { - byte b0 = this.dataManager.get(CLIMBING); - - if (climbing) { - b0 = (byte) (b0 | 1); - } else { - b0 = (byte) (b0 & -2); - } - - this.dataManager.set(CLIMBING, b0); - } - - @Override - public float getEyeHeight() { - return 0.65F; - } - - static class AISpiderAttack extends EntityAIAttackMelee { - public AISpiderAttack(EntityCorruptedSpider spider) { - super(spider, 1.0D, true); - } - - /** - * Returns whether an in-progress EntityAIBase should continue executing - */ - public boolean shouldContinueExecuting() { - float f = this.attacker.getBrightness(); - - if (f >= 0.5F && this.attacker.getRNG().nextInt(100) == 0) { - this.attacker.setAttackTarget(null); - return false; - } else { - return super.shouldContinueExecuting(); - } - } - - protected double getAttackReachSqr(EntityLivingBase attackTarget) { - return (double) (4.0F + attackTarget.width); - } - } - - static class AISpiderTarget extends EntityAINearestAttackableTarget { - public AISpiderTarget(EntityCorruptedSpider spider, Class classTarget) { - super(spider, classTarget, true); - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - public boolean shouldExecute() { - float f = this.taskOwner.getBrightness(); - return !(f >= 0.5F) && super.shouldExecute(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedZombie.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedZombie.java deleted file mode 100644 index f9927f48..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityCorruptedZombie.java +++ /dev/null @@ -1,185 +0,0 @@ -package WayofTime.bloodmagic.entity.mob; - -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.entity.ai.EntityAIAttackRangedBow; -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.*; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityGhast; -import net.minecraft.entity.monster.EntityIronGolem; -import net.minecraft.entity.monster.EntityPigZombie; -import net.minecraft.entity.passive.EntityVillager; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemBow; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; - -public class EntityCorruptedZombie extends EntityAspectedDemonBase { - private final EntityAIAttackRangedBow aiArrowAttack = new EntityAIAttackRangedBow(this, 1.0D, 20, 15.0F); - private final EntityAIAttackMelee aiAttackOnCollide = new EntityAIAttackMelee(this, 1.0D, false); - - private final int attackPriority = 3; - - public EntityCorruptedZombie(World worldIn) { - super(worldIn); - this.setSize(0.6F, 1.95F); -// ((PathNavigateGround) getNavigator()).setCanSwim(false); - this.tasks.addTask(0, new EntityAISwimming(this)); - this.tasks.addTask(attackPriority, aiAttackOnCollide); - this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D)); - this.tasks.addTask(7, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(8, new EntityAILookIdle(this)); - - this.tasks.addTask(6, new EntityAIMoveThroughVillage(this, 1.0D, false)); - this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, EntityPigZombie.class)); - this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityPlayer.class, true)); - this.targetTasks.addTask(3, new EntityAINearestAttackableTarget<>(this, EntityVillager.class, false)); - this.targetTasks.addTask(3, new EntityAINearestAttackableTarget<>(this, EntityIronGolem.class, true)); - - this.setCombatTask(); -// this.targetTasks.addTask(8, new EntityAINearestAttackableTarget(this, EntityMob.class, 10, true, false, new TargetPredicate(this))); - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(35.0D); - getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(40.0D); - getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D); - getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.27D); - this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(2.0D); - } - - @Override - public void setCombatTask() { - if (!this.getEntityWorld().isRemote) { - this.tasks.removeTask(this.aiAttackOnCollide); - this.tasks.removeTask(this.aiArrowAttack); - ItemStack itemstack = this.getHeldItemMainhand(); - - if (!itemstack.isEmpty() && itemstack.getItem() instanceof ItemBow) { - int i = 20; - - if (this.getEntityWorld().getDifficulty() != EnumDifficulty.HARD) { - i = 40; - } - - this.aiArrowAttack.setAttackCooldown(i); - this.tasks.addTask(attackPriority, this.aiArrowAttack); - } else { - this.tasks.addTask(attackPriority, this.aiAttackOnCollide); - } - } - } - - @Override - public boolean attackEntityFrom(DamageSource source, float amount) { - return !this.isEntityInvulnerable(source) && super.attackEntityFrom(source, amount); - } - - /** - * Redone from EntityMob to prevent despawning on peaceful. - */ - @Override - public boolean attackEntityAsMob(Entity attackedEntity) { - boolean flag = super.attackEntityAsMob(attackedEntity); - - if (flag) { - //EMPTY - - return true; - } else { - return false; - } - } - - /** - * @param toHeal - * @return Amount of Will consumed from the Aura to heal - */ - public double absorbWillFromAuraToHeal(double toHeal) { - if (getEntityWorld().isRemote) { - return 0; - } - - double healthMissing = this.getMaxHealth() - this.getHealth(); - if (healthMissing <= 0) { - return 0; - } - - double will = WorldDemonWillHandler.getCurrentWill(getEntityWorld(), getPosition(), getType()); - - toHeal = Math.min(healthMissing, Math.min(toHeal, will / getWillToHealth())); - if (toHeal > 0) { - this.heal((float) toHeal); - return WorldDemonWillHandler.drainWill(getEntityWorld(), getPosition(), getType(), toHeal * getWillToHealth(), true); - } - - return 0; - } - - public double getWillToHealth() { - return 2; - } - - @Override - protected boolean canDespawn() { - return !this.isTamed() && super.canDespawn(); - } - - public void onUpdate() { - if (!this.getEntityWorld().isRemote && this.ticksExisted % 20 == 0) { - absorbWillFromAuraToHeal(2); - } - - super.onUpdate(); - } - - //TODO: Change to fit the given AI - @Override - public boolean shouldAttackEntity(EntityLivingBase attacker, EntityLivingBase owner) { - return !(attacker instanceof EntityCreeper) && !(attacker instanceof EntityGhast) && super.shouldAttackEntity(attacker, owner); - } - - @Override - protected float getSoundPitch() { - return super.getSoundPitch() * 0.5f; - } - - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.ENTITY_ZOMBIE_AMBIENT; - } - - @Override - protected SoundEvent getHurtSound() { - return SoundEvents.ENTITY_ZOMBIE_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.ENTITY_ZOMBIE_DEATH; - } - - @Override - protected void playStepSound(BlockPos pos, Block block) { - this.playSound(SoundEvents.ENTITY_ZOMBIE_STEP, 0.15F, 1.0F); - } - - /** - * Returns the volume for the sounds this mob makes. - */ - @Override - protected float getSoundVolume() { - return 0.4F; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityDemonBase.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityDemonBase.java deleted file mode 100644 index b82cfc8d..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityDemonBase.java +++ /dev/null @@ -1,304 +0,0 @@ -package WayofTime.bloodmagic.entity.mob; - -import com.google.common.base.Optional; -import com.google.common.base.Predicate; -import net.minecraft.block.Block; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.*; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityGhast; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.passive.EntityHorse; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.init.SoundEvents; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemAxe; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.potion.PotionEffect; -import net.minecraft.server.management.PreYggdrasilConverter; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; - -import javax.annotation.Nullable; -import java.util.UUID; - -public class EntityDemonBase extends EntityCreature implements IEntityOwnable { - protected static final DataParameter TAMED = EntityDataManager.createKey(EntityDemonBase.class, DataSerializers.BYTE); - protected static final DataParameter> OWNER_UNIQUE_ID = EntityDataManager.createKey(EntityDemonBase.class, DataSerializers.OPTIONAL_UNIQUE_ID); - - public EntityDemonBase(World worldIn) { - super(worldIn); - } - - @Override - protected void entityInit() { - super.entityInit(); - this.dataManager.register(TAMED, (byte) 0); - this.dataManager.register(OWNER_UNIQUE_ID, Optional.absent()); - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE); - } - - public void setCombatTask() { - - } - - @Override - public boolean isPotionApplicable(PotionEffect effect) { - return super.isPotionApplicable(effect); - } - - @Override - public void onLivingUpdate() { - this.updateArmSwingProgress(); - - super.onLivingUpdate(); - } - - @Override - public boolean attackEntityFrom(DamageSource source, float amount) { - return !this.isEntityInvulnerable(source) && super.attackEntityFrom(source, amount); - } - - /** - * Redone from EntityMob to prevent despawning on peaceful. - */ - @Override - public boolean attackEntityAsMob(Entity attackedEntity) { - float f = (float) this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue(); - int i = 0; - - if (attackedEntity instanceof EntityLivingBase) { - f += EnchantmentHelper.getModifierForCreature(this.getHeldItemMainhand(), ((EntityLivingBase) attackedEntity).getCreatureAttribute()); - i += EnchantmentHelper.getKnockbackModifier(this); - } - - boolean flag = attackedEntity.attackEntityFrom(DamageSource.causeMobDamage(this), f); - - if (flag) { - if (i > 0) { - ((EntityLivingBase) attackedEntity).knockBack(this, (float) i * 0.5F, (double) MathHelper.sin(this.rotationYaw * 0.017453292F), (double) (-MathHelper.cos(this.rotationYaw * 0.017453292F))); - this.motionX *= 0.6D; - this.motionZ *= 0.6D; - } - - int j = EnchantmentHelper.getFireAspectModifier(this); - - if (j > 0) { - attackedEntity.setFire(j * 4); - } - - if (attackedEntity instanceof EntityPlayer) { - EntityPlayer entityplayer = (EntityPlayer) attackedEntity; - ItemStack itemstack = this.getHeldItemMainhand(); - ItemStack itemstack1 = entityplayer.isHandActive() ? entityplayer.getActiveItemStack() : ItemStack.EMPTY; - - if (!itemstack.isEmpty() && !itemstack1.isEmpty() && itemstack.getItem() instanceof ItemAxe && itemstack1.getItem() == Items.SHIELD) { - float f1 = 0.25F + (float) EnchantmentHelper.getEfficiencyModifier(this) * 0.05F; - - if (this.rand.nextFloat() < f1) { - entityplayer.getCooldownTracker().setCooldown(Items.SHIELD, 100); - this.getEntityWorld().setEntityState(entityplayer, (byte) 30); - } - } - } - - this.applyEnchantments(this, attackedEntity); - } - - return flag; - } - - @Override - public void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack) { - super.setItemStackToSlot(slotIn, stack); - - if (!this.getEntityWorld().isRemote && slotIn == EntityEquipmentSlot.MAINHAND) { - this.setCombatTask(); - } - } - - public boolean isStationary() { - return false; - } - - public boolean absorbExplosion(Explosion explosion) { - return false; - } - - public void performEmergencyHeal(double toHeal) { - this.heal((float) toHeal); - - if (getEntityWorld() instanceof WorldServer) { - WorldServer server = (WorldServer) getEntityWorld(); - server.spawnParticle(EnumParticleTypes.HEART, this.posX + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, this.posY + 0.5D + (double) (this.rand.nextFloat() * this.height), this.posZ + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, 7, 0.2, 0.2, 0.2, 0); - } - } - - public boolean shouldEmergencyHeal() { - return this.getHealth() < this.getMaxHealth() * 0.5; - } - - @Override - protected boolean canDespawn() { - return !this.isTamed() && super.canDespawn(); - } - - @Override - public void writeEntityToNBT(NBTTagCompound tag) { - super.writeEntityToNBT(tag); - - if (this.getOwnerId() == null) { - tag.setString("OwnerUUID", ""); - } else { - tag.setString("OwnerUUID", this.getOwnerId().toString()); - } - - } - - @Override - public void readEntityFromNBT(NBTTagCompound tag) { - super.readEntityFromNBT(tag); - - String s; - - if (tag.hasKey("OwnerUUID", 8)) { - s = tag.getString("OwnerUUID"); - } else { - String s1 = tag.getString("Owner"); - s = PreYggdrasilConverter.convertMobOwnerIfNeeded(this.getServer(), s1); - } - - if (!s.isEmpty()) { - try { - this.setOwnerId(UUID.fromString(s)); - this.setTamed(true); - } catch (Throwable var4) { - this.setTamed(false); - } - } - - this.setCombatTask(); - } - - //TODO: Change to fit the given AI - public boolean shouldAttackEntity(EntityLivingBase attacker, EntityLivingBase owner) { - if (!(attacker instanceof EntityCreeper) && !(attacker instanceof EntityGhast)) { - if (attacker instanceof IEntityOwnable) { - IEntityOwnable entityOwnable = (IEntityOwnable) attacker; - - if (entityOwnable.getOwner() == owner) { - return false; - } - } - - return !(attacker instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer) owner).canAttackPlayer((EntityPlayer) attacker)) && (!(attacker instanceof EntityHorse) || !((EntityHorse) attacker).isTame()); - } else { - return false; - } - } - - public void attackEntityWithRangedAttack(EntityLivingBase target, float velocity) { - - } - - public boolean isTamed() { - return (this.dataManager.get(TAMED) & 4) != 0; - } - - public void setTamed(boolean tamed) { - byte b0 = this.dataManager.get(TAMED); - - if (tamed) { - this.dataManager.set(TAMED, (byte) (b0 | 4)); - } else { - this.dataManager.set(TAMED, (byte) (b0 & -5)); - } - -// this.setupTamedAI(); - } - - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.ENTITY_COW_AMBIENT; - } - - @Nullable - @Override - protected SoundEvent getHurtSound(DamageSource damageSourceIn) { - return getHurtSound(); - } - - protected SoundEvent getHurtSound() { - return SoundEvents.ENTITY_COW_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.ENTITY_COW_DEATH; - } - - @Override - protected void playStepSound(BlockPos pos, Block block) { - this.playSound(SoundEvents.ENTITY_COW_STEP, 0.15F, 1.0F); - } - - /** - * Returns the volume for the sounds this mob makes. - */ - @Override - protected float getSoundVolume() { - return 0.4F; - } - - @Override - public UUID getOwnerId() { - return (this.dataManager.get(OWNER_UNIQUE_ID)).orNull(); - } - - public void setOwnerId(UUID uuid) { - this.dataManager.set(OWNER_UNIQUE_ID, Optional.fromNullable(uuid)); - } - - @Override - public EntityLivingBase getOwner() { - try { - UUID uuid = this.getOwnerId(); - return uuid == null ? null : this.getEntityWorld().getPlayerEntityByUUID(uuid); - } catch (IllegalArgumentException var2) { - return null; - } - } - - public void setOwner(EntityPlayer player) { - setOwnerId(player.getUniqueID()); - } - - public class TargetPredicate implements Predicate { - EntityDemonBase entity; - - public TargetPredicate(EntityDemonBase entity) { - this.entity = entity; - } - - @Override - public boolean apply(EntityMob input) { - return entity.shouldAttackEntity(input, this.entity.getOwner()); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityMimic.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntityMimic.java deleted file mode 100644 index 54e39197..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntityMimic.java +++ /dev/null @@ -1,327 +0,0 @@ -package WayofTime.bloodmagic.entity.mob; - -import WayofTime.bloodmagic.block.BlockMimic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.entity.ai.EntityAIMimicReform; -import WayofTime.bloodmagic.tile.TileMimic; -import WayofTime.bloodmagic.util.StateUtil; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.EnumCreatureAttribute; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.*; -import net.minecraft.entity.monster.EntityIronGolem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.pathfinding.PathNavigate; -import net.minecraft.pathfinding.PathNavigateClimber; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; - -public class EntityMimic extends EntityDemonBase { - /** - * Copy of EntitySpider's AI (should be pretty evident...) - */ - private static final DataParameter CLIMBING = EntityDataManager.createKey(EntityMimic.class, DataSerializers.BYTE); - - public boolean dropItemsOnBreak = true; - public NBTTagCompound tileTag = new NBTTagCompound(); - public int metaOfReplacedBlock = 0; - public IBlockState stateOfReplacedBlock = Blocks.AIR.getDefaultState(); - public int playerCheckRadius = 5; - - public EntityMimic(World worldIn) { - super(worldIn); - this.setSize(0.9F, 0.9F); - - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); - this.tasks.addTask(4, new EntityMimic.AISpiderAttack(this)); - this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1)); - this.tasks.addTask(6, new EntityAIWander(this, 0.8D)); - this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(8, new EntityAILookIdle(this)); - this.tasks.addTask(7, new EntityAIMimicReform(this)); - - this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); - this.targetTasks.addTask(2, new EntityMimic.AISpiderTarget(this, EntityPlayer.class)); - this.targetTasks.addTask(3, new EntityMimic.AISpiderTarget(this, EntityIronGolem.class)); - } - - @Override - public void writeEntityToNBT(NBTTagCompound tag) { - super.writeEntityToNBT(tag); - - tag.setBoolean("dropItemsOnBreak", dropItemsOnBreak); - tag.setTag("tileTag", tileTag); - tag.setInteger("metaOfReplacedBlock", metaOfReplacedBlock); - tag.setInteger("playerCheckRadius", playerCheckRadius); - tag.setString("stateOfReplacedBlock", stateOfReplacedBlock.toString()); - } - - @Override - public void readEntityFromNBT(NBTTagCompound tag) { - super.readEntityFromNBT(tag); - - dropItemsOnBreak = tag.getBoolean("dropItemsOnBreak"); - tileTag = tag.getCompoundTag("tileTag"); - metaOfReplacedBlock = tag.getInteger("metaOfReplacedBlock"); - playerCheckRadius = tag.getInteger("playerCheckRadius"); - stateOfReplacedBlock = StateUtil.parseState(tag.getString("stateOfReplacedBlock")); - } - - public ItemStack getMimicItemStack() { - return this.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - } - - public void setMimicItemStack(ItemStack stack) { - this.setItemStackToSlot(EntityEquipmentSlot.CHEST, stack); - } - - public boolean spawnHeldBlockOnDeath(World world, BlockPos pos) { - return world.isAirBlock(pos) && TileMimic.replaceMimicWithBlockActual(world, pos, getMimicItemStack(), tileTag, stateOfReplacedBlock); - } - - public boolean spawnMimicBlockAtPosition(World world, BlockPos pos) { - if (world.isAirBlock(pos)) { - IBlockState mimicState = RegistrarBloodMagicBlocks.MIMIC.getStateFromMeta(BlockMimic.sentientMimicMeta); - world.setBlockState(pos, mimicState, 3); - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileMimic) { - TileMimic mimic = (TileMimic) tile; - mimic.setReplacedState(this.stateOfReplacedBlock); - mimic.tileTag = tileTag; - mimic.setInventorySlotContents(0, getMimicItemStack()); - mimic.dropItemsOnBreak = dropItemsOnBreak; - mimic.refreshTileEntity(); - } - - return true; - } - - return false; - } - - public void initializeMimic(ItemStack heldStack, NBTTagCompound tileTag, boolean dropItemsOnBreak, IBlockState stateOfReplacedBlock, int playerCheckRadius, BlockPos homePosition) { - this.setMimicItemStack(heldStack); - this.tileTag = tileTag; - this.dropItemsOnBreak = dropItemsOnBreak; - this.stateOfReplacedBlock = stateOfReplacedBlock; - this.playerCheckRadius = playerCheckRadius; - this.setHomePosAndDistance(homePosition, 2); //TODO: Save this. - } - - public boolean reformIntoMimicBlock(BlockPos centerPos) { - int horizontalRadius = 1; - int verticalRadius = 1; - - for (int hR = 0; hR <= horizontalRadius; hR++) { - for (int vR = 0; vR <= verticalRadius; vR++) { - for (int i = -hR; i <= hR; i++) { - for (int k = -hR; k <= hR; k++) { - for (int j = -vR; j <= vR; j += 2 * vR + (vR > 0 ? 0 : 1)) { - if (!(Math.abs(i) == hR || Math.abs(k) == hR)) { - continue; - } - - BlockPos newPos = centerPos.add(i, j, k); - if (spawnMimicBlockAtPosition(getEntityWorld(), newPos)) { - return true; - } - } - } - } - } - } - - return false; - } - - @Override - public void onDeath(DamageSource cause) { - super.onDeath(cause); - - if (!getEntityWorld().isRemote) { - BlockPos centerPos = this.getPosition(); - - int horizontalRadius = 1; - int verticalRadius = 1; - - for (int hR = 0; hR <= horizontalRadius; hR++) { - for (int vR = 0; vR <= verticalRadius; vR++) { - for (int i = -hR; i <= hR; i++) { - for (int k = -hR; k <= hR; k++) { - for (int j = -vR; j <= vR; j += 2 * vR + (vR > 0 ? 0 : 1)) { - if (!(Math.abs(i) == hR || Math.abs(k) == hR)) { - continue; - } - - BlockPos newPos = centerPos.add(i, j, k); - if (spawnHeldBlockOnDeath(getEntityWorld(), newPos)) { - return; - } - } - } - } - } - } - } - } - - /** - * Returns the Y offset from the entity's position for any entity riding - * this one. - */ - @Override - public double getMountedYOffset() { - return (double) (this.height * 0.5F); - } - - /** - * Returns new PathNavigateGround instance - */ - @Override - protected PathNavigate createNavigator(World worldIn) { - return new PathNavigateClimber(this, worldIn); - } - - @Override - protected void entityInit() { - super.entityInit(); - this.dataManager.register(CLIMBING, (byte) 0); -// this.dataManager.register(ITEMSTACK, null); - } - - /** - * Called to update the entity's position/logic. - */ - @Override - public void onUpdate() { - if (!this.getEntityWorld().isRemote && this.getEntityWorld().getDifficulty() == EnumDifficulty.PEACEFUL) { - if (reformIntoMimicBlock(this.getPosition())) { - this.setDead(); - } - } - - super.onUpdate(); - - if (!this.getEntityWorld().isRemote) { - this.setBesideClimbableBlock(this.collidedHorizontally); - } - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(16.0D); - this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.3D); - } - - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.ENTITY_SPIDER_AMBIENT; - } - - @Override - protected SoundEvent getHurtSound() { - return SoundEvents.ENTITY_SPIDER_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.ENTITY_SPIDER_DEATH; - } - - @Override - protected void playStepSound(BlockPos pos, Block blockIn) { - this.playSound(SoundEvents.ENTITY_SPIDER_STEP, 0.15F, 1.0F); - } - - /** - * returns true if this entity is by a ladder, false otherwise - */ - @Override - public boolean isOnLadder() { - return this.isBesideClimbableBlock(); - } - - /** - * Sets the Entity inside a web block. - */ - @Override - public void setInWeb() { - - } - - /** - * Get this Entity's EnumCreatureAttribute - */ - @Override - public EnumCreatureAttribute getCreatureAttribute() { - return EnumCreatureAttribute.ARTHROPOD; - } - - @Override - public boolean isPotionApplicable(PotionEffect potioneffectIn) { - return potioneffectIn.getPotion() != MobEffects.POISON && super.isPotionApplicable(potioneffectIn); - } - - /** - * Returns true if the WatchableObject (Byte) is 0x01 otherwise returns - * false. The WatchableObject is updated using setBesideClimableBlock. - */ - public boolean isBesideClimbableBlock() { - return (this.dataManager.get(CLIMBING) & 1) != 0; - } - - /** - * Updates the WatchableObject (Byte) created in entityInit(), setting it to - * 0x01 if par1 is true or 0x00 if it is false. - */ - public void setBesideClimbableBlock(boolean climbing) { - byte b0 = this.dataManager.get(CLIMBING); - - if (climbing) { - b0 = (byte) (b0 | 1); - } else { - b0 = (byte) (b0 & -2); - } - - this.dataManager.set(CLIMBING, b0); - } - - public float getEyeHeight() { - return 0.65F; - } - - static class AISpiderAttack extends EntityAIAttackMelee { - public AISpiderAttack(EntityMimic spider) { - super(spider, 1.0D, true); - } - - @Override - protected double getAttackReachSqr(EntityLivingBase attackTarget) { - return (double) (4.0F + attackTarget.width); - } - } - - static class AISpiderTarget extends EntityAINearestAttackableTarget { - public AISpiderTarget(EntityMimic spider, Class classTarget) { - super(spider, classTarget, true); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/entity/mob/EntitySentientSpecter.java b/src/main/java/WayofTime/bloodmagic/entity/mob/EntitySentientSpecter.java deleted file mode 100644 index c69b1e76..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/mob/EntitySentientSpecter.java +++ /dev/null @@ -1,486 +0,0 @@ -package WayofTime.bloodmagic.entity.mob; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.entity.ai.EntityAIAttackRangedBow; -import WayofTime.bloodmagic.entity.ai.EntityAIFollowOwner; -import WayofTime.bloodmagic.entity.ai.*; -import WayofTime.bloodmagic.entity.ai.EntityAIOwnerHurtByTarget; -import WayofTime.bloodmagic.entity.ai.EntityAIOwnerHurtTarget; -import WayofTime.bloodmagic.item.soul.ItemSentientBow; -import net.minecraft.block.Block; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityCreature; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.*; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntityGhast; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityTippedArrow; -import net.minecraft.init.Enchantments; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemBow; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumHand; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -public class EntitySentientSpecter extends EntityDemonBase { - private final EntityAIAttackRangedBow aiArrowAttack = new EntityAIAttackRangedBow(this, 1.0D, 20, 15.0F); - private final EntityAIAttackMelee aiAttackOnCollide = new EntityAIAttackMelee(this, 1.0D, false); - private final int attackPriority = 3; - protected EnumDemonWillType type = EnumDemonWillType.DESTRUCTIVE; - protected boolean wasGivenSentientArmour = false; - - public EntitySentientSpecter(World worldIn) { - super(worldIn); - this.setSize(0.6F, 1.95F); -// ((PathNavigateGround) getNavigator()).setCanSwim(false); - this.tasks.addTask(0, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAIRetreatToHeal<>(this, EntityCreature.class, 6.0F, 1.0D, 1.2D)); - this.tasks.addTask(attackPriority, aiAttackOnCollide); - this.tasks.addTask(4, new EntityAIGrabEffectsFromOwner(this, 2.0D, 1.0F)); - this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); - this.tasks.addTask(6, new EntityAIWander(this, 1.0D)); - this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); - this.tasks.addTask(8, new EntityAILookIdle(this)); - - this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); - this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); - this.targetTasks.addTask(3, new EntityAINearestAttackableTarget<>(this, EntityMob.class, true)); - - this.targetTasks.addTask(4, new EntityAIHurtByTargetIgnoreTamed(this, false)); - - this.setCombatTask(); -// this.targetTasks.addTask(8, new EntityAINearestAttackableTarget(this, EntityMob.class, 10, true, false, new TargetPredicate(this))); - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(40.0D); - getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D); - getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.27D); - } - - @Override - public void setCombatTask() { - if (!this.getEntityWorld().isRemote) { - this.tasks.removeTask(this.aiAttackOnCollide); - this.tasks.removeTask(this.aiArrowAttack); - ItemStack itemstack = this.getHeldItemMainhand(); - - if (!itemstack.isEmpty() && itemstack.getItem() instanceof ItemBow) { - int i = 20; - - if (this.getEntityWorld().getDifficulty() != EnumDifficulty.HARD) { - i = 40; - } - - this.aiArrowAttack.setAttackCooldown(i); - this.tasks.addTask(attackPriority, this.aiArrowAttack); - } else { - this.tasks.addTask(attackPriority, this.aiAttackOnCollide); - } - } - } - - @Override - public boolean isPotionApplicable(PotionEffect effect) { - Potion potion = effect.getPotion(); - - //Specter cannot be healed by normal means - return !(potion == MobEffects.REGENERATION || potion == MobEffects.INSTANT_HEALTH) && super.isPotionApplicable(effect); - } - - public boolean canStealEffectFromOwner(EntityLivingBase owner, PotionEffect effect) { - return effect.getPotion().isBadEffect() && this.type == EnumDemonWillType.CORROSIVE; - } - - public boolean canStealEffectFromOwner(EntityLivingBase owner) { - if (this.type != EnumDemonWillType.CORROSIVE) { - return false; - } - - for (PotionEffect eff : owner.getActivePotionEffects()) { - if (canStealEffectFromOwner(owner, eff)) { - return true; - } - } - - return false; - } - - public boolean stealEffectsFromOwner(EntityLivingBase owner) { - if (this.type != EnumDemonWillType.CORROSIVE) { - return false; - } - - boolean hasStolenEffect = false; - - List removedEffects = new ArrayList<>(); - - for (PotionEffect eff : owner.getActivePotionEffects()) { - if (canStealEffectFromOwner(owner, eff)) { - removedEffects.add(eff); - hasStolenEffect = true; - } - } - - for (PotionEffect eff : removedEffects) { - owner.removePotionEffect(eff.getPotion()); - this.addPotionEffect(eff); - } - - return hasStolenEffect; - } - - public boolean applyNegativeEffectsToAttacked(EntityLivingBase attackedEntity, float percentTransmitted) { - boolean hasProvidedEffect = false; - List removedEffects = new ArrayList<>(); - for (PotionEffect eff : this.getActivePotionEffects()) { - if (eff.getPotion().isBadEffect() && attackedEntity.isPotionApplicable(eff)) { - if (!attackedEntity.isPotionActive(eff.getPotion())) { - removedEffects.add(eff); - hasProvidedEffect = true; - } else { - PotionEffect activeEffect = attackedEntity.getActivePotionEffect(eff.getPotion()); - if (activeEffect.getAmplifier() < eff.getAmplifier() || activeEffect.getDuration() < eff.getDuration() * percentTransmitted) { - removedEffects.add(eff); - hasProvidedEffect = true; - } - } - } - } - - for (PotionEffect eff : removedEffects) { - if (!attackedEntity.isPotionActive(eff.getPotion())) { - PotionEffect newEffect = new PotionEffect(eff.getPotion(), (int) (eff.getDuration() * percentTransmitted), eff.getAmplifier(), eff.getIsAmbient(), eff.doesShowParticles()); - attackedEntity.addPotionEffect(newEffect); - - PotionEffect newSentientEffect = new PotionEffect(eff.getPotion(), (int) (eff.getDuration() * (1 - percentTransmitted)), eff.getAmplifier(), eff.getIsAmbient(), eff.doesShowParticles()); - this.removePotionEffect(eff.getPotion()); - this.addPotionEffect(newSentientEffect); - } else { - PotionEffect activeEffect = attackedEntity.getActivePotionEffect(eff.getPotion()); - - PotionEffect newEffect = new PotionEffect(eff.getPotion(), (int) (eff.getDuration() * percentTransmitted), eff.getAmplifier(), activeEffect.getIsAmbient(), activeEffect.doesShowParticles()); - attackedEntity.addPotionEffect(newEffect); - - PotionEffect newSentientEffect = new PotionEffect(eff.getPotion(), (int) (eff.getDuration() * (1 - percentTransmitted)), eff.getAmplifier(), eff.getIsAmbient(), eff.doesShowParticles()); - this.removePotionEffect(eff.getPotion()); - this.addPotionEffect(newSentientEffect); - } - } - - return hasProvidedEffect; - } - - public List getPotionEffectsForArrowRemovingDuration(float percentTransmitted) { - List arrowEffects = new ArrayList<>(); - - if (type != EnumDemonWillType.CORROSIVE) { - return arrowEffects; - } - - List removedEffects = new ArrayList<>(); - for (PotionEffect eff : this.getActivePotionEffects()) { - if (eff.getPotion().isBadEffect()) { - removedEffects.add(eff); - } - } - - for (PotionEffect eff : removedEffects) { - PotionEffect newEffect = new PotionEffect(eff.getPotion(), (int) (eff.getDuration() * percentTransmitted), eff.getAmplifier(), eff.getIsAmbient(), eff.doesShowParticles()); - arrowEffects.add(newEffect); - - PotionEffect newSentientEffect = new PotionEffect(eff.getPotion(), (int) (eff.getDuration() * (1 - percentTransmitted)), eff.getAmplifier(), eff.getIsAmbient(), eff.doesShowParticles()); - this.removePotionEffect(eff.getPotion()); - this.addPotionEffect(newSentientEffect); - } - - return arrowEffects; - } - - @Override - public boolean attackEntityFrom(DamageSource source, float amount) { - return !this.isEntityInvulnerable(source) && super.attackEntityFrom(source, amount); - } - - /** - * Redone from EntityMob to prevent despawning on peaceful. - */ - @Override - public boolean attackEntityAsMob(Entity attackedEntity) { - boolean flag = super.attackEntityAsMob(attackedEntity); - - if (flag) { - if (this.type == EnumDemonWillType.CORROSIVE && attackedEntity instanceof EntityLivingBase) { -// ((EntityLivingBase) attackedEntity).addPotionEffect(new PotionEffect(MobEffects.WITHER, 200)); - applyNegativeEffectsToAttacked((EntityLivingBase) attackedEntity, 1); - } - - return true; - } else { - return false; - } - } - - @Override - public void onDeath(DamageSource cause) { - super.onDeath(cause); - - if (!getEntityWorld().isRemote && !getHeldItemMainhand().isEmpty()) { - this.entityDropItem(getHeldItemMainhand(), 0); - } - } - - @Override - public boolean isStationary() { - return false; - } - - @Override - public boolean absorbExplosion(Explosion explosion) { - if (this.type == EnumDemonWillType.DESTRUCTIVE) { - this.addPotionEffect(new PotionEffect(MobEffects.STRENGTH, 600, 1)); - - explosion.doExplosionB(true); - - return true; - } - - return false; - } - - @Override - public boolean processInteract(EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (this.isTamed() && player.equals(this.getOwner()) && hand == EnumHand.MAIN_HAND) { - if (stack.isEmpty() && player.isSneaking()) //Should return to the entity - { - if (!getEntityWorld().isRemote) { - if (!getHeldItemMainhand().isEmpty()) { - this.entityDropItem(getHeldItemMainhand(), 0); - } - - if (!getHeldItemOffhand().isEmpty()) { - this.entityDropItem(getHeldItemOffhand(), 0); - } - - if (wasGivenSentientArmour) { - this.entityDropItem(new ItemStack(RegistrarBloodMagicItems.SENTIENT_ARMOUR_GEM), 0); - } - - this.setDead(); - } - } - } - - return super.processInteract(player, hand); - } - - public boolean isEntityInvulnerable(DamageSource source) { - return super.isEntityInvulnerable(source) && (this.type == EnumDemonWillType.DESTRUCTIVE && source.isExplosion()); - } - - @Override - public void performEmergencyHeal(double toHeal) { - this.heal((float) toHeal); - - if (getEntityWorld() instanceof WorldServer) { - WorldServer server = (WorldServer) getEntityWorld(); - server.spawnParticle(EnumParticleTypes.HEART, this.posX + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, this.posY + 0.5D + (double) (this.rand.nextFloat() * this.height), this.posZ + (double) (this.rand.nextFloat() * this.width * 2.0F) - (double) this.width, 7, 0.2, 0.2, 0.2, 0); - } - } - - /** - * @param toHeal - * @return Amount of Will consumed from the Aura to heal - */ - public double absorbWillFromAuraToHeal(double toHeal) { - if (getEntityWorld().isRemote) { - return 0; - } - - double healthMissing = this.getMaxHealth() - this.getHealth(); - if (healthMissing <= 0) { - return 0; - } - - double will = WorldDemonWillHandler.getCurrentWill(getEntityWorld(), getPosition(), getType()); - - toHeal = Math.min(healthMissing, Math.min(toHeal, will / getWillToHealth())); - if (toHeal > 0) { - this.heal((float) toHeal); - return WorldDemonWillHandler.drainWill(getEntityWorld(), getPosition(), getType(), toHeal * getWillToHealth(), true); - } - - return 0; - } - - public double getWillToHealth() { - return 2; - } - - @Override - protected boolean canDespawn() { - return !this.isTamed() && super.canDespawn(); - } - - public void onUpdate() { - if (!this.getEntityWorld().isRemote && this.ticksExisted % 20 == 0) { - absorbWillFromAuraToHeal(2); - } - - super.onUpdate(); - } - - @Override - public void writeEntityToNBT(NBTTagCompound tag) { - super.writeEntityToNBT(tag); - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - - tag.setBoolean("sentientArmour", wasGivenSentientArmour); - } - - @Override - public void readEntityFromNBT(NBTTagCompound tag) { - super.readEntityFromNBT(tag); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - type = EnumDemonWillType.DEFAULT; - } else { - type = EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - } - - wasGivenSentientArmour = tag.getBoolean("sentientArmour"); - - this.setCombatTask(); - } - - //TODO: Change to fit the given AI - @Override - public boolean shouldAttackEntity(EntityLivingBase attacker, EntityLivingBase owner) { - if (!(attacker instanceof EntityCreeper) && !(attacker instanceof EntityGhast)) { - return super.shouldAttackEntity(attacker, owner); - } - return false; - } - - @Override - public void attackEntityWithRangedAttack(EntityLivingBase target, float velocity) { - ItemStack heldStack = this.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); - if (!heldStack.isEmpty() && heldStack.getItem() == RegistrarBloodMagicItems.SENTIENT_BOW) { - EntityTippedArrow arrowEntity = ((ItemSentientBow) heldStack.getItem()).getArrowEntity(getEntityWorld(), heldStack, target, this, velocity); - if (arrowEntity != null) { - List effects = getPotionEffectsForArrowRemovingDuration(0.2f); - for (PotionEffect eff : effects) { - arrowEntity.addEffect(eff); - } - - this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); - this.getEntityWorld().spawnEntity(arrowEntity); - } - } else { - EntityTippedArrow entitytippedarrow = new EntityTippedArrow(this.getEntityWorld(), this); //TODO: Change to an arrow created by the Sentient Bow - double d0 = target.posX - this.posX; - double d1 = target.getEntityBoundingBox().minY + (double) (target.height / 3.0F) - entitytippedarrow.posY; - double d2 = target.posZ - this.posZ; - double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); - entitytippedarrow.shoot(d0, d1 + d3 * 0.2, d2, 1.6F, 0); //TODO: Yes, it is an accurate arrow. Don't be hatin' - int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.POWER, this); - int j = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.PUNCH, this); - entitytippedarrow.setDamage((double) (velocity * 2.0F) + this.rand.nextGaussian() * 0.25D + (double) ((float) this.getEntityWorld().getDifficulty().getDifficultyId() * 0.11F)); - - if (i > 0) { - entitytippedarrow.setDamage(entitytippedarrow.getDamage() + (double) i * 0.5D + 0.5D); - } - - if (j > 0) { - entitytippedarrow.setKnockbackStrength(j); - } - - boolean burning = this.isBurning(); - burning = burning || EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.FLAME, this) > 0; - - if (burning) { - entitytippedarrow.setFire(100); - } - - if (true) //TODO: Add potion effects to the arrows - { - entitytippedarrow.addEffect(new PotionEffect(MobEffects.SLOWNESS, 600)); - } - - this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); - this.getEntityWorld().spawnEntity(entitytippedarrow); - } - } - - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.ENTITY_COW_AMBIENT; - } - - @Override - protected SoundEvent getHurtSound() { - return SoundEvents.ENTITY_COW_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.ENTITY_COW_DEATH; - } - - @Override - protected void playStepSound(BlockPos pos, Block block) { - this.playSound(SoundEvents.ENTITY_COW_STEP, 0.15F, 1.0F); - } - - /** - * Returns the volume for the sounds this mob makes. - */ - @Override - protected float getSoundVolume() { - return 0.4F; - } - - public EnumDemonWillType getType() { - return type; - } - - public void setType(EnumDemonWillType type) { - this.type = type; - } - - public boolean isWasGivenSentientArmour() { - return wasGivenSentientArmour; - } - - public void setWasGivenSentientArmour(boolean wasGivenSentientArmour) { - this.wasGivenSentientArmour = wasGivenSentientArmour; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityBloodLight.java b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityBloodLight.java deleted file mode 100644 index 5e2e4e43..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityBloodLight.java +++ /dev/null @@ -1,171 +0,0 @@ -package WayofTime.bloodmagic.entity.projectile; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.projectile.EntityThrowable; -import net.minecraft.init.Blocks; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; -import net.minecraftforge.fml.common.registry.IThrowableEntity; - -public class EntityBloodLight extends EntityThrowable implements IThrowableEntity, IEntityAdditionalSpawnData { - public EntityLivingBase shootingEntity; - protected int ticksInAir = 0; - protected int maxTicksInAir = 600; - - public EntityBloodLight(World world) { - super(world); - this.setSize(0.5F, 0.5F); - } - - public EntityBloodLight(World world, double x, double y, double z) { - super(world); - this.setSize(0.5F, 0.5F); - this.setPosition(x, y, z); - } - - public EntityBloodLight(World world, EntityLivingBase player) { - super(world, player); - shootingEntity = player; - float par3 = 0.8F; - this.setSize(0.5F, 0.5F); - this.setLocationAndAngles(player.posX, player.posY + player.getEyeHeight(), player.posZ, player.rotationYaw, player.rotationPitch); - posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - posY -= 0.2D; - posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; - this.setPosition(posX, posY, posZ); - motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); - motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); - this.shoot(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); - } - - @Override - protected float getGravityVelocity() { - return 0F; - } - - @Override - public void shoot(double var1, double var3, double var5, float var7, float var8) { - float var9 = MathHelper.sqrt(var1 * var1 + var3 * var3 + var5 * var5); - var1 /= var9; - var3 /= var9; - var5 /= var9; - var1 += rand.nextGaussian() * 0.007499999832361937D * var8; - var3 += rand.nextGaussian() * 0.007499999832361937D * var8; - var5 += rand.nextGaussian() * 0.007499999832361937D * var8; - var1 *= var7; - var3 *= var7; - var5 *= var7; - motionX = var1; - motionY = var3; - motionZ = var5; - float var10 = MathHelper.sqrt(var1 * var1 + var5 * var5); - prevRotationYaw = rotationYaw = (float) (Math.atan2(var1, var5) * 180.0D / Math.PI); - prevRotationPitch = rotationPitch = (float) (Math.atan2(var3, var10) * 180.0D / Math.PI); - } - - @Override - public void onUpdate() { - super.onUpdate(); - if (this.ticksExisted > this.maxTicksInAir) { - setDead(); - } - } - - @Override - protected void onImpact(RayTraceResult mop) { - if (mop.typeOfHit == RayTraceResult.Type.ENTITY && mop.entityHit != null) { - if (mop.entityHit == shootingEntity) { - return; - } - - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == RayTraceResult.Type.BLOCK) { - EnumFacing sideHit = mop.sideHit; - BlockPos blockPos = mop.getBlockPos().offset(sideHit); - - if (getEntityWorld().isAirBlock(blockPos)) { - getEntityWorld().setBlockState(blockPos, RegistrarBloodMagicBlocks.BLOOD_LIGHT.getDefaultState()); - } - } - - this.setDead(); - } - - protected void onImpact(Entity mop) { - if (mop == shootingEntity && ticksInAir > 3) { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else { - if (mop instanceof EntityLivingBase) { - ((EntityLivingBase) mop).setRevengeTarget(shootingEntity); - doDamage(1, mop); - } - } - - if (getEntityWorld().isAirBlock(new BlockPos((int) this.posX, (int) this.posY, (int) this.posZ))) { - getEntityWorld().setBlockState(new BlockPos((int) this.posX, (int) this.posY, (int) this.posZ), Blocks.FIRE.getDefaultState()); - } - - // spawnHitParticles("magicCrit", 8); - this.setDead(); - } - - protected void doDamage(int i, Entity mop) { - mop.attackEntityFrom(this.getDamageSource(), i); - } - - public DamageSource getDamageSource() { - return DamageSource.causeMobDamage(shootingEntity); - } - - @Override - public void writeSpawnData(ByteBuf data) { - data.writeByte(this.ticksInAir); - } - - @Override - public void readSpawnData(ByteBuf data) { - this.ticksInAir = data.readByte(); - } - - @Override - public void writeEntityToNBT(NBTTagCompound nbt) { - super.writeEntityToNBT(nbt); - nbt.setInteger(Constants.NBT.PROJECTILE_TICKS_IN_AIR, ticksInAir); - nbt.setInteger(Constants.NBT.PROJECTILE_MAX_TICKS_IN_AIR, maxTicksInAir); - } - - @Override - public void readEntityFromNBT(NBTTagCompound nbt) { - super.readEntityFromNBT(nbt); - ticksInAir = nbt.getInteger(Constants.NBT.PROJECTILE_TICKS_IN_AIR); - maxTicksInAir = nbt.getInteger(Constants.NBT.PROJECTILE_MAX_TICKS_IN_AIR); - } - - @Override - protected boolean canTriggerWalking() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - return false; - } - - @Override - public void setThrower(Entity entity) { - if (entity instanceof EntityLivingBase) - this.shootingEntity = (EntityLivingBase) entity; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java deleted file mode 100644 index 4c701ace..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java +++ /dev/null @@ -1,134 +0,0 @@ -package WayofTime.bloodmagic.entity.projectile; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.meteor.MeteorRegistry; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.projectile.EntityThrowable; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.IThrowableEntity; - -public class EntityMeteor extends EntityThrowable implements IThrowableEntity { - public ItemStack meteorStack = ItemStack.EMPTY; - protected int ticksInAir = 0; - protected int maxTicksInAir = 600; - protected double radiusModifier = 1; - protected double explosionModifier = 1; - protected double fillerChance = 0; - - public EntityMeteor(World world) { - super(world); - } - - public EntityMeteor(World world, double x, double y, double z, double velX, double velY, double velZ, double radiusModifier, double explosionModifier, double fillerChance) { - super(world); - this.setSize(1F, 1F); - this.setPosition(x, y, z); - motionX = velX; - motionY = velY; - motionZ = velZ; - this.radiusModifier = radiusModifier; - this.explosionModifier = explosionModifier; - this.fillerChance = fillerChance; - } - - @Override - protected float getGravityVelocity() { - return 0.03F; - } - - @Override - public void onUpdate() { - super.onUpdate(); - if (this.ticksExisted > this.maxTicksInAir) { - setDead(); - } - } - - @Override - protected void onImpact(RayTraceResult mop) { - if (mop.typeOfHit == RayTraceResult.Type.ENTITY && mop.entityHit != null) { - this.onImpact(mop.entityHit); - } else if (mop.typeOfHit == RayTraceResult.Type.BLOCK) { - generateMeteor(mop.getBlockPos()); - } - - this.setDead(); - } - - protected void onImpact(Entity mop) { - if (mop instanceof EntityLivingBase) { - doDamage(100, mop); - } - - generateMeteor(mop.getPosition()); - - // spawnHitParticles("magicCrit", 8); - this.setDead(); - } - - protected void doDamage(int i, Entity mop) { - mop.attackEntityFrom(this.getDamageSource(), i); - } - - public void generateMeteor(BlockPos pos) { - MeteorRegistry.generateMeteorForItem(meteorStack, getEntityWorld(), pos, Blocks.STONE.getDefaultState(), radiusModifier, explosionModifier, fillerChance); - } - - public DamageSource getDamageSource() { - return DamageSource.ANVIL; - } - - @Override - public void writeEntityToNBT(NBTTagCompound nbt) { - super.writeEntityToNBT(nbt); - nbt.setInteger(Constants.NBT.PROJECTILE_TICKS_IN_AIR, ticksInAir); - nbt.setInteger(Constants.NBT.PROJECTILE_MAX_TICKS_IN_AIR, maxTicksInAir); - nbt.setDouble("radiusModifier", radiusModifier); - nbt.setDouble("explosionModifier", explosionModifier); - nbt.setDouble("fillerChance", fillerChance); - if (!meteorStack.isEmpty()) - meteorStack.writeToNBT(nbt); - else - nbt.setBoolean("noItem", true); - } - - @Override - public void readEntityFromNBT(NBTTagCompound nbt) { - super.readEntityFromNBT(nbt); - ticksInAir = nbt.getInteger(Constants.NBT.PROJECTILE_TICKS_IN_AIR); - maxTicksInAir = nbt.getInteger(Constants.NBT.PROJECTILE_MAX_TICKS_IN_AIR); - radiusModifier = nbt.getDouble("radiusModifier"); - explosionModifier = nbt.getDouble("explosionModifier"); - fillerChance = nbt.getDouble("fillerChance"); - if (!nbt.hasKey("noItem")) - meteorStack = new ItemStack(nbt); - else - meteorStack = ItemStack.EMPTY; - } - - @Override - protected boolean canTriggerWalking() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - return false; - } - - @Override - public void setThrower(Entity entity) { - - } - - public void setMeteorStack(ItemStack meteorStack) { - this.meteorStack = meteorStack; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySentientArrow.java b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySentientArrow.java deleted file mode 100644 index 1e91024e..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySentientArrow.java +++ /dev/null @@ -1,149 +0,0 @@ -package WayofTime.bloodmagic.entity.projectile; - -import java.util.Locale; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.IMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityTippedArrow; -import net.minecraft.init.Items; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.util.Constants; - -public class EntitySentientArrow extends EntityTippedArrow -{ - public double reimbursedAmountOnHit = 0; - public EnumDemonWillType type = EnumDemonWillType.DEFAULT; - public int currentLevel = 0; - public float[] destructiveExplosionRadius = { 0.5f, 1, 1.5f, 2, 2.5f, 3, 3.5f }; - public int[] poisonDuration = { 50, 100, 150, 80, 120, 160, 200 }; - public int[] poisonLevel = { 0, 0, 0, 1, 1, 1, 1 }; - public int[] levitationDuration = { 20, 40, 60, 80, 100, 120, 160 }; - public int[] levitationLevel = { 0, 0, 0, 1, 1, 1, 2 }; - public int[] slownessDuration = { 40, 60, 100, 150, 200, 250, 300 }; - public int[] slownessLevel = { 0, 0, 0, 1, 1, 1, 2 }; - - public EntitySentientArrow(World worldIn) - { - super(worldIn); - } - - public EntitySentientArrow(World worldIn, double x, double y, double z) - { - super(worldIn, x, y, z); - } - - public EntitySentientArrow(World worldIn, EntityLivingBase shooter, EnumDemonWillType type, double reinburseAmount, int currentLevel) - { - super(worldIn, shooter); - this.reimbursedAmountOnHit = reinburseAmount; - this.type = type; - this.currentLevel = currentLevel; - } - - public void reimbursePlayer(EntityLivingBase hitEntity, float damage) - { - if (this.shootingEntity instanceof EntityPlayer) - { - if (hitEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(hitEntity instanceof IMob)) - { - return; - } - - PlayerDemonWillHandler.addDemonWill(type, (EntityPlayer) this.shootingEntity, reimbursedAmountOnHit * damage / 20f); - } - } - - @Override - protected void arrowHit(EntityLivingBase living) - { - super.arrowHit(living); - - switch (type) - { - case CORROSIVE: - living.addPotionEffect(new PotionEffect(MobEffects.POISON, currentLevel >= 0 ? poisonDuration[currentLevel] : 0, currentLevel >= 0 ? poisonLevel[currentLevel] : 0)); - break; - case DEFAULT: - break; - case DESTRUCTIVE: - this.world.createExplosion(this, this.posX, this.posY, this.posZ, currentLevel >= 0 ? destructiveExplosionRadius[currentLevel] : 0, false); - break; - case STEADFAST: - living.addPotionEffect(new PotionEffect(MobEffects.LEVITATION, currentLevel >= 0 ? levitationDuration[currentLevel] : 0, currentLevel >= 0 ? levitationLevel[currentLevel] : 0)); - break; - case VENGEFUL: - living.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, currentLevel >= 0 ? slownessDuration[currentLevel] : 0, currentLevel >= 0 ? slownessLevel[currentLevel] : 0)); - break; - default: - break; - } - } - - @Override - public void onUpdate() - { - super.onUpdate(); - - if (!this.world.isRemote && this.inGround && this.timeInGround > 0) - { - switch (type) - { - case DESTRUCTIVE: - this.world.createExplosion(this, this.posX, this.posY, this.posZ, currentLevel >= 0 ? destructiveExplosionRadius[currentLevel] : 0, false); - this.setDead(); - break; - case CORROSIVE: - break; - case DEFAULT: - break; - case STEADFAST: - break; - case VENGEFUL: - break; - default: - break; - } - } -// else if (this.inGround && this.timeInGround != 0 && !this.customPotionEffects.isEmpty() && this.timeInGround >= 600) -// { -// this.world.setEntityState(this, (byte)0); -// this.potion = PotionTypes.EMPTY; -// this.customPotionEffects.clear(); -// this.dataManager.set(COLOR, Integer.valueOf(-1)); -// } - } - - @Override - public void writeEntityToNBT(NBTTagCompound tag) - { - super.writeEntityToNBT(tag); - - tag.setDouble("reimbursement", reimbursedAmountOnHit); - tag.setInteger("currentLevel", currentLevel); - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - } - - @Override - public void readEntityFromNBT(NBTTagCompound tag) - { - super.readEntityFromNBT(tag); - - reimbursedAmountOnHit = tag.getDouble("reimbursement"); - type = EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - currentLevel = tag.getInteger("currentLevel"); - } - - @Override - protected ItemStack getArrowStack() - { - return new ItemStack(Items.ARROW); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySoulSnare.java b/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySoulSnare.java deleted file mode 100644 index f0a5ef66..00000000 --- a/src/main/java/WayofTime/bloodmagic/entity/projectile/EntitySoulSnare.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.bloodmagic.entity.projectile; - -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.projectile.EntityThrowable; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; - -public class EntitySoulSnare extends EntityThrowable { - - public EntitySoulSnare(World worldIn) { - super(worldIn); - } - - public EntitySoulSnare(World worldIn, EntityLivingBase throwerIn) { - super(worldIn, throwerIn); - } - - public EntitySoulSnare(World worldIn, double x, double y, double z) { - super(worldIn, x, y, z); - } - - @Override - protected void onImpact(RayTraceResult result) { - if (result.entityHit == this.getThrower() || this.ticksExisted < 2 || getEntityWorld().isRemote) - return; - - if (result.entityHit instanceof EntityLivingBase) { - if (result.entityHit.getEntityWorld().rand.nextDouble() < 0.25) - ((EntityLivingBase) result.entityHit).addPotionEffect(new PotionEffect(RegistrarBloodMagic.SOUL_SNARE, 300, 0)); - - result.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), (float) 0); - } - - for (int j = 0; j < 8; ++j) - this.getEntityWorld().spawnParticle(EnumParticleTypes.SNOWBALL, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); - - this.setDead(); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/event/AddToNetworkEvent.java b/src/main/java/WayofTime/bloodmagic/event/AddToNetworkEvent.java deleted file mode 100644 index 4e4798c7..00000000 --- a/src/main/java/WayofTime/bloodmagic/event/AddToNetworkEvent.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.bloodmagic.event; - -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -@Cancelable -public class AddToNetworkEvent extends Event { - public final String ownerNetwork; - public int addedAmount; - public int maximum; - - /** - * This event is called whenever the network is added to. If cancelled, no - * LP will be drained from the source. If result is set to Result.DENY, the - * LP will still be drained but the soul network will not be added to. - * - * @param ownerNetwork Key used for the soul network - * @param addedAmount Amount added - * @param maximum Ceiling that the network can add to - */ - public AddToNetworkEvent(String ownerNetwork, int addedAmount, int maximum) { - this.ownerNetwork = ownerNetwork; - this.addedAmount = addedAmount; - this.maximum = maximum; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/event/AltarCraftedEvent.java b/src/main/java/WayofTime/bloodmagic/event/AltarCraftedEvent.java deleted file mode 100644 index 0aca6bcd..00000000 --- a/src/main/java/WayofTime/bloodmagic/event/AltarCraftedEvent.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.event; - -import WayofTime.bloodmagic.core.registry.AltarRecipeRegistry; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.Event; - -/** - * Fired whenever a craft is completed in a BloodAltar. - *

- * It is not cancelable, however you can modify the output stack. - */ -public class AltarCraftedEvent extends Event { - - private final AltarRecipeRegistry.AltarRecipe altarRecipe; - private final ItemStack output; - - /** - * @param altarRecipe - The recipe that was crafted. - * @param output - The item obtained from the recipe - */ - public AltarCraftedEvent(AltarRecipeRegistry.AltarRecipe altarRecipe, ItemStack output) { - this.altarRecipe = altarRecipe; - this.output = output; - } - - public AltarRecipeRegistry.AltarRecipe getAltarRecipe() { - return altarRecipe; - } - - public ItemStack getOutput() { - return output; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/event/BoundToolEvent.java b/src/main/java/WayofTime/bloodmagic/event/BoundToolEvent.java deleted file mode 100644 index 66c70ea9..00000000 --- a/src/main/java/WayofTime/bloodmagic/event/BoundToolEvent.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.bloodmagic.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -public class BoundToolEvent extends Event { - public EntityPlayer player; - - public BoundToolEvent(EntityPlayer player) { - this.player = player; - } - - /** - * This event is called when a - * {@link WayofTime.bloodmagic.item.ItemBoundTool} is being charged. - *

- * If canceled, will result in the charging being canceled. - */ - - @Cancelable - public static class Charge extends BoundToolEvent { - public ItemStack result; - - public Charge(EntityPlayer player, ItemStack result) { - super(player); - this.result = result; - } - } - - /** - * This event is called when a - * {@link WayofTime.bloodmagic.item.ItemBoundTool}'s charge is released. - *

- * If canceled, will result in the charge not being released. - */ - - @Cancelable - public static class Release extends BoundToolEvent { - public final ItemStack boundTool; - public int charge; - - public Release(EntityPlayer player, ItemStack boundTool, int charge) { - super(player); - this.boundTool = boundTool; - this.charge = charge; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/event/ItemBindEvent.java b/src/main/java/WayofTime/bloodmagic/event/ItemBindEvent.java deleted file mode 100644 index e5cf73c5..00000000 --- a/src/main/java/WayofTime/bloodmagic/event/ItemBindEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -package WayofTime.bloodmagic.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -@Cancelable -public class ItemBindEvent extends Event { - - private final EntityPlayer player; - private final ItemStack itemStack; - - /** - * This event is called whenever a player attempts to bind a - * {@link WayofTime.bloodmagic.iface.IBindable} item. - * - * @param player The player doing the binding - * @param itemStack The {@link ItemStack} that the player is binding - *

- * This event is {@link Cancelable}.
- */ - public ItemBindEvent(EntityPlayer player, ItemStack itemStack) { - this.player = player; - this.itemStack = itemStack; - } - - public EntityPlayer getNewOwner() { - return player; - } - - public ItemStack getBindingStack() { - return itemStack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/event/RitualEvent.java b/src/main/java/WayofTime/bloodmagic/event/RitualEvent.java deleted file mode 100644 index 08d94f85..00000000 --- a/src/main/java/WayofTime/bloodmagic/event/RitualEvent.java +++ /dev/null @@ -1,133 +0,0 @@ -package WayofTime.bloodmagic.event; - -import WayofTime.bloodmagic.ritual.IMasterRitualStone; -import WayofTime.bloodmagic.ritual.Ritual; -import WayofTime.bloodmagic.ritual.imperfect.IImperfectRitualStone; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -import java.util.UUID; - -public class RitualEvent extends Event { - - private final IMasterRitualStone mrs; - private final UUID ownerId; - private final Ritual ritual; - - private RitualEvent(IMasterRitualStone mrs, UUID ownerId, Ritual ritual) { - this.mrs = mrs; - this.ownerId = ownerId; - this.ritual = ritual; - } - - public IMasterRitualStone getRitualStone() { - return mrs; - } - - public UUID getOwnerId() { - return ownerId; - } - - public Ritual getRitual() { - return ritual; - } - - /** - * This event is called when a ritual is activated. If cancelled, it will - * not activate. - *

- * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#activateRitual(ItemStack, EntityPlayer, Ritual)} - */ - @Cancelable - public static class RitualActivatedEvent extends RitualEvent { - - private final EntityPlayer player; - private final ItemStack crystalStack; - private final int crystalTier; - - public RitualActivatedEvent(IMasterRitualStone mrs, UUID ownerId, Ritual ritual, EntityPlayer player, ItemStack activationCrystal, int crystalTier) { - super(mrs, ownerId, ritual); - - this.player = player; - this.crystalStack = activationCrystal; - this.crystalTier = crystalTier; - } - - public EntityPlayer getPlayer() { - return player; - } - - public ItemStack getCrystalStack() { - return crystalStack; - } - - public int getCrystalTier() { - return crystalTier; - } - } - - /** - * This event is called when a Ritual effect is performed. If cancelled, the - * effect will not happen. - *

- * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#performRitual(World, net.minecraft.util.math.BlockPos)} - */ - @Cancelable - public static class RitualRunEvent extends RitualEvent { - - public RitualRunEvent(IMasterRitualStone mrs, UUID ownerId, Ritual ritual) { - super(mrs, ownerId, ritual); - } - } - - /** - * This event is called when a Ritual is stopped by a - * {@link Ritual.BreakType}. - *

- * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#stopRitual(Ritual.BreakType)} - */ - public static class RitualStopEvent extends RitualEvent { - - private final Ritual.BreakType method; - - public RitualStopEvent(IMasterRitualStone mrs, UUID ownerId, Ritual ritual, Ritual.BreakType method) { - super(mrs, ownerId, ritual); - - this.method = method; - } - - public Ritual.BreakType getMethod() { - return method; - } - } - - @Cancelable - public static class ImperfectRitualActivatedEvent extends Event { - - private final IImperfectRitualStone ims; - private final EntityPlayer activator; - private final ImperfectRitual imperfectRitual; - - public ImperfectRitualActivatedEvent(IImperfectRitualStone ims, EntityPlayer activator, ImperfectRitual imperfectRitual) { - this.ims = ims; - this.activator = activator; - this.imperfectRitual = imperfectRitual; - } - - public IImperfectRitualStone getRitualStone() { - return ims; - } - - public EntityPlayer getActivator() { - return activator; - } - - public ImperfectRitual getImperfectRitual() { - return imperfectRitual; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/event/SacrificeKnifeUsedEvent.java b/src/main/java/WayofTime/bloodmagic/event/SacrificeKnifeUsedEvent.java deleted file mode 100644 index 982166b7..00000000 --- a/src/main/java/WayofTime/bloodmagic/event/SacrificeKnifeUsedEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -package WayofTime.bloodmagic.event; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -@Cancelable -public class SacrificeKnifeUsedEvent extends Event { - public final EntityPlayer player; - public final int healthDrained; - public int lpAdded; - public boolean shouldDrainHealth; - public boolean shouldFillAltar; - - /** - * This event is called whenever a player attempts to use a - * {@link WayofTime.bloodmagic.item.ItemSacrificialDagger} to self-sacrifice - * near an altar. - * - * @param player The player doing the sacrificing - * @param shouldDrainHealth Determines whether or not health is lost - * @param shouldFillAltar Determines whether or not an altar should be filled - * @param hp Amount of health lost - * @param lpAdded Amount of LP added to the altar - *

- * This event is {@link Cancelable}.
- */ - public SacrificeKnifeUsedEvent(EntityPlayer player, boolean shouldDrainHealth, boolean shouldFillAltar, int hp, int lpAdded) { - this.player = player; - this.shouldDrainHealth = shouldDrainHealth; - this.shouldFillAltar = shouldFillAltar; - this.healthDrained = hp; - this.lpAdded = lpAdded; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/event/TeleposeEvent.java b/src/main/java/WayofTime/bloodmagic/event/TeleposeEvent.java deleted file mode 100644 index 856c9917..00000000 --- a/src/main/java/WayofTime/bloodmagic/event/TeleposeEvent.java +++ /dev/null @@ -1,78 +0,0 @@ -package WayofTime.bloodmagic.event; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.eventhandler.Cancelable; -import net.minecraftforge.fml.common.eventhandler.Event; - -/** - * Fired when a teleposer attempts to transpose two blocks. Use this to perform - * special cleanup or compensation, or cancel it entirely to prevent the - * transposition. - */ -@Cancelable -public class TeleposeEvent extends Event { - public final World initalWorld; - public final BlockPos initialBlockPos; - public final IBlockState initialState; - - public final World finalWorld; - public final BlockPos finalBlockPos; - public final IBlockState finalState; - - public TeleposeEvent(World initialWorld, BlockPos initialBlockPos, World finalWorld, BlockPos finalBlockPos) { - this.initalWorld = initialWorld; - this.initialBlockPos = initialBlockPos; - this.initialState = initialWorld.getBlockState(initialBlockPos); - - this.finalWorld = finalWorld; - this.finalBlockPos = finalBlockPos; - this.finalState = finalWorld.getBlockState(finalBlockPos); - } - - public TileEntity getInitialTile() { - return initalWorld.getTileEntity(initialBlockPos); - } - - public TileEntity getFinalTile() { - return finalWorld.getTileEntity(finalBlockPos); - } - - /** - * Fired when a Teleposer attempts to move an Entity between locations. Can - * be cancelled to stop transposition. - */ - @Cancelable - public static class Ent extends TeleposeEvent { - public final Entity entity; - - public Ent(Entity entity, World initialWorld, BlockPos initialBlockPos, World finalWorld, BlockPos finalBlockPos) { - super(initialWorld, initialBlockPos, finalWorld, finalBlockPos); - - this.entity = entity; - } - - @Override - public TileEntity getInitialTile() throws IllegalArgumentException { - throw new IllegalArgumentException("Attempted to get a TileEntity from an Entity Telepose Event."); - } - - @Override - public TileEntity getFinalTile() throws IllegalArgumentException { - throw new IllegalArgumentException("Attempted to get a TileEntity from an Entity Telepose Event."); - } - - /** - * Called after the entity has been transposed. - */ - public static class Post extends Ent { - - public Post(Entity entity, World initialWorld, BlockPos initialBlockPos, World finalWorld, BlockPos finalBlockPos) { - super(entity, initialWorld, initialBlockPos, finalWorld, finalBlockPos); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/fakePlayer/FakeNetHandlerPlayServer.java b/src/main/java/WayofTime/bloodmagic/fakePlayer/FakeNetHandlerPlayServer.java deleted file mode 100644 index eb33e3fe..00000000 --- a/src/main/java/WayofTime/bloodmagic/fakePlayer/FakeNetHandlerPlayServer.java +++ /dev/null @@ -1,160 +0,0 @@ -package WayofTime.bloodmagic.fakePlayer; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.EnumPacketDirection; -import net.minecraft.network.NetHandlerPlayServer; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.client.*; -import net.minecraft.network.play.server.SPacketPlayerPosLook; -import net.minecraft.util.text.ITextComponent; -import net.minecraftforge.fml.common.FMLCommonHandler; - -import java.util.Set; - -/** - * All credits for this go to CrazyPants, from EIO - */ -public class FakeNetHandlerPlayServer extends NetHandlerPlayServer { - public FakeNetHandlerPlayServer(EntityPlayerMP p_i1530_3_) { - super(FMLCommonHandler.instance().getMinecraftServerInstance(), new net.minecraft.network.NetworkManager(EnumPacketDirection.CLIENTBOUND), p_i1530_3_); - } - - @Override - public NetworkManager getNetworkManager() { - return null; - } - - @Override - public void update() { - } - - @Override - public void disconnect(final ITextComponent textComponent) { - } - - @Override - public void processVehicleMove(CPacketVehicleMove packetIn) { - } - - @Override - public void processConfirmTeleport(CPacketConfirmTeleport packetIn) { - } - - @Override - public void setPlayerLocation(double x, double y, double z, float yaw, float pitch, Set relativeSet) { - } - - @Override - public void processTryUseItemOnBlock(CPacketPlayerTryUseItemOnBlock packetIn) { - } - - @Override - public void processTryUseItem(CPacketPlayerTryUseItem packetIn) { - } - - @Override - public void processSteerBoat(CPacketSteerBoat packetIn) { - } - - @Override - public void processCustomPayload(CPacketCustomPayload packetIn) { - } - - @Override - public void processInput(CPacketInput p_147358_1_) { - } - - @Override - public void processPlayer(CPacketPlayer p_147347_1_) { - } - - @Override - public void setPlayerLocation(double p_147364_1_, double p_147364_3_, double p_147364_5_, float p_147364_7_, float p_147364_8_) { - } - - @Override - public void processPlayerDigging(CPacketPlayerDigging p_147345_1_) { - } - - @Override - public void onDisconnect(ITextComponent p_147231_1_) { - } - - @Override - public void sendPacket(Packet p_147359_1_) { - } - - @Override - public void processHeldItemChange(CPacketHeldItemChange p_147355_1_) { - } - - @Override - public void processChatMessage(CPacketChatMessage p_147354_1_) { - } - - @Override - public void handleAnimation(CPacketAnimation packetIn) { - - } - - @Override - public void processEntityAction(CPacketEntityAction p_147357_1_) { - } - - @Override - public void processUseEntity(CPacketUseEntity p_147340_1_) { - } - - @Override - public void processClientStatus(CPacketClientStatus p_147342_1_) { - } - - @Override - public void processCloseWindow(CPacketCloseWindow p_147356_1_) { - } - - @Override - public void processClickWindow(CPacketClickWindow p_147351_1_) { - } - - @Override - public void processEnchantItem(CPacketEnchantItem p_147338_1_) { - } - - @Override - public void processCreativeInventoryAction(CPacketCreativeInventoryAction p_147344_1_) { - } - - @Override - public void processConfirmTransaction(CPacketConfirmTransaction p_147339_1_) { - } - - @Override - public void processUpdateSign(CPacketUpdateSign p_147343_1_) { - } - - @Override - public void processKeepAlive(CPacketKeepAlive p_147353_1_) { - } - - @Override - public void processPlayerAbilities(CPacketPlayerAbilities p_147348_1_) { - } - - @Override - public void processTabComplete(CPacketTabComplete p_147341_1_) { - } - - @Override - public void processClientSettings(CPacketClientSettings p_147352_1_) { - } - - @Override - public void handleSpectate(CPacketSpectate packetIn) { - } - - @Override - public void handleResourcePackStatus(CPacketResourcePackStatus packetIn) { - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/fakePlayer/FakePlayerBM.java b/src/main/java/WayofTime/bloodmagic/fakePlayer/FakePlayerBM.java deleted file mode 100644 index 03fc7b83..00000000 --- a/src/main/java/WayofTime/bloodmagic/fakePlayer/FakePlayerBM.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.bloodmagic.fakePlayer; - -import com.mojang.authlib.GameProfile; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.fml.common.FMLCommonHandler; - -import javax.annotation.Nullable; - -/** - * All credits for this go to CrazyPants, from EIO - */ -@SuppressWarnings("EntityConstructor") -public class FakePlayerBM extends FakePlayer { - - public FakePlayerBM(WorldServer world, GameProfile name) { - super(world, name); - } - - public FakePlayerBM(World world, BlockPos pos, GameProfile profile) { - super(FMLCommonHandler.instance().getMinecraftServerInstance().getWorld(world.provider.getDimension()), profile); - posX = pos.getX() + 0.5; - posY = pos.getY() + 0.5; - posZ = pos.getZ() + 0.5; - connection = new FakeNetHandlerPlayServer(this); - } - - @Override - protected void onNewPotionEffect(PotionEffect p_70670_1_) { - } - - @Override - protected void onChangedPotionEffect(PotionEffect effect, boolean p_70695_2_) { - } - - @Override - protected void onFinishedPotionEffect(PotionEffect effect) { - } - - protected void playEquipSound(@Nullable ItemStack stack) { - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/gson/SerializerBase.java b/src/main/java/WayofTime/bloodmagic/gson/SerializerBase.java deleted file mode 100644 index 9b67708b..00000000 --- a/src/main/java/WayofTime/bloodmagic/gson/SerializerBase.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.bloodmagic.gson; - -import com.google.gson.*; - -import java.lang.reflect.Type; - -public abstract class SerializerBase implements JsonDeserializer, JsonSerializer { - @Override - public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return context.deserialize(json, getType()); - } - - @Override - public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) { - return context.serialize(src); - } - - public abstract Class getType(); -} diff --git a/src/main/java/WayofTime/bloodmagic/gson/Serializers.java b/src/main/java/WayofTime/bloodmagic/gson/Serializers.java deleted file mode 100644 index a2171911..00000000 --- a/src/main/java/WayofTime/bloodmagic/gson/Serializers.java +++ /dev/null @@ -1,100 +0,0 @@ -package WayofTime.bloodmagic.gson; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import com.google.gson.*; -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.network.datasync.DataSerializer; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -import java.lang.reflect.Type; - -public class Serializers { - // Data serializers - public static final DataSerializer WILL_TYPE_SERIALIZER = new DataSerializer() { - @Override - public void write(PacketBuffer buf, EnumDemonWillType value) { - buf.writeEnumValue(value); - } - - @Override - public EnumDemonWillType read(PacketBuffer buf) { - return buf.readEnumValue(EnumDemonWillType.class); - } - - @Override - public DataParameter createKey(int id) { - return new DataParameter<>(id, this); - } - - @Override - public EnumDemonWillType copyValue(EnumDemonWillType value) { - return EnumDemonWillType.valueOf(value.name()); - } - }; - - // Serializers - public static final SerializerBase FACING_SERIALIZER = new SerializerBase() { - @Override - public Class getType() { - return EnumFacing.class; - } - - @Override - public EnumFacing deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return EnumFacing.byName(json.getAsString()); - } - }; - public static final SerializerBase RESOURCELOCATION_SERIALIZER = new SerializerBase() { - @Override - public Class getType() { - return ResourceLocation.class; - } - - @Override - public ResourceLocation deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - String domain = json.getAsJsonObject().get("domain").getAsString(); - String path = json.getAsJsonObject().get("path").getAsString(); - return new ResourceLocation(domain, path); - } - - @Override - public JsonElement serialize(ResourceLocation src, Type typeOfSrc, JsonSerializationContext context) { - JsonObject object = new JsonObject(); - object.addProperty("domain", src.getResourceDomain()); - object.addProperty("path", src.getResourcePath()); - return object; - } - }; - public static final SerializerBase ITEMMETA_SERIALIZER = new SerializerBase() { - @Override - public Class getType() { - return ItemStack.class; - } - - @Override - public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - ResourceLocation registryName = context.deserialize(json.getAsJsonObject().get("registryName").getAsJsonObject(), ResourceLocation.class); - int meta = json.getAsJsonObject().get("meta").getAsInt(); - return new ItemStack(ForgeRegistries.ITEMS.getValue(registryName), 1, meta); - } - - @Override - public JsonElement serialize(ItemStack src, Type typeOfSrc, JsonSerializationContext context) { - JsonObject jsonObject = new JsonObject(); - jsonObject.add("registryName", context.serialize(src.getItem().getRegistryName())); - jsonObject.addProperty("meta", src.getItemDamage()); - return jsonObject; - } - }; - - public static final Gson GSON = new GsonBuilder().serializeNulls().setPrettyPrinting().disableHtmlEscaping().registerTypeAdapter(FACING_SERIALIZER.getType(), FACING_SERIALIZER).registerTypeAdapter(RESOURCELOCATION_SERIALIZER.getType(), RESOURCELOCATION_SERIALIZER).registerTypeAdapter(ITEMMETA_SERIALIZER.getType(), ITEMMETA_SERIALIZER).create(); - - static { - DataSerializers.registerSerializer(WILL_TYPE_SERIALIZER); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IActivatable.java b/src/main/java/WayofTime/bloodmagic/iface/IActivatable.java deleted file mode 100644 index e5ee95e9..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IActivatable.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import WayofTime.bloodmagic.util.Constants; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import javax.annotation.Nonnull; - -public interface IActivatable { - - default boolean getActivated(ItemStack stack) { - return !stack.isEmpty() && stack.hasTagCompound() && stack.getTagCompound().getBoolean(Constants.NBT.ACTIVATED); - } - - @Nonnull - default ItemStack setActivatedState(ItemStack stack, boolean activated) { - if (!stack.isEmpty()) { - if (!stack.hasTagCompound()) - stack.setTagCompound(new NBTTagCompound()); - - stack.getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated); - } - - return stack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/iface/IAlchemyArray.java deleted file mode 100644 index f8026ce3..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IAlchemyArray.java +++ /dev/null @@ -1,7 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import net.minecraft.util.EnumFacing; - -public interface IAlchemyArray { - EnumFacing getRotation(); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IAltarReader.java b/src/main/java/WayofTime/bloodmagic/iface/IAltarReader.java deleted file mode 100644 index 0e2e5fbe..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IAltarReader.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.bloodmagic.iface; - -/** - * Any item that implements this interface will not be pulled into the Altar on - * right click. - */ -public interface IAltarReader { - -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IBloodRune.java b/src/main/java/WayofTime/bloodmagic/iface/IBloodRune.java deleted file mode 100644 index 39863d68..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IBloodRune.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.bloodmagic.iface; - - -import WayofTime.bloodmagic.block.enums.BloodRuneType; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; - -import javax.annotation.Nullable; - -public interface IBloodRune { - - @Nullable - BloodRuneType getBloodRune(IBlockAccess world, BlockPos pos, IBlockState state); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/ICustomAlchemyConsumable.java b/src/main/java/WayofTime/bloodmagic/iface/ICustomAlchemyConsumable.java deleted file mode 100644 index 708067ba..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/ICustomAlchemyConsumable.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import net.minecraft.item.ItemStack; - -/** - * An interface for items that have custom drainage behaviour when used in - * certain alchemy recipes. - */ -public interface ICustomAlchemyConsumable { - ItemStack drainUseOnAlchemyCraft(ItemStack stack); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IDemonWillViewer.java b/src/main/java/WayofTime/bloodmagic/iface/IDemonWillViewer.java deleted file mode 100644 index 10c58212..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IDemonWillViewer.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface IDemonWillViewer { - boolean canSeeDemonWillAura(World world, ItemStack stack, EntityPlayer player); - - int getDemonWillAuraResolution(World world, ItemStack stack, EntityPlayer player); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IDocumentedBlock.java b/src/main/java/WayofTime/bloodmagic/iface/IDocumentedBlock.java deleted file mode 100644 index 7a991bab..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IDocumentedBlock.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; -import java.util.List; - -/** - * Marks blocks as one that is documented. - *

- * This documentation can be read by an - * {@link WayofTime.bloodmagic.item.ItemSanguineBook} (or child) - */ -public interface IDocumentedBlock { - /** - * Provides the documentation to provide to the player. Usually a - * short'n'sweet description about basic usage. - * - * @param player - The EntityPlayer attempting to view the Documentation. - * @param world - The World interaction is happening in. - * @param pos - The BlockPos being interacted at. - * @param state - The IBlockState of the interacted Block. - * @return - A list of formatted ITextComponent to provide to the player. - * Provide an empty list if there is no available documentation. - */ - @Nonnull - List getDocumentation(EntityPlayer player, World world, BlockPos pos, IBlockState state); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IItemLPContainer.java b/src/main/java/WayofTime/bloodmagic/iface/IItemLPContainer.java deleted file mode 100644 index b2daff9c..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IItemLPContainer.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import net.minecraft.item.ItemStack; - -/** - * Interface used for any item that can store LP in itself - */ -public interface IItemLPContainer { - int getCapacity(); - - void setStoredLP(ItemStack stack, int lp); - - int getStoredLP(ItemStack stack); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IMultiWillTool.java b/src/main/java/WayofTime/bloodmagic/iface/IMultiWillTool.java deleted file mode 100644 index cda13f64..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IMultiWillTool.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import net.minecraft.item.ItemStack; - -public interface IMultiWillTool { - EnumDemonWillType getCurrentType(ItemStack stack); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/INodeRenderer.java b/src/main/java/WayofTime/bloodmagic/iface/INodeRenderer.java deleted file mode 100644 index cc93b3bc..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/INodeRenderer.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.bloodmagic.iface; - -/** - * Held items that implement this will cause the beams between routing nodes to - * render. - */ -public interface INodeRenderer { -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IPurificationAsh.java b/src/main/java/WayofTime/bloodmagic/iface/IPurificationAsh.java deleted file mode 100644 index 22355522..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IPurificationAsh.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import net.minecraft.item.ItemStack; - -public interface IPurificationAsh { - double getTotalPurity(ItemStack stack); - - double getMaxPurity(ItemStack stack); - - double getPurityRate(ItemStack stack); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/ISentientSwordEffectProvider.java b/src/main/java/WayofTime/bloodmagic/iface/ISentientSwordEffectProvider.java deleted file mode 100644 index db74ba4a..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/ISentientSwordEffectProvider.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -public interface ISentientSwordEffectProvider { - boolean applyOnHitEffect(EnumDemonWillType type, ItemStack swordStack, ItemStack providerStack, EntityLivingBase attacker, EntityLivingBase target); - - boolean providesEffectForWill(EnumDemonWillType type); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/ISentientTool.java b/src/main/java/WayofTime/bloodmagic/iface/ISentientTool.java deleted file mode 100644 index 3f9693ab..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/ISentientTool.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public interface ISentientTool { - boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player); -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/ISigil.java b/src/main/java/WayofTime/bloodmagic/iface/ISigil.java deleted file mode 100644 index 017df5c1..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/ISigil.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import WayofTime.bloodmagic.item.sigil.ItemSigil; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; - -/** - * Used for all {@link ItemSigil} EXCEPT - * Sigils of Holdings. - */ -public interface ISigil { - - default boolean performArrayEffect(World world, BlockPos pos) { - return false; - } - - default boolean hasArrayEffect() { - return false; - } - - interface Holding { - @Nonnull - ItemStack getHeldItem(ItemStack holdingStack, EntityPlayer player); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IUpgradeTrainer.java b/src/main/java/WayofTime/bloodmagic/iface/IUpgradeTrainer.java deleted file mode 100644 index 6e9197e9..00000000 --- a/src/main/java/WayofTime/bloodmagic/iface/IUpgradeTrainer.java +++ /dev/null @@ -1,15 +0,0 @@ -package WayofTime.bloodmagic.iface; - -import net.minecraft.item.ItemStack; - -import java.util.List; - -/** - * This interface is used for items intended to train specific upgrades while - * held in the player's inventory. - */ -public interface IUpgradeTrainer { - List getTrainedUpgrades(ItemStack stack); - - boolean setTrainedUpgrades(ItemStack stack, List keys); -} diff --git a/src/main/java/WayofTime/bloodmagic/incense/EnumTranquilityType.java b/src/main/java/WayofTime/bloodmagic/incense/EnumTranquilityType.java deleted file mode 100644 index d2221dbf..00000000 --- a/src/main/java/WayofTime/bloodmagic/incense/EnumTranquilityType.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.bloodmagic.incense; - -public enum EnumTranquilityType { - PLANT(), - CROP(), - TREE(), - EARTHEN(), - WATER(), - FIRE(), - LAVA(), - ; -} diff --git a/src/main/java/WayofTime/bloodmagic/incense/IIncensePath.java b/src/main/java/WayofTime/bloodmagic/incense/IIncensePath.java deleted file mode 100644 index fa747980..00000000 --- a/src/main/java/WayofTime/bloodmagic/incense/IIncensePath.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.bloodmagic.incense; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public interface IIncensePath { - /** - * Goes from 0 to however far this path block can be from the altar while - * still functioning. 0 represents a block that can work when it is two - * blocks horizontally away from the altar. - */ - int getLevelOfPath(World world, BlockPos pos, IBlockState state); -} diff --git a/src/main/java/WayofTime/bloodmagic/incense/ITranquilityHandler.java b/src/main/java/WayofTime/bloodmagic/incense/ITranquilityHandler.java deleted file mode 100644 index 6f4cef45..00000000 --- a/src/main/java/WayofTime/bloodmagic/incense/ITranquilityHandler.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.bloodmagic.incense; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public interface ITranquilityHandler { - TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state); -} diff --git a/src/main/java/WayofTime/bloodmagic/incense/IncenseAltarComponent.java b/src/main/java/WayofTime/bloodmagic/incense/IncenseAltarComponent.java deleted file mode 100644 index b9ef76f0..00000000 --- a/src/main/java/WayofTime/bloodmagic/incense/IncenseAltarComponent.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.incense; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; - -public class IncenseAltarComponent { - public final BlockPos offsetPos; - public final Block block; - public final IBlockState state; - - public IncenseAltarComponent(BlockPos offsetPos, Block block, IBlockState state) { - this.offsetPos = offsetPos; - this.block = block; - this.state = state; - } - - public boolean doesBlockMatch(Block block, IBlockState state) { - return this.block == block && block.getMetaFromState(state) == this.block.getMetaFromState(this.state); - } - - /** - * Base rotation is north. - */ - public BlockPos getOffset(EnumFacing rotation) { - return new BlockPos(this.getX(rotation), offsetPos.getY(), this.getZ(rotation)); - } - - public int getX(EnumFacing direction) { - switch (direction) { - case EAST: - return -this.offsetPos.getZ(); - case SOUTH: - return -this.offsetPos.getX(); - case WEST: - return this.offsetPos.getZ(); - default: - return this.offsetPos.getX(); - } - } - - public int getZ(EnumFacing direction) { - switch (direction) { - case EAST: - return this.offsetPos.getX(); - case SOUTH: - return -this.offsetPos.getZ(); - case WEST: - return -this.offsetPos.getX(); - default: - return this.offsetPos.getZ(); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/incense/IncenseAltarHandler.java b/src/main/java/WayofTime/bloodmagic/incense/IncenseAltarHandler.java deleted file mode 100644 index f41928c1..00000000 --- a/src/main/java/WayofTime/bloodmagic/incense/IncenseAltarHandler.java +++ /dev/null @@ -1,92 +0,0 @@ -package WayofTime.bloodmagic.incense; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -public class IncenseAltarHandler { - public static Map> incenseComponentMap = new TreeMap<>(); - //Incense bonus maximum applied for the tier of blocks. - public static double[] incenseBonuses = new double[]{0.2, 0.6, 1.2, 2, 3, 4.5}; - public static double[] tranquilityRequired = new double[]{0, 6, 14.14, 28, 44.09, 83.14}; - public static int[] roadsRequired = new int[]{0, 1, 4, 6, 8, 10, 12}; //TODO: Change for when the roads are fully implemented - - public static void registerIncenseComponent(int altarLevel, IncenseAltarComponent component) { - if (incenseComponentMap.containsKey(altarLevel)) { - incenseComponentMap.get(altarLevel).add(component); - } else { - List list = new ArrayList<>(); - list.add(component); - incenseComponentMap.put(altarLevel, list); - } - } - - public static void registerIncenseComponent(int altarLevel, BlockPos offsetPos, Block block, IBlockState state) { - registerIncenseComponent(altarLevel, new IncenseAltarComponent(offsetPos, block, state)); - } - - public static double getMaxIncenseBonusFromComponents(World world, BlockPos pos) { - double accumulatedBonus = 0; - for (int i = 0; i < incenseBonuses.length; i++) { - double previousBonus = (i <= 0 ? 0 : incenseBonuses[i - 1]); - double nextBonus = incenseBonuses[i]; - if (!incenseComponentMap.containsKey(i)) { - accumulatedBonus += (nextBonus - previousBonus); - } else { - boolean hasAllComponentsThisTier = true; - for (IncenseAltarComponent component : incenseComponentMap.get(i)) { - BlockPos offsetPos = pos.add(component.getOffset(EnumFacing.NORTH)); - IBlockState state = world.getBlockState(offsetPos); - Block block = state.getBlock(); - if (component.doesBlockMatch(block, state)) { - hasAllComponentsThisTier = false; - } else { - accumulatedBonus += (nextBonus - previousBonus) / incenseComponentMap.get(i).size(); - } - } - - if (!hasAllComponentsThisTier) { - break; - } - } - } - - return accumulatedBonus; - } - - public static double getMaxIncenseBonusFromRoads(int roads) { - double previousBonus = 0; - for (int i = 0; i < incenseBonuses.length; i++) { - if (roads >= roadsRequired[i]) { - previousBonus = incenseBonuses[i]; - } else { - return previousBonus; - } - } - - return previousBonus; - } - - public static double getIncenseBonusFromComponents(World world, BlockPos pos, double tranquility, int roads) { - double maxBonus = Math.min(getMaxIncenseBonusFromComponents(world, pos), getMaxIncenseBonusFromRoads(roads)); - double possibleBonus = 0; - - for (int i = 0; i < incenseBonuses.length; i++) { - if (tranquility >= tranquilityRequired[i]) { - possibleBonus = incenseBonuses[i]; - } else if (i >= 1) { - possibleBonus += (incenseBonuses[i] - possibleBonus) * (tranquility - tranquilityRequired[i - 1]) / (tranquilityRequired[i] - tranquilityRequired[i - 1]); - break; - } - } - - return Math.min(maxBonus, possibleBonus); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/incense/IncenseTranquilityRegistry.java b/src/main/java/WayofTime/bloodmagic/incense/IncenseTranquilityRegistry.java deleted file mode 100644 index e291bbf9..00000000 --- a/src/main/java/WayofTime/bloodmagic/incense/IncenseTranquilityRegistry.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.bloodmagic.incense; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class IncenseTranquilityRegistry { - public static List handlerList = new ArrayList<>(); - - public static void registerTranquilityHandler(ITranquilityHandler handler) { - handlerList.add(handler); - } - - public static TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, IBlockState state) { - for (ITranquilityHandler handler : handlerList) { - TranquilityStack tranq = handler.getTranquilityOfBlock(world, pos, block, state); - if (tranq != null) { - return tranq; - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/incense/TranquilityStack.java b/src/main/java/WayofTime/bloodmagic/incense/TranquilityStack.java deleted file mode 100644 index 7dd3de54..00000000 --- a/src/main/java/WayofTime/bloodmagic/incense/TranquilityStack.java +++ /dev/null @@ -1,11 +0,0 @@ -package WayofTime.bloodmagic.incense; - -public class TranquilityStack { - public final EnumTranquilityType type; - public double value; - - public TranquilityStack(EnumTranquilityType type, double value) { - this.type = type; - this.value = value; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/inversion/CorruptionHandler.java b/src/main/java/WayofTime/bloodmagic/inversion/CorruptionHandler.java deleted file mode 100644 index 1e916933..00000000 --- a/src/main/java/WayofTime/bloodmagic/inversion/CorruptionHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -package WayofTime.bloodmagic.inversion; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.HashMap; -import java.util.Map; - -public class CorruptionHandler { - public static Map, Map> corruptBlockMap = new HashMap<>(); - - public static void registerBlockCorruption(EnumDemonWillType type, Block block, int meta, IBlockState corruptedState) { - Pair pair = Pair.of(block, meta); - if (corruptBlockMap.containsKey(pair)) { - Map stateMap = corruptBlockMap.get(pair); - stateMap.put(type, corruptedState); - } else { - Map stateMap = new HashMap<>(); - stateMap.put(type, corruptedState); - corruptBlockMap.put(pair, stateMap); - } - } - - public static boolean isBlockCorruptible(World world, EnumDemonWillType type, BlockPos pos, IBlockState state, Block block) { - int meta = block.getMetaFromState(state); - Pair pair = Pair.of(block, meta); - if (corruptBlockMap.containsKey(pair)) { - Map stateMap = corruptBlockMap.get(pair); - return stateMap.containsKey(type); - } - - return false; - } - - public static boolean corruptBlock(World world, EnumDemonWillType type, BlockPos pos, IBlockState state, Block block) { - int meta = block.getMetaFromState(state); - Pair pair = Pair.of(block, meta); - if (corruptBlockMap.containsKey(pair)) { - Map stateMap = corruptBlockMap.get(pair); - if (stateMap.containsKey(type)) { - return world.setBlockState(pos, stateMap.get(type)); - } - } - - return false; - } - - /** - * @param world - * @param type - * @param centerPos - * @param radius - * @param featheringChance Chance that the block within the featheringDepth is NOT altered. - * @param featheringDepth - * @return - */ - public static boolean corruptSurroundingBlocks(World world, EnumDemonWillType type, BlockPos centerPos, int radius, double featheringChance, double featheringDepth) { - for (int i = -radius; i <= radius; i++) { - for (int j = -radius; j <= radius; j++) { - for (int k = -radius; k <= radius; k++) { - if (i * i + j * j + k * k > (radius + 0.5) * (radius + 0.5)) { - continue; - } - - if (featheringChance > 0 && i * i + j * j + k * k > (radius - featheringDepth + 0.5) * (radius - featheringDepth + 0.5) && world.rand.nextDouble() < featheringChance) { - continue; - } - - if (world.isAirBlock(centerPos)) { - continue; - } - - BlockPos offsetPos = centerPos.add(i, j, k); - IBlockState offsetState = world.getBlockState(offsetPos); - Block offsetBlock = offsetState.getBlock(); - corruptBlock(world, type, offsetPos, offsetState, offsetBlock); - } - } - } - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java b/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java deleted file mode 100644 index 34a090ef..00000000 --- a/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java +++ /dev/null @@ -1,193 +0,0 @@ -package WayofTime.bloodmagic.inversion; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.*; - -public class InversionPillarHandler { - public static final double farthestDistanceSquared = 16 * 16; - public static Map>> pillarMap = new HashMap<>(); - public static Map>>> nearPillarMap = new HashMap<>(); - - public static boolean addPillarToMap(World world, EnumDemonWillType type, BlockPos pos) { - int dim = world.provider.getDimension(); - if (pillarMap.containsKey(dim)) { - Map> willMap = pillarMap.get(dim); - if (willMap.containsKey(type)) { - if (!willMap.get(type).contains(pos)) { - willMap.get(type).add(pos); - onPillarAdded(world, type, pos); - return true; - } else { - return false; - } - } else { - List posList = new ArrayList<>(); - posList.add(pos); - willMap.put(type, posList); - onPillarAdded(world, type, pos); - return true; - } - } else { - Map> willMap = new HashMap<>(); - List posList = new ArrayList<>(); - posList.add(pos); - - willMap.put(type, posList); - pillarMap.put(dim, willMap); - onPillarAdded(world, type, pos); - return true; - } - } - - public static boolean removePillarFromMap(World world, EnumDemonWillType type, BlockPos pos) { - int dim = world.provider.getDimension(); - if (pillarMap.containsKey(dim)) { - Map> willMap = pillarMap.get(dim); - if (willMap.containsKey(type)) { - if (willMap.get(type).contains(pos)) { - onPillarRemoved(world, type, pos); - return willMap.get(type).remove(pos); - } else { - return false; - } - } else { - return false; - } - } else { - return false; - } - } - - //Assume that it has been added already. - private static void onPillarAdded(World world, EnumDemonWillType type, BlockPos pos) { - BMLog.DEBUG.info("Adding..."); - List closePosList = new ArrayList<>(); - - int dim = world.provider.getDimension(); - if (pillarMap.containsKey(dim)) { - Map> willMap = pillarMap.get(dim); - if (willMap.containsKey(type)) { - List otherPosList = willMap.get(type); - - for (BlockPos closePos : otherPosList) { - if (!closePos.equals(pos) && closePos.distanceSq(pos) <= farthestDistanceSquared) { - closePosList.add(closePos); - } - } - - } - } - if (nearPillarMap.containsKey(dim)) { - Map>> willMap = nearPillarMap.get(dim); - if (willMap.containsKey(type)) { - Map> posMap = willMap.get(type); - - for (BlockPos closePos : closePosList) { - List posList = posMap.get(closePos); - if (posList != null && !posList.contains(pos)) { - posList.add(pos); - } else { - posList = new ArrayList<>(); - posList.add(pos); - posMap.put(closePos, posList); - } - } - - posMap.put(pos, closePosList); - } else { - Map> posMap = new HashMap<>(); - - posMap.put(pos, closePosList); - willMap.put(type, posMap); - } - } else { - Map>> willMap = new HashMap<>(); - Map> posMap = new HashMap<>(); - - posMap.put(pos, closePosList); - willMap.put(type, posMap); - nearPillarMap.put(dim, willMap); - } - } - - private static void onPillarRemoved(World world, EnumDemonWillType type, BlockPos pos) { - BMLog.DEBUG.info("Removing..."); - int dim = world.provider.getDimension(); - if (nearPillarMap.containsKey(dim)) { - Map>> willMap = nearPillarMap.get(dim); - if (willMap.containsKey(type)) { - Map> posMap = willMap.get(type); - List posList = posMap.get(pos); - if (posList != null) { - for (BlockPos checkPos : posList) { - List checkPosList = posMap.get(checkPos); - if (checkPosList != null) { - checkPosList.remove(pos); - } - } - - posMap.remove(pos); - } - } - } - } - - //TODO: Change to use the nearPillarMap. - public static List getNearbyPillars(World world, EnumDemonWillType type, BlockPos pos) { - int dim = world.provider.getDimension(); - if (nearPillarMap.containsKey(dim)) { - Map>> willMap = nearPillarMap.get(dim); - if (willMap.containsKey(type)) { - Map> posMap = willMap.get(type); - List posList = posMap.get(pos); - if (posList != null) { - return posList; - } - } - } - - return new ArrayList<>(); - } - - public static List getAllConnectedPillars(World world, EnumDemonWillType type, BlockPos pos) { - List checkedPosList = new ArrayList<>(); - List uncheckedPosList = new ArrayList<>(); //Positions where we did not check their connections. - - uncheckedPosList.add(pos); - - int dim = world.provider.getDimension(); - if (nearPillarMap.containsKey(dim)) { - Map>> willMap = nearPillarMap.get(dim); - if (willMap.containsKey(type)) { - Map> posMap = willMap.get(type); - // This is where the magic happens. - - while (!uncheckedPosList.isEmpty()) { - //Positions that are new this iteration and need to be dumped into uncheckedPosList next iteration. - List newPosList = new ArrayList<>(); - - for (BlockPos checkPos : uncheckedPosList) { - List posList = posMap.get(checkPos); - if (posList != null) { - for (BlockPos testPos : posList) { - //Check if the position has already been checked, is scheduled to be checked, or is already found it needs to be checked. - if (!checkedPosList.contains(testPos) && !uncheckedPosList.contains(testPos) && !newPosList.contains(testPos)) { - newPosList.add(testPos); - } - } - } - } - - checkedPosList.addAll(uncheckedPosList); - uncheckedPosList = newPosList; - } - } - } - - return checkedPosList; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java deleted file mode 100644 index 65c0c354..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.types.ISubItem; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.List; -import java.util.Locale; - -public class ItemActivationCrystal extends ItemEnum.Variant implements IBindable { - - public ItemActivationCrystal() { - super(CrystalType.class, "activation_crystal"); - - setMaxStackSize(1); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.add(TextHelper.localize("tooltip.bloodmagic.activation_crystal." + getItemType(stack).getInternalName())); - - if (!stack.hasTagCompound()) - return; - - Binding binding = getBinding(stack); - if (binding != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); - - super.addInformation(stack, world, tooltip, flag); - } - - public int getCrystalLevel(ItemStack stack) { - return stack.getItemDamage() > 1 ? Integer.MAX_VALUE : stack.getItemDamage() + 1; - } - - public enum CrystalType implements ISubItem { - WEAK, - AWAKENED, - CREATIVE,; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL, count, ordinal()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemAlchemicVial.java b/src/main/java/WayofTime/bloodmagic/item/ItemAlchemicVial.java deleted file mode 100644 index bd75cd4a..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemAlchemicVial.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.item.types.AlchemicVialType; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; - -public class ItemAlchemicVial extends ItemEnum.Variant -{ - public ItemAlchemicVial() - { - super(AlchemicVialType.class, "alchemic_vial"); - } - - @Override - public void gatherVariants(Int2ObjectMap variants) - { - for (AlchemicVialType type : types) - variants.put(type.ordinal(), "type=normal"); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java b/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java deleted file mode 100644 index e1da3b10..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemAltarMaker.java +++ /dev/null @@ -1,140 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.altar.*; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.block.BlockAltar; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.NumeralHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.List; - -public class ItemAltarMaker extends Item implements IAltarManipulator, IVariantProvider { - private AltarTier tierToBuild = AltarTier.ONE; - - public ItemAltarMaker() { - super(); - setUnlocalizedName(BloodMagic.MODID + ".altarMaker"); - setCreativeTab(BloodMagic.TAB_BM); - setMaxStackSize(1); - setFull3D(); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentTier", stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1)); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote) - return super.onItemRightClick(world, player, hand); - - if (!player.capabilities.isCreativeMode) { - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.altarMaker.creativeOnly"), true); - return super.onItemRightClick(world, player, hand); - } - - stack = NBTHelper.checkNBT(stack); - - if (player.isSneaking()) { - if (stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) >= AltarTier.MAXTIERS - 1) - stack.getTagCompound().setInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER, 0); - else - stack.getTagCompound().setInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER, stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1); - - setTierToBuild(AltarTier.values()[stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER)]); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.altarMaker.setTier", NumeralHelper.toRoman(stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1)), true); - return super.onItemRightClick(world, player, hand); - } - - RayTraceResult rayTrace = rayTrace(world, player, false); - if (rayTrace == null || rayTrace.typeOfHit != RayTraceResult.Type.BLOCK) - return super.onItemRightClick(world, player, hand); - - IBlockState state = world.getBlockState(rayTrace.getBlockPos()); - if (state.getBlock() instanceof BlockAltar) { - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.altarMaker.building", NumeralHelper.toRoman(tierToBuild.toInt())), true); - buildAltar(world, rayTrace.getBlockPos()); - - world.notifyBlockUpdate(rayTrace.getBlockPos(), state, state, 3); - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=altarmaker"); // FIXME - } - - public void setTierToBuild(AltarTier tierToBuild) { - this.tierToBuild = tierToBuild; - } - - public void buildAltar(World world, BlockPos pos) { - if (world.isRemote) - return; - - if (tierToBuild == AltarTier.ONE) - return; - - for (AltarComponent altarComponent : tierToBuild.getAltarComponents()) { - BlockPos componentPos = pos.add(altarComponent.getOffset()); - if (altarComponent.getComponent() == ComponentType.NOTAIR) { - world.setBlockState(componentPos, Blocks.STONEBRICK.getDefaultState()); - continue; - } - - world.setBlockState(componentPos, BloodMagicAPI.INSTANCE.getComponentStates(altarComponent.getComponent()).get(0)); - } - - ((IBloodAltar) world.getTileEntity(pos)).checkTier(); - } - - public String destroyAltar(EntityPlayer player) { - World world = player.getEntityWorld(); - if (world.isRemote) - return ""; - - RayTraceResult rayTrace = rayTrace(world, player, false); - BlockPos pos = rayTrace.getBlockPos(); - IBlockState state = world.getBlockState(pos); - AltarTier altarTier = AltarUtil.getTier(world, pos); - - if (altarTier.equals(AltarTier.ONE)) - return "" + altarTier.toInt(); - else { - for (AltarComponent altarComponent : altarTier.getAltarComponents()) { - BlockPos componentPos = pos.add(altarComponent.getOffset()); - world.setBlockToAir(componentPos); - } - } - - world.notifyBlockUpdate(pos, state, state, 3); - return String.valueOf(altarTier.toInt()); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemArcaneAshes.java b/src/main/java/WayofTime/bloodmagic/item/ItemArcaneAshes.java deleted file mode 100644 index 41ebf298..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemArcaneAshes.java +++ /dev/null @@ -1,65 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class ItemArcaneAshes extends Item implements IVariantProvider { - public ItemArcaneAshes() { - setUnlocalizedName(BloodMagic.MODID + ".arcaneAshes"); - setMaxStackSize(1); - setMaxDamage(19); //Allows for 20 uses - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.arcaneAshes")); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - BlockPos newPos = blockPos.offset(side); - - if (world.isAirBlock(newPos)) { - if (!world.isRemote) { - EnumFacing rotation = EnumFacing.fromAngle(player.getRotationYawHead()); - world.setBlockState(newPos, RegistrarBloodMagicBlocks.ALCHEMY_ARRAY.getDefaultState()); - TileEntity tile = world.getTileEntity(newPos); - if (tile instanceof TileAlchemyArray) { - ((TileAlchemyArray) tile).setRotation(rotation); - } - - stack.damageItem(1, player); - } - - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - @Override - public void gatherVariants(Int2ObjectMap variants) { - variants.put(0, "type=arcaneashes"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBindableBase.java b/src/main/java/WayofTime/bloodmagic/item/ItemBindableBase.java deleted file mode 100644 index 71bafcd7..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBindableBase.java +++ /dev/null @@ -1,34 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class ItemBindableBase extends Item implements IBindable { - public ItemBindableBase() { - super(); - - setCreativeTab(BloodMagic.TAB_BM); - setMaxStackSize(1); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - Binding binding = getBinding(stack); - if (binding != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java deleted file mode 100644 index c8516244..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java +++ /dev/null @@ -1,123 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.data.*; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.*; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.List; - -public class ItemBloodOrb extends ItemBindableBase implements IBloodOrb { - public ItemBloodOrb() { - setUnlocalizedName(BloodMagic.MODID + ".orb"); - this.setMaxDamage(0); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - BloodOrb orb = getOrb(stack); - if (orb == null) - return super.getUnlocalizedName(stack); - - return super.getUnlocalizedName(stack) + "." + orb.getName(); - } - - @Override - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (BloodOrb orb : RegistrarBloodMagic.BLOOD_ORBS) { - ItemStack orbStack = new ItemStack(this); - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("orb", orb.getRegistryName().toString()); - orbStack.setTagCompound(tag); - list.add(orbStack); - } - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - BloodOrb orb = getOrb(stack); - - if (orb == null) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (world == null) - return super.onItemRightClick(world, player, hand); - - world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - - if (PlayerHelper.isFakePlayer(player)) - return super.onItemRightClick(world, player, hand); - - if (!stack.hasTagCompound()) - return super.onItemRightClick(world, player, hand); - - Binding binding = getBinding(stack); - if (binding == null) - return super.onItemRightClick(world, player, hand); - - if (world.isRemote) - return super.onItemRightClick(world, player, hand); - - SoulNetwork ownerNetwork = NetworkHelper.getSoulNetwork(binding); - if (binding.getOwnerId().equals(player.getGameProfile().getId())) - ownerNetwork.setOrbTier(orb.getTier()); - - ownerNetwork.add(SoulTicket.item(stack, world, player,200), orb.getCapacity()); // Add LP to owner's network - ownerNetwork.hurtPlayer(player, 200); // Hurt whoever is using it - return super.onItemRightClick(world, player, hand); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.orb.desc")); - - BloodOrb orb = getOrb(stack); - if (flag.isAdvanced() && orb != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.orb.owner", orb.getRegistryName().getResourceDomain())); - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public ItemStack getContainerItem(ItemStack stack) { - return stack.copy(); - } - - @Override - public boolean hasContainerItem(ItemStack stack) { - return true; - } - - // IBloodOrb - - @Nullable - @Override - public BloodOrb getOrb(ItemStack stack) { - if (!stack.hasTagCompound()) - return null; - - ResourceLocation id = new ResourceLocation(stack.getTagCompound().getString("orb")); - return RegistrarBloodMagic.BLOOD_ORBS.getValue(id); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java deleted file mode 100644 index 14094b3d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java +++ /dev/null @@ -1,130 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.BlockStack; -import WayofTime.bloodmagic.util.ItemStackWrapper; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import com.google.common.collect.HashMultiset; -import com.google.common.collect.Multimap; -import com.google.common.collect.Sets; -import net.minecraft.block.Block; -import net.minecraft.block.BlockLeaves; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Enchantments; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; -import java.util.Set; -import java.util.function.Consumer; - -public class ItemBoundAxe extends ItemBoundTool implements IMeshProvider { - private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER); - - public ItemBoundAxe() { - super("axe", 7, EFFECTIVE_ON); - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - return true; - } - - @Override - public boolean onBlockDestroyed(ItemStack stack, World world, IBlockState block, BlockPos pos, EntityLivingBase entityLiving) { - return true; - } - - @Override - protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) { - if (world.isRemote) - return; - - boolean silkTouch = EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; - int fortuneLvl = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack); - int range = charge / 6; //Charge is a max of 30 - want 5 to be the max - - HashMultiset drops = HashMultiset.create(); - - BlockPos playerPos = player.getPosition(); - - for (int i = -range; i <= range; i++) { - for (int j = 0; j <= 2 * range; j++) { - for (int k = -range; k <= range; k++) { - BlockPos blockPos = playerPos.add(i, j, k); - BlockStack blockStack = BlockStack.getStackFromPos(world, blockPos); - - if (blockStack.getBlock().isAir(blockStack.getState(), world, blockPos)) - continue; - - if (blockStack.getState().getMaterial() != Material.WOOD && !EFFECTIVE_ON.contains(blockStack.getBlock())) - continue; - - BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, blockPos, blockStack.getState(), player); - if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY) - continue; - - if (blockStack.getState().getBlockHardness(world, blockPos) != -1.0F) { - float strengthVsBlock = getDestroySpeed(stack, blockStack.getState()); - - if (strengthVsBlock > 1.1F || blockStack.getBlock() instanceof BlockLeaves && world.canMineBlockBody(player, blockPos)) { - if (silkTouch && blockStack.getBlock().canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player)) - drops.add(new ItemStackWrapper(blockStack)); - else { - List itemDrops = blockStack.getBlock().getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl); - - for (ItemStack stacks : itemDrops) - drops.add(ItemStackWrapper.getHolder(stacks)); - } - - world.setBlockToAir(blockPos); - } - } - } - } - } - - NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, (int) (charge * charge * charge / 2.7))); - world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.1F, false); - dropStacks(drops, world, playerPos.add(0, 1, 0)); - } - - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot equipmentSlot, ItemStack stack) { - Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); - if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 11 : 2, 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -3.0, 0)); - } - return multimap; - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionActivatable("bound_axe"); - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("active=true"); - variants.accept("active=false"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java deleted file mode 100644 index 68b37547..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java +++ /dev/null @@ -1,141 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.BlockStack; -import WayofTime.bloodmagic.util.ItemStackWrapper; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import com.google.common.collect.*; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Enchantments; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; -import java.util.Set; -import java.util.function.Consumer; - -public class ItemBoundPickaxe extends ItemBoundTool implements IMeshProvider { - private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.ACTIVATOR_RAIL, Blocks.COAL_ORE, Blocks.COBBLESTONE, Blocks.DETECTOR_RAIL, Blocks.DIAMOND_BLOCK, Blocks.DIAMOND_ORE, Blocks.STONE_SLAB, Blocks.GOLDEN_RAIL, Blocks.GOLD_BLOCK, Blocks.GOLD_ORE, Blocks.ICE, Blocks.IRON_BLOCK, Blocks.IRON_ORE, Blocks.LAPIS_BLOCK, Blocks.LAPIS_ORE, Blocks.LIT_REDSTONE_ORE, Blocks.MOSSY_COBBLESTONE, Blocks.NETHERRACK, Blocks.PACKED_ICE, Blocks.RAIL, Blocks.REDSTONE_ORE, Blocks.SANDSTONE, Blocks.RED_SANDSTONE, Blocks.STONE, Blocks.STONE_SLAB); - - public ItemBoundPickaxe() { - super("pickaxe", 5, EFFECTIVE_ON); - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - return true; - } - - @Override - public boolean onBlockDestroyed(ItemStack stack, World world, IBlockState block, BlockPos pos, EntityLivingBase entityLiving) { - return true; - } - - @Override - public boolean canHarvestBlock(IBlockState blockIn) { - return blockIn == Blocks.OBSIDIAN ? this.toolMaterial.getHarvestLevel() == 3 - : (blockIn != Blocks.DIAMOND_BLOCK && blockIn != Blocks.DIAMOND_ORE ? (blockIn != Blocks.EMERALD_ORE && blockIn != Blocks.EMERALD_BLOCK ? (blockIn != Blocks.GOLD_BLOCK && blockIn != Blocks.GOLD_ORE ? (blockIn != Blocks.IRON_BLOCK && blockIn != Blocks.IRON_ORE ? (blockIn != Blocks.LAPIS_BLOCK && blockIn != Blocks.LAPIS_ORE ? (blockIn != Blocks.REDSTONE_ORE && blockIn != Blocks.LIT_REDSTONE_ORE ? (blockIn.getMaterial() == Material.ROCK || (blockIn.getMaterial() == Material.IRON || blockIn.getMaterial() == Material.ANVIL)) : this.toolMaterial.getHarvestLevel() >= 2) - : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2); - } - - @Override - public float getDestroySpeed(ItemStack stack, IBlockState state) { - if (!getActivated(stack)) - return 1.0F; - - return state.getMaterial() != Material.IRON && state.getMaterial() != Material.ANVIL && state.getMaterial() != Material.ROCK ? super.getDestroySpeed(stack, state) : this.efficiency; - } - - @Override - protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) { - if (world.isRemote) - return; - - boolean silkTouch = EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; - int fortuneLvl = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack); - int range = (charge / 6); //Charge is a max of 30 - want 5 to be the max - - HashMultiset drops = HashMultiset.create(); - - BlockPos playerPos = player.getPosition(); - - for (int i = -range; i <= range; i++) { - for (int j = 0; j <= 2 * range; j++) { - for (int k = -range; k <= range; k++) { - BlockPos blockPos = playerPos.add(i, j, k); - BlockStack blockStack = BlockStack.getStackFromPos(world, blockPos); - - if (blockStack.getBlock().isAir(blockStack.getState(), world, blockPos)) - continue; - - if (blockStack.getState().getMaterial() != Material.ROCK && !EFFECTIVE_ON.contains(blockStack.getBlock())) - continue; - - BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, blockPos, blockStack.getState(), player); - if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY) - continue; - - if (blockStack.getBlock() != null && blockStack.getBlock().getBlockHardness(blockStack.getState(), world, blockPos) != -1) { - float strengthVsBlock = getDestroySpeed(stack, blockStack.getState()); - - if (strengthVsBlock > 1.1F && world.canMineBlockBody(player, blockPos)) { - if (silkTouch && blockStack.getBlock().canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player)) - drops.add(new ItemStackWrapper(blockStack)); - else { - List itemDrops = blockStack.getBlock().getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl); - for (ItemStack stacks : itemDrops) - drops.add(ItemStackWrapper.getHolder(stacks)); - } - - world.setBlockToAir(blockPos); - } - } - } - } - } - - NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, (int) (charge * charge * charge / 2.7))); - world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false); - dropStacks(drops, world, playerPos.add(0, 1, 0)); - } - - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot equipmentSlot, ItemStack stack) { - Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); - if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 5 : 2, 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -2.5, 0)); - } - return multimap; - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionActivatable("bound_pickaxe"); - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("active=true"); - variants.accept("active=false"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java deleted file mode 100644 index 3634012d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java +++ /dev/null @@ -1,127 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.BlockStack; -import WayofTime.bloodmagic.util.ItemStackWrapper; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import com.google.common.collect.*; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Enchantments; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; -import java.util.Set; -import java.util.function.Consumer; - -public class ItemBoundShovel extends ItemBoundTool implements IMeshProvider { - private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.CLAY, Blocks.DIRT, Blocks.FARMLAND, Blocks.GRASS, Blocks.GRAVEL, Blocks.MYCELIUM, Blocks.SAND, Blocks.SNOW, Blocks.SNOW_LAYER, Blocks.SOUL_SAND); - - public ItemBoundShovel() { - super("shovel", 1, EFFECTIVE_ON); - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - return true; - } - - @Override - public boolean onBlockDestroyed(ItemStack stack, World world, IBlockState block, BlockPos pos, EntityLivingBase entityLiving) { - return true; - } - - @Override - protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) { - if (world.isRemote) - return; - - boolean silkTouch = EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; - int fortuneLvl = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack); - int range = charge / 6; //Charge is a max of 30 - want 5 to be the max - - HashMultiset drops = HashMultiset.create(); - - BlockPos playerPos = player.getPosition(); - - for (int i = -range; i <= range; i++) { - for (int j = 0; j <= 2 * range; j++) { - for (int k = -range; k <= range; k++) { - BlockPos blockPos = playerPos.add(i, j, k); - BlockStack blockStack = BlockStack.getStackFromPos(world, blockPos); - - if (blockStack.getBlock().isAir(blockStack.getState(), world, blockPos)) - continue; - - Material material = blockStack.getState().getMaterial(); - if (material != Material.GROUND && material != Material.CLAY && material != Material.GRASS && !EFFECTIVE_ON.contains(blockStack.getBlock())) - continue; - - BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, blockPos, blockStack.getState(), player); - if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY) - continue; - - if (blockStack.getBlock() != null && blockStack.getBlock().getBlockHardness(blockStack.getState(), world, blockPos) != -1) { - float strengthVsBlock = getDestroySpeed(stack, blockStack.getState()); - - if (strengthVsBlock > 1.1F && world.canMineBlockBody(player, blockPos)) { - if (silkTouch && blockStack.getBlock().canSilkHarvest(world, blockPos, world.getBlockState(blockPos), player)) - drops.add(new ItemStackWrapper(blockStack)); - else { - List itemDrops = blockStack.getBlock().getDrops(world, blockPos, world.getBlockState(blockPos), fortuneLvl); - for (ItemStack stacks : itemDrops) - drops.add(ItemStackWrapper.getHolder(stacks)); - } - - world.setBlockToAir(blockPos); - } - } - } - } - } - - NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, (int) (charge * charge * charge / 2.7))); - world.createExplosion(player, playerPos.getX(), playerPos.getY(), playerPos.getZ(), 0.5F, false); - dropStacks(drops, world, playerPos.add(0, 1, 0)); - } - - @Override - public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) { - Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); - if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", 5, 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -2.5, 0)); - } - return multimap; - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionActivatable("bound_shovel"); - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("active=true"); - variants.accept("active=false"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java deleted file mode 100644 index e9b30300..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java +++ /dev/null @@ -1,135 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.iface.IActivatable; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.*; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemSword; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; -import java.util.function.Consumer; - -public class ItemBoundSword extends ItemSword implements IBindable, IActivatable, IMeshProvider { - public ItemBoundSword() { - super(RegistrarBloodMagicItems.BOUND_TOOL_MATERIAL); - - setUnlocalizedName(BloodMagic.MODID + ".bound.sword"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (player.isSneaking()) - setActivatedState(stack, !getActivated(stack)); - -// if (!player.isSneaking() && getActivated(stack)) -// { -// BoundToolEvent.Charge event = new BoundToolEvent.Charge(player, stack); -// if (MinecraftForge.EVENT_BUS.post(event)) -// return new ActionResult(EnumActionResult.FAIL, event.result); -// -// player.setActiveHand(hand); -// return new ActionResult(EnumActionResult.SUCCESS, stack); -// } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { - Binding binding = getBinding(stack); - if (binding == null) { - setActivatedState(stack, false); - return; - } - - if (entity instanceof EntityPlayer && getActivated(stack) && world.getTotalWorldTime() % 80 == 0) - NetworkHelper.getSoulNetwork(binding).syphonAndDamage((EntityPlayer) entity, SoulTicket.item(stack, world, entity, 20)); - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - return true; - } - - @Override - public boolean onBlockDestroyed(ItemStack stack, World world, IBlockState block, BlockPos pos, EntityLivingBase entityLiving) { - return true; - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return oldStack.getItem() != newStack.getItem(); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs tab, NonNullList subItems) { - if (!isInCreativeTab(tab)) - return; - - subItems.add(Utils.setUnbreakable(new ItemStack(this))); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - if (TextHelper.canTranslate("tooltip.bloodmagic.bound.sword.desc")) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.bound.sword.desc")); - - tooltip.add(TextHelper.localize("tooltip.bloodmagic." + (getActivated(stack) ? "activated" : "deactivated"))); - - Binding binding = getBinding(stack); - if (binding != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); - } - - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot equipmentSlot, ItemStack stack) { - Multimap multimap = HashMultimap.create(); - if (equipmentSlot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getActivated(stack) ? 8 : 2, 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.4, 0)); - } - return multimap; - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionActivatable("bound_sword"); - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("active=true"); - variants.accept("active=false"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java deleted file mode 100644 index bdc791bf..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundTool.java +++ /dev/null @@ -1,254 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.ItemStackWrapper; -import WayofTime.bloodmagic.event.BoundToolEvent; -import WayofTime.bloodmagic.iface.IActivatable; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Multimap; -import com.google.common.collect.Multiset; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemTool; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class ItemBoundTool extends ItemTool implements IBindable, IActivatable { - public final int chargeTime = 30; - protected final String tooltipBase; - private final String name; - public Map heldDownMap = new HashMap<>(); - public Map heldDownCountMap = new HashMap<>(); - - public ItemBoundTool(String name, float damage, Set effectiveBlocks) { - super(damage, 1, RegistrarBloodMagicItems.BOUND_TOOL_MATERIAL, effectiveBlocks); - setUnlocalizedName(BloodMagic.MODID + ".bound." + name); - setCreativeTab(BloodMagic.TAB_BM); - setHarvestLevel(name, 4); - - this.name = name; - this.tooltipBase = "tooltip.bloodmagic.bound." + name + "."; - } - - @Override - public float getDestroySpeed(ItemStack stack, IBlockState state) { - return getActivated(stack) ? toolMaterial.getEfficiency() : 1.0F; - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return slotChanged; - } - - @Override - public void getSubItems(CreativeTabs tab, NonNullList subItems) { - if (!isInCreativeTab(tab)) - return; - - subItems.add(Utils.setUnbreakable(new ItemStack(this))); - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { - Binding binding = getBinding(stack); - if (binding == null) { - setActivatedState(stack, false); - return; - } - - if (entity instanceof EntityPlayer && getActivated(stack) && isSelected && getBeingHeldDown(stack) && stack == ((EntityPlayer) entity).getActiveItemStack()) { - EntityPlayer player = (EntityPlayer) entity; - setHeldDownCount(stack, Math.min(player.getItemInUseCount(), chargeTime)); - } else if (!isSelected) { - setBeingHeldDown(stack, false); - } - - if (entity instanceof EntityPlayer && getActivated(stack) && world.getTotalWorldTime() % 80 == 0) - NetworkHelper.getSoulNetwork(binding).syphonAndDamage((EntityPlayer) entity, SoulTicket.item(stack, world, entity, 20)); - } - - protected int getHeldDownCount(ItemStack stack) { - if (!heldDownCountMap.containsKey(stack)) - return 0; - - return heldDownCountMap.get(stack); - } - - protected void setHeldDownCount(ItemStack stack, int count) { - heldDownCountMap.put(stack, count); - } - - protected boolean getBeingHeldDown(ItemStack stack) { - if (!heldDownMap.containsKey(stack)) - return false; - - return heldDownMap.get(stack); - } - - protected void setBeingHeldDown(ItemStack stack, boolean heldDown) { - heldDownMap.put(stack, heldDown); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (player.isSneaking()) - setActivatedState(stack, !getActivated(stack)); - - if (!player.isSneaking() && getActivated(stack)) { - BoundToolEvent.Charge event = new BoundToolEvent.Charge(player, stack); - if (MinecraftForge.EVENT_BUS.post(event)) - return new ActionResult<>(EnumActionResult.FAIL, event.result); - - player.setActiveHand(hand); - return new ActionResult<>(EnumActionResult.SUCCESS, stack); - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft) { - if (entityLiving instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entityLiving; - if (!player.isSneaking() && getActivated(stack)) { - int i = this.getMaxItemUseDuration(stack) - timeLeft; - BoundToolEvent.Release event = new BoundToolEvent.Release(player, stack, i); - if (MinecraftForge.EVENT_BUS.post(event)) - return; - - i = event.charge; - - onBoundRelease(stack, worldIn, player, Math.min(i, chargeTime)); - setBeingHeldDown(stack, false); - } - } - } - - protected void onBoundRelease(ItemStack stack, World world, EntityPlayer player, int charge) { - - } - - @Override - public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase entityLiving) { - return stack; - } - - @Override - public int getMaxItemUseDuration(ItemStack stack) { - return 72000; - } - - @Override - public EnumAction getItemUseAction(ItemStack stack) { - return EnumAction.BOW; - } - - @Override - public int getItemEnchantability() { - return 50; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (TextHelper.canTranslate(tooltipBase + "desc")) - tooltip.add(TextHelper.localizeEffect(tooltipBase + "desc")); - - tooltip.add(TextHelper.localize("tooltip.bloodmagic." + (getActivated(stack) ? "activated" : "deactivated"))); - - if (!stack.hasTagCompound()) - return; - - Binding binding = getBinding(stack); - if (binding != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public Set getToolClasses(ItemStack stack) { - return ImmutableSet.of(name); - } - - public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) { - return ArrayListMultimap.create(); // No-op - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return getActivated(stack) && getBeingHeldDown(stack); - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - return ((double) -Math.min(getHeldDownCount(stack), chargeTime) / chargeTime) + 1; - } - - public String getTooltipBase() { - return tooltipBase; - } - - public String getName() { - return name; - } - - public Map getHeldDownMap() { - return heldDownMap; - } - - public Map getHeldDownCountMap() { - return heldDownCountMap; - } - - public int getChargeTime() { - return chargeTime; - } - - protected static void dropStacks(Multiset drops, World world, BlockPos posToDrop) { - for (Multiset.Entry entry : drops.entrySet()) { - int count = entry.getCount(); - ItemStackWrapper stack = entry.getElement(); - int maxStackSize = stack.item.getItemStackLimit(stack.toStack(1)); - - while (count >= maxStackSize) { - world.spawnEntity(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(maxStackSize))); - count -= maxStackSize; - } - - if (count > 0) - world.spawnEntity(new EntityItem(world, posToDrop.getX(), posToDrop.getY(), posToDrop.getZ(), stack.toStack(count))); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java deleted file mode 100644 index c3b3ecfd..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java +++ /dev/null @@ -1,84 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import WayofTime.bloodmagic.util.helper.PlayerSacrificeHelper; -import WayofTime.bloodmagic.util.helper.PurificationHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.IMob; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.SoundCategory; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.common.registry.EntityRegistry; - -import javax.annotation.Nonnull; - -public class ItemDaggerOfSacrifice extends Item implements IVariantProvider { - public ItemDaggerOfSacrifice() { - super(); - setUnlocalizedName(BloodMagic.MODID + ".daggerOfSacrifice"); - setCreativeTab(BloodMagic.TAB_BM); - setMaxStackSize(1); - setFull3D(); - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - if (attacker instanceof FakePlayer) - return false; - - if (target == null || attacker == null || attacker.getEntityWorld().isRemote || (attacker instanceof EntityPlayer && !(attacker instanceof EntityPlayerMP))) - return false; - - if (!target.isNonBoss()) - return false; - - if (target instanceof EntityPlayer) - return false; - - if (target.isChild() && !(target instanceof IMob)) - return false; - - if (target.isDead || target.getHealth() < 0.5F) - return false; - - EntityEntry entityEntry = EntityRegistry.getEntry(target.getClass()); - if (entityEntry == null) - return false; - int lifeEssenceRatio = BloodMagicAPI.INSTANCE.getValueManager().getSacrificial().getOrDefault(entityEntry.getRegistryName(), 25); - - if (lifeEssenceRatio <= 0) - return false; - - int lifeEssence = (int) (lifeEssenceRatio * target.getHealth()); - if (target instanceof EntityAnimal) { - lifeEssence = (int) (lifeEssence * (1 + PurificationHelper.getCurrentPurity((EntityAnimal) target))); - } - - if (target.isChild()) { - lifeEssence *= 0.5F; - } - - if (PlayerSacrificeHelper.findAndFillAltar(attacker.getEntityWorld(), target, lifeEssence, true)) { - target.getEntityWorld().playSound(null, target.posX, target.posY, target.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (target.getEntityWorld().rand.nextFloat() - target.getEntityWorld().rand.nextFloat()) * 0.8F); - target.setHealth(-1); - target.onDeath(DamageSourceBloodMagic.INSTANCE); - } - - return false; - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=normal"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java deleted file mode 100644 index 4e62706e..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDemonCrystal.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDiscreteDemonWill; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.MathHelper; - -public class ItemDemonCrystal extends ItemEnum.Variant implements IDiscreteDemonWill { - - public ItemDemonCrystal() { - super(EnumDemonWillType.class, "demonCrystal"); - - setHasSubtypes(true); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public double getWill(ItemStack willStack) { - return getDiscretization(willStack) * willStack.getCount(); - } - - @Override - public double drainWill(ItemStack willStack, double drainAmount) { - double discretization = getDiscretization(willStack); - int drainedNumber = (int) Math.floor(Math.min(willStack.getCount() * discretization, drainAmount) / discretization); - - if (drainedNumber > 0) { - willStack.shrink(drainedNumber); - return drainedNumber * discretization; - } - - return 0; - } - - @Override - public double getDiscretization(ItemStack willStack) { - return 50; - } - - @Override - public EnumDemonWillType getType(ItemStack willStack) { - return EnumDemonWillType.values()[MathHelper.clamp(willStack.getMetadata(), 0, EnumDemonWillType.values().length - 1)]; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDemonWillGauge.java b/src/main/java/WayofTime/bloodmagic/item/ItemDemonWillGauge.java deleted file mode 100644 index bc8448ea..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDemonWillGauge.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.iface.IDemonWillViewer; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.List; - -public class ItemDemonWillGauge extends Item implements IVariantProvider, IDemonWillViewer { - public ItemDemonWillGauge() { - setUnlocalizedName(BloodMagic.MODID + ".willGauge"); - setMaxStackSize(1); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.willGauge")))); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=willgauge"); - } - - @Override - public boolean canSeeDemonWillAura(World world, ItemStack stack, EntityPlayer player) { - return true; - } - - @Override - public int getDemonWillAuraResolution(World world, ItemStack stack, EntityPlayer player) { - return 100; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemEnum.java b/src/main/java/WayofTime/bloodmagic/item/ItemEnum.java deleted file mode 100644 index 0fed5b36..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemEnum.java +++ /dev/null @@ -1,60 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.types.ISubItem; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class ItemEnum & ISubItem> extends Item { - - protected final T[] types; - - public ItemEnum(Class enumClass, String baseName) { - super(); - - this.types = enumClass.getEnumConstants(); - - setUnlocalizedName(BloodMagic.MODID + "." + baseName); - setHasSubtypes(types.length > 1); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + "." + getItemType(stack).getInternalName(); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs tab, NonNullList subItems) { - if (!isInCreativeTab(tab)) - return; - - for (T type : types) - subItems.add(new ItemStack(this, 1, type.ordinal())); - } - - public T getItemType(ItemStack stack) { - return types[MathHelper.clamp(stack.getItemDamage(), 0, types.length - 1)]; - } - - public static class Variant & ISubItem> extends ItemEnum implements IVariantProvider { - - public Variant(Class enumClass, String baseName) { - super(enumClass, baseName); - } - - @Override - public void gatherVariants(Int2ObjectMap variants) { - for (int i = 0; i < types.length; i++) - variants.put(i, "type=" + types[i].getInternalName()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java b/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java deleted file mode 100644 index 5d8bc69e..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemExperienceBook.java +++ /dev/null @@ -1,184 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.util.BMLog; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.List; - -public class ItemExperienceBook extends Item implements IVariantProvider { - public ItemExperienceBook() { - setUnlocalizedName(BloodMagic.MODID + ".experienceTome"); - setMaxStackSize(1); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - @SideOnly(Side.CLIENT) - public boolean hasEffect(ItemStack stack) { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.experienceTome")); - - if (!stack.hasTagCompound()) - return; - - double storedExp = getStoredExperience(stack); - - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.experienceTome.exp", (int) storedExp)); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.experienceTome.expLevel", (int) getLevelForExperience(storedExp))); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (!world.isRemote) { - if (player.isSneaking()) - absorbOneLevelExpFromPlayer(stack, player); - else - giveOneLevelExpToPlayer(stack, player); - } - - return new ActionResult<>(EnumActionResult.SUCCESS, stack); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=experiencetome"); - } - - public void giveOneLevelExpToPlayer(ItemStack stack, EntityPlayer player) { - float progress = player.experience; - int expToNext = getExperienceForNextLevel(player.experienceLevel); - - int neededExp = (int) Math.ceil((1 - progress) * expToNext); - float containedExp = (float) getStoredExperience(stack); - - BMLog.DEBUG.info("Needed: " + neededExp + ", contained: " + containedExp + ", exp to next: " + expToNext); - - if (containedExp >= neededExp) { - setStoredExperience(stack, containedExp - neededExp); - addPlayerXP(player, neededExp); - - if (player.experienceLevel % 5 == 0) { - float f = player.experienceLevel > 30 ? 1.0F : (float) player.experienceLevel / 30.0F; - player.getEntityWorld().playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_PLAYER_LEVELUP, player.getSoundCategory(), f * 0.75F, 1.0F); - } - } else { - setStoredExperience(stack, 0); - addPlayerXP(player, (int) containedExp); - } - } - - public void absorbOneLevelExpFromPlayer(ItemStack stack, EntityPlayer player) { - float progress = player.experience; - - if (progress > 0) { - int expDeduction = (int) getExperienceAcquiredToNext(player); - if (expDeduction > 0) { - addPlayerXP(player, -expDeduction); - addExperience(stack, expDeduction); - } - } else if (progress == 0 && player.experienceLevel > 0) { - int expDeduction = getExperienceForNextLevel(player.experienceLevel - 1); - addPlayerXP(player, -expDeduction); - addExperience(stack, expDeduction); - } - } - - // Credits to Ender IO for some of the experience code, although now modified slightly for my convenience. - public static int getPlayerXP(EntityPlayer player) { - return (int) (getExperienceForLevel(player.experienceLevel) + (player.experience * player.xpBarCap())); - } - - public static void addPlayerXP(EntityPlayer player, int amount) { - int experience = Math.max(0, getPlayerXP(player) + amount); - player.experienceTotal = experience; - player.experienceLevel = getLevelForExperience(experience); - int expForLevel = getExperienceForLevel(player.experienceLevel); - player.experience = (float) (experience - expForLevel) / (float) player.xpBarCap(); - } - - public static void setStoredExperience(ItemStack stack, double exp) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble("experience", exp); - } - - public static double getStoredExperience(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getDouble("experience"); - } - - public static void addExperience(ItemStack stack, double exp) { - setStoredExperience(stack, getStoredExperience(stack) + exp); - } - - public static int getExperienceForNextLevel(int currentLevel) { - if (currentLevel < 16) { - return 2 * currentLevel + 7; - } else if (currentLevel < 31) { - return 5 * currentLevel - 38; - } else { - return 9 * currentLevel - 158; - } - } - - //TODO: Change to calculation form. - public static int getExperienceForLevel(int level) { - if (level >= 21863) { - return Integer.MAX_VALUE; - } - if (level == 0) { - return 0; - } - int res = 0; - for (int i = 0; i < level; i++) { - res += getExperienceForNextLevel(i); - } - return res; - } - - public static double getExperienceAcquiredToNext(EntityPlayer player) { - return player.experience * player.xpBarCap(); - } - - public static int getLevelForExperience(double exp) { - if (exp <= 352) { - return (int) Math.floor(solveParabola(1, 6, -exp)); - } else if (exp <= 1507) { - return (int) Math.floor(solveParabola(2.5, -40.5, 360 - exp)); - } else { - return (int) Math.floor(solveParabola(4.5, -162.5, 2220 - exp)); - } - } - - public static double solveParabola(double a, double b, double c) { - return (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java deleted file mode 100644 index 67e87565..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java +++ /dev/null @@ -1,107 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.ritual.EnumRuneType; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.block.BlockRitualStone; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.Arrays; -import java.util.List; - -public class ItemInscriptionTool extends ItemEnum.Variant implements IBindable { - - public ItemInscriptionTool() { - super(EnumRuneType.class, "scribe"); - - setMaxStackSize(1); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (EnumRuneType runeType : types) { - if (runeType == EnumRuneType.BLANK) - continue; - - ItemStack stack = new ItemStack(this, 1, runeType.ordinal()); - NBTTagCompound tag = new NBTTagCompound(); - tag.setInteger(Constants.NBT.USES, 10); - stack.setTagCompound(tag); - list.add(stack); - } - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - IBlockState state = world.getBlockState(pos); - - if (state.getBlock() instanceof BlockRitualStone && !((BlockRitualStone) state.getBlock()).isRuneType(world, pos, getItemType(stack))) { - stack = NBTHelper.checkNBT(stack); - int uses = stack.getTagCompound().getInteger(Constants.NBT.USES); - - world.setBlockState(pos, state.withProperty(((BlockRitualStone) state.getBlock()).getProperty(), getItemType(stack))); - if (!player.capabilities.isCreativeMode) { - stack.getTagCompound().setInteger(Constants.NBT.USES, --uses); - if (uses <= 0) - player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY); - } - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return stack.hasTagCompound(); - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - int uses = stack.getTagCompound().getInteger(Constants.NBT.USES); - - return 1.0 - ((double) uses / (double) 10); - } - - @Override - public int getRGBDurabilityForDisplay(ItemStack stack) { - int uses = stack.getTagCompound().getInteger(Constants.NBT.USES); - - return MathHelper.hsvToRGB(Math.max(0.0F, (float) (uses) / 10) / 3.0F, 1.0F, 1.0F); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.inscriber.desc")))); - - if (!stack.hasTagCompound()) - return; - - Binding binding = getBinding(stack); - if (binding != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java deleted file mode 100644 index ed4153a0..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java +++ /dev/null @@ -1,69 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -// TODO: Make some hook somewhere that attaches the pos to the ticket otherwise the tickets are basically useless lmao -public class ItemLavaCrystal extends ItemBindableBase implements IVariantProvider { - - public ItemLavaCrystal() { - super(); - setUnlocalizedName(BloodMagic.MODID + ".lavaCrystal"); - } - - @Override - public ItemStack getContainerItem(ItemStack stack) { - Binding binding = getBinding(stack); - if (binding != null) - NetworkHelper.getSoulNetwork(binding.getOwnerId()).syphon(SoulTicket.item(stack, 25)); - - ItemStack returnStack = new ItemStack(this); - returnStack.setTagCompound(stack.getTagCompound()); - return returnStack; - } - - @Override - public boolean hasContainerItem(ItemStack stack) { - return true; - } - - @Override - public int getItemBurnTime(ItemStack stack) { - Binding binding = getBinding(stack); - if (binding == null) - return -1; - - if (NetworkHelper.syphonFromContainer(stack, SoulTicket.item(stack, 25))) - return 200; - else { - EntityPlayer player = PlayerHelper.getPlayerFromUUID(binding.getOwnerId()); - if (player != null) - player.addPotionEffect(new PotionEffect(MobEffects.NAUSEA, 99)); - } - - return -1; - } - - @Nullable - @Override - public Binding getBinding(ItemStack stack) { - return Binding.fromStack(stack); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=normal"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java b/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java deleted file mode 100644 index 12e0a2d4..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemPotionFlask.java +++ /dev/null @@ -1,133 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.EnumAction; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.potion.PotionUtils; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; -import java.util.function.Consumer; - -public class ItemPotionFlask extends Item implements IMeshProvider { - public ItemPotionFlask() { - setUnlocalizedName(BloodMagic.MODID + ".potionFlask"); - setCreativeTab(BloodMagic.TAB_BM); - setMaxStackSize(1); - setMaxDamage(8); - setNoRepair(); - } - - @Override - public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase entityLiving) { - EntityPlayer player = entityLiving instanceof EntityPlayer ? (EntityPlayer) entityLiving : null; - - int remainingUses = stack.getMaxDamage() - stack.getItemDamage(); - if (remainingUses <= 0) { - NBTHelper.checkNBT(stack); - stack.getTagCompound().setBoolean("empty", true); - return stack; - } - - if (player == null || !player.capabilities.isCreativeMode) { - stack.setItemDamage(stack.getItemDamage() + 1); - } - - if (!world.isRemote) { - for (PotionEffect potioneffect : PotionUtils.getEffectsFromStack(stack)) { - entityLiving.addPotionEffect(new PotionEffect(potioneffect)); - } - } - - return stack; - } - - @Override - public int getMaxItemUseDuration(ItemStack stack) { - return 32; - } - - @Override - public EnumAction getItemUseAction(ItemStack stack) { - return EnumAction.DRINK; - } - - @Override - public boolean isDamaged(ItemStack stack) { - return false; - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - int remainingUses = stack.getMaxDamage() - stack.getItemDamage(); - if (remainingUses > 0 || !stack.hasTagCompound() || !stack.getTagCompound().hasKey("empty")) - return EnumActionResult.PASS; - - RayTraceResult trace = rayTrace(world, player, true); - - if (trace.typeOfHit == RayTraceResult.Type.BLOCK && world.getBlockState(trace.getBlockPos()).getMaterial() == Material.WATER) { - world.playSound(player, player.posX, player.posY, player.posZ, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.NEUTRAL, 1.0F, 1.0F); - player.setHeldItem(hand, new ItemStack(this)); - return EnumActionResult.SUCCESS; - } - - return super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - int remainingUses = stack.getMaxDamage() - stack.getItemDamage(); - if (remainingUses <= 0) { - NBTHelper.checkNBT(stack); - stack.getTagCompound().setBoolean("empty", true); - return new ActionResult<>(EnumActionResult.PASS, stack); - } - player.setActiveHand(hand); - return new ActionResult<>(EnumActionResult.SUCCESS, stack); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - PotionUtils.addPotionTooltip(stack, tooltip, 1.0F); - tooltip.add(""); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.potion.uses", stack.getMaxDamage() - stack.getItemDamage())); - } - - - @SideOnly(Side.CLIENT) - @Override - public ItemMeshDefinition getMeshDefinition() { - return stack -> { - boolean full = true; - if (stack.hasTagCompound() && stack.getTagCompound().hasKey("empty")) - full = false; - return new ModelResourceLocation(getRegistryName(), "full=" + full); - }; - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("full=true"); - variants.accept("full=false"); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java b/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java deleted file mode 100644 index 6d026756..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemRitualDiviner.java +++ /dev/null @@ -1,517 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.ritual.EnumRuneType; -import WayofTime.bloodmagic.ritual.Ritual; -import WayofTime.bloodmagic.ritual.RitualComponent; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.tile.TileMasterRitualStone; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.handler.event.ClientHandler; -import WayofTime.bloodmagic.util.helper.RitualHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.base.Strings; -import com.google.common.collect.Lists; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -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.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.input.Keyboard; - -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class ItemRitualDiviner extends Item implements IVariantProvider { - public static final String tooltipBase = "tooltip.bloodmagic.diviner."; - public static String[] names = {"normal", "dusk", "dawn"}; - - public ItemRitualDiviner() { - setUnlocalizedName(BloodMagic.MODID + ".ritualDiviner"); - setCreativeTab(BloodMagic.TAB_BM); - setHasSubtypes(true); - setMaxStackSize(1); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + names[stack.getItemDamage()]; - } - - @Override - public String getHighlightTip(ItemStack stack, String displayName) { - if (Strings.isNullOrEmpty(getCurrentRitual(stack))) - return displayName; - - Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(getCurrentRitual(stack)); - if (ritual == null) - return displayName; - - return displayName + ": " + TextHelper.localize(ritual.getUnlocalizedName()); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (int i = 0; i < names.length; i++) - list.add(new ItemStack(this, 1, i)); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (player.isSneaking()) { - if (world.isRemote) { - trySetDisplayedRitual(stack, world, pos); - } - - return EnumActionResult.SUCCESS; - } else if (addRuneToRitual(stack, world, pos, player)) { - if (world.isRemote) { - spawnParticles(world, pos.up(), 15); - } - - return EnumActionResult.SUCCESS; - // TODO: Have the diviner automagically build the ritual - } - - return EnumActionResult.PASS; - } - - /** - * Adds a single rune to the ritual. - * - * @param stack - The Ritual Diviner stack - * @param world - The World - * @param pos - Block Position of the MRS. - * @param player - The Player attempting to place the ritual - * @return - True if a rune was successfully added - */ - public boolean addRuneToRitual(ItemStack stack, World world, BlockPos pos, EntityPlayer player) { - TileEntity tile = world.getTileEntity(pos); - - if (tile instanceof TileMasterRitualStone) { - Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(this.getCurrentRitual(stack)); - if (ritual != null) { - EnumFacing direction = getDirection(stack); - List components = Lists.newArrayList(); - ritual.gatherComponents(components::add); - for (RitualComponent component : components) { - if (!canPlaceRitualStone(component.getRuneType(), stack)) { - return false; - } - BlockPos offset = component.getOffset(direction); - BlockPos newPos = pos.add(offset); - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (RitualHelper.isRune(world, newPos)) { - if (RitualHelper.isRuneType(world, newPos, component.getRuneType())) { - if (world.isRemote) { - undisplayHologram(); - } - } else { - // Replace existing ritual stone - RitualHelper.setRuneType(world, newPos, component.getRuneType()); - return true; - } - } else if (block.isAir(state, world, newPos) || block.isReplaceable(world, newPos)) { - if (!consumeStone(stack, world, player)) { - return false; - } - int meta = component.getRuneType().ordinal(); - IBlockState newState = RegistrarBloodMagicBlocks.RITUAL_STONE.getStateFromMeta(meta); - world.setBlockState(newPos, newState); - return true; - } else { - return false; // TODO: Possibly replace the block with a - // ritual stone - } - } - } - } - - return false; - } - - @SideOnly(Side.CLIENT) - public void trySetDisplayedRitual(ItemStack itemStack, World world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - - if (tile instanceof TileMasterRitualStone) { - Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(this.getCurrentRitual(itemStack)); - TileMasterRitualStone masterRitualStone = (TileMasterRitualStone) tile; - - if (ritual != null) { - EnumFacing direction = getDirection(itemStack); - ClientHandler.setRitualHolo(masterRitualStone, ritual, direction, true); - } - } - } - - @SideOnly(Side.CLIENT) - public void undisplayHologram() { - ClientHandler.setRitualHoloToNull(); - } - - // TODO: Make this work for any IRitualStone - public boolean consumeStone(ItemStack stack, World world, EntityPlayer player) { - if (player.capabilities.isCreativeMode) { - return true; - } - - NonNullList inventory = player.inventory.mainInventory; - for (ItemStack newStack : inventory) { - if (newStack.isEmpty()) { - - continue; - } - Item item = newStack.getItem(); - if (item instanceof ItemBlock) { - Block block = ((ItemBlock) item).getBlock(); - if (block == RegistrarBloodMagicBlocks.RITUAL_STONE) { - newStack.shrink(1); - return true; - } - } - } - - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(this.getCurrentRitual(stack)); - if (ritual != null) { - tooltip.add(TextHelper.localize("tooltip.bloodmagic.diviner.currentRitual", TextHelper.localize(ritual.getUnlocalizedName()))); - - boolean sneaking = Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); - boolean extraInfo = sneaking && Keyboard.isKeyDown(Keyboard.KEY_M); - - if (extraInfo) { - tooltip.add(""); - - for (EnumDemonWillType type : EnumDemonWillType.values()) { - if (TextHelper.canTranslate(ritual.getUnlocalizedName() + "." + type.getName().toLowerCase() + ".info")) { - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect(ritual.getUnlocalizedName() + "." + type.getName().toLowerCase() + ".info")))); - } - } - } else if (sneaking) { - tooltip.add(TextHelper.localize(tooltipBase + "currentDirection", Utils.toFancyCasing(getDirection(stack).getName()))); - tooltip.add(""); - List components = Lists.newArrayList(); - ritual.gatherComponents(components::add); - - int blankRunes = 0; - int airRunes = 0; - int waterRunes = 0; - int fireRunes = 0; - int earthRunes = 0; - int duskRunes = 0; - int dawnRunes = 0; - int totalRunes = components.size(); - - for (RitualComponent component : components) { - switch (component.getRuneType()) { - case BLANK: - blankRunes++; - break; - case AIR: - airRunes++; - break; - case EARTH: - earthRunes++; - break; - case FIRE: - fireRunes++; - break; - case WATER: - waterRunes++; - break; - case DUSK: - duskRunes++; - break; - case DAWN: - dawnRunes++; - break; - } - } - - if (blankRunes > 0) - tooltip.add(EnumRuneType.BLANK.colorCode + TextHelper.localize(tooltipBase + "blankRune", blankRunes)); - if (waterRunes > 0) - tooltip.add(EnumRuneType.WATER.colorCode + TextHelper.localize(tooltipBase + "waterRune", waterRunes)); - if (airRunes > 0) - tooltip.add(EnumRuneType.AIR.colorCode + TextHelper.localize(tooltipBase + "airRune", airRunes)); - if (fireRunes > 0) - tooltip.add(EnumRuneType.FIRE.colorCode + TextHelper.localize(tooltipBase + "fireRune", fireRunes)); - if (earthRunes > 0) - tooltip.add(EnumRuneType.EARTH.colorCode + TextHelper.localize(tooltipBase + "earthRune", earthRunes)); - if (duskRunes > 0) - tooltip.add(EnumRuneType.DUSK.colorCode + TextHelper.localize(tooltipBase + "duskRune", duskRunes)); - if (dawnRunes > 0) - tooltip.add(EnumRuneType.DAWN.colorCode + TextHelper.localize(tooltipBase + "dawnRune", dawnRunes)); - - tooltip.add(""); - tooltip.add(TextHelper.localize(tooltipBase + "totalRune", totalRunes)); - } else { - tooltip.add(""); - if (TextHelper.canTranslate(ritual.getUnlocalizedName() + ".info")) { - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect(ritual.getUnlocalizedName() + ".info")))); - tooltip.add(""); - } - - tooltip.add(TextHelper.localizeEffect(tooltipBase + "extraInfo")); - tooltip.add(TextHelper.localizeEffect(tooltipBase + "extraExtraInfo")); - } - } - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - RayTraceResult ray = this.rayTrace(world, player, false); - if (ray != null && ray.typeOfHit == RayTraceResult.Type.BLOCK) { - return new ActionResult<>(EnumActionResult.PASS, stack); - } - - if (player.isSneaking()) { - if (!world.isRemote) { - cycleRitual(stack, player, false); - } - - return new ActionResult<>(EnumActionResult.SUCCESS, stack); - } - - return new ActionResult<>(EnumActionResult.PASS, stack); - } - - @Override - public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) { - if (!entityLiving.world.isRemote && entityLiving instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entityLiving; - - RayTraceResult ray = this.rayTrace(player.getEntityWorld(), player, false); - if (ray != null && ray.typeOfHit == RayTraceResult.Type.BLOCK) { - return false; - } - - if (!player.isSwingInProgress) { - if (player.isSneaking()) { - cycleRitual(stack, player, true); - } else { - cycleDirection(stack, player); - } - } - } - - return false; - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=basic"); - variants.put(1, "type=dusk"); - variants.put(2, "type=dawn"); - } - - public void cycleDirection(ItemStack stack, EntityPlayer player) { - EnumFacing direction = getDirection(stack); - EnumFacing newDirection; - switch (direction) { - case NORTH: - newDirection = EnumFacing.EAST; - break; - case EAST: - newDirection = EnumFacing.SOUTH; - break; - case SOUTH: - newDirection = EnumFacing.WEST; - break; - case WEST: - newDirection = EnumFacing.NORTH; - break; - default: - newDirection = EnumFacing.NORTH; - } - - setDirection(stack, newDirection); - notifyDirectionChange(newDirection, player); - } - - public void notifyDirectionChange(EnumFacing direction, EntityPlayer player) { - player.sendStatusMessage(new TextComponentTranslation(tooltipBase + "currentDirection", Utils.toFancyCasing(direction.name())), true); - } - - public void setDirection(ItemStack stack, EnumFacing direction) { - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setInteger(Constants.NBT.DIRECTION, direction.getIndex()); - } - - public EnumFacing getDirection(ItemStack stack) { - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - return EnumFacing.NORTH; - } - - NBTTagCompound tag = stack.getTagCompound(); - - int dir = tag.getInteger(Constants.NBT.DIRECTION); - if (dir == 0) { - return EnumFacing.NORTH; - } - - return EnumFacing.VALUES[tag.getInteger(Constants.NBT.DIRECTION)]; - } - - /** - * Cycles the ritual forward or backward - */ - public void cycleRitual(ItemStack stack, EntityPlayer player, boolean reverse) { - String key = getCurrentRitual(stack); - List rituals = BloodMagic.RITUAL_MANAGER.getSortedRituals(); - if (reverse) - Collections.reverse(rituals = Lists.newArrayList(rituals)); - - String firstId = ""; - boolean foundId = false; - boolean foundFirst = false; - - for (Ritual ritual : rituals) { - String id = BloodMagic.RITUAL_MANAGER.getId(ritual); - - if (!BloodMagic.RITUAL_MANAGER.enabled(id, false) || !canDivinerPerformRitual(stack, ritual)) { - continue; - } - - if (!foundFirst) { - firstId = id; - foundFirst = true; - } - - if (foundId) { - setCurrentRitual(stack, id); - notifyRitualChange(id, player); - return; - } else if (id.equals(key)) { - foundId = true; - } - } - - if (foundFirst) { - setCurrentRitual(stack, firstId); - notifyRitualChange(firstId, player); - } - } - - public boolean canDivinerPerformRitual(ItemStack stack, Ritual ritual) { - if (ritual == null) { - return false; - } - - List components = Lists.newArrayList(); - ritual.gatherComponents(components::add); - for (RitualComponent component : components) { - if (!canPlaceRitualStone(component.getRuneType(), stack)) { - return false; - } - } - - return true; - } - - public void notifyRitualChange(String key, EntityPlayer player) { - Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(key); - if (ritual != null) { - player.sendStatusMessage(new TextComponentTranslation(ritual.getUnlocalizedName()), true); - } - } - - public void setCurrentRitual(ItemStack stack, String key) { - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString("current_ritual", key); - } - - public String getCurrentRitual(ItemStack stack) { - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getString("current_ritual"); - } - - public boolean canPlaceRitualStone(EnumRuneType rune, ItemStack stack) { - int meta = stack.getItemDamage(); - switch (rune) { - case BLANK: - case AIR: - case EARTH: - case FIRE: - case WATER: - return true; - case DUSK: - return meta >= 1; - case DAWN: - return meta >= 2; - } - - return false; - } - - public static void spawnParticles(World worldIn, BlockPos pos, int amount) { - IBlockState state = worldIn.getBlockState(pos); - Block block = worldIn.getBlockState(pos).getBlock(); - - if (block.isAir(state, worldIn, pos)) { - for (int i = 0; i < amount; ++i) { - double d0 = itemRand.nextGaussian() * 0.02D; - double d1 = itemRand.nextGaussian() * 0.02D; - double d2 = itemRand.nextGaussian() * 0.02D; - worldIn.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, (double) ((float) pos.getX() + itemRand.nextFloat()), (double) pos.getY() + (double) itemRand.nextFloat(), (double) ((float) pos.getZ() + itemRand.nextFloat()), d0, d1, d2); - } - } else { - for (int i1 = 0; i1 < amount; ++i1) { - double d0 = itemRand.nextGaussian() * 0.02D; - double d1 = itemRand.nextGaussian() * 0.02D; - double d2 = itemRand.nextGaussian() * 0.02D; - worldIn.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, (double) ((float) pos.getX() + itemRand.nextFloat()), (double) pos.getY() + (double) itemRand.nextFloat() * 1.0f, (double) ((float) pos.getZ() + itemRand.nextFloat()), d0, d1, d2); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemRitualReader.java b/src/main/java/WayofTime/bloodmagic/item/ItemRitualReader.java deleted file mode 100644 index b6f7297d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemRitualReader.java +++ /dev/null @@ -1,240 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.ritual.EnumRitualReaderState; -import WayofTime.bloodmagic.ritual.IMasterRitualStone; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDiscreteDemonWill; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.input.Keyboard; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class ItemRitualReader extends Item implements IVariantProvider { - public static final String tooltipBase = "tooltip.bloodmagic.ritualReader."; - - public ItemRitualReader() { - super(); - setUnlocalizedName(BloodMagic.MODID + ".ritualReader"); - setMaxStackSize(1); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag tooltipFlag) { - if (!stack.hasTagCompound()) - return; - - EnumRitualReaderState state = this.getState(stack); - tooltip.add(TextHelper.localizeEffect(tooltipBase + "currentState", TextHelper.localizeEffect(tooltipBase + state.toString().toLowerCase()))); - - tooltip.add(""); - - boolean sneaking = Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); - - if (sneaking) { - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect(tooltipBase + "desc." + state.toString().toLowerCase())))); - } else { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.extraInfo")); - } - - super.addInformation(stack, world, tooltip, tooltipFlag); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - RayTraceResult ray = this.rayTrace(world, player, false); - if (ray != null && ray.typeOfHit == RayTraceResult.Type.BLOCK) { - return new ActionResult<>(EnumActionResult.PASS, stack); - } - - if (player.isSneaking()) { - if (!world.isRemote) { - cycleReader(stack, player); - } - - return new ActionResult<>(EnumActionResult.SUCCESS, stack); - } - - return new ActionResult<>(EnumActionResult.PASS, stack); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (!world.isRemote) { - EnumRitualReaderState state = this.getState(stack); - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof IMasterRitualStone) { - IMasterRitualStone master = (IMasterRitualStone) tile; - this.setMasterBlockPos(stack, pos); - this.setBlockPos(stack, BlockPos.ORIGIN); - - switch (state) { - case INFORMATION: - master.provideInformationOfRitualToPlayer(player); - break; - case SET_AREA: - String range = this.getCurrentBlockRange(stack); - if (player.isSneaking()) { - String newRange = master.getNextBlockRange(range); - range = newRange; - this.setCurrentBlockRange(stack, newRange); - } - - master.provideInformationOfRangeToPlayer(player, range); - break; - case SET_WILL_TYPES: - List typeList = new ArrayList<>(); - NonNullList inv = player.inventory.mainInventory; - for (int i = 0; i < 9; i++) { - ItemStack testStack = inv.get(i); - if (testStack.isEmpty()) { - continue; - } - - if (testStack.getItem() instanceof IDiscreteDemonWill) { - EnumDemonWillType type = ((IDiscreteDemonWill) testStack.getItem()).getType(testStack); - if (!typeList.contains(type)) { - typeList.add(type); - } - } - } - - master.setActiveWillConfig(player, typeList); - master.provideInformationOfWillConfigToPlayer(player, typeList); - break; - } - - return EnumActionResult.FAIL; - } else { - if (state == EnumRitualReaderState.SET_AREA) { - BlockPos masterPos = this.getMasterBlockPos(stack); - if (!masterPos.equals(BlockPos.ORIGIN)) { - BlockPos containedPos = getBlockPos(stack); - if (containedPos.equals(BlockPos.ORIGIN)) { - this.setBlockPos(stack, pos.subtract(masterPos)); - player.sendStatusMessage(new TextComponentTranslation("ritual.bloodmagic.blockRange.firstBlock"), true); - //TODO: Notify player. - } else { - tile = world.getTileEntity(masterPos); - if (tile instanceof IMasterRitualStone) { - IMasterRitualStone master = (IMasterRitualStone) tile; - master.setBlockRangeByBounds(player, this.getCurrentBlockRange(stack), containedPos, pos.subtract(masterPos)); - } - - this.setBlockPos(stack, BlockPos.ORIGIN); - } - } - } - } - } - - return super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); - } - - public BlockPos getBlockPos(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - return new BlockPos(stack.getTagCompound().getInteger(Constants.NBT.X_COORD), stack.getTagCompound().getInteger(Constants.NBT.Y_COORD), stack.getTagCompound().getInteger(Constants.NBT.Z_COORD)); - } - - public ItemStack setBlockPos(ItemStack stack, BlockPos pos) { - stack = NBTHelper.checkNBT(stack); - NBTTagCompound itemTag = stack.getTagCompound(); - itemTag.setInteger(Constants.NBT.X_COORD, pos.getX()); - itemTag.setInteger(Constants.NBT.Y_COORD, pos.getY()); - itemTag.setInteger(Constants.NBT.Z_COORD, pos.getZ()); - return stack; - } - - public BlockPos getMasterBlockPos(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - return new BlockPos(stack.getTagCompound().getInteger(Constants.NBT.X_COORD + "master"), stack.getTagCompound().getInteger(Constants.NBT.Y_COORD + "master"), stack.getTagCompound().getInteger(Constants.NBT.Z_COORD + "master")); - } - - public ItemStack setMasterBlockPos(ItemStack stack, BlockPos pos) { - stack = NBTHelper.checkNBT(stack); - NBTTagCompound itemTag = stack.getTagCompound(); - itemTag.setInteger(Constants.NBT.X_COORD + "master", pos.getX()); - itemTag.setInteger(Constants.NBT.Y_COORD + "master", pos.getY()); - itemTag.setInteger(Constants.NBT.Z_COORD + "master", pos.getZ()); - return stack; - } - - public String getCurrentBlockRange(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getString("range"); - } - - public void setCurrentBlockRange(ItemStack stack, String range) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString("range", range); - } - - public void cycleReader(ItemStack stack, EntityPlayer player) { - EnumRitualReaderState prevState = getState(stack); - int val = prevState.ordinal(); - int nextVal = val + 1 >= EnumRitualReaderState.values().length ? 0 : val + 1; - EnumRitualReaderState nextState = EnumRitualReaderState.values()[nextVal]; - - setState(stack, nextState); - notifyPlayerOfStateChange(nextState, player); - } - - public void notifyPlayerOfStateChange(EnumRitualReaderState state, EntityPlayer player) { - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentState", new TextComponentTranslation(tooltipBase + state.toString().toLowerCase()))); - } - - public void setState(ItemStack stack, EnumRitualReaderState state) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setInteger(Constants.NBT.RITUAL_READER, state.ordinal()); - } - - public EnumRitualReaderState getState(ItemStack stack) { - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - return EnumRitualReaderState.INFORMATION; - } - - NBTTagCompound tag = stack.getTagCompound(); - - return EnumRitualReaderState.values()[tag.getInteger(Constants.NBT.RITUAL_READER)]; - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=normal"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java deleted file mode 100644 index 5410758f..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java +++ /dev/null @@ -1,203 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.event.SacrificeKnifeUsedEvent; -import WayofTime.bloodmagic.item.types.ISubItem; -import WayofTime.bloodmagic.tile.TileAltar; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import WayofTime.bloodmagic.util.helper.*; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; -import java.util.function.Consumer; - -public class ItemSacrificialDagger extends ItemEnum implements IMeshProvider { - - public ItemSacrificialDagger() { - super(DaggerType.class, "sacrificial_dagger"); - - setHasSubtypes(true); - setMaxStackSize(1); - setFull3D(); - } - - @Override - public void addInformation(ItemStack stack, World world, List list, ITooltipFlag flag) { - list.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sacrificialDagger.desc")))); - - if (stack.getItemDamage() == 1) - list.add(TextHelper.localizeEffect("tooltip.bloodmagic.sacrificialDagger.creative")); - } - - @Override - public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft) { - if (entityLiving instanceof EntityPlayer && !entityLiving.getEntityWorld().isRemote) - if(PlayerSacrificeHelper.sacrificePlayerHealth((EntityPlayer) entityLiving)) - IncenseHelper.setHasMaxIncense(stack, (EntityPlayer) entityLiving, false); - } - - @Override - public int getMaxItemUseDuration(ItemStack stack) { - return 72000; - } - - @Override - public EnumAction getItemUseAction(ItemStack stack) { - return EnumAction.BOW; - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (PlayerHelper.isFakePlayer(player)) - return super.onItemRightClick(world, player, hand); - - if (this.canUseForSacrifice(stack)) { - player.setActiveHand(hand); - return new ActionResult<>(EnumActionResult.SUCCESS, stack); - } - - int lpAdded = ConfigHandler.values.sacrificialDaggerConversion * 2; - - RayTraceResult rayTrace = rayTrace(world, player, false); - if (rayTrace != null && rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { - TileEntity tile = world.getTileEntity(rayTrace.getBlockPos()); - - if (tile != null && tile instanceof TileAltar && stack.getItemDamage() == 1) - lpAdded = ((TileAltar) tile).getCapacity(); - } - - if (!player.capabilities.isCreativeMode) { - SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, 2, lpAdded); - if (MinecraftForge.EVENT_BUS.post(evt)) - return super.onItemRightClick(world, player, hand); - - if (evt.shouldDrainHealth) { - player.hurtResistantTime = 0; - player.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 0.001F); - player.setHealth(Math.max(player.getHealth() - 2, 0.0001f)); - if (player.getHealth() <= 0.001f) { - player.onDeath(DamageSourceBloodMagic.INSTANCE); - player.setHealth(0); - } -// player.attackEntityFrom(BloodMagicAPI.getDamageSource(), 2.0F); - } - - if (!evt.shouldFillAltar) - return super.onItemRightClick(world, player, hand); - - lpAdded = evt.lpAdded; - } - - double posX = player.posX; - double posY = player.posY; - double posZ = player.posZ; - world.playSound(null, posX, posY, posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - - for (int l = 0; l < 8; ++l) - world.spawnParticle(EnumParticleTypes.REDSTONE, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), 0, 0, 0); - - if (!world.isRemote && PlayerHelper.isFakePlayer(player) || player.isPotionActive(PlayerSacrificeHelper.soulFrayId)) - return super.onItemRightClick(world, player, hand); - - - PlayerSacrificeHelper.findAndFillAltar(world, player, lpAdded, false); - - return super.onItemRightClick(world, player, hand); - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) { - if (!world.isRemote && entity instanceof EntityPlayer) { - boolean prepared = this.isPlayerPreparedForSacrifice(world, (EntityPlayer) entity); - this.setUseForSacrifice(stack, prepared); - if(IncenseHelper.getHasMaxIncense(stack) && !prepared) - IncenseHelper.setHasMaxIncense(stack, (EntityPlayer) entity, false); - if(prepared) { - boolean isMax = IncenseHelper.getMaxIncense((EntityPlayer) entity) == IncenseHelper.getCurrentIncense((EntityPlayer) entity); - IncenseHelper.setHasMaxIncense(stack, (EntityPlayer) entity, isMax); - } - } - } - - public boolean isPlayerPreparedForSacrifice(World world, EntityPlayer player) { - return !world.isRemote && (PlayerSacrificeHelper.getPlayerIncense(player) > 0); - } - - public boolean canUseForSacrifice(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - return stack.getTagCompound().getBoolean(Constants.NBT.SACRIFICE); - } - - public void setUseForSacrifice(ItemStack stack, boolean sacrifice) { - stack = NBTHelper.checkNBT(stack); - stack.getTagCompound().setBoolean(Constants.NBT.SACRIFICE, sacrifice); - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return stack -> { - String variant = "type=normal"; - if (stack.getItemDamage() != 0) - variant = "type=creative"; - - if (canUseForSacrifice(stack)) - variant = "type=ceremonial"; - - return new ModelResourceLocation(getRegistryName(), variant); - }; - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("type=normal"); - variants.accept("type=creative"); - variants.accept("type=ceremonial"); - } - - @Override - public boolean hasEffect(ItemStack stack) - { - return IncenseHelper.getHasMaxIncense(stack) || super.hasEffect(stack); - } - - public enum DaggerType implements ISubItem { - - NORMAL, - CREATIVE,; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.SACRIFICIAL_DAGGER, count, ordinal()); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSanguineBook.java b/src/main/java/WayofTime/bloodmagic/item/ItemSanguineBook.java deleted file mode 100644 index ca2d37f9..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSanguineBook.java +++ /dev/null @@ -1,116 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.altar.AltarTier; -import WayofTime.bloodmagic.altar.IAltarManipulator; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.iface.IDocumentedBlock; -import WayofTime.bloodmagic.tile.TileAltar; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.NumeralHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.List; - -public class ItemSanguineBook extends Item implements IVariantProvider, IAltarManipulator { - private AltarTier currentDisplayedTier = AltarTier.ONE; - - public ItemSanguineBook() { - setUnlocalizedName(BloodMagic.MODID + ".sanguineBook"); - setCreativeTab(BloodMagic.TAB_BM); - setMaxStackSize(1); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - if (world.isRemote) - return super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); - - IBlockState hitState = world.getBlockState(pos); - if (player.isSneaking()) { - if (hitState.getBlock() instanceof IDocumentedBlock) { - trySetDisplayedTier(world, pos); - IDocumentedBlock documentedBlock = (IDocumentedBlock) hitState.getBlock(); - List docs = documentedBlock.getDocumentation(player, world, pos, hitState); - if (!docs.isEmpty()) { - ChatUtil.sendNoSpam(player, docs.toArray(new ITextComponent[docs.size()])); - return super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); - } - } - } - - return super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote) - return super.onItemRightClick(world, player, hand); - - stack = NBTHelper.checkNBT(stack); - - RayTraceResult rayTrace = rayTrace(world, player, false); - if (rayTrace == null || rayTrace.typeOfHit == RayTraceResult.Type.MISS || rayTrace.typeOfHit == RayTraceResult.Type.ENTITY) { - if (stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) >= AltarTier.MAXTIERS - 1) - stack.getTagCompound().setInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER, 0); - else - stack.getTagCompound().setInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER, stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1); - - currentDisplayedTier = AltarTier.values()[stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER)]; - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.altarMaker.setTier", NumeralHelper.toRoman(stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1)), true); - - return super.onItemRightClick(world, player, hand); - } - - return super.onItemRightClick(world, player, hand); - } - - public boolean trySetDisplayedTier(World world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileAltar) { - return !((TileAltar) tile).setCurrentTierDisplayed(currentDisplayedTier); - } - - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.book.shifting")); - tooltip.add(TextFormatting.OBFUSCATED + "~ILikeTehNutsAndICannotLie"); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentTier", stack.getTagCompound().getInteger(Constants.NBT.ALTARMAKER_CURRENT_TIER) + 1)); - } - - // IVariantProvider - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=normal"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java b/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java deleted file mode 100644 index 8c30c9cf..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.types.ISubItem; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; - -public class ItemSlate extends ItemEnum.Variant { - - public ItemSlate() { - super(SlateType.class, "slate"); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List list, ITooltipFlag flag) { - list.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.slate.desc")))); - } - - public enum SlateType implements ISubItem { - - BLANK, - REINFORCED, - IMBUED, - DEMONIC, - ETHEREAL,; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.SLATE, count, ordinal()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java deleted file mode 100644 index 2d645ba2..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java +++ /dev/null @@ -1,110 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.types.ISubItem; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; - -public class ItemTelepositionFocus extends ItemEnum.Variant implements IBindable { - - public ItemTelepositionFocus() { - super(FocusType.class, "focus"); - - setMaxStackSize(1); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - if (player.isSneaking()) { - RayTraceResult mop = rayTrace(world, player, false); - - if (mop != null && mop.typeOfHit == RayTraceResult.Type.BLOCK) { - setBlockPos(player.getHeldItem(hand), world, mop.getBlockPos()); - } - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localize("tooltip.bloodmagic.telepositionFocus." + getItemType(stack).getInternalName())))); - - super.addInformation(stack, world, tooltip, flag); - Binding binding = getBinding(stack); - if (binding != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); - - if (!stack.hasTagCompound()) - return; - - NBTTagCompound tag = stack.getTagCompound(); - BlockPos coords = getBlockPos(stack); - - if (coords != null && tag != null) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.telepositionFocus.coords", coords.getX(), coords.getY(), coords.getZ())); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.telepositionFocus.dimension", tag.getInteger(Constants.NBT.DIMENSION_ID))); - } - } - - public World getWorld(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - return DimensionManager.getWorld(stack.getTagCompound().getInteger(Constants.NBT.DIMENSION_ID)); - } - - public BlockPos getBlockPos(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - return new BlockPos(stack.getTagCompound().getInteger(Constants.NBT.X_COORD), stack.getTagCompound().getInteger(Constants.NBT.Y_COORD), stack.getTagCompound().getInteger(Constants.NBT.Z_COORD)); - } - - public ItemStack setBlockPos(ItemStack stack, World world, BlockPos pos) { - stack = NBTHelper.checkNBT(stack); - NBTTagCompound itemTag = stack.getTagCompound(); - itemTag.setInteger(Constants.NBT.X_COORD, pos.getX()); - itemTag.setInteger(Constants.NBT.Y_COORD, pos.getY()); - itemTag.setInteger(Constants.NBT.Z_COORD, pos.getZ()); - itemTag.setInteger(Constants.NBT.DIMENSION_ID, world.provider.getDimension()); - return stack; - } - - public enum FocusType implements ISubItem { - - WEAK, - ENHANCED, - REINFORCED, - DEMONIC,; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.TELEPOSITION_FOCUS, count, ordinal()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java b/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java deleted file mode 100644 index dc7d64b3..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTome.java +++ /dev/null @@ -1,112 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourHandler; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.util.helper.ItemHelper.LivingUpgrades; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.List; -import java.util.Map.Entry; - -public class ItemUpgradeTome extends Item implements IVariantProvider { - public ItemUpgradeTome() { - super(); - - setCreativeTab(BloodMagic.TAB_TOMES); - setUnlocalizedName(BloodMagic.MODID + ".upgradeTome"); - setHasSubtypes(true); - setMaxStackSize(1); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote) { - return super.onItemRightClick(world, player, hand); - } - - LivingArmourUpgrade upgrade = LivingUpgrades.getUpgrade(stack); - if (upgrade == null) { - return super.onItemRightClick(world, player, hand); - } - - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - if (chestStack.getItem() instanceof ItemLivingArmour) { - LivingArmour armour = ItemLivingArmour.getLivingArmourFromStack(chestStack); - if (armour == null) { - return super.onItemRightClick(world, player, hand); - } - - if (armour.upgradeArmour(player, upgrade)) { - ItemLivingArmour.setLivingArmour(chestStack, armour); -// ((ItemLivingArmour) chestStack.getItem()).setLivingArmour(stack, armour, false); - stack.shrink(1); - } - } - return super.onItemRightClick(world, player, hand); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - if (!stack.hasTagCompound()) - return super.getUnlocalizedName(stack); - - LivingArmourUpgrade upgrade = LivingUpgrades.getUpgrade(stack); - if (upgrade != null && upgrade.isDowngrade()) - return "item." + BloodMagic.MODID + ".downgradeTome"; - - return super.getUnlocalizedName(stack); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (Entry entry : LivingArmourHandler.upgradeMaxLevelMap.entrySet()) { - String key = entry.getKey(); - int maxLevel = entry.getValue(); - for (int i = 0; i < maxLevel; i++) { - ItemStack stack = new ItemStack(this); - LivingUpgrades.setKey(stack, key); - LivingUpgrades.setLevel(stack, i); - list.add(stack); - } - } - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=upgradetome"); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - LivingArmourUpgrade upgrade = LivingUpgrades.getUpgrade(stack); - if (upgrade != null) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.livingArmour.upgrade.level", TextHelper.localize(upgrade.getUnlocalizedName()), upgrade.getUpgradeLevel() + 1)); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTrainer.java b/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTrainer.java deleted file mode 100644 index cef99437..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemUpgradeTrainer.java +++ /dev/null @@ -1,88 +0,0 @@ -package WayofTime.bloodmagic.item; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.iface.IUpgradeTrainer; -import WayofTime.bloodmagic.livingArmour.LivingArmourHandler; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.util.helper.ItemHelper.LivingUpgrades; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; -import java.util.Map.Entry; - -public class ItemUpgradeTrainer extends Item implements IUpgradeTrainer, IVariantProvider { - public ItemUpgradeTrainer() { - super(); - - setCreativeTab(BloodMagic.TAB_TOMES); - setUnlocalizedName(BloodMagic.MODID + ".upgradeTrainer"); - setHasSubtypes(true); - setMaxStackSize(1); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - list.add(new ItemStack(this)); - for (Entry entry : LivingArmourHandler.upgradeMaxLevelMap.entrySet()) { - String key = entry.getKey(); - ItemStack stack = new ItemStack(this); - LivingUpgrades.setKey(stack, key); - list.add(stack); - } - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { -// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.livingArmour")))); - if (!stack.hasTagCompound()) - return; - LivingArmourUpgrade upgrade = LivingUpgrades.getUpgrade(stack); - if (upgrade != null) { - tooltip.add(TextHelper.localize(upgrade.getUnlocalizedName())); - } - } - - @Override - public List getTrainedUpgrades(ItemStack stack) { - List keyList = new ArrayList<>(); - String key = LivingUpgrades.getKey(stack); - - if (!key.isEmpty()) { - keyList.add(key); - } - - return keyList; - } - - @Override - public boolean setTrainedUpgrades(ItemStack stack, List keys) { - if (keys.isEmpty()) { - return false; - } - - LivingUpgrades.setKey(stack, keys.get(0)); - return true; - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=upgradetrainer"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemCuttingFluid.java b/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemCuttingFluid.java deleted file mode 100644 index c53c6da0..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemCuttingFluid.java +++ /dev/null @@ -1,99 +0,0 @@ -package WayofTime.bloodmagic.item.alchemy; - -import WayofTime.bloodmagic.iface.ICustomAlchemyConsumable; -import WayofTime.bloodmagic.item.ItemEnum; -import WayofTime.bloodmagic.item.types.ISubItem; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.List; -import java.util.Locale; - -public class ItemCuttingFluid extends ItemEnum.Variant implements ICustomAlchemyConsumable { - - public ItemCuttingFluid() { - super(FluidType.class, "cutting_fluid"); - - setMaxStackSize(1); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - int max = getMaxUsesForFluid(stack); - tooltip.add(TextHelper.localize("tooltip.bloodmagic.cuttingFluidRatio", max - getDamageOfFluid(stack), max)); - } - - public int getDamageOfFluid(ItemStack stack) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getInteger("used"); - } - - public void applyDamageToFluid(ItemStack stack) { - int damage = Math.min(getDamageOfFluid(stack) + 1, getMaxUsesForFluid(stack)); - NBTTagCompound tag = stack.getTagCompound(); - - tag.setInteger("used", damage); - } - - public int getMaxUsesForFluid(ItemStack stack) { - switch (stack.getMetadata()) { - case 0: - return 16; - case 1: - return 64; - default: - return 1; - } - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - return (double) (getDamageOfFluid(stack)) / (double) (getMaxUsesForFluid(stack)); - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return getDamageOfFluid(stack) > 0; - } - - @Override - public ItemStack drainUseOnAlchemyCraft(ItemStack stack) { - applyDamageToFluid(stack); - if (getDamageOfFluid(stack) >= getMaxUsesForFluid(stack)) { - return ItemStack.EMPTY; - } - - return stack; - } - - public enum FluidType implements ISubItem { - BASIC, - EXPLOSIVE, - ; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.CUTTING_FLUID, count, ordinal()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemLivingArmourPointsUpgrade.java b/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemLivingArmourPointsUpgrade.java deleted file mode 100644 index 9be66674..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/alchemy/ItemLivingArmourPointsUpgrade.java +++ /dev/null @@ -1,105 +0,0 @@ -package WayofTime.bloodmagic.item.alchemy; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.ItemEnum; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.item.types.ISubItem; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.Iterables; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; - -public class ItemLivingArmourPointsUpgrade extends ItemEnum.Variant { - - public ItemLivingArmourPointsUpgrade() { - super(UpgradeType.class, "living_point_upgrade"); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.livingArmourPointsUpgrade.desc", 200)))); - } - - @Override - public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) { - playerIn.setActiveHand(hand); - return new ActionResult<>(EnumActionResult.SUCCESS, playerIn.getHeldItem(hand)); - } - - @Override - public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) { - if (!(entityLiving instanceof EntityPlayer)) - return super.onItemUseFinish(stack, worldIn, entityLiving); - - EntityPlayer player = (EntityPlayer) entityLiving; - - if (!player.capabilities.isCreativeMode) - stack.shrink(1); - - if (!worldIn.isRemote) { - player.addPotionEffect(new PotionEffect(MobEffects.WITHER, 300, 5)); - player.addPotionEffect(new PotionEffect(MobEffects.POISON, 300, 5)); - player.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 400, 1)); - - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = Iterables.toArray(player.getArmorInventoryList(), ItemStack.class)[2]; - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - if (armour.maxUpgradePoints < 200) { - armour.maxUpgradePoints = 200; - ((ItemLivingArmour) chestStack.getItem()).setLivingArmour(chestStack, armour, true); - ItemLivingArmour.setLivingArmour(chestStack, armour); - } - } - } - } - - return stack; - } - - @Override - public int getMaxItemUseDuration(ItemStack stack) { - return 32; - } - - @Override - public EnumAction getItemUseAction(ItemStack stack) { - return EnumAction.DRINK; - } - - public enum UpgradeType implements ISubItem { - - DRAFT_ANGELUS, - ; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.POINTS_UPGRADE, count, ordinal()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java deleted file mode 100644 index 001b3264..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/armour/ItemLivingArmour.java +++ /dev/null @@ -1,505 +0,0 @@ -package WayofTime.bloodmagic.item.armour; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.item.types.ComponentTypes; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerRepairing; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeElytra; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.network.PlayerFallDistancePacketProcessor; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataParameter; -import net.minecraft.util.DamageSource; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.common.ISpecialArmor; -import net.minecraftforge.fml.relauncher.ReflectionHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.input.Keyboard; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; -import java.util.function.Consumer; - -public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshProvider { - public static final boolean useSpecialArmourCalculation = true; - public static String[] names = {"helmet", "chest", "legs", "boots"}; - //TODO: Save/delete cache periodically. - public static Map armourMap = new HashMap<>(); - private static Field _FLAGS = ReflectionHelper.findField(Entity.class, "FLAGS", "field_184240_ax"); - private static DataParameter FLAGS = null; - - public ItemLivingArmour(EntityEquipmentSlot armorType) { - super(ItemArmor.ArmorMaterial.IRON, 0, armorType); - setUnlocalizedName(BloodMagic.MODID + ".livingArmour."); -// setMaxDamage(250); - setMaxDamage((int) (getMaxDamage() * 1.5)); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public void onCreated(ItemStack stack, World world, EntityPlayer player) { - if (stack != null && !world.isRemote && stack.getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) { - Utils.setUUID(stack); - } - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST || this == RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET || this == RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS) { - return "bloodmagic:models/armor/livingArmour_layer_1.png"; - } - - if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS) { - return "bloodmagic:models/armor/livingArmour_layer_2.png"; - } else { - return null; - } - } - -// public double getRemainderForDamage(double damage, double plating) //TODO: Add plating, which shifts the damage -// { -// if (damage <= 0) -// { -// return 1; -// } -// -// double protectionAmount = 1 - Math.max(3, 15 - damage / 2) / 25; //This puts the base armour protection at vanilla iron level -// -// return 0; -// } - - @Override - public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { - return ItemStack.areItemsEqual(repair, ComponentTypes.REAGENT_BINDING.getStack()); - } - - @Override - public ArmorProperties getProperties(EntityLivingBase player, ItemStack stack, DamageSource source, double damage, int slot) { - double armourReduction = 0.0; - double damageAmount = 0.25; - - if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS || this == RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET) { - damageAmount = 3d / 20d * 0.6; - } else if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS) { - damageAmount = 6d / 20d * 0.6; - } else if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) { - damageAmount = 0.64; - } - - double armourPenetrationReduction = 0; - - int maxAbsorption = 100000; - - if (source.equals(DamageSource.DROWN)) { - return new ArmorProperties(-1, 0, 0); - } - - if (source.equals(DamageSource.OUT_OF_WORLD)) { - return new ArmorProperties(-1, 0, 0); - } - - if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) { - armourReduction = 0.24 / 0.64; // This values puts it at iron level - - ItemStack helmet = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - ItemStack leggings = player.getItemStackFromSlot(EntityEquipmentSlot.LEGS); - ItemStack boots = player.getItemStackFromSlot(EntityEquipmentSlot.FEET); - - if (helmet.isEmpty() || leggings.isEmpty() || boots.isEmpty()) { - damageAmount *= (armourReduction); - - return new ArmorProperties(-1, damageAmount, maxAbsorption); - } - - if (helmet.getItem() instanceof ItemLivingArmour && leggings.getItem() instanceof ItemLivingArmour && boots.getItem() instanceof ItemLivingArmour) { - double remainder = 1; // Multiply this number by the armour upgrades for protection - - if (hasLivingArmour(stack)) { - LivingArmour armour = getLivingArmour(stack); - if (armour != null && isEnabled(stack)) { - for (Entry entry : armour.upgradeMap.entrySet()) { - LivingArmourUpgrade upgrade = entry.getValue(); - remainder *= (1 - upgrade.getArmourProtection(player, source)); - } - } - } - - armourReduction = armourReduction + (1 - remainder) * (1 - armourReduction); - damageAmount *= (armourReduction); - -// if (source.isUnblockable()) -// { -// return new ArmorProperties(-1, damageAmount * armourPenetrationReduction, maxAbsorption); -// } - - return new ArmorProperties(-1, source.isUnblockable() ? 1 - remainder : damageAmount, maxAbsorption); - } - } else { - if (source.isUnblockable()) { - return new ArmorProperties(-1, damageAmount * armourPenetrationReduction, maxAbsorption); - } - - return new ArmorProperties(-1, damageAmount, maxAbsorption); - } - - return new ArmorProperties(-1, 0, 0); - } - - @Override - public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { - if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET) { - return 3; - } - - if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) { - return 8; - } - - if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS) { - return 6; - } - - if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS) { - return 3; - } - - return 5; - } - - @Override - public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { - if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) { - int preDamage = stack.getItemDamage(); - if (source.isUnblockable()) { - return; - } - - if (damage > this.getMaxDamage(stack) - this.getDamage(stack)) { - //TODO: Syphon a load of LP. - if (entity.getEntityWorld().isRemote && entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entity; - SoulNetwork network = NetworkHelper.getSoulNetwork(player); - network.syphonAndDamage(player, SoulTicket.item(stack, entity.getEntityWorld(), entity, damage * 100)); - } - - return; - } - - stack.damageItem(damage, entity); - - int receivedDamage = stack.getItemDamage() - preDamage; - if (entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entity; - if (LivingArmour.hasFullSet(player)) { - LivingArmour armour = ItemLivingArmour.getLivingArmour(stack); - if (armour != null) { - StatTrackerRepairing.incrementCounter(armour, receivedDamage); - } - } - } - - } else { - stack.damageItem(damage, entity); - } - - return; // TODO Armour shouldn't get damaged... for now - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) { - LivingArmour armour = getLivingArmourFromStack(stack); - for (Entry entry : armour.upgradeMap.entrySet()) { - LivingArmourUpgrade upgrade = entry.getValue(); - if (upgrade != null) { - if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) && Keyboard.isKeyDown(Keyboard.KEY_M)) { - StatTracker tracker = null; - for (StatTracker searchTracker : armour.trackerMap.values()) { - if (searchTracker != null && searchTracker.providesUpgrade(upgrade.getUniqueIdentifier())) { - tracker = searchTracker; - break; - } - } - - if (tracker != null) { - double progress = tracker.getProgress(armour, upgrade.getUpgradeLevel()); - tooltip.add(TextHelper.localize("tooltip.bloodmagic.livingArmour.upgrade.progress", TextHelper.localize(upgrade.getUnlocalizedName()), MathHelper.clamp((int) (progress * 100D), 0, 100))); - } - } else { - tooltip.add(TextHelper.localize("tooltip.bloodmagic.livingArmour.upgrade.level", TextHelper.localize(upgrade.getUnlocalizedName()), upgrade.getUpgradeLevel() + 1)); - } - } - } - - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.livingArmour.upgrade.points", armour.totalUpgradePoints, armour.maxUpgradePoints)); - if (!(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) && Keyboard.isKeyDown(Keyboard.KEY_M))) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.livingArmour.extraExtraInfo")); - } - } - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - super.onArmorTick(world, player, stack); - - if (world.isRemote && this == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) { - if (player instanceof EntityPlayerSP) //Sanity check - { - EntityPlayerSP spPlayer = (EntityPlayerSP) player; - - if (FLAGS == null) { - try { - FLAGS = (DataParameter) _FLAGS.get(null); - } catch (IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - } - } - - if (FLAGS != null) { - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgradeFromNBT(BloodMagic.MODID + ".upgrade.elytra", chestStack); - if (upgrade instanceof LivingArmourUpgradeElytra) { - if (spPlayer.movementInput.jump && !spPlayer.onGround && spPlayer.motionY < 0.0D && !spPlayer.capabilities.isFlying) { - if (spPlayer.motionY > -0.5D) { - BloodMagicPacketHandler.INSTANCE.sendToServer(new PlayerFallDistancePacketProcessor(1)); - } - - if (!spPlayer.isElytraFlying()) { - byte b0 = player.getDataManager().get(FLAGS); - player.getDataManager().set(FLAGS, (byte) (b0 | 1 << 7)); - } - } else if (spPlayer.isElytraFlying() && !spPlayer.movementInput.jump && !spPlayer.onGround) { - byte b0 = player.getDataManager().get(FLAGS); - player.getDataManager().set(FLAGS, (byte) (b0 & ~(1 << 7))); - } - } - } - } - } - } - - if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) { - if (!hasLivingArmour(stack)) { - setLivingArmour(stack, getLivingArmourFromStack(stack)); - } - - LivingArmour armour = getLivingArmour(stack); - if (LivingArmour.hasFullSet(player)) { - this.setIsEnabled(stack, true); - armour.onTick(world, player); - } - - setLivingArmour(stack, armour, false); - } - } - - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { - if (this == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST && isEnabled(stack) && slot == EntityEquipmentSlot.CHEST) { - LivingArmour armour = ItemLivingArmour.getLivingArmourFromStack(stack); - - return armour.getAttributeModifiers(); - } - - return HashMultimap.create(); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + names[3 - armorType.getIndex()]; - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return stack -> { - if (stack.getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET) - return new ModelResourceLocation(getCustomLocation(), "armour=head"); - else if (stack.getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST) - return new ModelResourceLocation(getCustomLocation(), "armour=body"); - else if (stack.getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS) - return new ModelResourceLocation(getCustomLocation(), "armour=leg"); - else - return new ModelResourceLocation(getCustomLocation(), "armour=feet"); - }; - } - - @Override - public ResourceLocation getCustomLocation() { - return new ResourceLocation(BloodMagic.MODID, "living_armour"); - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("armour=head"); - variants.accept("armour=body"); - variants.accept("armour=leg"); - variants.accept("armour=feet"); - } - - public void setLivingArmour(ItemStack stack, LivingArmour armour, boolean forceWrite) { - NBTTagCompound livingTag = new NBTTagCompound(); - - if (!forceWrite) { - livingTag = getArmourTag(stack); - armour.writeDirtyToNBT(livingTag); - } else { - armour.writeToNBT(livingTag); - } - - setArmourTag(stack, livingTag); - } - - public void setArmourTag(ItemStack stack, NBTTagCompound livingTag) { - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setTag(Constants.NBT.LIVING_ARMOUR, livingTag); - } - - public void setIsEnabled(ItemStack stack, boolean bool) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - tag.setBoolean("enabled", bool); - } - - public boolean isEnabled(ItemStack stack) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - return tag.getBoolean("enabled"); - } - - public void setIsElytra(ItemStack stack, boolean bool) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - tag.setBoolean("elytra", bool); - } - - public boolean isElytra(ItemStack stack) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - return tag.getBoolean("elytra"); - } - - @Nullable - public static LivingArmour getLivingArmourFromStack(ItemStack stack) { - NBTTagCompound livingTag = getArmourTag(stack); - - LivingArmour livingArmour = new LivingArmour(); - livingArmour.readFromNBT(livingTag); - - return livingArmour; - } - - public static NBTTagCompound getArmourTag(ItemStack stack) { - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getCompoundTag(Constants.NBT.LIVING_ARMOUR); - } - - //TODO: Add the ability to have the armour give an upgrade with a higher level - public static LivingArmourUpgrade getUpgrade(String uniqueIdentifier, ItemStack stack) { - if (!hasLivingArmour(stack)) { - setLivingArmour(stack, getLivingArmourFromStack(stack)); - } - - LivingArmour armour = getLivingArmour(stack); - - for (Entry entry : armour.upgradeMap.entrySet()) { - if (entry.getKey().equals(uniqueIdentifier)) { - return entry.getValue(); - } - } - - return null; - } - - public static LivingArmourUpgrade getUpgradeFromNBT(String uniqueIdentifier, ItemStack stack) { - LivingArmour armour = getLivingArmourFromStack(stack); - - for (Entry entry : armour.upgradeMap.entrySet()) { - if (entry.getKey().equals(uniqueIdentifier)) { - return entry.getValue(); - } - } - - return null; - } - - public static boolean hasLivingArmour(ItemStack stack) { - UUID uuid = Utils.getUUID(stack); - return uuid != null && armourMap.containsKey(uuid); - } - - @Nullable - public static LivingArmour getLivingArmour(ItemStack stack) { - UUID uuid = Utils.getUUID(stack); - - return armourMap.get(uuid); - } - - public static void setLivingArmour(ItemStack stack, LivingArmour armour) { - if (!Utils.hasUUID(stack)) { - Utils.setUUID(stack); - } - - UUID uuid = Utils.getUUID(stack); - - armourMap.put(uuid, armour); - } - - public static boolean hasUpgrade(String id, ItemStack stack) { - if (!hasLivingArmour(stack)) { - setLivingArmour(stack, getLivingArmourFromStack(stack)); - } - - LivingArmour armour = getLivingArmour(stack); - - return armour.upgradeMap.containsKey(id); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java b/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java deleted file mode 100644 index 5b043282..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/armour/ItemSentientArmour.java +++ /dev/null @@ -1,583 +0,0 @@ -package WayofTime.bloodmagic.item.armour; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.iface.IMultiWillTool; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.common.ISpecialArmor; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.Locale; -import java.util.Map; -import java.util.UUID; -import java.util.function.Consumer; - -public class ItemSentientArmour extends ItemArmor implements ISpecialArmor, IMeshProvider, IMultiWillTool { - public static String[] names = {"helmet", "chest", "legs", "boots"}; - - public static double[] willBracket = new double[]{30, 200, 600, 1500, 4000, 6000, 8000, 16000}; - public static double[] consumptionPerHit = new double[]{0.1, 0.12, 0.15, 0.2, 0.3, 0.35, 0.4, 0.5}; - public static double[] extraProtectionLevel = new double[]{0, 0.25, 0.5, 0.6, 0.7, 0.75, 0.85, 0.9}; - public static double[] steadfastProtectionLevel = new double[]{0.25, 0.5, 0.6, 0.7, 0.75, 0.85, 0.9, 0.95}; - - //public static double[] healthBonus = new double[] { 3, 6, 9, 12, 15, 20, 25, 30 }; - public static double[] knockbackBonus = new double[]{0.2, 0.4, 0.6, 0.8, 1, 1, 1, 1}; - - public static double[] damageBoost = new double[]{0.03, 0.06, 0.09, 0.12, 0.15, 0.18, 0.22, 0.25}; - public static double[] attackSpeed = new double[]{-0.02, -0.04, -0.06, -0.08, -0.1, -0.12, -0.14, -0.16}; - - public static double[] speedBonus = new double[]{0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4}; - - public ItemSentientArmour(EntityEquipmentSlot armorType) { - super(ItemArmor.ArmorMaterial.IRON, 0, armorType); - setUnlocalizedName(BloodMagic.MODID + ".sentientArmour."); - setMaxDamage(250); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { - if (this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_CHEST || this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_HELMET || this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_BOOTS) { - switch (this.getCurrentType(stack)) { - case DEFAULT: - return "bloodmagic:models/armor/sentientArmour_layer_1.png"; - case CORROSIVE: - return "bloodmagic:models/armor/sentientArmour_corrosive_layer_1.png"; - case VENGEFUL: - return "bloodmagic:models/armor/sentientArmour_vengeful_layer_1.png"; - case DESTRUCTIVE: - return "bloodmagic:models/armor/sentientArmour_destructive_layer_1.png"; - case STEADFAST: - return "bloodmagic:models/armor/sentientArmour_steadfast_layer_1.png"; - } - return "bloodmagic:models/armor/sentientArmour_layer_1.png"; - } - - if (this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_LEGGINGS) { - switch (this.getCurrentType(stack)) { - case DEFAULT: - return "bloodmagic:models/armor/sentientArmour_layer_2.png"; - case CORROSIVE: - return "bloodmagic:models/armor/sentientArmour_corrosive_layer_2.png"; - case VENGEFUL: - return "bloodmagic:models/armor/sentientArmour_vengeful_layer_2.png"; - case DESTRUCTIVE: - return "bloodmagic:models/armor/sentientArmour_destructive_layer_2.png"; - case STEADFAST: - return "bloodmagic:models/armor/sentientArmour_steadfast_layer_2.png"; - } - return "bloodmagic:models/armor/sentientArmour_layer_1.png"; - } else { - return null; - } - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - if (this.armorType == EntityEquipmentSlot.CHEST) { - EnumDemonWillType type = this.getCurrentType(stack); - switch (type) { - case CORROSIVE: - if (player.isPotionActive(MobEffects.POISON)) { - player.removeActivePotionEffect(MobEffects.POISON); - } - if (player.isPotionActive(MobEffects.WITHER)) { - player.removeActivePotionEffect(MobEffects.WITHER); - } - break; - default: - } - } - } - - public void onPlayerAttacked(ItemStack stack, DamageSource source, EntityPlayer attackedPlayer) { - if (source.getTrueSource() instanceof EntityLivingBase) { - EntityLivingBase attacker = (EntityLivingBase) source.getTrueSource(); - EnumDemonWillType type = this.getCurrentType(stack); - switch (type) { - case CORROSIVE: - if (!source.isProjectile()) { - attacker.addPotionEffect(new PotionEffect(MobEffects.POISON, 100)); //TODO: customize duration - } - break; - case DEFAULT: - break; - case DESTRUCTIVE: - break; - case STEADFAST: - break; - case VENGEFUL: - break; - } - } - } - - @Override - public ArmorProperties getProperties(EntityLivingBase player, ItemStack stack, DamageSource source, double damage, int slot) { - double armourReduction = 0.0; - double damageAmount = 0.25; - - if (this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_BOOTS || this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_HELMET) { - damageAmount = 3d / 20d * 0.6; - } else if (this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_LEGGINGS) { - damageAmount = 6d / 20d * 0.6; - } else if (this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_CHEST) { - damageAmount = 0.64; - } - - double armourPenetrationReduction = 0; - - int maxAbsorption = 100000; - - if (source.equals(DamageSource.DROWN)) { - return new ArmorProperties(-1, 0, 0); - } - - if (source.equals(DamageSource.OUT_OF_WORLD)) { - return new ArmorProperties(-1, 0, 0); - } - - if (this == RegistrarBloodMagicItems.SENTIENT_ARMOUR_CHEST) { - armourReduction = 0.24 / 0.64; // This values puts it at iron level - - ItemStack helmet = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - ItemStack leggings = player.getItemStackFromSlot(EntityEquipmentSlot.LEGS); - ItemStack boots = player.getItemStackFromSlot(EntityEquipmentSlot.FEET); - - if (helmet.isEmpty() || leggings.isEmpty() || boots.isEmpty()) { - damageAmount *= (armourReduction); - - return new ArmorProperties(-1, damageAmount, maxAbsorption); - } - - if (helmet.getItem() instanceof ItemSentientArmour && leggings.getItem() instanceof ItemSentientArmour && boots.getItem() instanceof ItemSentientArmour) { - double remainder = 1; // Multiply this number by the armour upgrades for protection - remainder *= (1 - this.getArmourModifier(stack)); - - armourReduction = armourReduction + (1 - remainder) * (1 - armourReduction); - damageAmount *= (armourReduction); - - if (source.isUnblockable()) { - return new ArmorProperties(-1, damageAmount * armourPenetrationReduction, maxAbsorption); - } - - return new ArmorProperties(-1, damageAmount, maxAbsorption); - } - } else { - if (source.isUnblockable()) { - return new ArmorProperties(-1, damageAmount * armourPenetrationReduction, maxAbsorption); - } - - return new ArmorProperties(-1, damageAmount, maxAbsorption); - } - - return new ArmorProperties(-1, 0, 0); - } - - @Override - public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { - if (armor.getItem() == RegistrarBloodMagicItems.SENTIENT_ARMOUR_HELMET) { - return 3; - } - - if (armor.getItem() == RegistrarBloodMagicItems.SENTIENT_ARMOUR_CHEST) { - return 8; - } - - if (armor.getItem() == RegistrarBloodMagicItems.SENTIENT_ARMOUR_LEGGINGS) { - return 6; - } - - if (armor.getItem() == RegistrarBloodMagicItems.SENTIENT_ARMOUR_BOOTS) { - return 3; - } - - return 5; - } - - @Override - public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) { - if (entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entity; - - EnumDemonWillType type = getCurrentType(stack); - - double willRequired = this.getCostModifier(stack) * damage; - double willLeft = PlayerDemonWillHandler.getTotalDemonWill(type, player); - if (willLeft >= willRequired && canSustainArmour(type, willLeft)) { - this.setAbilitiesOfArmour(type, willLeft - willRequired, stack); - PlayerDemonWillHandler.consumeDemonWill(type, player, willRequired); - } else { - this.revertArmour(player, stack); - } - } - } - - public double getCostModifier(ItemStack stack) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getDouble("costModifier"); - } - - public void setCostModifier(ItemStack stack, double modifier) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble("costModifier", modifier); - } - - public double getArmourModifier(ItemStack stack) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getDouble("armourModifier"); - } - - public void setArmourModifier(ItemStack stack, double modifier) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble("armourModifier", modifier); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + names[3 - armorType.getIndex()]; - } - - public void revertArmour(EntityPlayer player, ItemStack itemStack) { - ItemStack stack = this.getContainedArmourStack(itemStack); - player.setItemStackToSlot(armorType, stack); - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return stack -> { - EnumDemonWillType type = ((ItemSentientArmour) RegistrarBloodMagicItems.SENTIENT_ARMOUR_HELMET).getCurrentType(stack); - String additional = "_" + type.getName().toLowerCase(); - if (stack.getItem() == RegistrarBloodMagicItems.SENTIENT_ARMOUR_HELMET) - return new ModelResourceLocation(getCustomLocation(), "armour=head" + additional); - else if (stack.getItem() == RegistrarBloodMagicItems.SENTIENT_ARMOUR_CHEST) - return new ModelResourceLocation(getCustomLocation(), "armour=body" + additional); - else if (stack.getItem() == RegistrarBloodMagicItems.SENTIENT_ARMOUR_LEGGINGS) - return new ModelResourceLocation(getCustomLocation(), "armour=leg" + additional); - else - return new ModelResourceLocation(getCustomLocation(), "armour=feet" + additional); - }; - } - - @Override - public ResourceLocation getCustomLocation() { - return new ResourceLocation(BloodMagic.MODID, "sentient_armour"); - } - - @Override - public void gatherVariants(Consumer variants) { - for (EnumDemonWillType type : EnumDemonWillType.values()) { - String additional = "_" + type.getName().toLowerCase(); - - variants.accept("armour=head" + additional); - variants.accept("armour=body" + additional); - variants.accept("armour=leg" + additional); - variants.accept("armour=feet" + additional); - } - } - - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { - Multimap multimap = HashMultimap.create(); - if (slot == EntityEquipmentSlot.CHEST) { - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 318145), "Armor modifier", this.getHealthBonus(stack), 0)); - multimap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getName(), new AttributeModifier(new UUID(0, 8145), "Armor modifier", this.getKnockbackResistance(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 94021), "Armor modifier", this.getSpeedBoost(stack), 2)); - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(new UUID(0, 96721), "Armor modifier", this.getDamageBoost(stack), 2)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(new UUID(0, 73245), "Armor modifier", this.getAttackSpeedBoost(stack), 2)); - } - return multimap; - } - - public void setContainedArmourStack(ItemStack newArmour, ItemStack previousArmour) { - if (newArmour == null || previousArmour == null) { - return; - } - - NBTTagCompound tag = new NBTTagCompound(); - previousArmour.writeToNBT(tag); - - NBTTagCompound omegaTag = newArmour.getTagCompound(); - if (omegaTag == null) { - omegaTag = new NBTTagCompound(); - newArmour.setTagCompound(omegaTag); - } - - omegaTag.setTag("armour", tag); - Map enchantmentMap = EnchantmentHelper.getEnchantments(previousArmour); - EnchantmentHelper.setEnchantments(enchantmentMap, newArmour); - } - - public ItemStack getContainedArmourStack(ItemStack newArmour) { - NBTTagCompound omegaTag = newArmour.getTagCompound(); - if (omegaTag == null) { - return null; - } - - NBTTagCompound tag = omegaTag.getCompoundTag("armour"); - return new ItemStack(tag); - } - - public ItemStack getSubstituteStack(EnumDemonWillType type, double will, ItemStack previousArmour) { - ItemStack newArmour = new ItemStack(this); - - this.setContainedArmourStack(newArmour, previousArmour); - this.setAbilitiesOfArmour(type, will, newArmour); - - return newArmour; - } - - @Override - public EnumDemonWillType getCurrentType(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - return EnumDemonWillType.DEFAULT; - } - - return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - } - - public void setCurrentType(EnumDemonWillType type, ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - } - - public void setAbilitiesOfArmour(EnumDemonWillType type, double willValue, ItemStack armourStack) { - int willBracket = getWillBracket(willValue); - if (willBracket >= 0) { - double recurringCost = consumptionPerHit[willBracket]; - - this.setCostModifier(armourStack, recurringCost); - this.setCurrentType(type, armourStack); - - if (this.armorType == EntityEquipmentSlot.CHEST) { - this.setArmourModifier(armourStack, getArmourModifier(type, willBracket)); - this.setHealthBonus(armourStack, this.getHealthModifier(type, willBracket)); - this.setKnockbackResistance(armourStack, getKnockbackModifier(type, willBracket)); - this.setSpeedBoost(armourStack, getSpeedModifier(type, willBracket)); - this.setDamageBoost(armourStack, getDamageModifier(type, willBracket)); - this.setAttackSpeedBoost(armourStack, getAttackSpeedModifier(type, willBracket)); - } - } - } - - public double getArmourModifier(EnumDemonWillType type, int willBracket) { - switch (type) { - case STEADFAST: - return steadfastProtectionLevel[willBracket]; - default: - return extraProtectionLevel[willBracket]; - } - } - - public double getHealthModifier(EnumDemonWillType type, int willBracket) { - switch (type) { - case STEADFAST: - //return healthBonus[willBracket]; - default: - return 0; - } - } - - public double getKnockbackModifier(EnumDemonWillType type, int willBracket) { - switch (type) { - case STEADFAST: - return knockbackBonus[willBracket]; - default: - return 0; - } - } - - public double getSpeedModifier(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return speedBonus[willBracket]; - default: - return 0; - } - } - - public double getDamageModifier(EnumDemonWillType type, int willBracket) { - switch (type) { - case DESTRUCTIVE: - return damageBoost[willBracket]; - default: - return 0; - } - } - - public double getAttackSpeedModifier(EnumDemonWillType type, int willBracket) { - switch (type) { - case DESTRUCTIVE: - return attackSpeed[willBracket]; - default: - return 0; - } - } - - public double getHealthBonus(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); - } - - public void setHealthBonus(ItemStack stack, double hp) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); - } - - public double getKnockbackResistance(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble("knockback"); - } - - public void setKnockbackResistance(ItemStack stack, double kb) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble("knockback", kb); - } - - public double getSpeedBoost(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble("speed"); - } - - public void setSpeedBoost(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble("speed", speed); - } - - public double getDamageBoost(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble("damage"); - } - - public void setDamageBoost(ItemStack stack, double damage) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble("damage", damage); - } - - public double getAttackSpeedBoost(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble("attackSpeed"); - } - - public void setAttackSpeedBoost(ItemStack stack, double attackSpeed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble("attackSpeed", attackSpeed); - } - - public static void revertAllArmour(EntityPlayer player) { - NonNullList armourInventory = player.inventory.armorInventory; - for (ItemStack stack : armourInventory) { - if (stack != null && stack.getItem() instanceof ItemSentientArmour) { - ((ItemSentientArmour) stack.getItem()).revertArmour(player, stack); - } - } - } - - public static boolean convertPlayerArmour(EnumDemonWillType type, double will, EntityPlayer player) { - if (!canSustainArmour(type, will)) { - return false; - } - - ItemStack helmetStack = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - ItemStack leggingsStack = player.getItemStackFromSlot(EntityEquipmentSlot.LEGS); - ItemStack bootsStack = player.getItemStackFromSlot(EntityEquipmentSlot.FEET); - - { - ItemStack omegaHelmetStack = ((ItemSentientArmour) RegistrarBloodMagicItems.SENTIENT_ARMOUR_HELMET).getSubstituteStack(type, will, helmetStack); - ItemStack omegaChestStack = ((ItemSentientArmour) RegistrarBloodMagicItems.SENTIENT_ARMOUR_CHEST).getSubstituteStack(type, will, chestStack); - ItemStack omegaLeggingsStack = ((ItemSentientArmour) RegistrarBloodMagicItems.SENTIENT_ARMOUR_LEGGINGS).getSubstituteStack(type, will, leggingsStack); - ItemStack omegaBootsStack = ((ItemSentientArmour) RegistrarBloodMagicItems.SENTIENT_ARMOUR_BOOTS).getSubstituteStack(type, will, bootsStack); - - player.setItemStackToSlot(EntityEquipmentSlot.HEAD, omegaHelmetStack); - player.setItemStackToSlot(EntityEquipmentSlot.CHEST, omegaChestStack); - player.setItemStackToSlot(EntityEquipmentSlot.LEGS, omegaLeggingsStack); - player.setItemStackToSlot(EntityEquipmentSlot.FEET, omegaBootsStack); - - return true; - } - } - - public static boolean canSustainArmour(EnumDemonWillType type, double willValue) { - return getWillBracket(willValue) >= 0; - } - - public static int getWillBracket(double will) { - int bracket = -1; - - for (int i = 0; i < willBracket.length; i++) { - if (will >= willBracket[i]) { - bracket = i; - } - } - - return bracket; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockAlchemyTable.java deleted file mode 100644 index 3a42a40e..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockAlchemyTable.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.bloodmagic.item.block; - -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.tile.TileAlchemyTable; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class ItemBlockAlchemyTable extends ItemBlock implements IVariantProvider { - public ItemBlockAlchemyTable(Block block) { - super(block); - } - - @Override - public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) { - float yaw = player.rotationYaw; - EnumFacing direction = EnumFacing.fromAngle(yaw); - - if (direction.getFrontOffsetY() != 0) { - return false; - } - - if (!world.isAirBlock(pos.offset(direction))) { - return false; - } - -// newState = block.getDefaultState().withProperty(BlockAlchemyTable.DIRECTION, direction).withProperty(BlockAlchemyTable.INVISIBLE, true); - - if (!world.setBlockState(pos, newState, 3)) { - return false; - } - - if (!world.setBlockState(pos.offset(direction), newState, 3)) { - return false; - } - - IBlockState state = world.getBlockState(pos); - if (state.getBlock() == this.block) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileAlchemyTable) { - ((TileAlchemyTable) tile).setInitialTableParameters(direction, false, pos.offset(direction)); - } - - TileEntity slaveTile = world.getTileEntity(pos.offset(direction)); - if (slaveTile instanceof TileAlchemyTable) { - ((TileAlchemyTable) slaveTile).setInitialTableParameters(direction, true, pos); - } - - setTileEntityNBT(world, player, pos, stack); - this.block.onBlockPlacedBy(world, pos, state, player, stack); - } - - return true; - } - - @Override - public void gatherVariants(Int2ObjectMap variants) { - variants.put(0, "inventory"); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java deleted file mode 100644 index f614ed34..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java +++ /dev/null @@ -1,78 +0,0 @@ -package WayofTime.bloodmagic.item.block; - -import WayofTime.bloodmagic.block.BlockBloodTank; -import WayofTime.bloodmagic.tile.TileBloodTank; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.block.Block; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.templates.FluidHandlerItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; - -public class ItemBlockBloodTank extends ItemBlock { - public ItemBlockBloodTank(Block block) { - super(block); - - setHasSubtypes(true); - } - - @Override - public int getMetadata(int meta) { - return meta; - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stack.getTagCompound()); - if (fluidStack != null) { - return super.getItemStackDisplayName(stack) + " " + TextHelper.localizeEffect("tooltip.bloodmagic.tier", stack.getItemDamage() + 1) + " (" + fluidStack.getLocalizedName() + ")"; - } else { - return super.getItemStackDisplayName(stack) + " " + TextHelper.localizeEffect("tooltip.bloodmagic.tier", stack.getItemDamage() + 1); - } - } - - @Override - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.tier", stack.getItemDamage() + 1)); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.fluid.capacity", getCapacity(stack))); - if (stack.hasTagCompound() && stack.getTagCompound().hasKey("Fluid")) { - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stack.getTagCompound().getCompoundTag("Fluid")); - if (fluidStack != null) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.fluid.type", fluidStack.getLocalizedName())); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.fluid.amount", fluidStack.amount, getCapacity(stack))); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (int i = 0; i < TileBloodTank.CAPACITIES.length; i++) - list.add(new ItemStack(this, 1, i)); - } - - public int getCapacity(ItemStack container) { - int meta = MathHelper.clamp(container.getItemDamage(), 0, TileBloodTank.CAPACITIES.length - 1); - return !container.isEmpty() && Block.getBlockFromItem(container.getItem()) instanceof BlockBloodTank ? TileBloodTank.CAPACITIES[meta] * Fluid.BUCKET_VOLUME : 0; - } - - @Override - public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) { - return new FluidHandlerItemStack(stack, getCapacity(stack)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java deleted file mode 100644 index 75ab9457..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.bloodmagic.item.block; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.tile.TileDemonCrystal; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.Locale; - -public class ItemBlockDemonCrystal extends ItemBlock { - public ItemBlockDemonCrystal(Block block) { - super(block); - setHasSubtypes(true); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + EnumDemonWillType.values()[stack.getItemDamage()].toString().toLowerCase(Locale.ENGLISH); - } - - @Override - public int getMetadata(int meta) { - return meta; - } - - @Override - public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) { - if (super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ, newState)) { - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileDemonCrystal) { - ((TileDemonCrystal) tile).setPlacement(side); - } - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockMimic.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockMimic.java deleted file mode 100644 index 7963d0f8..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockMimic.java +++ /dev/null @@ -1,144 +0,0 @@ -package WayofTime.bloodmagic.item.block; - -import net.minecraft.block.Block; -import net.minecraft.block.SoundType; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityChest; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import WayofTime.bloodmagic.block.BlockMimic; -import WayofTime.bloodmagic.tile.TileMimic; -import WayofTime.bloodmagic.block.base.BlockEnum; -import WayofTime.bloodmagic.item.block.base.ItemBlockEnum; - -import WayofTime.bloodmagic.util.ChatUtil; - -public class ItemBlockMimic extends ItemBlockEnum -{ - public ItemBlockMimic(BlockEnum block) - { - super(block); - setHasSubtypes(true); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) - { - ItemStack stack = player.getHeldItem(hand); - - //If not sneaking, do normal item use - if (!player.isSneaking()) - { - return super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); - } - - //IF sneaking and player has permission, replace the targeted block - if (player.canPlayerEdit(pos, facing, stack)) - { - //Store information about the block being replaced and its appropriate itemstack - IBlockState replacedBlockstate = world.getBlockState(pos); - Block replacedBlock = replacedBlockstate.getBlock(); - ItemStack replacedStack = replacedBlock.getItem(world, pos, replacedBlockstate); - - //Get the state for the mimic - IBlockState mimicBlockstate = this.getBlock().getStateFromMeta(stack.getMetadata()); - - - //Check if the block can be replaced - - if (!canReplaceBlock(world, pos, replacedBlockstate)) - { - return super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); - } - - //Check if the tile entity, if any, can be replaced - TileEntity tileReplaced = world.getTileEntity(pos); - if (!canReplaceTile(tileReplaced)) - { - return EnumActionResult.FAIL; - } - - //If tile can be replaced, store info about the tile - NBTTagCompound tileTag = getTagFromTileEntity(tileReplaced); - if (tileReplaced != null) - { - NBTTagCompound voidTag = new NBTTagCompound(); - voidTag.setInteger("x", pos.getX()); - voidTag.setInteger("y", pos.getY()); - voidTag.setInteger("z", pos.getZ()); - tileReplaced.readFromNBT(voidTag); - } - - //Remove one item from stack - stack.shrink(1); - - - //Replace the block - world.setBlockState(pos, mimicBlockstate, 3); - //Make placing sound - SoundType soundtype = this.block.getSoundType(); - world.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); - - //Replace the tile entity - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileMimic) - { - TileMimic mimic = (TileMimic) tile; - mimic.tileTag = tileTag; - mimic.setReplacedState(replacedBlockstate); - mimic.setInventorySlotContents(0, replacedStack); - mimic.refreshTileEntity(); - - if (player.capabilities.isCreativeMode) - { - mimic.dropItemsOnBreak = false; - } - } - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - - } - - public boolean canReplaceTile(TileEntity tile) - { - if (tile instanceof TileEntityChest) - { - return true; - } - - return tile == null; - } - - public boolean canReplaceBlock(World world, BlockPos pos, IBlockState state) { - return state.getBlockHardness(world, pos) != -1.0F; - } - - public NBTTagCompound getTagFromTileEntity(TileEntity tile) - { - NBTTagCompound tag = new NBTTagCompound(); - - if (tile != null) - { - return tile.writeToNBT(tag); - } - - return tag; - } - - @Override - public int getMetadata(int meta) - { - return meta; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockEnum.java b/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockEnum.java deleted file mode 100644 index 25f7375d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockEnum.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.item.block.base; - -import WayofTime.bloodmagic.block.base.BlockEnum; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IStringSerializable; -import net.minecraft.util.math.MathHelper; - -public class ItemBlockEnum & IStringSerializable> extends ItemBlock { - - public ItemBlockEnum(BlockEnum block) { - super(block); - - if (block.getTypes().length > 1) - setHasSubtypes(true); - } - - @SuppressWarnings("unchecked") - @Override - public BlockEnum getBlock() { - return (BlockEnum) super.getBlock(); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return getBlock().getUnlocalizedName() + getBlock().getTypes()[MathHelper.clamp(stack.getItemDamage(), 0, getBlock().getTypes().length - 1)].getName(); - } - - @Override - public int getMetadata(int damage) { - return damage; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockInteger.java b/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockInteger.java deleted file mode 100644 index 038c4e22..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/block/base/ItemBlockInteger.java +++ /dev/null @@ -1,31 +0,0 @@ -package WayofTime.bloodmagic.item.block.base; - -import WayofTime.bloodmagic.block.base.BlockInteger; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class ItemBlockInteger extends ItemBlock { - - public ItemBlockInteger(BlockInteger block) { - super(block); - - if (block.getMaxMeta() > 1) - setHasSubtypes(true); - } - - @SuppressWarnings("unchecked") - @Override - public BlockInteger getBlock() { - return (BlockInteger) super.getBlock(); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return getBlock().getUnlocalizedName() + "." + stack.getItemDamage(); - } - - @Override - public int getMetadata(int damage) { - return damage; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSacrifice.java deleted file mode 100644 index 31dfe5b2..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSacrifice.java +++ /dev/null @@ -1,100 +0,0 @@ -package WayofTime.bloodmagic.item.gear; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.altar.IAltarManipulator; -import WayofTime.bloodmagic.altar.IBloodAltar; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.iface.IItemLPContainer; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.ItemHelper.LPContainer; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; -import java.util.List; - -public class ItemPackSacrifice extends ItemArmor implements IAltarManipulator, IItemLPContainer, IVariantProvider { - public final int CAPACITY = 10000; // Max LP storage - - public ItemPackSacrifice() { - super(ArmorMaterial.CHAIN, 0, EntityEquipmentSlot.CHEST); - - setUnlocalizedName(BloodMagic.MODID + ".pack.sacrifice"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - RayTraceResult rayTrace = this.rayTrace(world, player, false); - - if (rayTrace == null) { - return super.onItemRightClick(world, player, EnumHand.MAIN_HAND); - } else { - if (rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { - TileEntity tile = world.getTileEntity(rayTrace.getBlockPos()); - - if (!(tile instanceof IBloodAltar)) - return super.onItemRightClick(world, player, EnumHand.MAIN_HAND); - - LPContainer.tryAndFillAltar((IBloodAltar) tile, stack, world, rayTrace.getBlockPos()); - } - } - - return ActionResult.newResult(EnumActionResult.FAIL, stack); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - if (getStoredLP(stack) > CAPACITY) - setStoredLP(stack, CAPACITY); - } - - @Override - public void addInformation(ItemStack stack, World world, List list, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - list.add(TextHelper.localize("tooltip.bloodmagic.pack.sacrifice.desc")); - list.add(TextHelper.localize("tooltip.bloodmagic.pack.stored", getStoredLP(stack))); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=normal"); - } - - // IFillable - - @Override - public int getCapacity() { - return this.CAPACITY; - } - - @Override - public int getStoredLP(ItemStack stack) { - return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getInteger(Constants.NBT.STORED_LP) : 0; - } - - @Override - public void setStoredLP(ItemStack stack, int lp) { - if (stack != null) { - NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.STORED_LP, lp); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java deleted file mode 100644 index a0c08a87..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/gear/ItemPackSelfSacrifice.java +++ /dev/null @@ -1,125 +0,0 @@ -package WayofTime.bloodmagic.item.gear; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.altar.IAltarManipulator; -import WayofTime.bloodmagic.altar.IBloodAltar; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.iface.IItemLPContainer; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.ItemHelper.LPContainer; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; -import java.util.List; - -public class ItemPackSelfSacrifice extends ItemArmor implements IAltarManipulator, IItemLPContainer, IVariantProvider { - /** - * How much LP per half heart - */ - public final int CONVERSION = 100; - /** - * Max LP storage - */ - public final int CAPACITY = 10000; - /** - * How often the pack syphons - */ - public final int INTERVAL = 20; - /** - * How much health is required for the pack to syphon (0 - 1) - */ - public final float HEALTHREQ = 0.5f; - - public ItemPackSelfSacrifice() { - super(ArmorMaterial.CHAIN, 0, EntityEquipmentSlot.CHEST); - - setUnlocalizedName(BloodMagic.MODID + ".pack.selfSacrifice"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - RayTraceResult position = this.rayTrace(world, player, false); - - if (position == null) { - return super.onItemRightClick(world, player, EnumHand.MAIN_HAND); - } else { - if (position.typeOfHit == RayTraceResult.Type.BLOCK) { - TileEntity tile = world.getTileEntity(position.getBlockPos()); - - if (!(tile instanceof IBloodAltar)) - return super.onItemRightClick(world, player, EnumHand.MAIN_HAND); - - LPContainer.tryAndFillAltar((IBloodAltar) tile, stack, world, position.getBlockPos()); - } - } - - return ActionResult.newResult(EnumActionResult.FAIL, stack); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - if (world.isRemote || player.capabilities.isCreativeMode) - return; - - boolean shouldSyphon = player.getHealth() / player.getMaxHealth() > HEALTHREQ && getStoredLP(stack) < CAPACITY; - - if (shouldSyphon & world.getTotalWorldTime() % INTERVAL == 0) { - NetworkHelper.getSoulNetwork(player).hurtPlayer(player, 1.0F); - LPContainer.addLPToItem(stack, CONVERSION, CAPACITY); - } - - if (getStoredLP(stack) > CAPACITY) - setStoredLP(stack, CAPACITY); - } - - @Override - public void addInformation(ItemStack stack, World world, List list, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - list.add(TextHelper.localize("tooltip.bloodmagic.pack.selfSacrifice.desc")); - list.add(TextHelper.localize("tooltip.bloodmagic.pack.stored", getStoredLP(stack))); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=normal"); - } - - // IFillable - - @Override - public int getCapacity() { - return this.CAPACITY; - } - - @Override - public int getStoredLP(ItemStack stack) { - return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getInteger(Constants.NBT.STORED_LP) : 0; - } - - @Override - public void setStoredLP(ItemStack stack, int lp) { - if (stack != null) { - NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.STORED_LP, lp); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/inventory/ContainerHolding.java b/src/main/java/WayofTime/bloodmagic/item/inventory/ContainerHolding.java deleted file mode 100644 index ed9d22cf..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/inventory/ContainerHolding.java +++ /dev/null @@ -1,153 +0,0 @@ -package WayofTime.bloodmagic.item.inventory; - -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.FMLCommonHandler; - -public class ContainerHolding extends Container { - public final InventoryHolding inventoryHolding; - private final int PLAYER_INVENTORY_ROWS = 3; - private final int PLAYER_INVENTORY_COLUMNS = 9; - private final EntityPlayer player; - - public ContainerHolding(EntityPlayer player, InventoryHolding inventoryHolding) { - this.player = player; - this.inventoryHolding = inventoryHolding; - int currentSlotHeldIn = player.inventory.currentItem; - - for (int columnIndex = 0; columnIndex < ItemSigilHolding.inventorySize; ++columnIndex) { - this.addSlotToContainer(new SlotHolding(this, inventoryHolding, player, columnIndex, 8 + columnIndex * 36, 17)); - } - - for (int rowIndex = 0; rowIndex < PLAYER_INVENTORY_ROWS; ++rowIndex) { - for (int columnIndex = 0; columnIndex < PLAYER_INVENTORY_COLUMNS; ++columnIndex) { - this.addSlotToContainer(new Slot(player.inventory, columnIndex + rowIndex * 9 + 9, 8 + columnIndex * 18, 41 + rowIndex * 18)); - } - } - - for (int actionBarIndex = 0; actionBarIndex < PLAYER_INVENTORY_COLUMNS; ++actionBarIndex) { - if (actionBarIndex == currentSlotHeldIn) { - this.addSlotToContainer(new SlotDisabled(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 99)); - } else { - this.addSlotToContainer(new Slot(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 99)); - } - } - } - - @Override - public boolean canInteractWith(EntityPlayer entityPlayer) { - return true; - } - - @Override - public void onContainerClosed(EntityPlayer entityPlayer) { - super.onContainerClosed(entityPlayer); - - if (!entityPlayer.getEntityWorld().isRemote) { - saveInventory(entityPlayer); - } - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - - if (!player.getEntityWorld().isRemote) { - saveInventory(player); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotIndex) { - ItemStack stack = ItemStack.EMPTY; - Slot slotObject = inventorySlots.get(slotIndex); - int slots = inventorySlots.size(); - - if (slotObject != null && slotObject.getHasStack()) { - ItemStack stackInSlot = slotObject.getStack(); - stack = stackInSlot.copy(); - - if (stack.getItem() instanceof ISigil) { - if (slotIndex < ItemSigilHolding.inventorySize) { - if (!this.mergeItemStack(stackInSlot, ItemSigilHolding.inventorySize, slots, false)) { - return ItemStack.EMPTY; - } - } else if (!this.mergeItemStack(stackInSlot, 0, ItemSigilHolding.inventorySize, false)) { - return ItemStack.EMPTY; - } - } else if (stack.getItem() instanceof ItemSigilHolding) { - if (slotIndex < ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS)) { - if (!this.mergeItemStack(stackInSlot, ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS), inventorySlots.size(), false)) { - return ItemStack.EMPTY; - } - } else if (!this.mergeItemStack(stackInSlot, ItemSigilHolding.inventorySize, ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS), false)) { - return ItemStack.EMPTY; - } - } - - if (stackInSlot.isEmpty()) { - slotObject.putStack(ItemStack.EMPTY); - } else { - slotObject.onSlotChanged(); - } - - if (stackInSlot.getCount() == stack.getCount()) { - return ItemStack.EMPTY; - } - - slotObject.onTake(player, stackInSlot); - } - - return stack; - } - - public void saveInventory(EntityPlayer entityPlayer) { - inventoryHolding.onGuiSaved(entityPlayer); - } - - private class SlotHolding extends Slot { - private final EntityPlayer player; - private ContainerHolding containerHolding; - - public SlotHolding(ContainerHolding containerHolding, IInventory inventory, EntityPlayer player, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - this.player = player; - this.containerHolding = containerHolding; - } - - @Override - public void onSlotChanged() { - super.onSlotChanged(); - - if (FMLCommonHandler.instance().getEffectiveSide().isServer()) { - containerHolding.saveInventory(player); - } - } - - @Override - public boolean isItemValid(ItemStack itemStack) { - return itemStack.getItem() instanceof ISigil && !(itemStack.getItem() instanceof ItemSigilHolding); - } - } - - private class SlotDisabled extends Slot { - public SlotDisabled(IInventory inventory, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - } - - @Override - public boolean isItemValid(ItemStack itemStack) { - return false; - } - - @Override - public boolean canTakeStack(EntityPlayer player) { - return false; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/inventory/InventoryHolding.java b/src/main/java/WayofTime/bloodmagic/item/inventory/InventoryHolding.java deleted file mode 100644 index 133d341e..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/inventory/InventoryHolding.java +++ /dev/null @@ -1,69 +0,0 @@ -package WayofTime.bloodmagic.item.inventory; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import java.util.UUID; - -public class InventoryHolding extends ItemInventory { - protected ItemStack[] inventory; - - public InventoryHolding(ItemStack itemStack) { - super(itemStack, ItemSigilHolding.inventorySize, "SigilOfHolding"); - } - - public void onGuiSaved(EntityPlayer entityPlayer) { - masterStack = findParentStack(entityPlayer); - - if (!masterStack.isEmpty()) { - save(); - } - } - - public ItemStack findParentStack(EntityPlayer entityPlayer) { - if (Utils.hasUUID(masterStack)) { - UUID parentStackUUID = new UUID(masterStack.getTagCompound().getLong(Constants.NBT.MOST_SIG), masterStack.getTagCompound().getLong(Constants.NBT.LEAST_SIG)); - for (int i = 0; i < entityPlayer.inventory.getSizeInventory(); i++) { - ItemStack itemStack = entityPlayer.inventory.getStackInSlot(i); - - if (!itemStack.isEmpty() && Utils.hasUUID(itemStack)) { - if (itemStack.getTagCompound().getLong(Constants.NBT.MOST_SIG) == parentStackUUID.getMostSignificantBits() && itemStack.getTagCompound().getLong(Constants.NBT.LEAST_SIG) == parentStackUUID.getLeastSignificantBits()) { - return itemStack; - } - } - } - } - - return ItemStack.EMPTY; - } - - public void save() { - NBTTagCompound nbtTagCompound = masterStack.getTagCompound(); - - if (nbtTagCompound == null) { - nbtTagCompound = new NBTTagCompound(); - - UUID uuid = UUID.randomUUID(); - nbtTagCompound.setLong(Constants.NBT.MOST_SIG, uuid.getMostSignificantBits()); - nbtTagCompound.setLong(Constants.NBT.LEAST_SIG, uuid.getLeastSignificantBits()); - } - - writeToNBT(nbtTagCompound); - masterStack.setTagCompound(nbtTagCompound); - } - - @Override - public boolean isItemValidForSlot(int slotIndex, ItemStack itemStack) { - return itemStack.getItem() instanceof ISigil && !(itemStack.getItem() instanceof ItemSigilHolding); - } - - @Override - public int getInventoryStackLimit() { - return 1; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java b/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java deleted file mode 100644 index 0a08e330..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/inventory/ItemInventory.java +++ /dev/null @@ -1,224 +0,0 @@ -package WayofTime.bloodmagic.item.inventory; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.NonNullList; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; - -public class ItemInventory implements IInventory { - protected int[] syncedSlots = new int[0]; - protected ItemStack masterStack; - private NonNullList inventory; - private int size; - private String name; - - public ItemInventory(ItemStack masterStack, int size, String name) { - this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); - this.size = size; - this.name = name; - this.masterStack = masterStack; - - if (!masterStack.isEmpty()) - this.readFromStack(masterStack); - } - - public void initializeInventory(ItemStack masterStack) { - this.masterStack = masterStack; - this.clear(); - this.readFromStack(masterStack); - } - - private boolean isSyncedSlot(int slot) { - for (int s : this.syncedSlots) { - if (s == slot) { - return true; - } - } - return false; - } - - public void readFromNBT(NBTTagCompound tagCompound) { - NBTTagList tags = tagCompound.getTagList(Constants.NBT.ITEMS, 10); - inventory = NonNullList.withSize(getSizeInventory(), ItemStack.EMPTY); - - for (int i = 0; i < tags.tagCount(); i++) { - if (!isSyncedSlot(i)) { - NBTTagCompound data = tags.getCompoundTagAt(i); - byte j = data.getByte(Constants.NBT.SLOT); - - if (j >= 0 && j < inventory.size()) { - inventory.set(i, new ItemStack(data)); - } - } - } - } - - public void writeToNBT(NBTTagCompound tagCompound) { - NBTTagList tags = new NBTTagList(); - - for (int i = 0; i < inventory.size(); i++) { - if ((!inventory.get(i).isEmpty()) && !isSyncedSlot(i)) { - NBTTagCompound data = new NBTTagCompound(); - data.setByte(Constants.NBT.SLOT, (byte) i); - inventory.get(i).writeToNBT(data); - tags.appendTag(data); - } - } - - tagCompound.setTag(Constants.NBT.ITEMS, tags); - } - - public void readFromStack(ItemStack masterStack) { - if (masterStack != null) { - NBTHelper.checkNBT(masterStack); - NBTTagCompound tag = masterStack.getTagCompound(); - readFromNBT(tag.getCompoundTag(Constants.NBT.ITEM_INVENTORY)); - } - } - - public void writeToStack(ItemStack masterStack) { - if (masterStack != null) { - NBTHelper.checkNBT(masterStack); - NBTTagCompound tag = masterStack.getTagCompound(); - NBTTagCompound invTag = new NBTTagCompound(); - writeToNBT(invTag); - tag.setTag(Constants.NBT.ITEM_INVENTORY, invTag); - } - } - - @Override - public int getSizeInventory() { - return size; - } - - @Override - public ItemStack getStackInSlot(int index) { - return inventory.get(index); - } - - @Override - public ItemStack decrStackSize(int index, int count) { - if (!inventory.get(index).isEmpty()) { -// if (!worldObj.isRemote) -// worldObj.markBlockForUpdate(this.pos); - - if (inventory.get(index).getCount() <= count) { - ItemStack itemStack = inventory.get(index); - inventory.set(index, ItemStack.EMPTY); - markDirty(); - return itemStack; - } - - ItemStack itemStack = inventory.get(index).splitStack(count); - if (inventory.get(index).isEmpty()) - inventory.set(index, ItemStack.EMPTY); - - markDirty(); - return itemStack; - } - - return null; - } - - @Override - public ItemStack removeStackFromSlot(int slot) { - if (!inventory.get(slot).isEmpty()) { - ItemStack itemStack = inventory.get(slot); - setInventorySlotContents(slot, ItemStack.EMPTY); - return itemStack; - } - return ItemStack.EMPTY; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) { - inventory.set(slot, stack); - if (stack.getCount() > getInventoryStackLimit()) - stack.setCount(getInventoryStackLimit()); - markDirty(); -// if (!worldObj.isRemote) -// worldObj.markBlockForUpdate(this.pos); - } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public boolean isUsableByPlayer(EntityPlayer player) { - return true; - } - - @Override - public void openInventory(EntityPlayer player) { - - } - - @Override - public void closeInventory(EntityPlayer player) { - - } - - @Override - public boolean isItemValidForSlot(int index, ItemStack stack) { - return true; - } - - @Override - public int getField(int id) { - return 0; - } - - @Override - public void setField(int id, int value) { - - } - - @Override - public int getFieldCount() { - return 0; - } - - @Override - public void clear() { - this.inventory = NonNullList.withSize(getSizeInventory(), ItemStack.EMPTY); - } - - @Override - public String getName() { - return name; - } - - @Override - public boolean hasCustomName() { - return false; - } - - @Override - public ITextComponent getDisplayName() { - return new TextComponentString(getName()); - } - - @Override - public void markDirty() { - if (masterStack != null) { - this.writeToStack(masterStack); - } - } - - @Override - public boolean isEmpty() { - return false; - } - - public boolean canInventoryBeManipulated() { - return masterStack != null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/IFluidFilterProvider.java b/src/main/java/WayofTime/bloodmagic/item/routing/IFluidFilterProvider.java deleted file mode 100644 index 66342e9c..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/routing/IFluidFilterProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.bloodmagic.item.routing; - -import WayofTime.bloodmagic.routing.IFluidFilter; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fluids.capability.IFluidHandler; - -public interface IFluidFilterProvider extends IRoutingFilterProvider { - IFluidFilter getInputFluidFilter(ItemStack stack, TileEntity tile, IFluidHandler handler); - - IFluidFilter getOutputFluidFilter(ItemStack stack, TileEntity tile, IFluidHandler handler); -} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/IItemFilterProvider.java b/src/main/java/WayofTime/bloodmagic/item/routing/IItemFilterProvider.java deleted file mode 100644 index 2f0cfe61..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/routing/IItemFilterProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.bloodmagic.item.routing; - -import WayofTime.bloodmagic.routing.IItemFilter; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.items.IItemHandler; - -public interface IItemFilterProvider extends IRoutingFilterProvider { - IItemFilter getInputItemFilter(ItemStack stack, TileEntity tile, IItemHandler handler); - - IItemFilter getOutputItemFilter(ItemStack stack, TileEntity tile, IItemHandler handler); -} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/IRoutingFilterProvider.java b/src/main/java/WayofTime/bloodmagic/item/routing/IRoutingFilterProvider.java deleted file mode 100644 index 2ae42343..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/routing/IRoutingFilterProvider.java +++ /dev/null @@ -1,14 +0,0 @@ -package WayofTime.bloodmagic.item.routing; - -import net.minecraft.item.ItemStack; - -public interface IRoutingFilterProvider { - /** - * Translates the inputed keyStack into the proper filtered key - * - * @param filterStack - * @param keyStack - * @return A new ItemStack which modifies the keyStack - */ - ItemStack getContainedStackForItem(ItemStack filterStack, ItemStack keyStack); -} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java deleted file mode 100644 index a72dfd3f..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/routing/ItemFluidRouterFilter.java +++ /dev/null @@ -1,149 +0,0 @@ -package WayofTime.bloodmagic.item.routing; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.inventory.ItemInventory; -import WayofTime.bloodmagic.routing.IFluidFilter; -import WayofTime.bloodmagic.routing.RoutingFluidFilter; -import WayofTime.bloodmagic.util.GhostItemHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.NonNullList; -import net.minecraft.world.World; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; - -public class ItemFluidRouterFilter extends Item implements IFluidFilterProvider, IVariantProvider -{ - public static String[] names = { "exact" }; - - public ItemFluidRouterFilter() - { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".fluidFilter."); - setHasSubtypes(true); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public String getUnlocalizedName(ItemStack stack) - { - return super.getUnlocalizedName(stack) + names[stack.getItemDamage()]; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) - { - if (!isInCreativeTab(creativeTab)) - return; - - for (int i = 0; i < names.length; i++) - list.add(new ItemStack(this, 1, i)); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) - { - tooltip.add(TextHelper.localize("tooltip.bloodmagic.fluidFilter." + names[stack.getItemDamage()])); - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public IFluidFilter getInputFluidFilter(ItemStack filterStack, TileEntity tile, IFluidHandler handler) - { - IFluidFilter testFilter; - - switch (filterStack.getMetadata()) - { - case 0: - testFilter = new RoutingFluidFilter(); - break; - - default: - testFilter = new RoutingFluidFilter(); - } - - List filteredList = new ArrayList<>(); - ItemInventory inv = new ItemInventory(filterStack, 9, ""); - for (int i = 0; i < inv.getSizeInventory(); i++) - { - ItemStack stack = inv.getStackInSlot(i); - if (stack.isEmpty()) - { - continue; - } - - ItemStack ghostStack = GhostItemHelper.getStackFromGhost(stack); - filteredList.add(ghostStack); - } - - testFilter.initializeFilter(filteredList, tile, handler, false); - return testFilter; - } - - @Override - public IFluidFilter getOutputFluidFilter(ItemStack filterStack, TileEntity tile, IFluidHandler handler) - { - IFluidFilter testFilter; - switch (filterStack.getMetadata()) - { - case 0: - testFilter = new RoutingFluidFilter(); - break; - - default: - testFilter = new RoutingFluidFilter(); - } - - List filteredList = new ArrayList<>(); - ItemInventory inv = new ItemInventory(filterStack, 9, ""); //TODO: Change to grab the filter from the Item later. - for (int i = 0; i < inv.getSizeInventory(); i++) - { - ItemStack stack = inv.getStackInSlot(i); - if (stack.isEmpty()) - { - continue; - } - - ItemStack ghostStack = GhostItemHelper.getStackFromGhost(stack); - if (ghostStack.isEmpty()) - { - ghostStack.setCount(Integer.MAX_VALUE); - } - - filteredList.add(ghostStack); - } - - testFilter.initializeFilter(filteredList, tile, handler, true); - return testFilter; - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) - { - variants.put(0, "type=exact"); - } - - @Override - public ItemStack getContainedStackForItem(ItemStack filterStack, ItemStack keyStack) - { - ItemStack copyStack = keyStack.copy(); - GhostItemHelper.setItemGhostAmount(copyStack, 0); - copyStack.setCount(1); - return copyStack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemNodeRouter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemNodeRouter.java deleted file mode 100644 index 7994c36b..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/routing/ItemNodeRouter.java +++ /dev/null @@ -1,195 +0,0 @@ -package WayofTime.bloodmagic.item.routing; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.iface.INodeRenderer; -import WayofTime.bloodmagic.routing.IMasterRoutingNode; -import WayofTime.bloodmagic.routing.IRoutingNode; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.LinkedList; -import java.util.List; - -public class ItemNodeRouter extends Item implements INodeRenderer, IVariantProvider { - public ItemNodeRouter() { - setUnlocalizedName(BloodMagic.MODID + ".nodeRouter"); - setMaxStackSize(1); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - NBTTagCompound tag = stack.getTagCompound(); - BlockPos coords = getBlockPos(stack); - - if (coords != null && tag != null) { - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.telepositionFocus.coords", coords.getX(), coords.getY(), coords.getZ())); - } - } - - @Override - public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote) { - return EnumActionResult.PASS; - } - - TileEntity tileHit = world.getTileEntity(pos); - - if (!(tileHit instanceof IRoutingNode)) { - // TODO: Remove contained position? - BlockPos containedPos = getBlockPos(stack); - if (!containedPos.equals(BlockPos.ORIGIN)) { - this.setBlockPos(stack, BlockPos.ORIGIN); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.remove"), true); - return EnumActionResult.FAIL; - } - return EnumActionResult.FAIL; - } - IRoutingNode node = (IRoutingNode) tileHit; - BlockPos containedPos = getBlockPos(stack); - if (containedPos.equals(BlockPos.ORIGIN)) { - this.setBlockPos(stack, pos); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.set"), true); - return EnumActionResult.SUCCESS; - } else { - TileEntity pastTile = world.getTileEntity(containedPos); - if (pastTile instanceof IRoutingNode) { - IRoutingNode pastNode = (IRoutingNode) pastTile; - if (pastNode instanceof IMasterRoutingNode) { - IMasterRoutingNode master = (IMasterRoutingNode) pastNode; - - if (!node.isMaster(master)) { - if (node.getMasterPos().equals(BlockPos.ORIGIN)) //If the node is not the master and it is receptive - { - node.connectMasterToRemainingNode(world, new LinkedList<>(), master); - master.addConnection(pos, containedPos); - master.addNodeToList(node); - node.addConnection(containedPos); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.link.master"), true); - this.setBlockPos(stack, BlockPos.ORIGIN); - return EnumActionResult.SUCCESS; - } - } else { - master.addConnection(pos, containedPos); - node.addConnection(containedPos); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.link.master"), true); - this.setBlockPos(stack, BlockPos.ORIGIN); - return EnumActionResult.SUCCESS; - } - - } else if (node instanceof IMasterRoutingNode) { - IMasterRoutingNode master = (IMasterRoutingNode) node; - - if (!pastNode.isMaster(master)) { - if (pastNode.getMasterPos().equals(BlockPos.ORIGIN)) //TODO: This is where the issue is - { - pastNode.connectMasterToRemainingNode(world, new LinkedList<>(), master); - master.addConnection(pos, containedPos); - pastNode.addConnection(pos); - master.addNodeToList(pastNode); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.link.master"), true); - this.setBlockPos(stack, BlockPos.ORIGIN); - return EnumActionResult.SUCCESS; - } - } else { - master.addConnection(pos, containedPos); - pastNode.addConnection(pos); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.link.master"), true); - this.setBlockPos(stack, BlockPos.ORIGIN); - return EnumActionResult.SUCCESS; - } - } else { - //Both nodes are not master nodes, so normal linking - if (pastNode.getMasterPos().equals(node.getMasterPos())) { - if (!pastNode.getMasterPos().equals(BlockPos.ORIGIN)) { - TileEntity testTile = world.getTileEntity(pastNode.getMasterPos()); - if (testTile instanceof IMasterRoutingNode) { - IMasterRoutingNode master = (IMasterRoutingNode) testTile; - master.addConnection(pos, containedPos); - } - } - pastNode.addConnection(pos); - node.addConnection(containedPos); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.link.master"), true); - this.setBlockPos(stack, BlockPos.ORIGIN); - return EnumActionResult.SUCCESS; - } else if (pastNode.getMasterPos().equals(BlockPos.ORIGIN)) //pastNode is not connected to a master, but node is - { - TileEntity tile = world.getTileEntity(node.getMasterPos()); - if (tile instanceof IMasterRoutingNode) { - IMasterRoutingNode master = (IMasterRoutingNode) tile; - master.addConnection(pos, containedPos); - master.addNodeToList(pastNode); - pastNode.connectMasterToRemainingNode(world, new LinkedList<>(), master); - } - pastNode.addConnection(pos); - node.addConnection(containedPos); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.link"), true); - this.setBlockPos(stack, BlockPos.ORIGIN); - return EnumActionResult.SUCCESS; - } else if (node.getMasterPos().equals(BlockPos.ORIGIN)) //node is not connected to a master, but pastNode is - { - TileEntity tile = world.getTileEntity(pastNode.getMasterPos()); - if (tile instanceof IMasterRoutingNode) { - IMasterRoutingNode master = (IMasterRoutingNode) tile; - master.addConnection(pos, containedPos); - master.addNodeToList(node); - node.connectMasterToRemainingNode(world, new LinkedList<>(), master); - } - pastNode.addConnection(pos); - node.addConnection(containedPos); - player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.routing.link"), true); - this.setBlockPos(stack, BlockPos.ORIGIN); - return EnumActionResult.SUCCESS; - } else { - this.setBlockPos(stack, BlockPos.ORIGIN); - return EnumActionResult.SUCCESS; - } - } - } - } - - return EnumActionResult.FAIL; - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=normal"); - } - - public BlockPos getBlockPos(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - return new BlockPos(stack.getTagCompound().getInteger(Constants.NBT.X_COORD), stack.getTagCompound().getInteger(Constants.NBT.Y_COORD), stack.getTagCompound().getInteger(Constants.NBT.Z_COORD)); - } - - public ItemStack setBlockPos(ItemStack stack, BlockPos pos) { - NBTHelper.checkNBT(stack); - NBTTagCompound itemTag = stack.getTagCompound(); - itemTag.setInteger(Constants.NBT.X_COORD, pos.getX()); - itemTag.setInteger(Constants.NBT.Y_COORD, pos.getY()); - itemTag.setInteger(Constants.NBT.Z_COORD, pos.getZ()); - return stack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java b/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java deleted file mode 100644 index f80cf9aa..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/routing/ItemRouterFilter.java +++ /dev/null @@ -1,171 +0,0 @@ -package WayofTime.bloodmagic.item.routing; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.inventory.ItemInventory; -import WayofTime.bloodmagic.routing.*; -import WayofTime.bloodmagic.util.GhostItemHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.NonNullList; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.items.IItemHandler; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; - -public class ItemRouterFilter extends Item implements IItemFilterProvider, IVariantProvider -{ - public static String[] names = { "exact", "ignoreNBT", "modItems", "oreDict" }; - - public ItemRouterFilter() - { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".itemFilter."); - setHasSubtypes(true); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public String getUnlocalizedName(ItemStack stack) - { - return super.getUnlocalizedName(stack) + names[stack.getItemDamage()]; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) - { - if (!isInCreativeTab(creativeTab)) - return; - - for (int i = 0; i < names.length; i++) - list.add(new ItemStack(this, 1, i)); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) - { - tooltip.add(TextHelper.localize("tooltip.bloodmagic.itemFilter." + names[stack.getItemDamage()])); - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public IItemFilter getInputItemFilter(ItemStack filterStack, TileEntity tile, IItemHandler handler) - { - IItemFilter testFilter = new TestItemFilter(); - - switch (filterStack.getMetadata()) - { - case 0: - testFilter = new TestItemFilter(); - break; - case 1: - testFilter = new IgnoreNBTItemFilter(); - break; - case 2: - testFilter = new ModIdItemFilter(); - break; - case 3: - testFilter = new OreDictItemFilter(); - break; - - default: - testFilter = new DefaultItemFilter(); - } - - List filteredList = new ArrayList<>(); - ItemInventory inv = new ItemInventory(filterStack, 9, ""); - for (int i = 0; i < inv.getSizeInventory(); i++) - { - ItemStack stack = inv.getStackInSlot(i); - if (stack.isEmpty()) - { - continue; - } - - ItemStack ghostStack = GhostItemHelper.getStackFromGhost(stack); - - filteredList.add(ghostStack); - } - - testFilter.initializeFilter(filteredList, tile, handler, false); - return testFilter; - } - - @Override - public IItemFilter getOutputItemFilter(ItemStack filterStack, TileEntity tile, IItemHandler handler) - { - IItemFilter testFilter; - - switch (filterStack.getMetadata()) - { - case 0: - testFilter = new TestItemFilter(); - break; - case 1: - testFilter = new IgnoreNBTItemFilter(); - break; - case 2: - testFilter = new ModIdItemFilter(); - break; - case 3: - testFilter = new OreDictItemFilter(); - break; - - default: - testFilter = new DefaultItemFilter(); - } - - List filteredList = new ArrayList<>(); - ItemInventory inv = new ItemInventory(filterStack, 9, ""); //TODO: Change to grab the filter from the Item later. - for (int i = 0; i < inv.getSizeInventory(); i++) - { - ItemStack stack = inv.getStackInSlot(i); - if (stack.isEmpty()) - { - continue; - } - - ItemStack ghostStack = GhostItemHelper.getStackFromGhost(stack); - if (ghostStack.isEmpty()) - { - ghostStack.setCount(Integer.MAX_VALUE); - } - - filteredList.add(ghostStack); - } - - testFilter.initializeFilter(filteredList, tile, handler, true); - return testFilter; - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) - { - variants.put(0, "type=exact"); - variants.put(1, "type=ignorenbt"); - variants.put(2, "type=moditems"); - variants.put(3, "type=oredict"); - } - - @Override - public ItemStack getContainedStackForItem(ItemStack filterStack, ItemStack keyStack) - { - ItemStack copyStack = keyStack.copy(); - GhostItemHelper.setItemGhostAmount(copyStack, 0); - copyStack.setCount(1); - return copyStack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigil.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigil.java deleted file mode 100644 index 70be6e84..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigil.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -/** - * Base class for all (static) sigils. - */ -public class ItemSigil extends Item implements IBindable, ISigil { - private int lpUsed; - - public ItemSigil(int lpUsed) { - super(); - - this.lpUsed = lpUsed; - - setMaxStackSize(1); - } - - public boolean isUnusable(ItemStack stack) { - NBTHelper.checkNBT(stack); - - return stack.getTagCompound().getBoolean(Constants.NBT.UNUSABLE); - } - - public ItemStack setUnusable(ItemStack stack, boolean unusable) { - NBTHelper.checkNBT(stack); - - stack.getTagCompound().setBoolean(Constants.NBT.UNUSABLE, unusable); - return stack; - } - - public int getLpUsed() { - return lpUsed; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java deleted file mode 100644 index da71b84d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java +++ /dev/null @@ -1,71 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.iface.ISentientSwordEffectProvider; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.*; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; - -public class ItemSigilAir extends ItemSigilBase implements ISentientSwordEffectProvider { - public ItemSigilAir() { - super("air", 50); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - boolean unusable = isUnusable(stack); - if (world.isRemote && !unusable) { - Vec3d vec = player.getLookVec(); - double wantedVelocity = 1.7; - - // TODO - Revisit after potions - if (player.isPotionActive(RegistrarBloodMagic.BOOST)) { - int amplifier = player.getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); - wantedVelocity += (1 + amplifier) * (0.35); - } - - player.motionX = vec.x * wantedVelocity; - player.motionY = vec.y * wantedVelocity; - player.motionZ = vec.z * wantedVelocity; - world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - } - - if (!world.isRemote) { - if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()); - - if (!unusable) - player.fallDistance = 0; - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean applyOnHitEffect(EnumDemonWillType type, ItemStack swordStack, ItemStack providerStack, EntityLivingBase attacker, EntityLivingBase target) { - target.addPotionEffect(new PotionEffect(MobEffects.LEVITATION, 200, 0)); - return true; - } - - @Override - public boolean providesEffectForWill(EnumDemonWillType type) { - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java deleted file mode 100644 index c62a8ca8..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java +++ /dev/null @@ -1,61 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.List; - -public class ItemSigilBase extends ItemSigil implements IVariantProvider { - - protected final String tooltipBase; - private final String name; - - public ItemSigilBase(String name, int lpUsed) { - super(lpUsed); - - setUnlocalizedName(BloodMagic.MODID + ".sigil." + name); - setCreativeTab(BloodMagic.TAB_BM); - - this.name = name; - this.tooltipBase = "tooltip.bloodmagic.sigil." + name + "."; - } - - public ItemSigilBase(String name) { - this(name, 0); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (TextHelper.canTranslate(tooltipBase + "desc")) - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect(tooltipBase + "desc")))); - - if (!stack.hasTagCompound()) - return; - - Binding binding = getBinding(stack); - if (binding != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=normal"); - } - - public String getName() { - return name; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java deleted file mode 100644 index 8c161786..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.*; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; - -public class ItemSigilBloodLight extends ItemSigilBase -{ - public ItemSigilBloodLight() - { - super("blood_light", 10); - } - - @Override - public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) - { - if (getCooldownRemainder(stack) > 0) - reduceCooldown(stack); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) - { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - RayTraceResult mop = this.rayTrace(world, player, false); - - if (getCooldownRemainder(stack) > 0) - return super.onItemRightClick(world, player, hand); - - if (mop != null && mop.typeOfHit == RayTraceResult.Type.BLOCK) - { - BlockPos blockPos = mop.getBlockPos().offset(mop.sideHit); - - if (world.isAirBlock(blockPos)) - { - world.setBlockState(blockPos, RegistrarBloodMagicBlocks.BLOOD_LIGHT.getDefaultState()); - if (!world.isRemote) - { - SoulNetwork network = NetworkHelper.getSoulNetwork(getBinding(stack)); - network.syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())); - } - resetCooldown(stack); - player.swingArm(hand); - return super.onItemRightClick(world, player, hand); - } - } else - { - if (!world.isRemote) - { - SoulNetwork network = NetworkHelper.getSoulNetwork(getBinding(stack)); - world.spawnEntity(new EntityBloodLight(world, player)); - network.syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())); - } - resetCooldown(stack); - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) - { - return oldStack.getItem() != newStack.getItem(); - } - - public int getCooldownRemainder(ItemStack stack) - { - return NBTHelper.checkNBT(stack).getTagCompound().getInteger(Constants.NBT.TICKS_REMAINING); - } - - public void reduceCooldown(ItemStack stack) - { - NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.TICKS_REMAINING, getCooldownRemainder(stack) - 1); - } - - public void resetCooldown(ItemStack stack) - { - NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.TICKS_REMAINING, 10); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java deleted file mode 100644 index a209952d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilBounce extends ItemSigilToggleableBase { - public ItemSigilBounce() { - super("bounce", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.BOUNCE, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java deleted file mode 100644 index 49358bcd..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilClaw extends ItemSigilToggleableBase { - public ItemSigilClaw() { - super("claw", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.CLING, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java deleted file mode 100644 index d23ced18..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.compress.CompressionRegistry; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class ItemSigilCompression extends ItemSigilToggleableBase { - public ItemSigilCompression() { - super("compression", 200); - } - - // TODO REWRITE all compression stuff if someone has time - // TODO for now, there is a semi-working system in place - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (true) - return; // TODO - Rewrite compression system - - if (PlayerHelper.isFakePlayer(player)) - return; - - ItemStack compressedStack = CompressionRegistry.compressInventory(player.inventory.mainInventory.toArray(new ItemStack[player.inventory.mainInventory.size()]), world); - - if (compressedStack != null) { - EntityItem entityItem = new EntityItem(world, player.posX, player.posY, player.posZ, compressedStack); - world.spawnEntity(entityItem); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java deleted file mode 100644 index a25a5122..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.IAltarReader; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import com.google.common.collect.Lists; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.*; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; - -import java.util.List; - -public class ItemSigilDivination extends ItemSigilBase implements IAltarReader { - - public ItemSigilDivination(boolean simple) { - super(simple ? "divination" : "seer"); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote) { - super.onItemRightClick(world, player, hand); - - Binding binding = getBinding(stack); - if (binding != null) { - int currentEssence = NetworkHelper.getSoulNetwork(binding).getCurrentEssence(); - List toSend = Lists.newArrayList(); - if (!binding.getOwnerId().equals(player.getGameProfile().getId())) - toSend.add(new TextComponentTranslation(tooltipBase + "otherNetwork", binding.getOwnerName())); - toSend.add(new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence)); - ChatUtil.sendNoSpam(player, toSend.toArray(new ITextComponent[toSend.size()])); - } - } - - return super.onItemRightClick(world, player, hand); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java deleted file mode 100644 index 8de0be57..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java +++ /dev/null @@ -1,25 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilElementalAffinity extends ItemSigilToggleableBase { - public ItemSigilElementalAffinity() { - super("elemental_affinity", 200); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.fallDistance = 0; - player.extinguish(); - player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 2, 1, true, false)); - player.addPotionEffect(new PotionEffect(MobEffects.WATER_BREATHING, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java deleted file mode 100644 index 8b445fe3..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.Entity; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -import java.util.List; - -public class ItemSigilEnderSeverance extends ItemSigilToggleableBase { - public ItemSigilEnderSeverance() { - super("ender_severance", 200); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - List entityList = world.getEntitiesWithinAABB(Entity.class, new net.minecraft.util.math.AxisAlignedBB(player.posX - 4.5, player.posY - 4.5, player.posZ - 4.5, player.posX + 4.5, player.posY + 4.5, player.posZ + 4.5)); - for (Entity entity : entityList) { - if (entity instanceof EntityEnderman) - ((EntityEnderman) entity).addPotionEffect(new PotionEffect(RegistrarBloodMagic.PLANAR_BINDING, 40, 0)); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java deleted file mode 100644 index 6297abde..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; - -public class ItemSigilFastMiner extends ItemSigilToggleableBase { - public ItemSigilFastMiner() { - super("fast_miner", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - player.addPotionEffect(new PotionEffect(MobEffects.HASTE, 2, 0, true, false)); - } - - @Override - public boolean performArrayEffect(World world, BlockPos pos) { - double radius = 10; - int ticks = 600; - int potionPotency = 2; - - AxisAlignedBB bb = new AxisAlignedBB(pos).grow(radius); - List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, bb); - for (EntityPlayer player : playerList) { - if (!player.isPotionActive(MobEffects.HASTE) || (player.isPotionActive(MobEffects.HASTE) && player.getActivePotionEffect(MobEffects.HASTE).getAmplifier() < potionPotency)) { - player.addPotionEffect(new PotionEffect(MobEffects.HASTE, ticks, potionPotency)); - if (!player.capabilities.isCreativeMode) { - player.hurtResistantTime = 0; - player.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, 1.0F); - } - } - } - - return false; - } - - @Override - public boolean hasArrayEffect() { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFilledHand.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFilledHand.java deleted file mode 100644 index 72f428a0..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFilledHand.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.util.handler.event.GenericHandler; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class ItemSigilFilledHand extends ItemSigilToggleableBase { - public ItemSigilFilledHand() { - super("hand", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - GenericHandler.filledHandMap.put(player, 4); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java deleted file mode 100644 index 23e6bfa8..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.enchantment.EnchantmentFrostWalker; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class ItemSigilFrost extends ItemSigilToggleableBase { - public ItemSigilFrost() { - super("frost", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - EnchantmentFrostWalker.freezeNearby(player, world, player.getPosition(), 1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java deleted file mode 100644 index 8f479995..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.block.IGrowable; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.BonemealEvent; -import net.minecraftforge.fml.common.eventhandler.Event.Result; - -public class ItemSigilGreenGrove extends ItemSigilToggleableBase { - public ItemSigilGreenGrove() { - super("green_grove", 150); - } - - @Override - public boolean onSigilUse(ItemStack stack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { - if (PlayerHelper.isFakePlayer(player)) - return false; - - if (NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess() && applyBonemeal(world, blockPos, player, stack)) { - if (!world.isRemote) { - world.playEvent(2005, blockPos, 0); - } - return true; - } - - return false; - } - - @Override - public void onSigilUpdate(ItemStack stack, World worldIn, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - int range = 3; - int verticalRange = 2; - int posX = (int) Math.round(player.posX - 0.5f); - int posY = (int) player.posY; - int posZ = (int) Math.round(player.posZ - 0.5f); - - for (int ix = posX - range; ix <= posX + range; ix++) { - for (int iz = posZ - range; iz <= posZ + range; iz++) { - for (int iy = posY - verticalRange; iy <= posY + verticalRange; iy++) { - BlockPos blockPos = new BlockPos(ix, iy, iz); - IBlockState state = worldIn.getBlockState(blockPos); - - if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) { - if (state.getBlock() instanceof IGrowable) { - if (worldIn.rand.nextInt(50) == 0) { - IBlockState preBlockState = worldIn.getBlockState(blockPos); - state.getBlock().updateTick(worldIn, blockPos, state, worldIn.rand); - - IBlockState newState = worldIn.getBlockState(blockPos); - if (!newState.equals(preBlockState) && !worldIn.isRemote) - worldIn.playEvent(2005, blockPos, 0); - } - } - } - } - } - } - } - - private boolean applyBonemeal(World worldIn, BlockPos target, EntityPlayer player, ItemStack sigilStack) { - IBlockState iblockstate = worldIn.getBlockState(target); - - BonemealEvent event = new BonemealEvent(player, worldIn, target, iblockstate, EnumHand.MAIN_HAND, sigilStack); - if (MinecraftForge.EVENT_BUS.post(event)) - return false; - else if (event.getResult() == Result.ALLOW) - return true; - - if (iblockstate.getBlock() instanceof IGrowable) { - IGrowable igrowable = (IGrowable) iblockstate.getBlock(); - - if (igrowable.canGrow(worldIn, target, iblockstate, worldIn.isRemote)) { - if (!worldIn.isRemote) { - if (igrowable.canUseBonemeal(worldIn, worldIn.rand, target, iblockstate)) - igrowable.grow(worldIn, worldIn.rand, target, iblockstate); - } - return true; - } - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java deleted file mode 100644 index 06d6de8e..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilHaste extends ItemSigilToggleableBase { - public ItemSigilHaste() { - super("haste", 250); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.BOOST, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java deleted file mode 100644 index 6399e817..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java +++ /dev/null @@ -1,301 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.key.IKeybindable; -import WayofTime.bloodmagic.client.key.KeyBindings; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.IAltarReader; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.List; -import java.util.function.Consumer; - -public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAltarReader, ISigil.Holding, IMeshProvider { - public static final int inventorySize = 5; - - public ItemSigilHolding() { - super("holding"); - } - - @Override - public void onKeyPressed(ItemStack stack, EntityPlayer player, KeyBindings key, boolean showInChat) { - if (stack == player.getHeldItemMainhand() && stack.getItem() instanceof ItemSigilHolding && key.equals(KeyBindings.OPEN_HOLDING)) { - Utils.setUUID(stack); - player.openGui(BloodMagic.instance, Constants.Gui.SIGIL_HOLDING_GUI, player.getEntityWorld(), (int) player.posX, (int) player.posY, (int) player.posZ); - } - } - - @Override - public String getHighlightTip(ItemStack stack, String displayName) { - List inv = getInternalInventory(stack); - int currentSlot = getCurrentItemOrdinal(stack); - ItemStack item = inv.get(currentSlot); - - if (item.isEmpty()) - return displayName; - else - return TextHelper.localizeEffect("item.bloodmagic.sigil.holding.display", displayName, item.getDisplayName()); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.holding.press", KeyBindings.OPEN_HOLDING.getKey().getDisplayName())); - - if (!stack.hasTagCompound()) - return; - - List inv = getInternalInventory(stack); - int currentSlot = getCurrentItemOrdinal(stack); - ItemStack item = inv.get(currentSlot); - - for (int i = 0; i < inventorySize; i++) { - ItemStack invStack = inv.get(i); - if (!invStack.isEmpty()) - if (!item.isEmpty() && invStack == item) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.holding.sigilInSlot", i + 1, "&o&n" + invStack.getDisplayName())); - else - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.sigil.holding.sigilInSlot", i + 1, invStack.getDisplayName())); - } - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (PlayerHelper.isFakePlayer(player)) - return EnumActionResult.FAIL; - - int currentSlot = getCurrentItemOrdinal(stack); - List inv = getInternalInventory(stack); - ItemStack itemUsing = inv.get(currentSlot); - - if (itemUsing.isEmpty() || ((IBindable) itemUsing.getItem()).getBinding(itemUsing) == null) - return EnumActionResult.PASS; - - EnumActionResult result = itemUsing.getItem().onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); - saveInventory(stack, inv); - - return result; - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - int currentSlot = getCurrentItemOrdinal(stack); - List inv = getInternalInventory(stack); - ItemStack itemUsing = inv.get(currentSlot); - - if (itemUsing.isEmpty() || ((IBindable) itemUsing.getItem()).getBinding(itemUsing) == null) - return ActionResult.newResult(EnumActionResult.PASS, stack); - - itemUsing.getItem().onItemRightClick(world, player, hand); - - saveInventory(stack, inv); - - return ActionResult.newResult(EnumActionResult.PASS, stack); - } - - @Nonnull - @Override - public ItemStack getHeldItem(ItemStack holdingStack, EntityPlayer player) { - return getInternalInventory(holdingStack).get(getCurrentItemOrdinal(holdingStack)); - } - - public void saveInventory(ItemStack itemStack, List inventory) { - NBTTagCompound itemTag = itemStack.getTagCompound(); - - if (itemTag == null) { - itemStack.setTagCompound(new NBTTagCompound()); - } - - NBTTagList itemList = new NBTTagList(); - - for (int i = 0; i < inventorySize; i++) { - if (!inventory.get(i).isEmpty()) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte(Constants.NBT.SLOT, (byte) i); - inventory.get(i).writeToNBT(tag); - itemList.appendTag(tag); - } - } - - itemTag.setTag(Constants.NBT.ITEMS, itemList); - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { - if (stack.hasTagCompound()) - tickInternalInventory(stack, world, entity, itemSlot, isSelected); - } - - public void tickInternalInventory(ItemStack itemStack, World world, Entity entity, int itemSlot, boolean isSelected) { - for (ItemStack stack : getInternalInventory(itemStack)) { - if (stack.isEmpty() || !(stack.getItem() instanceof IBindable) || !(stack.getItem() instanceof ISigil)) - continue; - - Binding binding = ((IBindable) stack.getItem()).getBinding(stack); - if (binding == null) - continue; - - stack.getItem().onUpdate(stack, world, entity, itemSlot, isSelected); - } - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - // No-op - Just here to stop the super from running since we're using a mesh provider - } - - @Override - public ItemMeshDefinition getMeshDefinition() { - return stack -> { - if (stack.hasTagCompound() && stack.getTagCompound().hasKey("color")) - return new ModelResourceLocation(getRegistryName(), "type=color"); - return new ModelResourceLocation(getRegistryName(), "type=normal"); - }; - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("type=normal"); - variants.accept("type=color"); - } - - public static int next(int mode) { - int index = mode + 1; - - if (index >= inventorySize) { - index = 0; - } - - return index; - } - - public static int prev(int mode) { - int index = mode - 1; - - if (index < 0) { - index = inventorySize; - } - - return index; - } - - private static void initModeTag(ItemStack stack) { - if (!stack.hasTagCompound()) { - stack = NBTHelper.checkNBT(stack); - stack.getTagCompound().setInteger(Constants.NBT.CURRENT_SIGIL, inventorySize); - } - } - - public static ItemStack getItemStackInSlot(ItemStack itemStack, int slot) { - if (itemStack.getItem() instanceof ItemSigilHolding) { - List inv = getInternalInventory(itemStack); - if (inv != null) - return inv.get(slot == 5 ? 4 : slot); - else - return ItemStack.EMPTY; - } - - return ItemStack.EMPTY; - } - - public static int getCurrentItemOrdinal(ItemStack stack) { - if (stack.getItem() instanceof ItemSigilHolding) { - initModeTag(stack); - int currentSigil = stack.getTagCompound().getInteger(Constants.NBT.CURRENT_SIGIL); - currentSigil = MathHelper.clamp(currentSigil, 0, inventorySize - 1); - return currentSigil; - } - - return 0; - } - - public static List getInternalInventory(ItemStack stack) { - initModeTag(stack); - NBTTagCompound tagCompound = stack.getTagCompound(); - - if (tagCompound == null) { - return NonNullList.withSize(inventorySize, ItemStack.EMPTY); - } - - NBTTagList tagList = tagCompound.getTagList(Constants.NBT.ITEMS, 10); - - if (tagList.hasNoTags()) { - return NonNullList.withSize(inventorySize, ItemStack.EMPTY); - } - - List inv = NonNullList.withSize(inventorySize, ItemStack.EMPTY); - - for (int i = 0; i < tagList.tagCount(); i++) { - NBTTagCompound data = tagList.getCompoundTagAt(i); - byte j = data.getByte(Constants.NBT.SLOT); - - if (j >= 0 && j < inv.size()) { - inv.set(j, new ItemStack(data)); - } - } - - return inv; - } - - public static void cycleToNextSigil(ItemStack itemStack, int mode) { - if (itemStack.getItem() instanceof ItemSigilHolding) { - initModeTag(itemStack); - - int index = mode; - if (mode == 120 || mode == -120) { - int currentIndex = getCurrentItemOrdinal(itemStack); - ItemStack currentItemStack = getItemStackInSlot(itemStack, currentIndex); - if (currentItemStack.isEmpty()) - return; - if (mode < 0) { - index = next(currentIndex); - currentItemStack = getItemStackInSlot(itemStack, index); - - while (currentItemStack.isEmpty()) { - index = next(index); - currentItemStack = getItemStackInSlot(itemStack, index); - } - } else { - index = prev(currentIndex); - currentItemStack = getItemStackInSlot(itemStack, index); - - while (currentItemStack.isEmpty()) { - index = prev(index); - currentItemStack = getItemStackInSlot(itemStack, index); - } - } - } - - itemStack.getTagCompound().setInteger(Constants.NBT.CURRENT_SIGIL, index); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java deleted file mode 100644 index 6b044a6d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java +++ /dev/null @@ -1,113 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; - -public class ItemSigilLava extends ItemSigilBase { - public ItemSigilLava() { - super("lava", 1000); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote && !isUnusable(stack)) { - RayTraceResult rayTrace = this.rayTrace(world, player, false); - - if (rayTrace != null) { - ActionResult ret = ForgeEventFactory.onBucketUse(player, world, stack, rayTrace); - if (ret != null) - return ret; - - if (rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { - BlockPos blockpos = rayTrace.getBlockPos(); - - if (!world.isBlockModifiable(player, blockpos)) { - return super.onItemRightClick(world, player, hand); - } - - if (!player.canPlayerEdit(blockpos.offset(rayTrace.sideHit), rayTrace.sideHit, stack)) { - return super.onItemRightClick(world, player, hand); - } - - BlockPos blockpos1 = blockpos.offset(rayTrace.sideHit); - - if (!player.canPlayerEdit(blockpos1, rayTrace.sideHit, stack)) { - return super.onItemRightClick(world, player, hand); - } - - if (canPlaceLava(world, blockpos1) && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess() && tryPlaceLava(world, blockpos1)) { - return super.onItemRightClick(world, player, hand); - } - } - } - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote || player.isSneaking() || isUnusable(stack)) { - return EnumActionResult.FAIL; - } - if (!world.canMineBlockBody(player, blockPos)) { - return EnumActionResult.FAIL; - } - - TileEntity tile = world.getTileEntity(blockPos); - if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { - IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - FluidStack fluid = new FluidStack(FluidRegistry.LAVA, 1000); - int amount = handler.fill(fluid, false); - - if (amount > 0 && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) { - handler.fill(fluid, true); - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - return EnumActionResult.FAIL; - } - - public boolean canPlaceLava(World world, BlockPos blockPos) { - if (!world.isAirBlock(blockPos) && world.getBlockState(blockPos).getBlock().getMaterial(world.getBlockState(blockPos)).isSolid()) { - return false; - } else if ((world.getBlockState(blockPos).getBlock() == Blocks.LAVA || world.getBlockState(blockPos).getBlock() == Blocks.FLOWING_LAVA) && world.getBlockState(blockPos).getBlock().getMetaFromState(world.getBlockState(blockPos)) == 0) { - return false; - } else { - world.setBlockState(blockPos, Blocks.FLOWING_LAVA.getBlockState().getBaseState(), 3); - return true; - } - } - - public boolean tryPlaceLava(World world, BlockPos pos) { - Material material = world.getBlockState(pos).getBlock().getMaterial(world.getBlockState(pos)); - - return world.isAirBlock(pos) && !material.isSolid(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java deleted file mode 100644 index 7a1333fa..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java +++ /dev/null @@ -1,43 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.item.EntityXPOrb; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.world.World; - -import java.util.List; - -public class ItemSigilMagnetism extends ItemSigilToggleableBase { - public ItemSigilMagnetism() { - super("magnetism", 50); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - int range = 5; - int verticalRange = 5; - float posX = Math.round(player.posX); - float posY = (float) (player.posY - player.getEyeHeight()); - float posZ = Math.round(player.posZ); - List entities = player.getEntityWorld().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); - List xpOrbs = player.getEntityWorld().getEntitiesWithinAABB(EntityXPOrb.class, new AxisAlignedBB(posX - 0.5f, posY - 0.5f, posZ - 0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(range, verticalRange, range)); - - for (EntityItem entity : entities) { - if (entity != null && !world.isRemote && !entity.isDead) { - entity.onCollideWithPlayer(player); - } - } - - for (EntityXPOrb xpOrb : xpOrbs) { - if (xpOrb != null && !world.isRemote) { - xpOrb.onCollideWithPlayer(player); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilPhantomBridge.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilPhantomBridge.java deleted file mode 100644 index eb2d1431..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilPhantomBridge.java +++ /dev/null @@ -1,89 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.HashMap; -import java.util.Map; - -public class ItemSigilPhantomBridge extends ItemSigilToggleableBase { - private static final double EXPANSION_FACTOR = 2; - private static final int RANGE = 3; - - private Map> prevPositionMap = new HashMap<>(); - - public ItemSigilPhantomBridge() { - super("phantom_bridge", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - if (!prevPositionMap.containsKey(player)) { - prevPositionMap.put(player, Pair.of(player.posX, player.posZ)); - } - - if ((!player.onGround && !player.isRiding()) && !player.isSneaking()) { - prevPositionMap.put(player, Pair.of(player.posX, player.posZ)); - return; - } - - int verticalOffset = -1; - - if (player.isSneaking()) - verticalOffset--; - - Pair prevPosition = prevPositionMap.get(player); - - double playerVelX = player.posX - prevPosition.getLeft(); - double playerVelZ = player.posZ - prevPosition.getRight(); - - double totalVel = Math.sqrt(playerVelX * playerVelX + playerVelZ * playerVelZ); - if (totalVel > 2) { - //I am SURE you are teleporting! - playerVelX = 0; - playerVelZ = 0; - totalVel = 0; - } - - BlockPos playerPos = player.getPosition(); - int posX = playerPos.getX(); - int posY = playerPos.getY(); - int posZ = playerPos.getZ(); - - double offsetPosX = posX + EXPANSION_FACTOR * playerVelX; - double offsetPosZ = posZ + EXPANSION_FACTOR * playerVelZ; - double avgX = (posX + offsetPosX) / 2; - double avgZ = (posZ + offsetPosZ) / 2; - - double C = 2 * (RANGE + EXPANSION_FACTOR * totalVel) + 1; - int truncC = (int) C; - - //TODO: Make this for-loop better. - for (int ix = -truncC; ix <= truncC; ix++) { - for (int iz = -truncC; iz <= truncC; iz++) { - if (computeEllipse(ix + avgX, iz + avgZ, posX, posZ, offsetPosX, offsetPosZ) > C) { - continue; - } - - BlockPos blockPos = new BlockPos(ix + posX, posY + verticalOffset, iz + posZ); - - if (world.isAirBlock(blockPos)) - world.setBlockState(blockPos, RegistrarBloodMagicBlocks.PHANTOM.getDefaultState()); - } - } - - prevPositionMap.put(player, Pair.of(player.posX, player.posZ)); - } - - public static double computeEllipse(double x, double z, double focusX1, double focusZ1, double focusX2, double focusZ2) { - return Math.sqrt((x - focusX1) * (x - focusX1) + (z - focusZ1) * (z - focusZ1)) + Math.sqrt((x - focusX2) * (x - focusX2) + (z - focusZ2) * (z - focusZ2)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSuppression.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSuppression.java deleted file mode 100644 index 16783af4..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSuppression.java +++ /dev/null @@ -1,50 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.tile.TileSpectralBlock; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class ItemSigilSuppression extends ItemSigilToggleableBase { - public ItemSigilSuppression() { - super("suppression", 400); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - int x = (int) player.posX; - int y = (int) player.posY; - int z = (int) player.posZ; - final int radius = 5; - final int refresh = 100; - - for (int i = -radius; i <= radius; i++) { - for (int j = -radius; j <= radius; j++) { - for (int k = -radius; k <= radius; k++) { - if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f)) { - continue; - } - - BlockPos blockPos = new BlockPos(x + i, y + j, z + k); - IBlockState state = world.getBlockState(blockPos); - - if (Utils.isBlockLiquid(state) && world.getTileEntity(blockPos) == null) - TileSpectralBlock.createSpectralBlock(world, blockPos, refresh); - else { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TileSpectralBlock) - ((TileSpectralBlock) tile).resetDuration(refresh); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java deleted file mode 100644 index ebca00db..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTeleposition.java +++ /dev/null @@ -1,160 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.teleport.TeleportQueue; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.ritual.portal.Teleports; -import WayofTime.bloodmagic.tile.TileTeleposer; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -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.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.util.INBTSerializable; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.List; -import java.util.UUID; - -public class ItemSigilTeleposition extends ItemSigilBase { - - public ItemSigilTeleposition() { - super("teleposition"); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - - TeleportLocation location = getTeleportLocation(stack); - if (location != null) { - tooltip.add(""); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.telepositionFocus.coords", location.pos.getX(), location.pos.getY(), location.pos.getZ())); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.telepositionFocus.dimension", location.dim)); - } - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - TeleportLocation location = getTeleportLocation(stack); - Binding binding = getBinding(stack); - if (!world.isRemote && location != null && binding != null) { - World teleportTo = DimensionManager.getWorld(location.dim); - if (teleportTo != null) { - TileEntity tile = teleportTo.getTileEntity(location.pos); - if (tile instanceof TileTeleposer) { - BlockPos blockPos = location.pos.up(); - UUID bindingOwnerID = binding.getOwnerId(); - if (world.provider.getDimension() == location.dim) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(blockPos, player, bindingOwnerID, true)); - - } else { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(blockPos, player, bindingOwnerID, world, tile.getWorld().provider.getDimension(), true)); - } - } - } - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return EnumActionResult.FAIL; - - if (!world.isRemote && player.isSneaking() && NBTHelper.checkNBT(stack) != null) { - if (world.getTileEntity(pos) != null && world.getTileEntity(pos) instanceof TileTeleposer) { - TeleportLocation teleportLocation = new TeleportLocation(world.provider.getDimension(), pos); - updateLocation(stack, teleportLocation); - return EnumActionResult.SUCCESS; - } - } - return EnumActionResult.FAIL; - } - - @Nullable - public TeleportLocation getTeleportLocation(ItemStack stack) { - if (!(stack.getItem() instanceof ItemSigilTeleposition)) - return null; - - if (!stack.hasTagCompound()) - return null; - - NBTTagCompound locationTag = stack.getSubCompound("tplocation"); - if (locationTag == null) - return null; - - return TeleportLocation.fromTag(locationTag); - } - - public void updateLocation(ItemStack stack, TeleportLocation location) { - NBTTagCompound tagCompound; - if (!stack.hasTagCompound()) - stack.setTagCompound(tagCompound = new NBTTagCompound()); - else - tagCompound = stack.getTagCompound(); - - tagCompound.setTag("tplocation", location.serializeNBT()); - } - - public static class TeleportLocation implements INBTSerializable { - - private int dim; - private BlockPos pos; - - private TeleportLocation() { - } - - public TeleportLocation(int dim, BlockPos pos) { - this.dim = dim; - this.pos = pos; - } - - public TeleportLocation(int dim, int x, int y, int z) { - this(dim, new BlockPos(x, y, z)); - } - - @Override - public NBTTagCompound serializeNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setInteger("dim", dim); - tag.setLong("pos", pos.toLong()); - return tag; - } - - @Override - public void deserializeNBT(NBTTagCompound nbt) { - this.dim = nbt.getInteger("dim"); - this.pos = BlockPos.fromLong(nbt.getLong("pos")); - } - - public static TeleportLocation fromTag(NBTTagCompound tpTag) { - TeleportLocation location = new TeleportLocation(); - location.deserializeNBT(tpTag); - return location; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java deleted file mode 100644 index 4a354186..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.iface.IActivatable; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -/** - * Base class for all toggleable sigils. - */ -public class ItemSigilToggleable extends ItemSigil implements IActivatable { - - public ItemSigilToggleable(int lpUsed) { - super(lpUsed); - } - - @Override - public boolean getActivated(ItemStack stack) { - return !stack.isEmpty() && NBTHelper.checkNBT(stack).getTagCompound().getBoolean(Constants.NBT.ACTIVATED); - } - - @Override - public ItemStack setActivatedState(ItemStack stack, boolean activated) { - if (!stack.isEmpty()) { - NBTHelper.checkNBT(stack).getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated); - return stack; - } - - return stack; - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote && !isUnusable(stack)) { - if (player.isSneaking()) - setActivatedState(stack, !getActivated(stack)); - if (getActivated(stack)) - return super.onItemRightClick(world, player, hand); - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - - Binding binding = getBinding(stack); - if (binding == null || player.isSneaking()) // Make sure Sigils are bound before handling. Also ignores while toggling state - return EnumActionResult.PASS; - - return onSigilUse(player.getHeldItem(hand), player, world, pos, side, hitX, hitY, hitZ) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; - } - - public boolean onSigilUse(ItemStack itemStack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) { - return false; - } - - @Override - public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { - if (!worldIn.isRemote && entityIn instanceof EntityPlayerMP && getActivated(stack)) { - if (entityIn.ticksExisted % 100 == 0) { - if (!NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage((EntityPlayer) entityIn, SoulTicket.item(stack, worldIn, entityIn, getLpUsed())).isSuccess()) { - setActivatedState(stack, false); - } - } - - onSigilUpdate(stack, worldIn, (EntityPlayer) entityIn, itemSlot, isSelected); - } - } - - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java deleted file mode 100644 index 08fb9dff..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java +++ /dev/null @@ -1,59 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; -import java.util.Locale; -import java.util.function.Consumer; - -public class ItemSigilToggleableBase extends ItemSigilToggleable implements IMeshProvider { - - protected final String tooltipBase; - private final String name; - - public ItemSigilToggleableBase(String name, int lpUsed) { - super(lpUsed); - - setUnlocalizedName(BloodMagic.MODID + ".sigil." + name); - setCreativeTab(BloodMagic.TAB_BM); - - this.name = name; - this.tooltipBase = "tooltip.bloodmagic.sigil." + name + "."; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - if (!stack.hasTagCompound()) - return; - - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic." + (getActivated(stack) ? "activated" : "deactivated"))); - - Binding binding = getBinding(stack); - if (binding != null) - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentOwner", binding.getOwnerName())); - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionActivatable("sigil_" + name.toLowerCase(Locale.ROOT)); - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("active=false"); - variants.accept("active=true"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java deleted file mode 100644 index 4cba37ed..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java +++ /dev/null @@ -1,142 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTUtil; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityMobSpawner; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nullable; -import java.util.List; - -public class ItemSigilTransposition extends ItemSigilBase { - - public ItemSigilTransposition() { - super("transposition", 1000); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - - if (!stack.hasTagCompound()) - return; - NBTTagCompound tag = stack.getTagCompound(); - - if (tag.hasKey("stored")) { - tooltip.add(" "); - tooltip.add(tag.getCompoundTag("stored").getString("display")); - } - } - - @SideOnly(Side.CLIENT) - @Override - public String getItemStackDisplayName(ItemStack stack) { - if (!stack.hasTagCompound()) - return super.getItemStackDisplayName(stack); - - NBTTagCompound tag = stack.getTagCompound(); - if (tag.hasKey("stored")) - return super.getItemStackDisplayName(stack) + " (" + tag.getCompoundTag("stored").getString("display") + ")"; - - return super.getItemStackDisplayName(stack); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return EnumActionResult.FAIL; - - IBlockState state = world.getBlockState(blockPos); - if (!world.isRemote) { - if (BloodMagicAPI.INSTANCE.getBlacklist().getTransposition().contains(state)) - return EnumActionResult.FAIL; - - if (player.isSneaking() && stack.hasTagCompound() && !stack.getTagCompound().hasKey("stored")) { - if (state.getPlayerRelativeBlockHardness(player, world, blockPos) >= 0 && state.getBlockHardness(world, blockPos) >= 0) { - int cost = getLpUsed(); - - NBTTagCompound stored = new NBTTagCompound(); - stored.setTag("state", NBTUtil.writeBlockState(new NBTTagCompound(), state)); - stored.setString("display", state.getBlock().getPickBlock(state, null, world, blockPos, player).getDisplayName()); - if (state.getBlock().hasTileEntity(state)) { - TileEntity tile = world.getTileEntity(blockPos); - if (tile != null) { - cost *= 5; - stored.setTag("tileData", tile.writeToNBT(new NBTTagCompound())); - - if (world.getTileEntity(blockPos) instanceof TileEntityMobSpawner) - cost *= 6; - } - } - - stack.getTagCompound().setTag("stored", stored); - NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, cost)); - world.removeTileEntity(blockPos); - world.setBlockToAir(blockPos); - return EnumActionResult.SUCCESS; - } - } else if (stack.hasTagCompound() && stack.getTagCompound().hasKey("stored")) { - IBlockState worldState = world.getBlockState(blockPos); - NBTTagCompound storedTag = stack.getTagCompound().getCompoundTag("stored"); - IBlockState storedState = NBTUtil.readBlockState(storedTag.getCompoundTag("state")); - NBTTagCompound tileData = storedTag.hasKey("tileData") ? storedTag.getCompoundTag("tileData") : null; - - if (!worldState.getBlock().isReplaceable(world, blockPos)) - blockPos = blockPos.offset(side); - - if (!stack.isEmpty() && player.canPlayerEdit(blockPos, side, stack) && world.mayPlace(storedState.getBlock(), blockPos, false, side, player)) { - if (world.setBlockState(blockPos, storedState, 3)) { - storedState.getBlock().onBlockPlacedBy(world, blockPos, storedState, player, ItemStack.EMPTY); - - if (tileData != null) { - tileData.setInteger("x", blockPos.getX()); - tileData.setInteger("y", blockPos.getY()); - tileData.setInteger("z", blockPos.getZ()); - TileEntity worldTile = world.getTileEntity(blockPos); - if (worldTile != null) - worldTile.readFromNBT(tileData); - } - - world.notifyBlockUpdate(blockPos, state, state, 3); - stack.getTagCompound().removeTag("stored"); - return EnumActionResult.SUCCESS; - } - } - } - } - return EnumActionResult.FAIL; - } - - // We only want to send the display name to the client rather than the bloated tag with tile data and such - @Nullable - @Override - public NBTTagCompound getNBTShareTag(ItemStack stack) { - if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("stored")) - return super.getNBTShareTag(stack); - - NBTTagCompound shareTag = stack.getTagCompound().copy(); - NBTTagCompound storedTag = shareTag.getCompoundTag("stored"); - storedTag.removeTag("state"); - storedTag.removeTag("stored"); - - return shareTag; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java deleted file mode 100644 index 93796d8d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java +++ /dev/null @@ -1,114 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; - -public class ItemSigilVoid extends ItemSigilBase { - public ItemSigilVoid() { - super("void", 50); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote && !isUnusable(stack)) { - RayTraceResult rayTrace = this.rayTrace(world, player, true); - - if (rayTrace != null) { - ActionResult ret = ForgeEventFactory.onBucketUse(player, world, stack, rayTrace); - if (ret != null) - return ret; - - if (rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { - BlockPos blockpos = rayTrace.getBlockPos(); - - if (!world.isBlockModifiable(player, blockpos)) { - return super.onItemRightClick(world, player, hand); - } - - if (!player.canPlayerEdit(blockpos.offset(rayTrace.sideHit), rayTrace.sideHit, stack)) { - return super.onItemRightClick(world, player, hand); - } - - if (!player.canPlayerEdit(blockpos, rayTrace.sideHit, stack)) { - return super.onItemRightClick(world, player, hand); - } - - if (world.getBlockState(blockpos).getBlock().getMaterial(world.getBlockState(blockpos)).isLiquid() && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) { - world.setBlockToAir(blockpos); - return super.onItemRightClick(world, player, hand); - } - } - } else { - return super.onItemRightClick(world, player, hand); - } - - if (!player.capabilities.isCreativeMode) - setUnusable(stack, !NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()); - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (PlayerHelper.isFakePlayer(player)) - return EnumActionResult.FAIL; - - if (world.isRemote || player.isSneaking() || isUnusable(stack)) { - return EnumActionResult.FAIL; - } - - if (!world.canMineBlockBody(player, blockPos)) { - return EnumActionResult.FAIL; - } - - SoulNetwork network = NetworkHelper.getSoulNetwork(getBinding(stack)); - TileEntity tile = world.getTileEntity(blockPos); - if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { - IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - FluidStack amount = handler.drain(1000, false); - - if (amount != null && amount.amount > 0 && network.syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) { - handler.drain(1000, true); - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - BlockPos newPos = blockPos.offset(side); - - if (!player.canPlayerEdit(newPos, side, stack)) { - return EnumActionResult.FAIL; - } - - if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && network.syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) { - world.setBlockToAir(newPos); - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java deleted file mode 100644 index 5737fd32..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java +++ /dev/null @@ -1,133 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.block.BlockCauldron; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; - -public class ItemSigilWater extends ItemSigilBase { - public ItemSigilWater() { - super("water", 100); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote && !isUnusable(stack)) { - RayTraceResult rayTrace = this.rayTrace(world, player, false); - - if (rayTrace != null) { - ActionResult ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(player, world, stack, rayTrace); - if (ret != null) - return ret; - - if (rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { - BlockPos blockpos = rayTrace.getBlockPos(); - - if (!world.isBlockModifiable(player, blockpos)) - return super.onItemRightClick(world, player, hand); - - if (!player.canPlayerEdit(blockpos.offset(rayTrace.sideHit), rayTrace.sideHit, stack)) - return super.onItemRightClick(world, player, hand); - - BlockPos blockpos1 = blockpos.offset(rayTrace.sideHit); - - if (!player.canPlayerEdit(blockpos1, rayTrace.sideHit, stack)) - return super.onItemRightClick(world, player, hand); - - if (canPlaceWater(world, blockpos1) && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess() && tryPlaceWater(world, blockpos1)) - return super.onItemRightClick(world, player, hand); - } - } - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos blockPos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - ItemStack stack = player.getHeldItem(hand); - if (world.isRemote || player.isSneaking() || isUnusable(stack)) - return EnumActionResult.FAIL; - - if (!world.canMineBlockBody(player, blockPos)) - return EnumActionResult.FAIL; - - TileEntity tile = world.getTileEntity(blockPos); - if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { - IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - FluidStack fluid = new FluidStack(FluidRegistry.WATER, 1000); - int amount = handler.fill(fluid, false); - - if (amount > 0 && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) { - handler.fill(fluid, true); - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - if (world.getBlockState(blockPos).getBlock() == Blocks.CAULDRON && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) { - world.setBlockState(blockPos, Blocks.CAULDRON.getDefaultState().withProperty(BlockCauldron.LEVEL, 3)); - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.FAIL; - } - - public boolean canPlaceWater(World world, BlockPos blockPos) { - if (!world.isAirBlock(blockPos) && world.getBlockState(blockPos).getBlock().getMaterial(world.getBlockState(blockPos)).isSolid()) - return false; - else if ((world.getBlockState(blockPos).getBlock() == Blocks.WATER || world.getBlockState(blockPos).getBlock() == Blocks.FLOWING_WATER) && world.getBlockState(blockPos).getBlock().getMetaFromState(world.getBlockState(blockPos)) == 0) - return false; - else - return true; - } - - public boolean tryPlaceWater(World worldIn, BlockPos pos) { - - Material material = worldIn.getBlockState(pos).getBlock().getMaterial(worldIn.getBlockState(pos)); - boolean notSolid = !material.isSolid(); - - if (!worldIn.isAirBlock(pos) && !notSolid) { - return false; - } else { - if (worldIn.provider.doesWaterVaporize()) { - int i = pos.getX(); - int j = pos.getY(); - int k = pos.getZ(); - worldIn.playSound(null, i, j, k, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); - - for (int l = 0; l < 8; ++l) - worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, (double) i + Math.random(), (double) j + Math.random(), (double) k + Math.random(), 0.0D, 0.0D, 0.0D, 0); - } else { - if (!worldIn.isRemote && notSolid && !material.isLiquid()) - worldIn.destroyBlock(pos, true); - - worldIn.setBlockState(pos, Blocks.FLOWING_WATER.getDefaultState(), 3); - } - - return true; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java deleted file mode 100644 index 9577fd78..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilWhirlwind extends ItemSigilToggleableBase { - public ItemSigilWhirlwind() { - super("whirlwind", 250); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.WHIRLWIND, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemMonsterSoul.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemMonsterSoul.java deleted file mode 100644 index 6e83eb7e..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemMonsterSoul.java +++ /dev/null @@ -1,121 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWill; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.ItemEnum; -import WayofTime.bloodmagic.item.types.ISubItem; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.List; -import java.util.Locale; - -public class ItemMonsterSoul extends ItemEnum.Variant implements IDemonWill { - - public ItemMonsterSoul() { - super(WillType.class, "monster_soul"); - - setMaxStackSize(1); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - tooltip.add(TextHelper.localize("tooltip.bloodmagic.will", getWill(getType(stack), stack))); - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public EnumDemonWillType getType(ItemStack stack) { - return EnumDemonWillType.values()[stack.getItemDamage() % 5]; - } - - @Override - public double getWill(EnumDemonWillType type, ItemStack soulStack) { - if (type != this.getType(soulStack)) { - return 0; - } - - NBTHelper.checkNBT(soulStack); - - NBTTagCompound tag = soulStack.getTagCompound(); - - return tag.getDouble(Constants.NBT.SOULS); - } - - @Override - public void setWill(EnumDemonWillType type, ItemStack soulStack, double souls) { - NBTHelper.checkNBT(soulStack); - - NBTTagCompound tag = soulStack.getTagCompound(); - - soulStack.setItemDamage(type.ordinal()); - - tag.setDouble(Constants.NBT.SOULS, souls); - } - - @Override - public double drainWill(EnumDemonWillType type, ItemStack soulStack, double drainAmount) { - double souls = getWill(type, soulStack); - - double soulsDrained = Math.min(drainAmount, souls); - setWill(type, soulStack, souls - soulsDrained); - - return soulsDrained; - } - - @Override - public ItemStack createWill(int meta, double number) { - ItemStack soulStack = new ItemStack(this, 1, meta % 5); - setWill(getType(soulStack), soulStack, number); - return soulStack; - } - - @Override - public double getWill(ItemStack willStack) { - return this.getWill(EnumDemonWillType.DEFAULT, willStack); - } - - @Override - public void setWill(ItemStack willStack, double will) { - this.setWill(EnumDemonWillType.DEFAULT, willStack, will); - } - - @Override - public double drainWill(ItemStack willStack, double drainAmount) { - return this.drainWill(EnumDemonWillType.DEFAULT, willStack, drainAmount); - } - - public enum WillType implements ISubItem { - - RAW, - CORROSIVE, - DESTRUCTIVE, - VENGEFUL, - STEADFAST,; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.MONSTER_SOUL, count, ordinal()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientArmourGem.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientArmourGem.java deleted file mode 100644 index 9cb62f6d..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientArmourGem.java +++ /dev/null @@ -1,81 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.item.armour.ItemSentientArmour; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.function.Consumer; - -public class ItemSentientArmourGem extends Item implements IMeshProvider { - public ItemSentientArmourGem() { - super(); - - setCreativeTab(BloodMagic.TAB_BM); - setUnlocalizedName(BloodMagic.MODID + ".sentientArmourGem"); - setMaxStackSize(1); - } - - public EnumDemonWillType getCurrentType(ItemStack stack) { - return EnumDemonWillType.DEFAULT; - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - boolean hasSentientArmour = false; - NonNullList armourInventory = player.inventory.armorInventory; - for (ItemStack armourStack : armourInventory) { - if (armourStack != null && armourStack.getItem() instanceof ItemSentientArmour) { - hasSentientArmour = true; - } - } - - if (hasSentientArmour) { - ItemSentientArmour.revertAllArmour(player); - } else { - EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); - double will = PlayerDemonWillHandler.getTotalDemonWill(type, player); - -// PlayerDemonWillHandler.consumeDemonWill(player, willBracket[bracket]); - ItemSentientArmour.convertPlayerArmour(type, will, player); - } - - return new ActionResult<>(EnumActionResult.PASS, player.getHeldItem(hand)); - } - - @SideOnly(Side.CLIENT) - @Override - public ItemMeshDefinition getMeshDefinition() { - return stack -> { - boolean flag = false; - NonNullList armourInventory = Minecraft.getMinecraft().player.inventory.armorInventory; - for (ItemStack armourStack : armourInventory) { - if (armourStack != null && armourStack.getItem() instanceof ItemSentientArmour) { - flag = true; - } - } - - return new ModelResourceLocation(stack.getItem().getRegistryName(), "type=" + (flag ? "" : "de") + "activated"); - }; - } - - @Override - public void gatherVariants(Consumer variants) { - variants.accept("type=activated"); - variants.accept("type=deactivated"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java deleted file mode 100644 index 9f9bb426..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientAxe.java +++ /dev/null @@ -1,495 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionMultiWill; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import WayofTime.bloodmagic.iface.IMultiWillTool; -import WayofTime.bloodmagic.iface.ISentientSwordEffectProvider; -import WayofTime.bloodmagic.iface.ISentientTool; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWill; -import WayofTime.bloodmagic.soul.IDemonWillWeapon; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.monster.EntitySlime; -import net.minecraft.entity.monster.IMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.Item; -import net.minecraft.item.ItemAxe; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.*; -import java.util.function.Consumer; - -public class ItemSentientAxe extends ItemAxe implements IDemonWillWeapon, IMeshProvider, IMultiWillTool, ISentientTool { - public static int[] soulBracket = new int[]{16, 60, 200, 400, 1000}; - public static double[] defaultDamageAdded = new double[]{1, 2, 3, 3.5, 4}; - public static double[] destructiveDamageAdded = new double[]{2, 3, 4, 5, 6}; - public static double[] vengefulDamageAdded = new double[]{0, 0.5, 1, 1.5, 2}; - public static double[] steadfastDamageAdded = new double[]{0, 0.5, 1, 1.5, 2}; - public static double[] defaultDigSpeedAdded = new double[]{1, 1.5, 2, 3, 4}; - public static double[] soulDrainPerSwing = new double[]{0.05, 0.1, 0.2, 0.4, 0.75}; - public static double[] soulDrop = new double[]{2, 4, 7, 10, 13}; - public static double[] staticDrop = new double[]{1, 1, 2, 3, 3}; - - public static double[] healthBonus = new double[]{0, 0, 0, 0, 0}; //TODO: Think of implementing this later - public static double[] vengefulAttackSpeed = new double[]{-3, -2.8, -2.7, -2.6, -2.5}; - public static double[] destructiveAttackSpeed = new double[]{-3.1, -3.1, -3.2, -3.3, -3.3}; - - public static int[] absorptionTime = new int[]{200, 300, 400, 500, 600}; - - public static double maxAbsorptionHearts = 10; - - public static int[] poisonTime = new int[]{25, 50, 60, 80, 100}; - public static int[] poisonLevel = new int[]{0, 0, 0, 1, 1}; - - public static double[] movementSpeed = new double[]{0.05, 0.1, 0.15, 0.2, 0.25}; - - public final double baseAttackDamage = 8; - public final double baseAttackSpeed = -3; - - public ItemSentientAxe() { - super(Item.ToolMaterial.IRON); - setMaxDamage(getMaxDamage() * 2); -// super(ModItems.soulToolMaterial); - - setUnlocalizedName(BloodMagic.MODID + ".sentientAxe"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public float getDestroySpeed(ItemStack stack, IBlockState state) { - float value = super.getDestroySpeed(stack, state); - if (value > 1) { - return (float) (value + getDigSpeedOfSword(stack)); - } else { - return value; - } - } - - @Override - public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { - return RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL == repair.getItem() || super.getIsRepairable(toRepair, repair); - } - - public void recalculatePowers(ItemStack stack, World world, EntityPlayer player) { - EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - this.setCurrentType(stack, soulsRemaining > 0 ? type : EnumDemonWillType.DEFAULT); - int level = getLevel(stack, soulsRemaining); - - double drain = level >= 0 ? soulDrainPerSwing[level] : 0; - double extraDamage = getExtraDamage(type, level); - - setDrainOfActivatedSword(stack, drain); - setDamageOfActivatedSword(stack, baseAttackDamage + extraDamage); - setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); - setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); - setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : baseAttackSpeed); - setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); - setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); - setDigSpeedOfSword(stack, level >= 0 ? getDigSpeed(type, level) : 0); - } - - public double getExtraDamage(EnumDemonWillType type, int willBracket) { - if (willBracket < 0) { - return 0; - } - - switch (type) { - case CORROSIVE: - case DEFAULT: - return defaultDamageAdded[willBracket]; - case DESTRUCTIVE: - return destructiveDamageAdded[willBracket]; - case VENGEFUL: - return vengefulDamageAdded[willBracket]; - case STEADFAST: - return steadfastDamageAdded[willBracket]; - } - - return 0; - } - - public double getAttackSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return vengefulAttackSpeed[willBracket]; - case DESTRUCTIVE: - return destructiveAttackSpeed[willBracket]; - default: - return -2.9; - } - } - - public double getHealthBonus(EnumDemonWillType type, int willBracket) { - switch (type) { - case STEADFAST: - return healthBonus[willBracket]; - default: - return 0; - } - } - - public double getMovementSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return movementSpeed[willBracket]; - default: - return 0; - } - } - - public double getDigSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: -// return movementSpeed[willBracket]; - default: - return defaultDigSpeedAdded[willBracket]; - } - } - - public void applyEffectToEntity(EnumDemonWillType type, int willBracket, EntityLivingBase target, EntityPlayer attacker) { - switch (type) { - case CORROSIVE: - target.addPotionEffect(new PotionEffect(MobEffects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); - break; - case DEFAULT: - break; - case DESTRUCTIVE: - break; - case STEADFAST: - if (!target.isEntityAlive()) { - float absorption = attacker.getAbsorptionAmount(); - attacker.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, absorptionTime[willBracket], 127)); - attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); - } - break; - case VENGEFUL: - break; - } - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - if (super.hitEntity(stack, target, attacker)) { - if (attacker instanceof EntityPlayer) { - EntityPlayer attackerPlayer = (EntityPlayer) attacker; - this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); - EnumDemonWillType type = this.getCurrentType(stack); - double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); - int willBracket = this.getLevel(stack, will); - - applyEffectToEntity(type, willBracket, target, attackerPlayer); - - ItemStack offStack = attackerPlayer.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); - if (offStack.getItem() instanceof ISentientSwordEffectProvider) { - ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); - if (provider.providesEffectForWill(type)) { - provider.applyOnHitEffect(type, stack, offStack, attacker, target); - } - } - } - - return true; - } - - return false; - } - - @Override - public EnumDemonWillType getCurrentType(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - return EnumDemonWillType.DEFAULT; - } - - return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - } - - public void setCurrentType(ItemStack stack, EnumDemonWillType type) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - recalculatePowers(player.getHeldItem(hand), world, player); - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return oldStack.getItem() != newStack.getItem(); - } - - private int getLevel(ItemStack stack, double soulsRemaining) { - int lvl = -1; - for (int i = 0; i < soulBracket.length; i++) { - if (soulsRemaining >= soulBracket[i]) { - lvl = i; - } - } - - return lvl; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientAxe.desc")))); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentType." + getCurrentType(stack).getName().toLowerCase())); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - recalculatePowers(stack, player.getEntityWorld(), player); - - double drain = this.getDrainOfActivatedSword(stack); - if (drain > 0) { - EnumDemonWillType type = getCurrentType(stack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - - if (drain > soulsRemaining) { - return false; - } else { - PlayerDemonWillHandler.consumeDemonWill(type, player, drain); - } - } - - return super.onLeftClickEntity(stack, player, entity); - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionMultiWill("sentient_axe"); - } - - @Override - public void gatherVariants(Consumer variants) { - for (EnumDemonWillType type : EnumDemonWillType.values()) - variants.accept("type=" + type.getName().toLowerCase()); - } - - @Override - public List getRandomDemonWillDrop(EntityLivingBase killedEntity, EntityLivingBase attackingEntity, ItemStack stack, int looting) { - List soulList = new ArrayList<>(); - - if (killedEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) { - return soulList; - } - - double willModifier = killedEntity instanceof EntitySlime ? 0.67 : 1; - - IDemonWill soul = ((IDemonWill) RegistrarBloodMagicItems.MONSTER_SOUL); - - EnumDemonWillType type = this.getCurrentType(stack); - - for (int i = 0; i <= looting; i++) { - if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) { - ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); - soulList.add(soulStack); - } - } - - return soulList; - } - - //TODO: Change attack speed. - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { - Multimap multimap = HashMultimap.create(); - if (slot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); - } - - return multimap; - } - - public double getDamageOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); - } - - public void setDamageOfActivatedSword(ItemStack stack, double damage) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); - } - - public double getDrainOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); - } - - public void setDrainOfActivatedSword(ItemStack stack, double drain) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); - } - - public double getStaticDropOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); - } - - public void setStaticDropOfActivatedSword(ItemStack stack, double drop) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); - } - - public double getDropOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); - } - - public void setDropOfActivatedSword(ItemStack stack, double drop) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DROP, drop); - } - - public double getHealthBonusOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); - } - - public void setHealthBonusOfSword(ItemStack stack, double hp) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); - } - - public double getAttackSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); - } - - public void setAttackSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); - } - - public double getSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); - } - - public void setSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); - } - - public double getDigSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED); - } - - public void setDigSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED, speed); - } - - @Override - public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.getEntityWorld(); - if (!world.isRemote) { - this.recalculatePowers(droppedStack, world, player); - - EnumDemonWillType type = this.getCurrentType(droppedStack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - if (soulsRemaining < 1024) { - return false; - } - - PlayerDemonWillHandler.consumeDemonWill(type, player, 100); - - EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); - specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntity(specterEntity); - - specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); - - specterEntity.setType(this.getCurrentType(droppedStack)); - specterEntity.setOwner(player); - specterEntity.setTamed(true); - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java deleted file mode 100644 index 70e48450..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientBow.java +++ /dev/null @@ -1,496 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow; -import WayofTime.bloodmagic.iface.IMultiWillTool; -import WayofTime.bloodmagic.iface.ISentientTool; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.entity.projectile.EntityTippedArrow; -import net.minecraft.init.Enchantments; -import net.minecraft.init.Items; -import net.minecraft.init.SoundEvents; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.IItemPropertyGetter; -import net.minecraft.item.ItemBow; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.stats.StatList; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.Locale; - -public class ItemSentientBow extends ItemBow implements IMultiWillTool, ISentientTool, IVariantProvider//, IMeshProvider -{ - public static int[] soulBracket = new int[] { 16, 60, 200, 400, 1000, 2000, 4000 }; - public static double[] defaultDamageAdded = new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75 }; - public static float[] velocityAdded = new float[] { 0.25f, 0.5f, 0.75f, 1, 1.25f, 1.5f, 1.75f }; - public static double[] soulDrainPerSwing = new double[] { 0.05, 0.1, 0.2, 0.4, 0.75, 1, 1.5 }; //TODO - public static double[] soulDrop = new double[] { 2, 4, 7, 10, 13, 16, 24 }; - public static double[] staticDrop = new double[] { 1, 1, 2, 3, 3, 3, 4 }; - - public ItemSentientBow() - { - super(); - setUnlocalizedName(BloodMagic.MODID + ".sentientBow"); - setCreativeTab(BloodMagic.TAB_BM); - this.addPropertyOverride(new ResourceLocation("pull"), new IItemPropertyGetter() - { - @SideOnly(Side.CLIENT) - public float apply(ItemStack stack, World world, EntityLivingBase entityIn) - { - if (entityIn == null) - { - return 0.0F; - } else - { - ItemStack itemstack = entityIn.getActiveItemStack(); - return !itemstack.isEmpty() && itemstack.getItem() == RegistrarBloodMagicItems.SENTIENT_BOW ? (float) (stack.getMaxItemUseDuration() - entityIn.getItemInUseCount()) / 20.0F : 0.0F; - } - } - }); - this.addPropertyOverride(new ResourceLocation("pulling"), new IItemPropertyGetter() - { - @SideOnly(Side.CLIENT) - public float apply(ItemStack stack, World world, EntityLivingBase entityIn) - { - return entityIn != null && entityIn.isHandActive() && entityIn.getActiveItemStack() == stack ? 1.0F : 0.0F; - } - }); - this.addPropertyOverride(new ResourceLocation("type"), new IItemPropertyGetter() - { - @SideOnly(Side.CLIENT) - public float apply(ItemStack stack, World world, EntityLivingBase entityIn) - { - return ((ItemSentientBow) RegistrarBloodMagicItems.SENTIENT_BOW).getCurrentType(stack).ordinal(); - } - }); - } - - @Override - public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) - { - return RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL == repair.getItem() || super.getIsRepairable(toRepair, repair); - } - - public void recalculatePowers(ItemStack stack, World world, EntityPlayer player) - { - EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - recalculatePowers(stack, type, soulsRemaining); - } - - public void recalculatePowers(ItemStack stack, EnumDemonWillType type, double will) - { - this.setCurrentType(stack, will > 0 ? type : EnumDemonWillType.DEFAULT); - int level = getLevel(will); -// - double drain = level >= 0 ? soulDrainPerSwing[level] : 0; - - setDrainOfActivatedBow(stack, drain); - setStaticDropOfActivatedBow(stack, level >= 0 ? staticDrop[level] : 1); - setDropOfActivatedBow(stack, level >= 0 ? soulDrop[level] : 0); -// double drain = level >= 0 ? soulDrainPerSwing[level] : 0; -// double extraDamage = level >= 0 ? damageAdded[level] : 0; -// -// setDrainOfActivatedSword(stack, drain); -// setDamageOfActivatedSword(stack, 7 + extraDamage); -// setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); -// setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); - - setVelocityOfArrow(stack, level >= 0 ? 3 + getVelocityModifier(type, level) : 0); - setDamageAdded(stack, level >= 0 ? getDamageModifier(type, level) : 0); - } - - private int getLevel(double soulsRemaining) - { - int lvl = -1; - for (int i = 0; i < soulBracket.length; i++) - { - if (soulsRemaining >= soulBracket[i]) - { - lvl = i; - } - } - - return lvl; - } - - @Override - public EnumDemonWillType getCurrentType(ItemStack stack) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) - { - return EnumDemonWillType.DEFAULT; - } - - return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - } - - public double getDamageModifier(EnumDemonWillType type, int willBracket) - { - switch (type) - { - case VENGEFUL: - return 0; - case DEFAULT: - case CORROSIVE: - case DESTRUCTIVE: - case STEADFAST: - return defaultDamageAdded[willBracket]; - } - - return 0; - } - - public float getVelocityModifier(EnumDemonWillType type, int willBracket) - { - switch (type) - { - case VENGEFUL: - return velocityAdded[willBracket]; - default: - return 0; - } - } - - public void setDamageAdded(ItemStack stack, double damage) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble("damage", damage); - } - - public double getDamageAdded(ItemStack stack) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getDouble("damage"); - } - - public void setVelocityOfArrow(ItemStack stack, float velocity) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setFloat("velocity", velocity); - } - - public float getVelocityOfArrow(ItemStack stack) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - if (tag.hasKey("velocity")) - { - return tag.getFloat("velocity"); - } - - return 3; - } - - public void setCurrentType(ItemStack stack, EnumDemonWillType type) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - } - - public double getDrainOfActivatedBow(ItemStack stack) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); - } - - public void setDrainOfActivatedBow(ItemStack stack, double drain) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); - } - - public double getStaticDropOfActivatedBow(ItemStack stack) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); - } - - public void setStaticDropOfActivatedBow(ItemStack stack, double drop) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); - } - - public double getDropOfActivatedBow(ItemStack stack) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); - } - - public void setDropOfActivatedBow(ItemStack stack, double drop) - { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DROP, drop); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) - { - ItemStack stack = player.getHeldItem(hand); - this.recalculatePowers(stack, world, player); - return super.onItemRightClick(world, player, hand); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) - { - variants.put(0, "inventory"); - } - - public EntityTippedArrow getArrowEntity(World world, ItemStack stack, EntityLivingBase target, EntityLivingBase user, float velocity) - { - EnumDemonWillType type = this.getCurrentType(stack); - - double amount = user instanceof EntityPlayer ? (this.getDropOfActivatedBow(stack) * world.rand.nextDouble() + this.getStaticDropOfActivatedBow(stack)) : 0; - - float newArrowVelocity = velocity * getVelocityOfArrow(stack); - double soulsRemaining = user instanceof EntityPlayer ? (PlayerDemonWillHandler.getTotalDemonWill(type, (EntityPlayer) user)) : 0; - EntitySentientArrow entityArrow = new EntitySentientArrow(world, user, type, amount, getLevel(soulsRemaining)); - - double d0 = target.posX - user.posX; - double d1 = target.getEntityBoundingBox().minY + (double) (target.height / 3.0F) - entityArrow.posY; - double d2 = target.posZ - user.posZ; - double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); - entityArrow.shoot(d0, d1 + d3 * 0.05, d2, newArrowVelocity, 0); - - if (newArrowVelocity == 0) - { - world.playSound(null, user.getPosition(), SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.NEUTRAL, 0.4F, 1.0F); - return null; - } - - if (velocity == 1.0F) - { - entityArrow.setIsCritical(true); - } - - int j = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack); - - entityArrow.setDamage(entityArrow.getDamage() + this.getDamageAdded(stack) + (j > 0 ? j * 0.5 + 0.5 : 0)); - - int k = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack); - - if (k > 0) - { - entityArrow.setKnockbackStrength(k); - } - - if (EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, stack) > 0) - { - entityArrow.setFire(100); - } - - entityArrow.pickupStatus = EntityArrow.PickupStatus.CREATIVE_ONLY; - - return entityArrow; - } - - @Override - public void onPlayerStoppedUsing(ItemStack stack, World world, EntityLivingBase entityLiving, int timeLeft) - { - if (entityLiving instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) entityLiving; - boolean flag = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantments.INFINITY, stack) > 0; - ItemStack itemstack = this.getFiredArrow(player); - - int i = this.getMaxItemUseDuration(stack) - timeLeft; - i = net.minecraftforge.event.ForgeEventFactory.onArrowLoose(stack, world, (EntityPlayer) entityLiving, i, itemstack != null || flag); - if (i < 0) - return; - - if (itemstack != null || flag) - { - if (itemstack == null) - { - itemstack = new ItemStack(Items.ARROW); - } - - float arrowVelocity = getArrowVelocity(i); - - if ((double) arrowVelocity >= 0.1D) - { - boolean flag1 = flag && itemstack.getItem() == Items.ARROW; //Forge: Fix consuming custom arrows. - - if (!world.isRemote) - { - this.recalculatePowers(stack, world, player); - EnumDemonWillType type = this.getCurrentType(stack); - - //Need to do some stuffs -// ItemArrow itemarrow = ((ItemArrow) (itemstack.getItem() instanceof ItemArrow ? itemstack.getItem() : Items.arrow)); -// EntityArrow entityArrow = itemarrow.createArrow(world, itemstack, player); - - double amount = (this.getDropOfActivatedBow(stack) * world.rand.nextDouble() + this.getStaticDropOfActivatedBow(stack)); - - float newArrowVelocity = arrowVelocity * getVelocityOfArrow(stack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - EntitySentientArrow entityArrow = new EntitySentientArrow(world, entityLiving, type, amount, getLevel(soulsRemaining)); - entityArrow.shoot(player, player.rotationPitch, player.rotationYaw, 0.0F, newArrowVelocity, 1.0F); - - if (newArrowVelocity == 0) - { - world.playSound(null, player.getPosition(), SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.NEUTRAL, 0.4F, 1.0F); - return; - } - - if (arrowVelocity == 1.0F) - { - entityArrow.setIsCritical(true); - } - - int j = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack); - - entityArrow.setDamage(entityArrow.getDamage() + this.getDamageAdded(stack) + (j > 0 ? j * 0.5 + 0.5 : 0)); - - int k = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack); - - if (k > 0) - { - entityArrow.setKnockbackStrength(k); - } - - if (EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, stack) > 0) - { - entityArrow.setFire(100); - } - - stack.damageItem(1, player); - - if (flag1) - { - entityArrow.pickupStatus = EntityArrow.PickupStatus.CREATIVE_ONLY; - } - - world.spawnEntity(entityArrow); - } - - world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.NEUTRAL, 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + arrowVelocity * 0.5F); - - if (!flag1) - { - itemstack.shrink(1); - - if (itemstack.isEmpty()) - { - player.inventory.deleteStack(itemstack); - } - } - - player.addStat(StatList.getObjectUseStats(this)); - } - } - } - } - - protected ItemStack getFiredArrow(EntityPlayer player) - { - if (this.isArrow(player.getHeldItem(EnumHand.OFF_HAND))) - { - return player.getHeldItem(EnumHand.OFF_HAND); - } else if (this.isArrow(player.getHeldItem(EnumHand.MAIN_HAND))) - { - return player.getHeldItem(EnumHand.MAIN_HAND); - } else - { - for (int i = 0; i < player.inventory.getSizeInventory(); ++i) - { - ItemStack itemstack = player.inventory.getStackInSlot(i); - - if (this.isArrow(itemstack)) - { - return itemstack; - } - } - - return null; - } - } - - @Override - public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) - { - World world = player.getEntityWorld(); - if (!world.isRemote) - { - this.recalculatePowers(droppedStack, world, player); - - EnumDemonWillType type = this.getCurrentType(droppedStack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - if (soulsRemaining < 1024) - { - return false; - } - - PlayerDemonWillHandler.consumeDemonWill(type, player, 100); - - EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); - specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntity(specterEntity); - - specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); - - specterEntity.setType(this.getCurrentType(droppedStack)); - specterEntity.setOwner(player); - specterEntity.setTamed(true); - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java deleted file mode 100644 index f939b4e3..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientPickaxe.java +++ /dev/null @@ -1,494 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionMultiWill; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import WayofTime.bloodmagic.iface.IMultiWillTool; -import WayofTime.bloodmagic.iface.ISentientSwordEffectProvider; -import WayofTime.bloodmagic.iface.ISentientTool; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWill; -import WayofTime.bloodmagic.soul.IDemonWillWeapon; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.monster.EntitySlime; -import net.minecraft.entity.monster.IMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.Item; -import net.minecraft.item.ItemPickaxe; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.*; -import java.util.function.Consumer; - -public class ItemSentientPickaxe extends ItemPickaxe implements IDemonWillWeapon, IMeshProvider, IMultiWillTool, ISentientTool { - public static int[] soulBracket = new int[]{16, 60, 200, 400, 1000}; - public static double[] defaultDamageAdded = new double[]{1, 2, 3, 3.5, 4}; - public static double[] destructiveDamageAdded = new double[]{2, 3, 4, 5, 6}; - public static double[] vengefulDamageAdded = new double[]{0, 0.5, 1, 1.5, 2}; - public static double[] steadfastDamageAdded = new double[]{0, 0.5, 1, 1.5, 2}; - public static double[] defaultDigSpeedAdded = new double[]{1, 1.5, 2, 3, 4}; - public static double[] soulDrainPerSwing = new double[]{0.05, 0.1, 0.2, 0.4, 0.75}; - public static double[] soulDrop = new double[]{2, 4, 7, 10, 13}; - public static double[] staticDrop = new double[]{1, 1, 2, 3, 3}; - - public static double[] healthBonus = new double[]{0, 0, 0, 0, 0}; //TODO: Think of implementing this later - public static double[] vengefulAttackSpeed = new double[]{-3, -2.8, -2.7, -2.6, -2.5}; - public static double[] destructiveAttackSpeed = new double[]{-3.1, -3.1, -3.2, -3.3, -3.3}; - - public static int[] absorptionTime = new int[]{200, 300, 400, 500, 600}; - - public static double maxAbsorptionHearts = 10; - - public static int[] poisonTime = new int[]{25, 50, 60, 80, 100}; - public static int[] poisonLevel = new int[]{0, 0, 0, 1, 1}; - - public static double[] movementSpeed = new double[]{0.05, 0.1, 0.15, 0.2, 0.25}; - - public final double baseAttackDamage = 3; - public final double baseAttackSpeed = -2.8; - - public ItemSentientPickaxe() { - super(Item.ToolMaterial.IRON); - setMaxDamage(getMaxDamage() * 2); -// super(ModItems.soulToolMaterial); - - setUnlocalizedName(BloodMagic.MODID + ".sentientPickaxe"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public float getDestroySpeed(ItemStack stack, IBlockState state) { - float value = super.getDestroySpeed(stack, state); - if (value > 1) { - return (float) (value + getDigSpeedOfSword(stack)); - } else { - return value; - } - } - - @Override - public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { - return RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL == repair.getItem() ? true : super.getIsRepairable(toRepair, repair); - } - - public void recalculatePowers(ItemStack stack, World world, EntityPlayer player) { - EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - this.setCurrentType(stack, soulsRemaining > 0 ? type : EnumDemonWillType.DEFAULT); - int level = getLevel(stack, soulsRemaining); - - double drain = level >= 0 ? soulDrainPerSwing[level] : 0; - double extraDamage = getExtraDamage(type, level); - - setDrainOfActivatedSword(stack, drain); - setDamageOfActivatedSword(stack, baseAttackDamage + extraDamage); - setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); - setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); - setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : baseAttackSpeed); - setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); - setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); - setDigSpeedOfSword(stack, level >= 0 ? getDigSpeed(type, level) : 0); - } - - public double getExtraDamage(EnumDemonWillType type, int willBracket) { - if (willBracket < 0) { - return 0; - } - - switch (type) { - case CORROSIVE: - case DEFAULT: - return defaultDamageAdded[willBracket]; - case DESTRUCTIVE: - return destructiveDamageAdded[willBracket]; - case VENGEFUL: - return vengefulDamageAdded[willBracket]; - case STEADFAST: - return steadfastDamageAdded[willBracket]; - } - - return 0; - } - - public double getAttackSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return vengefulAttackSpeed[willBracket]; - case DESTRUCTIVE: - return destructiveAttackSpeed[willBracket]; - default: - return -2.9; - } - } - - public double getHealthBonus(EnumDemonWillType type, int willBracket) { - switch (type) { - case STEADFAST: - return healthBonus[willBracket]; - default: - return 0; - } - } - - public double getMovementSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return movementSpeed[willBracket]; - default: - return 0; - } - } - - public double getDigSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: -// return movementSpeed[willBracket]; - default: - return defaultDigSpeedAdded[willBracket]; - } - } - - public void applyEffectToEntity(EnumDemonWillType type, int willBracket, EntityLivingBase target, EntityPlayer attacker) { - switch (type) { - case CORROSIVE: - target.addPotionEffect(new PotionEffect(MobEffects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); - break; - case DEFAULT: - break; - case DESTRUCTIVE: - break; - case STEADFAST: - if (!target.isEntityAlive()) { - float absorption = attacker.getAbsorptionAmount(); - attacker.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, absorptionTime[willBracket], 127)); - attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); - } - break; - case VENGEFUL: - break; - } - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - if (super.hitEntity(stack, target, attacker)) { - if (attacker instanceof EntityPlayer) { - EntityPlayer attackerPlayer = (EntityPlayer) attacker; - this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); - EnumDemonWillType type = this.getCurrentType(stack); - double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); - int willBracket = this.getLevel(stack, will); - - applyEffectToEntity(type, willBracket, target, attackerPlayer); - - ItemStack offStack = attackerPlayer.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); - if (offStack.getItem() instanceof ISentientSwordEffectProvider) { - ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); - if (provider.providesEffectForWill(type)) { - provider.applyOnHitEffect(type, stack, offStack, attacker, target); - } - } - } - - return true; - } - - return false; - } - - @Override - public EnumDemonWillType getCurrentType(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - return EnumDemonWillType.DEFAULT; - } - - return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - } - - public void setCurrentType(ItemStack stack, EnumDemonWillType type) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - recalculatePowers(player.getHeldItem(hand), world, player); - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return oldStack.getItem() != newStack.getItem(); - } - - private int getLevel(ItemStack stack, double soulsRemaining) { - int lvl = -1; - for (int i = 0; i < soulBracket.length; i++) { - if (soulsRemaining >= soulBracket[i]) { - lvl = i; - } - } - - return lvl; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientPickaxe.desc")))); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentType." + getCurrentType(stack).getName().toLowerCase())); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - recalculatePowers(stack, player.getEntityWorld(), player); - - double drain = this.getDrainOfActivatedSword(stack); - if (drain > 0) { - EnumDemonWillType type = getCurrentType(stack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - - if (drain > soulsRemaining) { - return false; - } else { - PlayerDemonWillHandler.consumeDemonWill(type, player, drain); - } - } - - return super.onLeftClickEntity(stack, player, entity); - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionMultiWill("sentient_pickaxe"); - } - - @Override - public void gatherVariants(Consumer variants) { - for (EnumDemonWillType type : EnumDemonWillType.values()) - variants.accept("type=" + type.getName().toLowerCase()); - } - - @Override - public List getRandomDemonWillDrop(EntityLivingBase killedEntity, EntityLivingBase attackingEntity, ItemStack stack, int looting) { - List soulList = new ArrayList<>(); - - if (killedEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) { - return soulList; - } - - double willModifier = killedEntity instanceof EntitySlime ? 0.67 : 1; - - IDemonWill soul = ((IDemonWill) RegistrarBloodMagicItems.MONSTER_SOUL); - - EnumDemonWillType type = this.getCurrentType(stack); - - for (int i = 0; i <= looting; i++) { - if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) { - ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); - soulList.add(soulStack); - } - } - - return soulList; - } - - //TODO: Change attack speed. - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { - Multimap multimap = HashMultimap.create(); - if (slot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); - } - - return multimap; - } - - public double getDamageOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); - } - - public void setDamageOfActivatedSword(ItemStack stack, double damage) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); - } - - public double getDrainOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); - } - - public void setDrainOfActivatedSword(ItemStack stack, double drain) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); - } - - public double getStaticDropOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); - } - - public void setStaticDropOfActivatedSword(ItemStack stack, double drop) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); - } - - public double getDropOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); - } - - public void setDropOfActivatedSword(ItemStack stack, double drop) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DROP, drop); - } - - public double getHealthBonusOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); - } - - public void setHealthBonusOfSword(ItemStack stack, double hp) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); - } - - public double getAttackSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); - } - - public void setAttackSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); - } - - public double getSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); - } - - public void setSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); - } - - public double getDigSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED); - } - - public void setDigSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED, speed); - } - - @Override - public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.getEntityWorld(); - if (!world.isRemote) { - this.recalculatePowers(droppedStack, world, player); - - EnumDemonWillType type = this.getCurrentType(droppedStack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - if (soulsRemaining < 1024) { - return false; - } - - PlayerDemonWillHandler.consumeDemonWill(type, player, 100); - - EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); - specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntity(specterEntity); - - specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); - - specterEntity.setType(this.getCurrentType(droppedStack)); - specterEntity.setOwner(player); - specterEntity.setTamed(true); - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java deleted file mode 100644 index 995f80ac..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientShovel.java +++ /dev/null @@ -1,495 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionMultiWill; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import WayofTime.bloodmagic.iface.IMultiWillTool; -import WayofTime.bloodmagic.iface.ISentientSwordEffectProvider; -import WayofTime.bloodmagic.iface.ISentientTool; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWill; -import WayofTime.bloodmagic.soul.IDemonWillWeapon; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.monster.EntitySlime; -import net.minecraft.entity.monster.IMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.Item; -import net.minecraft.item.ItemSpade; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.*; -import java.util.function.Consumer; - -public class ItemSentientShovel extends ItemSpade implements IDemonWillWeapon, IMeshProvider, IMultiWillTool, ISentientTool { - public static int[] soulBracket = new int[]{16, 60, 200, 400, 1000}; - public static double[] defaultDamageAdded = new double[]{1, 2, 3, 3.5, 4}; - public static double[] destructiveDamageAdded = new double[]{2, 3, 4, 5, 6}; - public static double[] vengefulDamageAdded = new double[]{0, 0.5, 1, 1.5, 2}; - public static double[] steadfastDamageAdded = new double[]{0, 0.5, 1, 1.5, 2}; - public static double[] defaultDigSpeedAdded = new double[]{1, 1.5, 2, 3, 4}; - public static double[] soulDrainPerSwing = new double[]{0.05, 0.1, 0.2, 0.4, 0.75}; - public static double[] soulDrop = new double[]{2, 4, 7, 10, 13}; - public static double[] staticDrop = new double[]{1, 1, 2, 3, 3}; - - public static double[] healthBonus = new double[]{0, 0, 0, 0, 0}; //TODO: Think of implementing this later - public static double[] vengefulAttackSpeed = new double[]{-3, -2.8, -2.7, -2.6, -2.5}; - public static double[] destructiveAttackSpeed = new double[]{-3.1, -3.1, -3.2, -3.3, -3.3}; - - public static int[] absorptionTime = new int[]{200, 300, 400, 500, 600}; - - public static double maxAbsorptionHearts = 10; - - public static int[] poisonTime = new int[]{25, 50, 60, 80, 100}; - public static int[] poisonLevel = new int[]{0, 0, 0, 1, 1}; - - public static double[] movementSpeed = new double[]{0.05, 0.1, 0.15, 0.2, 0.25}; - - public final double baseAttackDamage = 3; - public final double baseAttackSpeed = -2.8; - - public ItemSentientShovel() { - super(Item.ToolMaterial.IRON); - setMaxDamage(getMaxDamage() * 2); -// super(ModItems.soulToolMaterial); - - setUnlocalizedName(BloodMagic.MODID + ".sentientShovel"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public float getDestroySpeed(ItemStack stack, IBlockState state) { - float value = super.getDestroySpeed(stack, state); - if (value > 1) { - return (float) (value + getDigSpeedOfSword(stack)); - } else { - return value; - } - } - - @Override - public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { - return RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL == repair.getItem() || super.getIsRepairable(toRepair, repair); - } - - public void recalculatePowers(ItemStack stack, World world, EntityPlayer player) { - EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - this.setCurrentType(stack, soulsRemaining > 0 ? type : EnumDemonWillType.DEFAULT); - int level = getLevel(stack, soulsRemaining); - - double drain = level >= 0 ? soulDrainPerSwing[level] : 0; - double extraDamage = getExtraDamage(type, level); - - setDrainOfActivatedSword(stack, drain); - setDamageOfActivatedSword(stack, baseAttackDamage + extraDamage); - setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); - setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); - setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : baseAttackSpeed); - setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); - setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); - setDigSpeedOfSword(stack, level >= 0 ? getDigSpeed(type, level) : 0); - } - - public double getExtraDamage(EnumDemonWillType type, int willBracket) { - if (willBracket < 0) { - return 0; - } - - switch (type) { - case CORROSIVE: - case DEFAULT: - return defaultDamageAdded[willBracket]; - case DESTRUCTIVE: - return destructiveDamageAdded[willBracket]; - case VENGEFUL: - return vengefulDamageAdded[willBracket]; - case STEADFAST: - return steadfastDamageAdded[willBracket]; - } - - return 0; - } - - public double getAttackSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return vengefulAttackSpeed[willBracket]; - case DESTRUCTIVE: - return destructiveAttackSpeed[willBracket]; - default: - return -2.9; - } - } - - public double getHealthBonus(EnumDemonWillType type, int willBracket) { - switch (type) { - case STEADFAST: - return healthBonus[willBracket]; - default: - return 0; - } - } - - public double getMovementSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return movementSpeed[willBracket]; - default: - return 0; - } - } - - public double getDigSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: -// return movementSpeed[willBracket]; - default: - return defaultDigSpeedAdded[willBracket]; - } - } - - public void applyEffectToEntity(EnumDemonWillType type, int willBracket, EntityLivingBase target, EntityPlayer attacker) { - switch (type) { - case CORROSIVE: - target.addPotionEffect(new PotionEffect(MobEffects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); - break; - case DEFAULT: - break; - case DESTRUCTIVE: - break; - case STEADFAST: - if (!target.isEntityAlive()) { - float absorption = attacker.getAbsorptionAmount(); - attacker.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, absorptionTime[willBracket], 127)); - attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); - } - break; - case VENGEFUL: - break; - } - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - if (super.hitEntity(stack, target, attacker)) { - if (attacker instanceof EntityPlayer) { - EntityPlayer attackerPlayer = (EntityPlayer) attacker; - this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); - EnumDemonWillType type = this.getCurrentType(stack); - double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); - int willBracket = this.getLevel(stack, will); - - applyEffectToEntity(type, willBracket, target, attackerPlayer); - - ItemStack offStack = attackerPlayer.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); - if (offStack.getItem() instanceof ISentientSwordEffectProvider) { - ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); - if (provider.providesEffectForWill(type)) { - provider.applyOnHitEffect(type, stack, offStack, attacker, target); - } - } - } - - return true; - } - - return false; - } - - @Override - public EnumDemonWillType getCurrentType(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - return EnumDemonWillType.DEFAULT; - } - - return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - } - - public void setCurrentType(ItemStack stack, EnumDemonWillType type) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - recalculatePowers(player.getHeldItem(hand), world, player); - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return oldStack.getItem() != newStack.getItem(); - } - - private int getLevel(ItemStack stack, double soulsRemaining) { - int lvl = -1; - for (int i = 0; i < soulBracket.length; i++) { - if (soulsRemaining >= soulBracket[i]) { - lvl = i; - } - } - - return lvl; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientShovel.desc")))); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentType." + getCurrentType(stack).getName().toLowerCase())); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - recalculatePowers(stack, player.getEntityWorld(), player); - - double drain = this.getDrainOfActivatedSword(stack); - if (drain > 0) { - EnumDemonWillType type = getCurrentType(stack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - - if (drain > soulsRemaining) { - return false; - } else { - PlayerDemonWillHandler.consumeDemonWill(type, player, drain); - } - } - - return super.onLeftClickEntity(stack, player, entity); - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionMultiWill("sentient_shovel"); - } - - @Override - public void gatherVariants(Consumer variants) { - for (EnumDemonWillType type : EnumDemonWillType.values()) - variants.accept("type=" + type.getName().toLowerCase()); - } - - @Override - public List getRandomDemonWillDrop(EntityLivingBase killedEntity, EntityLivingBase attackingEntity, ItemStack stack, int looting) { - List soulList = new ArrayList<>(); - - if (killedEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) { - return soulList; - } - - double willModifier = killedEntity instanceof EntitySlime ? 0.67 : 1; - - IDemonWill soul = ((IDemonWill) RegistrarBloodMagicItems.MONSTER_SOUL); - - EnumDemonWillType type = this.getCurrentType(stack); - - for (int i = 0; i <= looting; i++) { - if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) { - ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); - soulList.add(soulStack); - } - } - - return soulList; - } - - //TODO: Change attack speed. - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { - Multimap multimap = HashMultimap.create(); - if (slot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); - } - - return multimap; - } - - public double getDamageOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); - } - - public void setDamageOfActivatedSword(ItemStack stack, double damage) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); - } - - public double getDrainOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); - } - - public void setDrainOfActivatedSword(ItemStack stack, double drain) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); - } - - public double getStaticDropOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); - } - - public void setStaticDropOfActivatedSword(ItemStack stack, double drop) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); - } - - public double getDropOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); - } - - public void setDropOfActivatedSword(ItemStack stack, double drop) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DROP, drop); - } - - public double getHealthBonusOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); - } - - public void setHealthBonusOfSword(ItemStack stack, double hp) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); - } - - public double getAttackSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); - } - - public void setAttackSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); - } - - public double getSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); - } - - public void setSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); - } - - public double getDigSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED); - } - - public void setDigSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DIG_SPEED, speed); - } - - @Override - public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.getEntityWorld(); - if (!world.isRemote) { - this.recalculatePowers(droppedStack, world, player); - - EnumDemonWillType type = this.getCurrentType(droppedStack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - if (soulsRemaining < 1024) { - return false; - } - - PlayerDemonWillHandler.consumeDemonWill(type, player, 100); - - EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); - specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntity(specterEntity); - - specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); - - specterEntity.setType(this.getCurrentType(droppedStack)); - specterEntity.setOwner(player); - specterEntity.setTamed(true); - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java deleted file mode 100644 index d97cab1c..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java +++ /dev/null @@ -1,455 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionMultiWill; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import WayofTime.bloodmagic.iface.IMultiWillTool; -import WayofTime.bloodmagic.iface.ISentientSwordEffectProvider; -import WayofTime.bloodmagic.iface.ISentientTool; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWill; -import WayofTime.bloodmagic.soul.IDemonWillWeapon; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.monster.EntitySlime; -import net.minecraft.entity.monster.IMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemSword; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.*; -import java.util.function.Consumer; - -public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IMeshProvider, IMultiWillTool, ISentientTool { - public static int[] soulBracket = new int[]{16, 60, 200, 400, 1000, 2000, 4000}; - public static double[] defaultDamageAdded = new double[]{1, 1.5, 2, 2.5, 3, 3.5, 4}; - public static double[] destructiveDamageAdded = new double[]{1.5, 2.25, 3, 3.75, 4.5, 5.25, 6}; - public static double[] vengefulDamageAdded = new double[]{0, 0.5, 1, 1.5, 2, 2.25, 2.5}; - public static double[] steadfastDamageAdded = new double[]{0, 0.5, 1, 1.5, 2, 2.25, 2.5}; - public static double[] soulDrainPerSwing = new double[]{0.05, 0.1, 0.2, 0.4, 0.75, 1, 1.25}; - public static double[] soulDrop = new double[]{2, 4, 7, 10, 13, 15, 18}; - public static double[] staticDrop = new double[]{1, 1, 2, 3, 3, 4, 4}; - - public static double[] healthBonus = new double[]{0, 0, 0, 0, 0, 0, 0}; //TODO: Think of implementing this later - public static double[] vengefulAttackSpeed = new double[]{-2.1, -2, -1.8, -1.7, -1.6, -1.6, -1.5}; - public static double[] destructiveAttackSpeed = new double[]{-2.6, -2.7, -2.8, -2.9, -3, -3, -3}; - - public static int[] absorptionTime = new int[]{200, 300, 400, 500, 600, 700, 800}; - - public static double maxAbsorptionHearts = 10; - - public static int[] poisonTime = new int[]{25, 50, 60, 80, 100, 120, 150}; - public static int[] poisonLevel = new int[]{0, 0, 0, 1, 1, 1, 1}; - - public static double[] movementSpeed = new double[]{0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.4}; - - public ItemSentientSword() { - super(RegistrarBloodMagicItems.SOUL_TOOL_MATERIAL); - - setUnlocalizedName(BloodMagic.MODID + ".sentientSword"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { - return RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL == repair.getItem() || super.getIsRepairable(toRepair, repair); - } - - public void recalculatePowers(ItemStack stack, World world, EntityPlayer player) { - EnumDemonWillType type = PlayerDemonWillHandler.getLargestWillType(player); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - recalculatePowers(stack, type, soulsRemaining); - } - - public void recalculatePowers(ItemStack stack, EnumDemonWillType type, double will) { - this.setCurrentType(stack, will > 0 ? type : EnumDemonWillType.DEFAULT); - int level = getLevel(stack, will); - - double drain = level >= 0 ? soulDrainPerSwing[level] : 0; - double extraDamage = getExtraDamage(type, level); - - setDrainOfActivatedSword(stack, drain); - setDamageOfActivatedSword(stack, 5 + extraDamage); - setStaticDropOfActivatedSword(stack, level >= 0 ? staticDrop[level] : 1); - setDropOfActivatedSword(stack, level >= 0 ? soulDrop[level] : 0); - setAttackSpeedOfSword(stack, level >= 0 ? getAttackSpeed(type, level) : -2.4); - setHealthBonusOfSword(stack, level >= 0 ? getHealthBonus(type, level) : 0); - setSpeedOfSword(stack, level >= 0 ? getMovementSpeed(type, level) : 0); - } - - public double getExtraDamage(EnumDemonWillType type, int willBracket) { - if (willBracket < 0) { - return 0; - } - - switch (type) { - case CORROSIVE: - case DEFAULT: - return defaultDamageAdded[willBracket]; - case DESTRUCTIVE: - return destructiveDamageAdded[willBracket]; - case VENGEFUL: - return vengefulDamageAdded[willBracket]; - case STEADFAST: - return steadfastDamageAdded[willBracket]; - } - - return 0; - } - - public double getAttackSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return vengefulAttackSpeed[willBracket]; - case DESTRUCTIVE: - return destructiveAttackSpeed[willBracket]; - default: - return -2.4; - } - } - - public double getHealthBonus(EnumDemonWillType type, int willBracket) { - switch (type) { - case STEADFAST: - return healthBonus[willBracket]; - default: - return 0; - } - } - - public double getMovementSpeed(EnumDemonWillType type, int willBracket) { - switch (type) { - case VENGEFUL: - return movementSpeed[willBracket]; - default: - return 0; - } - } - - public void applyEffectToEntity(EnumDemonWillType type, int willBracket, EntityLivingBase target, EntityLivingBase attacker) { - switch (type) { - case CORROSIVE: - target.addPotionEffect(new PotionEffect(MobEffects.WITHER, poisonTime[willBracket], poisonLevel[willBracket])); - break; - case DEFAULT: - break; - case DESTRUCTIVE: - break; - case STEADFAST: - if (!target.isEntityAlive()) { - float absorption = attacker.getAbsorptionAmount(); - attacker.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, absorptionTime[willBracket], 127)); - attacker.setAbsorptionAmount((float) Math.min(absorption + target.getMaxHealth() * 0.05f, maxAbsorptionHearts)); - } - break; - case VENGEFUL: - break; - } - } - - @Override - public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - if (super.hitEntity(stack, target, attacker)) { - if (attacker instanceof EntityPlayer) { - EntityPlayer attackerPlayer = (EntityPlayer) attacker; - this.recalculatePowers(stack, attackerPlayer.getEntityWorld(), attackerPlayer); - EnumDemonWillType type = this.getCurrentType(stack); - double will = PlayerDemonWillHandler.getTotalDemonWill(type, attackerPlayer); - int willBracket = this.getLevel(stack, will); - - applyEffectToEntity(type, willBracket, target, attackerPlayer); - - ItemStack offStack = attackerPlayer.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); - if (offStack.getItem() instanceof ISentientSwordEffectProvider) { - ISentientSwordEffectProvider provider = (ISentientSwordEffectProvider) offStack.getItem(); - if (provider.providesEffectForWill(type)) { - provider.applyOnHitEffect(type, stack, offStack, attacker, target); - } - } - } - - return true; - } - - return false; - } - - @Override - public EnumDemonWillType getCurrentType(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - return EnumDemonWillType.DEFAULT; - } - - return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - } - - public void setCurrentType(ItemStack stack, EnumDemonWillType type) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - recalculatePowers(player.getHeldItem(hand), world, player); - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return oldStack.getItem() != newStack.getItem(); - } - - private int getLevel(ItemStack stack, double soulsRemaining) { - int lvl = -1; - for (int i = 0; i < soulBracket.length; i++) { - if (soulsRemaining >= soulBracket[i]) { - lvl = i; - } - } - - return lvl; - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientSword.desc")))); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentType." + getCurrentType(stack).getName().toLowerCase())); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { - recalculatePowers(stack, player.getEntityWorld(), player); - - double drain = this.getDrainOfActivatedSword(stack); - if (drain > 0) { - EnumDemonWillType type = getCurrentType(stack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - - if (drain > soulsRemaining) { - return false; - } else { - PlayerDemonWillHandler.consumeDemonWill(type, player, drain); - } - } - - return super.onLeftClickEntity(stack, player, entity); - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionMultiWill("sentient_sword"); - } - - @Override - public void gatherVariants(Consumer variants) { - for (EnumDemonWillType type : EnumDemonWillType.values()) - variants.accept("type=" + type.getName().toLowerCase()); - } - - @Override - public List getRandomDemonWillDrop(EntityLivingBase killedEntity, EntityLivingBase attackingEntity, ItemStack stack, int looting) { - List soulList = new ArrayList<>(); - - if (killedEntity.getEntityWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(killedEntity instanceof IMob)) { - return soulList; - } - - double willModifier = killedEntity instanceof EntitySlime ? 0.67 : 1; - - IDemonWill soul = ((IDemonWill) RegistrarBloodMagicItems.MONSTER_SOUL); - - EnumDemonWillType type = this.getCurrentType(stack); - - for (int i = 0; i <= looting; i++) { - if (i == 0 || attackingEntity.getEntityWorld().rand.nextDouble() < 0.4) { - ItemStack soulStack = soul.createWill(type.ordinal(), willModifier * (this.getDropOfActivatedSword(stack) * attackingEntity.getEntityWorld().rand.nextDouble() + this.getStaticDropOfActivatedSword(stack)) * killedEntity.getMaxHealth() / 20d); - soulList.add(soulStack); - } - } - - return soulList; - } - - //TODO: Change attack speed. - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { - Multimap multimap = HashMultimap.create(); - if (slot == EntityEquipmentSlot.MAINHAND) { - multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", getDamageOfActivatedSword(stack), 0)); - multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.getAttackSpeedOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(new UUID(0, 31818145), "Weapon modifier", this.getHealthBonusOfSword(stack), 0)); - multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(new UUID(0, 4218052), "Weapon modifier", this.getSpeedOfSword(stack), 2)); - } - - return multimap; - } - - public double getDamageOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DAMAGE); - } - - public void setDamageOfActivatedSword(ItemStack stack, double damage) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DAMAGE, damage); - } - - public double getDrainOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN); - } - - public void setDrainOfActivatedSword(ItemStack stack, double drain) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ACTIVE_DRAIN, drain); - } - - public double getStaticDropOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP); - } - - public void setStaticDropOfActivatedSword(ItemStack stack, double drop) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_STATIC_DROP, drop); - } - - public double getDropOfActivatedSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_DROP); - } - - public void setDropOfActivatedSword(ItemStack stack, double drop) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_DROP, drop); - } - - public double getHealthBonusOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_HEALTH); - } - - public void setHealthBonusOfSword(ItemStack stack, double hp) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_HEALTH, hp); - } - - public double getAttackSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED); - } - - public void setAttackSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_ATTACK_SPEED, speed); - } - - public double getSpeedOfSword(ItemStack stack) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - return tag.getDouble(Constants.NBT.SOUL_SWORD_SPEED); - } - - public void setSpeedOfSword(ItemStack stack, double speed) { - NBTHelper.checkNBT(stack); - - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOUL_SWORD_SPEED, speed); - } - - @Override - public boolean spawnSentientEntityOnDrop(ItemStack droppedStack, EntityPlayer player) { - World world = player.getEntityWorld(); - if (!world.isRemote) { - this.recalculatePowers(droppedStack, world, player); - - EnumDemonWillType type = this.getCurrentType(droppedStack); - double soulsRemaining = PlayerDemonWillHandler.getTotalDemonWill(type, player); - if (soulsRemaining < 1024) { - return false; - } - - PlayerDemonWillHandler.consumeDemonWill(type, player, 100); - - EntitySentientSpecter specterEntity = new EntitySentientSpecter(world); - specterEntity.setPosition(player.posX, player.posY, player.posZ); - world.spawnEntity(specterEntity); - - specterEntity.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, droppedStack.copy()); - - specterEntity.setType(this.getCurrentType(droppedStack)); - specterEntity.setOwner(player); - specterEntity.setTamed(true); - - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java deleted file mode 100644 index aa678159..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulGem.java +++ /dev/null @@ -1,268 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionWillGem; -import WayofTime.bloodmagic.iface.IMultiWillTool; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWill; -import WayofTime.bloodmagic.soul.IDemonWillGem; -import WayofTime.bloodmagic.soul.PlayerDemonWillHandler; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.List; -import java.util.Locale; -import java.util.function.Consumer; - -public class ItemSoulGem extends Item implements IDemonWillGem, IMeshProvider, IMultiWillTool { - public static String[] names = {"petty", "lesser", "common", "greater", "grand"}; - - public ItemSoulGem() { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".soulGem."); - setHasSubtypes(true); - setMaxStackSize(1); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + names[stack.getItemDamage()]; - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - EnumDemonWillType type = this.getCurrentType(stack); - double drain = Math.min(this.getWill(type, stack), this.getMaxWill(type, stack) / 10); - - double filled = PlayerDemonWillHandler.addDemonWill(type, player, drain, stack); - this.drainWill(type, stack, filled, true); - - return new ActionResult<>(EnumActionResult.PASS, stack); - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() { - return new CustomMeshDefinitionWillGem("soul_gem"); - } - - @Override - public void gatherVariants(Consumer variants) { - for (EnumDemonWillType type : EnumDemonWillType.values()) { - variants.accept("type=petty_" + type.getName().toLowerCase()); - variants.accept("type=lesser_" + type.getName().toLowerCase()); - variants.accept("type=common_" + type.getName().toLowerCase()); - variants.accept("type=greater_" + type.getName().toLowerCase()); - variants.accept("type=grand_" + type.getName().toLowerCase()); - } - } - - @Override - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (int i = 0; i < names.length; i++) { - ItemStack emptyStack = new ItemStack(this, 1, i); - - list.add(emptyStack); - } - for (EnumDemonWillType type : EnumDemonWillType.values()) { - for (int i = 0; i < names.length; i++) { - ItemStack fullStack = new ItemStack(this, 1, i); - setWill(type, fullStack, getMaxWill(EnumDemonWillType.DEFAULT, fullStack)); - list.add(fullStack); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - if (!stack.hasTagCompound()) - return; - - EnumDemonWillType type = this.getCurrentType(stack); - tooltip.add(TextHelper.localize("tooltip.bloodmagic.soulGem." + names[stack.getItemDamage()])); - tooltip.add(TextHelper.localize("tooltip.bloodmagic.will", getWill(type, stack))); - tooltip.add(TextHelper.localizeEffect("tooltip.bloodmagic.currentType." + getCurrentType(stack).getName().toLowerCase())); - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return true; - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - EnumDemonWillType type = this.getCurrentType(stack); - double maxWill = getMaxWill(type, stack); - if (maxWill <= 0) { - return 1; - } - return 1.0 - (getWill(type, stack) / maxWill); - } - - @Override - public int getRGBDurabilityForDisplay(ItemStack stack) { - EnumDemonWillType type = this.getCurrentType(stack); - double maxWill = getMaxWill(type, stack); - if (maxWill <= 0) { - return 1; - } - - return MathHelper.hsvToRGB(Math.max(0.0F, (float) (getWill(type, stack)) / (float) maxWill) / 3.0F, 1.0F, 1.0F); - } - - @Override - public ItemStack fillDemonWillGem(ItemStack soulGemStack, ItemStack soulStack) { - if (soulStack != null && soulStack.getItem() instanceof IDemonWill) { - EnumDemonWillType thisType = this.getCurrentType(soulGemStack); - if (thisType != ((IDemonWill) soulStack.getItem()).getType(soulStack)) { - return soulStack; - } - IDemonWill soul = (IDemonWill) soulStack.getItem(); - double soulsLeft = getWill(thisType, soulGemStack); - - if (soulsLeft < getMaxWill(thisType, soulGemStack)) { - double newSoulsLeft = Math.min(soulsLeft + soul.getWill(thisType, soulStack), getMaxWill(thisType, soulGemStack)); - soul.drainWill(thisType, soulStack, newSoulsLeft - soulsLeft); - - setWill(thisType, soulGemStack, newSoulsLeft); - if (soul.getWill(thisType, soulStack) <= 0) { - return ItemStack.EMPTY; - } - } - } - - return soulStack; - } - - @Override - public double getWill(EnumDemonWillType type, ItemStack soulGemStack) { - if (!type.equals(getCurrentType(soulGemStack))) { - return 0; - } - - NBTTagCompound tag = soulGemStack.getTagCompound(); - - return tag.getDouble(Constants.NBT.SOULS); - } - - @Override - public void setWill(EnumDemonWillType type, ItemStack soulGemStack, double souls) { - setCurrentType(type, soulGemStack); - - NBTTagCompound tag = soulGemStack.getTagCompound(); - - tag.setDouble(Constants.NBT.SOULS, souls); - } - - @Override - public double drainWill(EnumDemonWillType type, ItemStack soulGemStack, double drainAmount, boolean doDrain) { - EnumDemonWillType currentType = this.getCurrentType(soulGemStack); - if (currentType != type) { - return 0; - } - double souls = getWill(type, soulGemStack); - - double soulsDrained = Math.min(drainAmount, souls); - - if (doDrain) { - setWill(type, soulGemStack, souls - soulsDrained); - } - - return soulsDrained; - } - - @Override - public int getMaxWill(EnumDemonWillType type, ItemStack soulGemStack) { - EnumDemonWillType currentType = getCurrentType(soulGemStack); - if (!type.equals(currentType) && currentType != EnumDemonWillType.DEFAULT) { - return 0; - } - - switch (soulGemStack.getMetadata()) { - case 0: - return 64; - case 1: - return 256; - case 2: - return 1024; - case 3: - return 4096; - case 4: - return 16384; - } - return 64; - } - - @Override - public EnumDemonWillType getCurrentType(ItemStack soulGemStack) { - NBTHelper.checkNBT(soulGemStack); - - NBTTagCompound tag = soulGemStack.getTagCompound(); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - return EnumDemonWillType.DEFAULT; - } - - return EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - } - - public void setCurrentType(EnumDemonWillType type, ItemStack soulGemStack) { - NBTHelper.checkNBT(soulGemStack); - - NBTTagCompound tag = soulGemStack.getTagCompound(); - - if (type == EnumDemonWillType.DEFAULT) { - if (tag.hasKey(Constants.NBT.WILL_TYPE)) { - tag.removeTag(Constants.NBT.WILL_TYPE); - } - - return; - } - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - } - - @Override - public double fillWill(EnumDemonWillType type, ItemStack stack, double fillAmount, boolean doFill) { - if (!type.equals(getCurrentType(stack)) && this.getWill(getCurrentType(stack), stack) > 0) { - return 0; - } - - double current = this.getWill(type, stack); - double maxWill = this.getMaxWill(type, stack); - - double filled = Math.min(fillAmount, maxWill - current); - - if (doFill) { - this.setWill(type, stack, filled + current); - } - - return filled; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java deleted file mode 100644 index 50971b17..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSoulSnare.java +++ /dev/null @@ -1,80 +0,0 @@ -package WayofTime.bloodmagic.item.soul; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.entity.projectile.EntitySoulSnare; -import WayofTime.bloodmagic.util.helper.TextHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.*; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.List; - -public class ItemSoulSnare extends Item implements IVariantProvider { - public static String[] names = {"base"}; - - public ItemSoulSnare() { - super(); - - setUnlocalizedName(BloodMagic.MODID + ".soulSnare."); - setCreativeTab(BloodMagic.TAB_BM); - setHasSubtypes(true); - setMaxStackSize(16); - } - - @Override - public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) { - ItemStack stack = playerIn.getHeldItem(hand); - if (!playerIn.capabilities.isCreativeMode) { - stack.shrink(1); - } - - worldIn.playSound(null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); - - if (!worldIn.isRemote) { - EntitySoulSnare snare = new EntitySoulSnare(worldIn, playerIn); - snare.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); - worldIn.spawnEntity(snare); - } - - return new ActionResult<>(EnumActionResult.SUCCESS, stack); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName(stack) + names[stack.getItemDamage()]; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(CreativeTabs creativeTab, NonNullList list) { - if (!isInCreativeTab(creativeTab)) - return; - - for (int i = 0; i < names.length; i++) - list.add(new ItemStack(this, 1, i)); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.soulSnare.desc")))); - - super.addInformation(stack, world, tooltip, flag); - } - - @Override - public void gatherVariants(@Nonnull Int2ObjectMap variants) { - variants.put(0, "type=soulsnare"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soulBreath/ItemFlightScroll.java b/src/main/java/WayofTime/bloodmagic/item/soulBreath/ItemFlightScroll.java deleted file mode 100644 index a4878215..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soulBreath/ItemFlightScroll.java +++ /dev/null @@ -1,327 +0,0 @@ -package WayofTime.bloodmagic.item.soulBreath; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.function.Consumer; - -import javax.annotation.Nullable; -import javax.vecmath.Vector3d; - -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.IMeshProvider; -import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.iface.IActivatable; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NBTHelper; - -public class ItemFlightScroll extends ItemSoulBreathContainer implements IMeshProvider, IActivatable -{ - public static Map> floatMap = new HashMap>(); - public static Map heldEntityMap = new HashMap(); - public static Map heldEntityOffsetMap = new HashMap(); - - //TODO: A lot of this stuff could be moved to a toggle-able variant - public ItemFlightScroll() - { - super(); - setUnlocalizedName(BloodMagic.MODID + ".icarusScroll"); - setCreativeTab(BloodMagic.TAB_BM); - } - - @Override - public boolean getActivated(ItemStack stack) - { - return !stack.isEmpty() && NBTHelper.checkNBT(stack).getTagCompound().getBoolean(Constants.NBT.ACTIVATED); - } - - @Override - public ItemStack setActivatedState(ItemStack stack, boolean activated) - { - if (!stack.isEmpty()) - { - NBTHelper.checkNBT(stack).getTagCompound().setBoolean(Constants.NBT.ACTIVATED, activated); - return stack; - } - - return stack; - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) - { - ItemStack stack = player.getHeldItem(hand); - - if (!world.isRemote) - { - if (player.isSneaking()) - { - if (!getActivated(stack)) - { - double drainNeeded = getBreathCostPerSecond(stack); - if (this.drainBreath(stack, drainNeeded, false) >= drainNeeded) - { - setActivatedState(stack, true); - } - } else - { - setActivatedState(stack, false); - } - } else - { - //TODO: Add an effect where it "draws back" like a bow in order to cast Levitation on a mob. - //Only Levitated mobs can be grabbed. - } - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity, EnumHand hand) - { - if (entity.world.isRemote) - { - return false; - } - - //TODO: Do check to see if the entity is levitating - will only "ensnare" a mob that is levitating. - - if (player.isSneaking()) - { - //TODO: Release entity completely? - removeEntity(player, entity); - } else - { - EntityLivingBase heldEntity = getHeldEntity(player); - if (heldEntity != null && heldEntity.equals(entity)) - { - heldEntityMap.remove(player); - } else - { - holdEntity(player, entity); //Hold the entity so you can place it around yourself where needed. - } - } - - return true; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) - { - if (!world.isRemote && entity instanceof EntityPlayerMP && getActivated(stack)) - { - if (entity.ticksExisted % 20 == 0) - { - double drainNeeded = getBreathCostPerSecond(stack); - if (this.drainBreath(stack, drainNeeded, false) >= drainNeeded) - { - this.drainBreath(stack, drainNeeded, true); - } else - { - this.setActivatedState(stack, false); - } - } - - onEffectUpdate(stack, world, (EntityPlayer) entity, itemSlot, isSelected); - } - - if (!world.isRemote) - { - if (entity instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) entity; - updateHeldEntityPosition(player); - if (floatMap.containsKey(player)) - { - Map entityMap = floatMap.get(player); - if (entityMap == null) - { - return; - } - - List removalList = new ArrayList(); - - for (Entry entry : entityMap.entrySet()) - { - EntityLivingBase floatingEntity = entry.getKey(); - if (floatingEntity == null || floatingEntity.isDead || floatingEntity.dimension != player.dimension) - { - removalList.add(floatingEntity); - } - - followOwner(player, floatingEntity, entry.getValue()); - } - - for (EntityLivingBase livingEntity : removalList) - { - entityMap.remove(livingEntity); - } - - if (entityMap.isEmpty()) - { - floatMap.remove(player); - } - - } - } - } - } - - public static boolean updateEntityOffset(EntityPlayer player, EntityLivingBase living, Vector3d updatedOffset) - { - //TODO: Check if this entity is contained in another player's map to prevent weird things. - if (floatMap.containsKey(player)) - { - Map entityMap = floatMap.get(player); - entityMap.put(living, updatedOffset); - return true; - } else - { - Map entityMap = new HashMap(); - entityMap.put(living, updatedOffset); - floatMap.put(player, entityMap); - return true; - } - } - - @Nullable - public static EntityLivingBase getHeldEntity(EntityPlayer player) - { - if (heldEntityMap.containsKey(player)) - { - return heldEntityMap.get(player); - } - - return null; - } - - public static double getHeldEntityOffset(EntityPlayer player) - { - if (heldEntityMap.containsKey(player)) - { - return heldEntityOffsetMap.get(player); - } - - return 1; - } - - public static void holdEntity(EntityPlayer player, EntityLivingBase entityLiving) - { - float distance = player.getDistance(entityLiving); - Vec3d lookVec = player.getLookVec(); - heldEntityMap.put(player, entityLiving); - heldEntityOffsetMap.put(player, (double) distance); - updateEntityOffset(player, entityLiving, new Vector3d(lookVec.x * distance, lookVec.y * distance, lookVec.z * distance)); - } - - public static void updateHeldEntityPosition(EntityPlayer player) - { - EntityLivingBase entityLiving = getHeldEntity(player); - if (entityLiving != null) - { - double offset = getHeldEntityOffset(player); - Vec3d lookVec = player.getLookVec(); - updateEntityOffset(player, entityLiving, new Vector3d(lookVec.x * offset, lookVec.y * offset, lookVec.z * offset)); - } - } - - public static void removeEntity(EntityPlayer player, EntityLivingBase living) - { - if (living == null) - { - return; - } - - if (floatMap.containsKey(player)) - { - Map entityMap = floatMap.get(player); - if (entityMap.containsKey(living)) - { - entityMap.remove(living); - } - - if (entityMap.isEmpty()) - { - floatMap.remove(player); - } - } - } - - public void followOwner(EntityPlayer owner, EntityLivingBase livingEntity, Vector3d offset) - { - double offsetX = offset.x; - double offsetY = offset.y; - double offsetZ = offset.z; - double ownerSpeed = Math.sqrt(owner.motionX * owner.motionX + owner.motionY * owner.motionY + owner.motionZ * owner.motionZ); -// double ownerSpeed = Math.sqrt((owner.posX - owner.prevPosX) * (owner.posX - owner.prevPosX) + (owner.posY - owner.prevPosY) * (owner.posY - owner.prevPosY) + (owner.posZ - owner.prevPosZ) * (owner.posZ - owner.prevPosZ)); - - double speed = Math.max(ownerSpeed * 20, 2); //May just want to call it a day and set this to "2" - - livingEntity.addPotionEffect(new PotionEffect(MobEffects.LEVITATION, 20, 0, false, true)); - - double wantedX = owner.posX + offsetX; - double wantedY = owner.posY + offsetY; - double wantedZ = owner.posZ + offsetZ; - - Vector3d vec = new Vector3d(wantedX - livingEntity.posX, wantedY - livingEntity.posY, wantedZ - livingEntity.posZ); - double vecDistance = Math.sqrt(vec.dot(vec)); - speed = Math.min(vecDistance, speed); - - vec.normalize(); - - if (speed <= 0.00001) - { - return; - } - - livingEntity.setVelocity(vec.x * speed, vec.y * speed, vec.z * speed); - } - - public void onEffectUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) - { - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.FLIGHT, 2, 0)); - } - - @Override - public int getMaxBreath(ItemStack stack) - { - return 20; - } - - public double getBreathCostPerSecond(ItemStack stack) - { - return 0.01; - } - - @Override - @SideOnly(Side.CLIENT) - public ItemMeshDefinition getMeshDefinition() - { - return new CustomMeshDefinitionActivatable("icarus_scroll"); - } - - @Override - public void gatherVariants(Consumer variants) - { - variants.accept("active=false"); - variants.accept("active=true"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/soulBreath/ItemSoulBreathContainer.java b/src/main/java/WayofTime/bloodmagic/item/soulBreath/ItemSoulBreathContainer.java deleted file mode 100644 index 1dfb41cd..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/soulBreath/ItemSoulBreathContainer.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.bloodmagic.item.soulBreath; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import WayofTime.bloodmagic.soul.ISoulBreathContainer; -import WayofTime.bloodmagic.util.Constants; - -public abstract class ItemSoulBreathContainer extends Item implements ISoulBreathContainer -{ - @Override - public double getBreath(ItemStack stack) - { - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getDouble(Constants.NBT.BREATH); - } - - @Override - public void setBreath(ItemStack stack, double amount) - { - NBTTagCompound tag = stack.getTagCompound(); - - tag.setDouble(Constants.NBT.BREATH, amount); - } - - @Override - public double drainBreath(ItemStack stack, double drainAmount, boolean doDrain) - { - double breath = getBreath(stack); - - double breathDrained = Math.min(drainAmount, breath); - - if (doDrain) - { - setBreath(stack, breath - breathDrained); - } - - return breathDrained; - } - - @Override - public double fillBreath(ItemStack stack, double fillAmount, boolean doFill) - { - double current = this.getBreath(stack); - double maxBreath = this.getMaxBreath(stack); - - double filled = Math.min(fillAmount, maxBreath - current); - - if (doFill) - { - this.setBreath(stack, filled + current); - } - - return filled; - } - - @Override - public boolean showDurabilityBar(ItemStack stack) - { - return true; - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) - { - double maxWill = getMaxBreath(stack); - if (maxWill <= 0) - { - return 1; - } - return 1.0 - (getBreath(stack) / maxWill); - } - -} diff --git a/src/main/java/WayofTime/bloodmagic/item/types/AlchemicVialType.java b/src/main/java/WayofTime/bloodmagic/item/types/AlchemicVialType.java deleted file mode 100644 index db637b99..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/types/AlchemicVialType.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.bloodmagic.item.types; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; -import java.util.Locale; - -public enum AlchemicVialType implements ISubItem -{ - BASE(0x2e35ff); - - final int potionColour; - - AlchemicVialType(int colour1) - { - potionColour = colour1; - } - - @Nonnull - @Override - public String getInternalName() - { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) - { - return new ItemStack(RegistrarBloodMagicItems.ALCHEMIC_VIAL, count, ordinal()); - } - - public int getColourForLayer(int layer) - { - if (layer == 0) - { - return potionColour; - } - return -1; - } - - public static int getColourForLayer(int variant, int layer) - { - if (variant >= AlchemicVialType.values().length) - { - return -1; - } - - return AlchemicVialType.values()[variant].getColourForLayer(layer); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/types/ComponentTypes.java b/src/main/java/WayofTime/bloodmagic/item/types/ComponentTypes.java deleted file mode 100644 index 89474201..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/types/ComponentTypes.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.bloodmagic.item.types; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; -import java.util.Locale; - -public enum ComponentTypes implements ISubItem { - - REAGENT_WATER, - REAGENT_LAVA, - REAGENT_AIR, - REAGENT_FAST_MINER, - REAGENT_VOID, - REAGENT_GROWTH, - REAGENT_AFFINITY, - REAGENT_SIGHT, - REAGENT_BINDING, - REAGENT_SUPPRESSION, - FRAME_PART, - REAGENT_BLOOD_LIGHT, - REAGENT_MAGNETISM, - REAGENT_HASTE, - REAGENT_COMPRESSION, - REAGENT_BRIDGE, - REAGENT_SEVERANCE, - REAGENT_TELEPOSITION, - REAGENT_TRANSPOSITION, - SAND_IRON, - SAND_GOLD, - SAND_COAL, - PLANT_OIL, - SULFUR, - SALTPETER, - NEURO_TOXIN, - ANTISEPTIC, - REAGENT_HOLDING, - CATALYST_LENGTH_1, - CATALYST_POWER_1, - REAGENT_CLAW, - REAGENT_BOUNCE, - REAGENT_FROST,; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack() { - return getStack(1); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.COMPONENT, count, ordinal()); - } -} - diff --git a/src/main/java/WayofTime/bloodmagic/item/types/ISubItem.java b/src/main/java/WayofTime/bloodmagic/item/types/ISubItem.java deleted file mode 100644 index 27204050..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/types/ISubItem.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.bloodmagic.item.types; - -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; - -public interface ISubItem { - - @Nonnull - String getInternalName(); - - @Nonnull - default ItemStack getStack() { - return getStack(1); - } - - @Nonnull - ItemStack getStack(int count); -} diff --git a/src/main/java/WayofTime/bloodmagic/item/types/ShardType.java b/src/main/java/WayofTime/bloodmagic/item/types/ShardType.java deleted file mode 100644 index f3ca9233..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/types/ShardType.java +++ /dev/null @@ -1,25 +0,0 @@ -package WayofTime.bloodmagic.item.types; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nonnull; -import java.util.Locale; - -public enum ShardType implements ISubItem { - - WEAK, - DEMONIC,; - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD, count, ordinal()); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/ILivingArmour.java b/src/main/java/WayofTime/bloodmagic/livingArmour/ILivingArmour.java deleted file mode 100644 index af259cb3..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/ILivingArmour.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.bloodmagic.livingArmour; - -import com.google.common.collect.Multimap; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -/** - * An interface this is used purely for internal implementation. - * - * @author WayofTime - */ -public interface ILivingArmour { - Multimap getAttributeModifiers(); - - boolean canApplyUpgrade(EntityPlayer user, LivingArmourUpgrade upgrade); - - boolean upgradeArmour(EntityPlayer user, LivingArmourUpgrade upgrade); - - boolean removeUpgrade(EntityPlayer user, LivingArmourUpgrade upgrade); - - void notifyPlayerOfUpgrade(EntityPlayer user, LivingArmourUpgrade upgrade); - - /** - * Ticks the upgrades and stat trackers, passing in the world and player as - * well as the LivingArmour - * - * @param world - The World - * @param player - The player wearing the Armour - */ - void onTick(World world, EntityPlayer player); - - void readFromNBT(NBTTagCompound tag); - - void writeToNBT(NBTTagCompound tag, boolean forceWrite); - - /** - * Writes the LivingArmour to the NBTTag. This will only write the trackers - * that are dirty. - * - * @param tag - The NBT tag to write to - */ - void writeDirtyToNBT(NBTTagCompound tag); - - void writeToNBT(NBTTagCompound tag); -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java deleted file mode 100644 index 19f9a7a1..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmour.java +++ /dev/null @@ -1,334 +0,0 @@ -package WayofTime.bloodmagic.livingArmour; - -import WayofTime.bloodmagic.iface.IUpgradeTrainer; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.world.World; - -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; - -public class LivingArmour implements ILivingArmour { - public static String chatBase = "chat.bloodmagic.livingArmour."; - public HashMap trackerMap = new HashMap<>(); - public HashMap upgradeMap = new HashMap<>(); - - public int maxUpgradePoints = 100; - public int totalUpgradePoints = 0; - - public StatTracker getTracker(String key) { - return trackerMap.get(key); - } - - public double getAdditionalDamageOnHit(double damage, EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - double total = 0; - for (Entry entry : upgradeMap.entrySet()) { - total += entry.getValue().getAdditionalDamageOnHit(damage, wearer, hitEntity, weapon); - } - - return total; - } - - public double getKnockbackOnHit(EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - double total = 0; - for (Entry entry : upgradeMap.entrySet()) { - total += entry.getValue().getKnockbackOnHit(wearer, hitEntity, weapon); - } - - return total; - } - - public void recalculateUpgradePoints() { - totalUpgradePoints = 0; - for (LivingArmourUpgrade upgrade : upgradeMap.values()) { - totalUpgradePoints += upgrade.getCostOfUpgrade(); - } - } - - @Override - public Multimap getAttributeModifiers() { - HashMultimap modifierMap = HashMultimap.create(); - - for (Entry entry : upgradeMap.entrySet()) { - LivingArmourUpgrade upgrade = entry.getValue(); - if (upgrade == null) { - continue; - } - modifierMap.putAll(upgrade.getAttributeModifiers()); - } - - return modifierMap; - } - - @Override - public boolean upgradeArmour(EntityPlayer user, LivingArmourUpgrade upgrade) { - String key = upgrade.getUniqueIdentifier(); - if (upgradeMap.containsKey(key)) { - //Check if this is a higher level than the previous upgrade - int nextLevel = upgrade.getUpgradeLevel(); - int currentLevel = upgradeMap.get(key).getUpgradeLevel(); - - if (nextLevel > currentLevel) { - int upgradePointDifference = upgrade.getCostOfUpgrade() - upgradeMap.get(key).getCostOfUpgrade(); - if (totalUpgradePoints + upgradePointDifference <= maxUpgradePoints) { - upgradeMap.put(key, upgrade); - totalUpgradePoints += upgradePointDifference; - notifyPlayerOfUpgrade(user, upgrade); - for (StatTracker tracker : trackerMap.values()) { - tracker.onArmourUpgradeAdded(upgrade); - } - - return true; - } - } - } else { - int upgradePoints = upgrade.getCostOfUpgrade(); - if (totalUpgradePoints + upgradePoints <= maxUpgradePoints) { - upgradeMap.put(key, upgrade); - totalUpgradePoints += upgradePoints; - notifyPlayerOfUpgrade(user, upgrade); - for (StatTracker tracker : trackerMap.values()) { - tracker.onArmourUpgradeAdded(upgrade); - } - - return true; - } - } - - return false; - } - - @Override - public boolean canApplyUpgrade(EntityPlayer user, LivingArmourUpgrade upgrade) { - String key = upgrade.getUniqueIdentifier(); - if (upgradeMap.containsKey(key)) { - //Check if this is a higher level than the previous upgrade - int nextLevel = upgrade.getUpgradeLevel(); - int currentLevel = upgradeMap.get(key).getUpgradeLevel(); - - if (nextLevel > currentLevel) { - int upgradePointDifference = upgrade.getCostOfUpgrade() - upgradeMap.get(key).getCostOfUpgrade(); - if (totalUpgradePoints + upgradePointDifference <= maxUpgradePoints) { - return true; - } - } - } else { - int upgradePoints = upgrade.getCostOfUpgrade(); - if (totalUpgradePoints + upgradePoints <= maxUpgradePoints) { - return true; - } - } - - return false; - } - - @Override - public void notifyPlayerOfUpgrade(EntityPlayer user, LivingArmourUpgrade upgrade) { - user.sendStatusMessage(new TextComponentString(TextHelper.localizeEffect(chatBase + "newUpgrade")), true); - } - - /** - * Ticks the upgrades and stat trackers, passing in the world and player as - * well as the LivingArmour - * - * @param world - * @param player - */ - @Override - public void onTick(World world, EntityPlayer player) { - for (Entry entry : upgradeMap.entrySet()) { - LivingArmourUpgrade upgrade = entry.getValue(); - - if (upgrade == null) { - continue; - } - - if (!world.isRemote || upgrade.runOnClient()) { - upgrade.onTick(world, player, this); - } - } - - if (world.isRemote) { - return; - } - - List allowedUpgradesList = new ArrayList<>(); - for (ItemStack stack : player.inventory.mainInventory) { - if (stack != null && stack.getItem() instanceof IUpgradeTrainer) { - List keyList = ((IUpgradeTrainer) stack.getItem()).getTrainedUpgrades(stack); - if (!keyList.isEmpty()) { - allowedUpgradesList.addAll(keyList); - } - } - } - - for (Entry entry : trackerMap.entrySet()) { - StatTracker tracker = entry.getValue(); - - if (tracker == null) { - continue; - } - - if (!allowedUpgradesList.isEmpty()) { - boolean allowed = false; - - for (String key : allowedUpgradesList) { - if (tracker.providesUpgrade(key)) { - allowed = true; - break; - } - } - - if (!allowed) { - tracker.onDeactivatedTick(world, player, this); - continue; - } - } - - if (tracker.onTick(world, player, this)) { - List upgradeList = tracker.getUpgrades(); - - for (LivingArmourUpgrade upgrade : upgradeList) //TODO: make a getNextUpgrade? - { - upgradeArmour(player, upgrade); - } - } - - } - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - maxUpgradePoints = Math.max(100, tag.getInteger("maxUpgradePoints")); - - NBTTagList upgradeTags = tag.getTagList("upgrades", 10); - if (upgradeTags != null) { - for (int i = 0; i < upgradeTags.tagCount(); i++) { - NBTTagCompound upgradeTag = upgradeTags.getCompoundTagAt(i); - String key = upgradeTag.getString("key"); - int level = upgradeTag.getInteger("level"); - NBTTagCompound nbtTag = upgradeTag.getCompoundTag("upgrade"); - LivingArmourUpgrade upgrade = LivingArmourHandler.generateUpgradeFromKey(key, level, nbtTag); - if (upgrade != null) { - upgradeMap.put(key, upgrade); - totalUpgradePoints += upgrade.getCostOfUpgrade(); - } - } - } - - for (Class clazz : LivingArmourHandler.trackers) { - try { - Constructor ctor = clazz.getConstructor(); - Object obj = ctor.newInstance(); - if (!(obj instanceof StatTracker)) { - // ????? - } - StatTracker tracker = (StatTracker) obj; - String key = tracker.getUniqueIdentifier(); - NBTTagCompound trackerTag = tag.getCompoundTag(key); - if (!trackerTag.hasNoTags()) { - tracker.readFromNBT(trackerTag); - } - trackerMap.put(key, tracker); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - @Override - public void writeToNBT(NBTTagCompound tag, boolean forceWrite) { - tag.setInteger("maxUpgradePoints", maxUpgradePoints); - - NBTTagList tags = new NBTTagList(); - - for (Entry entry : upgradeMap.entrySet()) { - NBTTagCompound upgradeTag = new NBTTagCompound(); - - LivingArmourUpgrade upgrade = entry.getValue(); - NBTTagCompound nbtTag = new NBTTagCompound(); - upgrade.writeToNBT(nbtTag); - - upgradeTag.setString("key", upgrade.getUniqueIdentifier()); - upgradeTag.setInteger("level", upgrade.getUpgradeLevel()); - upgradeTag.setTag("upgrade", nbtTag); - - tags.appendTag(upgradeTag); - } - - tag.setTag("upgrades", tags); - - for (Entry entry : trackerMap.entrySet()) { - StatTracker tracker = entry.getValue(); - - if (tracker == null) { - continue; - } - - String key = tracker.getUniqueIdentifier(); - - if (forceWrite || tracker.isDirty()) { - NBTTagCompound trackerTag = new NBTTagCompound(); - tracker.writeToNBT(trackerTag); - - tag.setTag(key, trackerTag); - - tracker.resetDirty(); - } - } - } - - /** - * Writes the LivingArmour to the NBTTag. This will only write the trackers - * that are dirty. - * - * @param tag - */ - @Override - public void writeDirtyToNBT(NBTTagCompound tag) { - writeToNBT(tag, false); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - writeToNBT(tag, true); - } - - @Override - public boolean removeUpgrade(EntityPlayer user, LivingArmourUpgrade upgrade) { - String key = upgrade.getUniqueIdentifier(); - if (upgradeMap.containsKey(key)) { - upgradeMap.remove(key); - - return true; - } - - return false; - } - - public static boolean hasFullSet(EntityPlayer player) { - for (EntityEquipmentSlot slot : EntityEquipmentSlot.values()) { - if (slot.getSlotType() != EntityEquipmentSlot.Type.ARMOR) { - continue; - } - ItemStack slotStack = player.getItemStackFromSlot(slot); - if (slotStack.isEmpty() || !(slotStack.getItem() instanceof ItemLivingArmour)) - return false; - } - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourHandler.java b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourHandler.java deleted file mode 100644 index c15afafb..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourHandler.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.bloodmagic.livingArmour; - -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.nbt.NBTTagCompound; - -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class LivingArmourHandler { - public static List> trackers = new ArrayList<>(); - public static HashMap> upgradeMap = new HashMap<>(); - public static HashMap> upgradeConstructorMap = new HashMap<>(); - public static HashMap upgradeMaxLevelMap = new HashMap<>(); - - public static void registerStatTracker(Class tracker) { - trackers.add(tracker); - } - - /** - * Registers a LivingArmourUpgrade using its unique identifier and class. - * This is done to more easily load upgrades - * - * @param upgrade - */ - public static void registerArmourUpgrade(LivingArmourUpgrade upgrade) { - Class clazz = upgrade.getClass(); - upgradeMap.put(upgrade.getUniqueIdentifier(), clazz); - upgradeMaxLevelMap.put(upgrade.getUniqueIdentifier(), upgrade.getMaxTier()); - try { - Constructor ctor = clazz.getConstructor(int.class); - if (ctor == null) { - BMLog.DEFAULT.error("Error adding living armour upgrade {} as it doesn't have a valid constructor.", upgrade.getUniqueIdentifier()); - } else { - upgradeConstructorMap.put(upgrade.getUniqueIdentifier(), ctor); - } - } catch (Exception e) { - e.printStackTrace(); - } - - } - - public static LivingArmourUpgrade generateUpgradeFromKey(String key, int level) { - return generateUpgradeFromKey(key, level, null); - } - - public static LivingArmourUpgrade generateUpgradeFromKey(String key, int level, NBTTagCompound tag) { - Constructor ctor = upgradeConstructorMap.get(key); - if (ctor != null) { - try { - LivingArmourUpgrade upgrade = ctor.newInstance(level); - if (upgrade != null && tag != null) { - upgrade.readFromNBT(tag); - } - return upgrade; - } catch (Exception e) { - e.printStackTrace(); - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourUpgrade.java b/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourUpgrade.java deleted file mode 100644 index c160c6cd..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/LivingArmourUpgrade.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.bloodmagic.livingArmour; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public abstract class LivingArmourUpgrade { - public static String chatBase = "chat.bloodmagic.livingArmour.upgrade."; - public static String tooltipBase = "tooltip.bloodmagic.livingArmour.upgrade."; - - /** - * Upgrade level 0 is the first upgrade. Upgrade goes from 0 to getMaxTier() - * - 1. - */ - protected int level = 0; - - /** - * The LivingArmourUpgrade must have a constructor that has a single integer - * parameter. Upgrades may have other constructors, but must have one of - * these. - * - * @param level The level of the upgrade - */ - public LivingArmourUpgrade(int level) { - this.level = Math.min(level, getMaxTier() - 1); - } - - public double getAdditionalDamageOnHit(double damage, EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - return 0; - } - - public double getKnockbackOnHit(EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - return 0; - } - - /** - * Percentage of damage blocked. This stacks multiplicities with other - * upgrades. - * - * @return 0 for no damage blocked, 1 for full damage blocked - */ - public double getArmourProtection(EntityLivingBase wearer, DamageSource source) { - return 0; - } - - public int getUpgradeLevel() { - return this.level; - } - - public abstract String getUniqueIdentifier(); - - public abstract String getUnlocalizedName(); - - public abstract int getMaxTier(); - - public abstract int getCostOfUpgrade(); - - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - } - - public Multimap getAttributeModifiers() { - return HashMultimap.create(); - } - - public double getMiningSpeedModifier(EntityPlayer player) { - return 1; - } - - public abstract void writeToNBT(NBTTagCompound tag); - - public abstract void readFromNBT(NBTTagCompound tag); - - public int getRunicShielding() { - return 0; - } - - public boolean runOnClient() { - return false; - } - - public boolean isDowngrade() { - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/StatTracker.java b/src/main/java/WayofTime/bloodmagic/livingArmour/StatTracker.java deleted file mode 100644 index c9d4d182..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/StatTracker.java +++ /dev/null @@ -1,66 +0,0 @@ -package WayofTime.bloodmagic.livingArmour; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.List; - -public abstract class StatTracker { - private boolean isDirty = false; - - public abstract String getUniqueIdentifier(); - - /** - * When called the StatTracker should reset all of its data, including - * upgrades. - */ - public abstract void resetTracker(); - - public abstract void readFromNBT(NBTTagCompound tag); - - public abstract void writeToNBT(NBTTagCompound tag); - - /** - * Called each tick to update the tracker's information. Called in - * LivingArmour - * - * @param world World the player is in - * @param player The player that has the armour equipped - * @param livingArmour The equipped LivingArmour - * @return True if there is a new upgrade unlocked this tick. - */ - public abstract boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour); - - public abstract void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour); - - public abstract List getUpgrades(); - - /** - * Used to obtain the progress from the current level to the next level. - *

- * 0.0 being 0% - 1.0 being 100%. - * - * @param livingArmour The equipped LivingArmour - * @return the progress from the current level to the next level. - */ - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return 1.0D; - } - - public final boolean isDirty() { - return isDirty; - } - - public final void markDirty() { - this.isDirty = true; - } - - public final void resetDirty() { - this.isDirty = false; - } - - public abstract boolean providesUpgrade(String key); - - public abstract void onArmourUpgradeAdded(LivingArmourUpgrade upgrade); -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeBattleHungry.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeBattleHungry.java deleted file mode 100644 index fe02490a..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeBattleHungry.java +++ /dev/null @@ -1,71 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeBattleHungry extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-10, -20, -35, -50, -75}; - public static final float[] exhaustionAdded = new float[]{0.02f, 0.04f, 0.06f, 0.08f, 0.1f}; - public static final int[] delay = new int[]{600, 600, 600, 500, 400}; - - public int timer = 0; - - public LivingArmourUpgradeBattleHungry(int level) { - super(level); - } - - public void resetTimer() { - this.timer = delay[this.level]; - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (timer > 0) { - timer--; - return; - } - - if (player.ticksExisted % 20 == 0) { - player.addExhaustion(exhaustionAdded[this.level]); //TODO: Change exhaustion added per level. - } - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.battleHunger"; - } - - @Override - public int getMaxTier() { - return 5; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger("timer", timer); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - timer = tag.getInteger("timer"); - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "battleHunger"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeCrippledArm.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeCrippledArm.java deleted file mode 100644 index 88b31e64..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeCrippledArm.java +++ /dev/null @@ -1,54 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeCrippledArm extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-150}; - - public LivingArmourUpgradeCrippledArm(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.crippledArm"; - } - - @Override - public int getMaxTier() { - return 1; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "crippledArm"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDigSlowdown.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDigSlowdown.java deleted file mode 100644 index 6c1dece3..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDigSlowdown.java +++ /dev/null @@ -1,65 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.HashMap; - -public class LivingArmourUpgradeDigSlowdown extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-10, -17, -28, -42, -60, -80, -100, -125, -160, -200}; - public static final double[] digSpeedModifier = new double[]{0.9, 0.8, 0.7, 0.6, 0.55, 0.5, 0.4, 0.35, 0.3, 0.2}; - public static HashMap changeMap = new HashMap<>(); - - public LivingArmourUpgradeDigSlowdown(int level) { - super(level); - } - - @Override - public double getMiningSpeedModifier(EntityPlayer player) { - return digSpeedModifier[this.level]; - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.digSlowdown"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "digSlowdown"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDisoriented.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDisoriented.java deleted file mode 100644 index 2d791898..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeDisoriented.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeDisoriented extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-10, -20, -30, -40, -70, -80, -100, -140, -180, -220}; - public static final double[] chance = new double[]{0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.008, 0.010, 0.012, 0.014}; - - public LivingArmourUpgradeDisoriented(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (world.isRemote && player.ticksExisted % 20 == 0 && world.rand.nextDouble() <= chance[this.level]) { - player.rotationYaw = world.rand.nextFloat() * 360; - player.rotationPitch = world.rand.nextFloat() * 180 - 90; - } - } - - @Override - public boolean runOnClient() { - return true; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.disoriented"; - } - - @Override - public int getMaxTier() { - return 10; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "disoriented"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java deleted file mode 100644 index a67a5cfb..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeMeleeDecrease.java +++ /dev/null @@ -1,74 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import org.apache.commons.codec.binary.StringUtils; - -import java.util.UUID; - -public class LivingArmourUpgradeMeleeDecrease extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-10, -17, -28, -42, -60, -80, -100, -125, -160, -200}; - public static final double[] meleeDamage = new double[]{-0.1, -0.2, -0.25, -0.3, -0.35, -0.4, -0.5, -0.6, -0.7, -0.8}; - - public LivingArmourUpgradeMeleeDecrease(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public Multimap getAttributeModifiers() { - Multimap modifierMap = HashMultimap.create(); - - String name = getUniqueIdentifier() + "-DamageModifier1"; - modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "DamageModifier1", meleeDamage[this.level], 1)); - - return modifierMap; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.meleeDecrease"; - } - - @Override - public int getMaxTier() { - return 10; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "meleeDecrease"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeQuenched.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeQuenched.java deleted file mode 100644 index 9272cd48..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeQuenched.java +++ /dev/null @@ -1,54 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeQuenched extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-100}; - - public LivingArmourUpgradeQuenched(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.quenched"; - } - - @Override - public int getMaxTier() { - return 1; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "quenched"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlippery.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlippery.java deleted file mode 100644 index afca233c..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlippery.java +++ /dev/null @@ -1,91 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class LivingArmourUpgradeSlippery extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-50}; - public static final int[] slipperyDuration = new int[]{30 * 20}; - - public LivingArmourUpgradeSlippery(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (world.isRemote && player.onGround) { -// if (player.moveForward == 0) - { - - float f6 = 0.91F; - BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(player.posX, player.getEntityBoundingBox().minY - 1.0D, player.posZ); - - if (player.onGround) { - f6 = world.getBlockState(blockpos$pooledmutableblockpos).getBlock().slipperiness * 0.91F; - } - - player.motionX /= f6 / 0.91; - player.motionZ /= f6 / 0.91; - - float f7 = 0.16277136F / (f6 * f6 * f6); - float f8; - - if (player.onGround) { - f8 = player.getAIMoveSpeed() * f7; - } else { - f8 = player.jumpMovementFactor; - } - - player.moveRelative(-player.moveStrafing, -player.moveForward, f8, 0.02F); - - player.moveRelative(player.moveStrafing, player.moveForward, f8 / 10, 0.02F); - - player.motionX *= 0.90; - player.motionY *= 0.90; - } - } - } - - @Override - public boolean runOnClient() { - return true; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.slippery"; - } - - @Override - public int getMaxTier() { - return 1; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "slippery"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowHeal.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowHeal.java deleted file mode 100644 index 0b964731..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowHeal.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeSlowHeal extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-10, -17, -28, -42, -60, -80, -100, -125, -160, -200}; - - public static final double[] healModifier = new double[]{0.9, 0.8, 0.7, 0.6, 0.55, 0.5, 0.4, 0.35, 0.3, 0.2}; - - public LivingArmourUpgradeSlowHeal(int level) { - super(level); - } - - public double getHealingModifier() { - return healModifier[this.level]; - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.slowHeal"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "slowHeal"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java deleted file mode 100644 index db12a7ac..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeSlowness.java +++ /dev/null @@ -1,72 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import org.apache.commons.codec.binary.StringUtils; - -import java.util.UUID; - -public class LivingArmourUpgradeSlowness extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-10, -17, -23, -35, -48, -60, -80, -110, -160, -200}; - public static final double[] speedModifier = new double[]{-0.1, -0.2, -0.3, -0.4, -0.45, -0.5, -0.55, -0.6, -0.65, -0.7}; - - public LivingArmourUpgradeSlowness(int level) { - super(level); - } - - @Override - public Multimap getAttributeModifiers() { - Multimap modifierMap = HashMultimap.create(); - - String name = getUniqueIdentifier() + "-SpeedModifier1"; - modifierMap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "SpeedModifier1", speedModifier[this.level], 1)); - - return modifierMap; - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.slowness"; - } - - @Override - public int getMaxTier() { - return 10; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "slowness"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeStormTrooper.java b/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeStormTrooper.java deleted file mode 100644 index d90aa3e5..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/downgrade/LivingArmourUpgradeStormTrooper.java +++ /dev/null @@ -1,59 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.downgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeStormTrooper extends LivingArmourUpgrade { - public static final int[] costs = new int[]{-10, -25, -40, 65, -90}; - public static final float[] inaccuracy = new float[]{0.04f, 0.08f, 0.12f, 0.16f, 0.2f}; - - public LivingArmourUpgradeStormTrooper(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - public float getArrowJiggle(EntityPlayer player) { - return inaccuracy[this.level]; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.stormTrooper"; - } - - @Override - public int getMaxTier() { - return 5; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "stormTrooper"; - } - - @Override - public boolean isDowngrade() { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowProtect.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowProtect.java deleted file mode 100644 index 51671858..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowProtect.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeArrowProtect; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerArrowProtect extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{30, 200, 400, 800, 1500, 2500, 3500, 5000, 7000, 15000}; - public int totalDamage = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.arrowProtect"; - } - - @Override - public void resetTracker() { - this.totalDamage = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamage = tag.getInteger(BloodMagic.MODID + ".tracker.arrowProtect"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.arrowProtect", totalDamage); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamage += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalDamage >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradeArrowProtect(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamage, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.arrowProtect"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeArrowProtect) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamage = Math.max(totalDamage, damageRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double damage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowShot.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowShot.java deleted file mode 100644 index ed0e225d..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerArrowShot.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeArrowShot; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerArrowShot extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] shotsRequired = new int[]{50, 200, 700, 1500, 3000}; - public int totalShots = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.trickShot"; - } - - @Override - public void resetTracker() { - this.totalShots = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalShots = tag.getInteger(BloodMagic.MODID + ".tracker.trickShot"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.trickShot", totalShots); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - int change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalShots += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 5; i++) { - if (totalShots >= shotsRequired[i]) { - upgradeList.add(new LivingArmourUpgradeArrowShot(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalShots, shotsRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.arrowShot"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeArrowShot) { - int level = upgrade.getUpgradeLevel(); - if (level < shotsRequired.length) { - totalShots = Math.max(totalShots, shotsRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + 1 : 1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerCriticalStrike.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerCriticalStrike.java deleted file mode 100644 index fef5ed19..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerCriticalStrike.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeCriticalStrike; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerCriticalStrike extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{200, 800, 1300, 2500, 3800}; - public double totalDamageDealt = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.criticalStrike"; - } - - @Override - public void resetTracker() { - this.totalDamageDealt = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamageDealt = tag.getDouble(BloodMagic.MODID + ".tracker.criticalStrike"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.criticalStrike", totalDamageDealt); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamageDealt += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 5; i++) { - if (totalDamageDealt >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradeCriticalStrike(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamageDealt, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.criticalStrike"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeCriticalStrike) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamageDealt = Math.max(totalDamageDealt, damageRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double damage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerDigging.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerDigging.java deleted file mode 100644 index c04c1951..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerDigging.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeDigging; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerDigging extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] blocksRequired = new int[]{128, 512, 1024, 2048, 8192, 16000, 32000, 50000, 80000, 150000}; - public int totalBlocksDug = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.digging"; - } - - @Override - public void resetTracker() { - this.totalBlocksDug = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalBlocksDug = tag.getInteger(BloodMagic.MODID + ".tracker.digging"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.digging", totalBlocksDug); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - int change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalBlocksDug += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalBlocksDug >= blocksRequired[i]) { - upgradeList.add(new LivingArmourUpgradeDigging(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalBlocksDug, blocksRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.digging"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeDigging) { - int level = upgrade.getUpgradeLevel(); - if (level < blocksRequired.length) { - totalBlocksDug = Math.max(totalBlocksDug, blocksRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + 1 : 1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerExperience.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerExperience.java deleted file mode 100644 index 379d3631..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerExperience.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeExperience; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerExperience extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] experienceRequired = new int[]{100, 400, 1000, 1600, 3200, 5000, 7000, 9200, 11500, 140000}; - public double totalExperienceGained = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.experienced"; - } - - @Override - public void resetTracker() { - this.totalExperienceGained = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalExperienceGained = tag.getDouble(BloodMagic.MODID + ".tracker.experienced"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.experienced", totalExperienceGained); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalExperienceGained += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalExperienceGained >= experienceRequired[i]) { - upgradeList.add(new LivingArmourUpgradeExperience(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalExperienceGained, experienceRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.experienced"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeExperience) { - int level = upgrade.getUpgradeLevel(); - if (level < experienceRequired.length) { - totalExperienceGained = Math.max(totalExperienceGained, experienceRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, int exp) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + exp : exp); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFallProtect.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFallProtect.java deleted file mode 100644 index 76f6248d..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFallProtect.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeFallProtect; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerFallProtect extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{30, 200, 400, 800, 1500}; - public int totalDamage = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.fallProtect"; - } - - @Override - public void resetTracker() { - this.totalDamage = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamage = tag.getInteger(BloodMagic.MODID + ".tracker.fallProtect"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.fallProtect", totalDamage); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamage += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 5; i++) { - if (totalDamage >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradeFallProtect(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamage, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.fallProtect"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeFallProtect) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamage = Math.max(totalDamage, damageRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double damage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFireResist.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFireResist.java deleted file mode 100644 index c6e467d1..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFireResist.java +++ /dev/null @@ -1,89 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeFireResist; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class StatTrackerFireResist extends StatTracker { - public static int[] fireTicksRequired = new int[]{60 * 20, 3 * 60 * 20, 10 * 60 * 20, 20 * 60 * 20, 25 * 60 * 20}; - public int totalFireTicks = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.fire"; - } - - @Override - public void resetTracker() { - this.totalFireTicks = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalFireTicks = tag.getInteger(BloodMagic.MODID + ".tracker.fire"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.fire", totalFireTicks); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (player.isBurning()) { - totalFireTicks++; - this.markDirty(); - return true; - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 5; i++) { - if (totalFireTicks >= fireTicksRequired[i]) { - upgradeList.add(new LivingArmourUpgradeFireResist(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalFireTicks, fireTicksRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.fireResist"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeFireResist) { - int level = upgrade.getUpgradeLevel(); - if (level < fireTicksRequired.length) { - totalFireTicks = Math.max(totalFireTicks, fireTicksRequired[level]); - this.markDirty(); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java deleted file mode 100644 index b00fbb71..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerFood.java +++ /dev/null @@ -1,108 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeKnockbackResist; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class StatTrackerFood extends StatTracker { - public static Map lastFoodEatenMap = new HashMap<>(); - - public static int[] foodRequired = new int[]{100, 200, 300, 500, 1000}; - - public int foodEaten = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.foodEaten"; - } - - @Override - public void resetTracker() { - this.foodEaten = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - foodEaten = tag.getInteger(BloodMagic.MODID + ".tracker.foodEaten"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.foodEaten", foodEaten); - - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (!lastFoodEatenMap.containsKey(player)) { - lastFoodEatenMap.put(player, 20); - return false; - } - - int currentFood = player.getFoodStats().getFoodLevel(); - int prevFood = lastFoodEatenMap.get(player); - lastFoodEatenMap.put(player, currentFood); - - if (currentFood > prevFood) { - foodEaten += (currentFood - prevFood); - - markDirty(); - - return true; - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (lastFoodEatenMap.containsKey(player)) { - lastFoodEatenMap.remove(player); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < foodRequired.length; i++) { - if (foodEaten >= foodRequired[i]) { - upgradeList.add(new LivingArmourUpgradeKnockbackResist(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(foodEaten, foodRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.knockback"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeKnockbackResist) { - int level = upgrade.getUpgradeLevel(); - if (level < foodRequired.length) { - foodEaten = Math.max(foodEaten, foodRequired[level]); - this.markDirty(); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGraveDigger.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGraveDigger.java deleted file mode 100644 index 209a8316..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGraveDigger.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeGraveDigger; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerGraveDigger extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{200, 800, 1300, 2500, 3800, 5000, 7000, 9200, 11500, 140000}; - public double totalDamageDealt = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.graveDigger"; - } - - @Override - public void resetTracker() { - this.totalDamageDealt = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamageDealt = tag.getDouble(BloodMagic.MODID + ".tracker.graveDigger"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.graveDigger", totalDamageDealt); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamageDealt += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalDamageDealt >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradeGraveDigger(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamageDealt, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.graveDigger"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeGraveDigger) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamageDealt = Math.max(totalDamageDealt, damageRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double damage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGrimReaperSprint.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGrimReaperSprint.java deleted file mode 100644 index 0234bbf2..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerGrimReaperSprint.java +++ /dev/null @@ -1,111 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeGrimReaperSprint; -import WayofTime.bloodmagic.util.BMLog; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerGrimReaperSprint extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] deathsRequired = new int[]{6, 10, 15, 25, 50, 70, 90, 120, 150, 200}; //TODO: Modify - public int totalDeaths = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.grimReaper"; - } - - @Override - public void resetTracker() { - this.totalDeaths = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDeaths = tag.getInteger(BloodMagic.MODID + ".tracker.grimReaper"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.grimReaper", totalDeaths); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDeaths += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0); - - this.markDirty(); - - return true; - } - } - - return true; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalDeaths >= deathsRequired[i]) { - upgradeList.add(new LivingArmourUpgradeGrimReaperSprint(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDeaths, deathsRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.grimReaper"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeGrimReaperSprint) { - int level = upgrade.getUpgradeLevel(); - if (level < deathsRequired.length) { - totalDeaths = Math.max(totalDeaths, deathsRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour) { - StatTracker tracker = armour.getTracker(BloodMagic.MODID + ".tracker.grimReaper"); - if (tracker instanceof StatTrackerGrimReaperSprint) { - ((StatTrackerGrimReaperSprint) tracker).totalDeaths++; - BMLog.DEBUG.info(String.valueOf(((StatTrackerGrimReaperSprint) tracker).totalDeaths)); - tracker.markDirty(); - } -// changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + 1 : 1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerHealthboost.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerHealthboost.java deleted file mode 100644 index 666cf88f..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerHealthboost.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeHealthboost; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerHealthboost extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] healthedRequired = new int[]{80, 200, 340, 540, 800, 1600, 2800, 5000, 7600, 10000}; - public double totalHealthGenned = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.health"; - } - - @Override - public void resetTracker() { - this.totalHealthGenned = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalHealthGenned = tag.getDouble(BloodMagic.MODID + ".tracker.health"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.health", totalHealthGenned); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalHealthGenned += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalHealthGenned >= healthedRequired[i]) { - upgradeList.add(new LivingArmourUpgradeHealthboost(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalHealthGenned, healthedRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.health"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeHealthboost) { - int level = upgrade.getUpgradeLevel(); - if (level < healthedRequired.length) { - totalHealthGenned = Math.max(totalHealthGenned, healthedRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double health) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + health : health); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerJump.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerJump.java deleted file mode 100644 index d5214fa6..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerJump.java +++ /dev/null @@ -1,106 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeJump; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerJump extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] jumpsRequired = new int[]{30, 200, 400, 700, 1100, 1500, 2000, 2800, 3600, 5000}; //testing - - public int totalJumps = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.jump"; - } - - @Override - public void resetTracker() { - this.totalJumps = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalJumps = tag.getInteger(BloodMagic.MODID + ".tracker.jump"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.jump", totalJumps); - - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - int change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalJumps += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalJumps >= jumpsRequired[i]) { - upgradeList.add(new LivingArmourUpgradeJump(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalJumps, jumpsRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.jump"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeJump) { - int level = upgrade.getUpgradeLevel(); - if (level < jumpsRequired.length) { - totalJumps = Math.max(totalJumps, jumpsRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + 1 : 1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMeleeDamage.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMeleeDamage.java deleted file mode 100644 index a7172372..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMeleeDamage.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeMeleeDamage; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerMeleeDamage extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{200, 800, 1300, 2500, 3800, 5000, 7000, 9200, 11500, 140000}; - public double totalDamageDealt = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.meleeDamage"; - } - - @Override - public void resetTracker() { - this.totalDamageDealt = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamageDealt = tag.getDouble(BloodMagic.MODID + ".tracker.meleeDamage"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.meleeDamage", totalDamageDealt); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamageDealt += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalDamageDealt >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradeMeleeDamage(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamageDealt, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.meleeDamage"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeMeleeDamage) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamageDealt = Math.max(totalDamageDealt, damageRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double damage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMovement.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMovement.java deleted file mode 100644 index 49a598d1..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerMovement.java +++ /dev/null @@ -1,116 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSpeed; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class StatTrackerMovement extends StatTracker { - public static Map lastPosX = new HashMap<>(); - public static Map lastPosZ = new HashMap<>(); - - public static int[] blocksRequired = new int[]{200, 1000, 2000, 4000, 7000, 15000, 25000, 35000, 50000, 70000}; - - public double totalMovement = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.movement"; - } - - @Override - public void resetTracker() { - this.totalMovement = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalMovement = tag.getDouble(BloodMagic.MODID + ".tracker.movement"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.movement", totalMovement); - - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (!lastPosX.containsKey(player)) { - lastPosX.put(player, player.posX); - lastPosZ.put(player, player.posZ); - return false; - } - - if (!player.onGround) { - return false; - } - - double distanceTravelled = Math.sqrt(Math.pow(lastPosX.get(player) - player.posX, 2) + Math.pow(lastPosZ.get(player) - player.posZ, 2)); - - if (distanceTravelled > 0.0001 && distanceTravelled < 2) { - totalMovement += distanceTravelled; - - lastPosX.put(player, player.posX); - lastPosZ.put(player, player.posZ); - - markDirty(); - - return true; - } - - lastPosX.put(player, player.posX); - lastPosZ.put(player, player.posZ); - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalMovement >= blocksRequired[i]) { - upgradeList.add(new LivingArmourUpgradeSpeed(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalMovement, blocksRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.movement"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeSpeed) { - int level = upgrade.getUpgradeLevel(); - if (level < blocksRequired.length) { - totalMovement = Math.max(totalMovement, blocksRequired[level]); - this.markDirty(); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerNightSight.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerNightSight.java deleted file mode 100644 index ca2a181b..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerNightSight.java +++ /dev/null @@ -1,124 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeNightSight; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerNightSight extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{0, 200, 800, 1300, 2500, 3800, 5000, 7000, 9200, 11500}; - public static int neededNightVision = 3 * 60 * 20; - public double totalDamageDealt = 0; - public int totalNightVision = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.nightSight"; - } - - @Override - public void resetTracker() { - this.totalDamageDealt = 0; - this.totalNightVision = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamageDealt = tag.getDouble(BloodMagic.MODID + ".tracker.nightSight"); - totalNightVision = tag.getInteger(BloodMagic.MODID + ".tracker.nightSightVision"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.nightSight", totalDamageDealt); - tag.setInteger(BloodMagic.MODID + ".tracker.nightSightVision", totalNightVision); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - boolean test = false; - - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamageDealt += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - test = true; - } - } - - if (world.getLight(player.getPosition()) <= 9 && player.isPotionActive(MobEffects.NIGHT_VISION)) { - totalNightVision++; - test = true; - } - - if (test) { - this.markDirty(); - } - - return test; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - if (totalNightVision < neededNightVision) { - return upgradeList; - } - - for (int i = 0; i < 10; i++) { - if (totalDamageDealt >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradeNightSight(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamageDealt, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.nightSight"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeNightSight) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamageDealt = Math.max(totalDamageDealt, damageRequired[level]); - totalNightVision = neededNightVision; - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double damage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPhysicalProtect.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPhysicalProtect.java deleted file mode 100644 index 7fca6648..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPhysicalProtect.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradePhysicalProtect; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerPhysicalProtect extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{30, 50, 80, 140, 200, 300, 400, 500, 650, 800}; - public int totalDamage = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.physicalProtect"; - } - - @Override - public void resetTracker() { - this.totalDamage = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamage = tag.getInteger(BloodMagic.MODID + ".tracker.physicalProtect"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.physicalProtect", totalDamage); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamage += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalDamage >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradePhysicalProtect(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamage, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.physicalProtect"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradePhysicalProtect) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamage = Math.max(totalDamage, damageRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double damage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPoison.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPoison.java deleted file mode 100644 index fb002e49..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerPoison.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradePoisonResist; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class StatTrackerPoison extends StatTracker { - public static int[] poisonTicksRequired = new int[]{60 * 20, 3 * 60 * 20, 10 * 60 * 20, 20 * 60 * 20, 25 * 60 * 20}; - public int totalPoisonTicks = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.poison"; - } - - @Override - public void resetTracker() { - this.totalPoisonTicks = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalPoisonTicks = tag.getInteger(BloodMagic.MODID + ".tracker.poison"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.poison", totalPoisonTicks); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (player.isPotionActive(MobEffects.POISON)) { - totalPoisonTicks++; - this.markDirty(); - return true; - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 5; i++) { - if (totalPoisonTicks >= poisonTicksRequired[i]) { - upgradeList.add(new LivingArmourUpgradePoisonResist(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalPoisonTicks, poisonTicksRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.poisonResist"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradePoisonResist) { - int level = upgrade.getUpgradeLevel(); - if (level < poisonTicksRequired.length) { - totalPoisonTicks = Math.max(totalPoisonTicks, poisonTicksRequired[level]); - this.markDirty(); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerRepairing.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerRepairing.java deleted file mode 100644 index 458b5eb6..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerRepairing.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeRepairing; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerRepairing extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{500}; - public double totalDamage = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.repair"; - } - - @Override - public void resetTracker() { - this.totalDamage = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamage = tag.getDouble(BloodMagic.MODID + ".tracker.repair"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.repair", totalDamage); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamage += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 1; i++) { - if (totalDamage >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradeRepairing(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamage, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.repair"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeRepairing) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamage = Math.max(totalDamage, damageRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, int receivedDamage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + receivedDamage : receivedDamage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSelfSacrifice.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSelfSacrifice.java deleted file mode 100644 index 631ac1d2..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSelfSacrifice.java +++ /dev/null @@ -1,106 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSelfSacrifice; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerSelfSacrifice extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] sacrificesRequired = new int[]{30, 200, 400, 700, 1100, 1500, 2000, 2800, 3600, 5000}; //testing - - public int totalSacrifices = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.selfSacrifice"; - } - - @Override - public void resetTracker() { - this.totalSacrifices = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalSacrifices = tag.getInteger(BloodMagic.MODID + ".tracker.selfSacrifice"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.selfSacrifice", totalSacrifices); - - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - int change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalSacrifices += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalSacrifices >= sacrificesRequired[i]) { - upgradeList.add(new LivingArmourUpgradeSelfSacrifice(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalSacrifices, sacrificesRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.selfSacrifice"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeSelfSacrifice) { - int level = upgrade.getUpgradeLevel(); - if (level < sacrificesRequired.length) { - totalSacrifices = Math.max(totalSacrifices, sacrificesRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, int hearts) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + hearts : hearts); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSolarPowered.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSolarPowered.java deleted file mode 100644 index 29d656ac..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSolarPowered.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSolarPowered; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerSolarPowered extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] healthedRequired = new int[]{70, 150, 300, 500, 700, 1400, 2400, 4000, 7000, 9000}; - public double totalHealthGenned = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.solarPowered"; - } - - @Override - public void resetTracker() { - this.totalHealthGenned = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalHealthGenned = tag.getDouble(BloodMagic.MODID + ".tracker.solarPowered"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.solarPowered", totalHealthGenned); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalHealthGenned += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 10; i++) { - if (totalHealthGenned >= healthedRequired[i]) { - upgradeList.add(new LivingArmourUpgradeSolarPowered(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalHealthGenned, healthedRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.solarPowered"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeSolarPowered) { - int level = upgrade.getUpgradeLevel(); - if (level < healthedRequired.length) { - totalHealthGenned = Math.max(totalHealthGenned, healthedRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double health) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + health : health); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSprintAttack.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSprintAttack.java deleted file mode 100644 index 09d2f220..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerSprintAttack.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSprintAttack; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class StatTrackerSprintAttack extends StatTracker { - public static HashMap changeMap = new HashMap<>(); - public static int[] damageRequired = new int[]{200, 800, 1300, 2500, 3800}; - public double totalDamageDealt = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.sprintAttack"; - } - - @Override - public void resetTracker() { - this.totalDamageDealt = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalDamageDealt = tag.getDouble(BloodMagic.MODID + ".tracker.sprintAttack"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.sprintAttack", totalDamageDealt); - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - double change = Math.abs(changeMap.get(livingArmour)); - if (change > 0) { - totalDamageDealt += Math.abs(changeMap.get(livingArmour)); - - changeMap.put(livingArmour, 0d); - - this.markDirty(); - - return true; - } - } - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour)) { - changeMap.remove(livingArmour); - } - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - for (int i = 0; i < 5; i++) { - if (totalDamageDealt >= damageRequired[i]) { - upgradeList.add(new LivingArmourUpgradeSprintAttack(i)); - } - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - return Utils.calculateStandardProgress(totalDamageDealt, damageRequired, currentLevel); - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.sprintAttack"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeSprintAttack) { - int level = upgrade.getUpgradeLevel(); - if (level < damageRequired.length) { - totalDamageDealt = Math.max(totalDamageDealt, damageRequired[level]); - this.markDirty(); - } - } - } - - public static void incrementCounter(LivingArmour armour, double damage) { - changeMap.put(armour, changeMap.containsKey(armour) ? changeMap.get(armour) + damage : damage); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerStepAssist.java b/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerStepAssist.java deleted file mode 100644 index 77ad3f12..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/tracker/StatTrackerStepAssist.java +++ /dev/null @@ -1,114 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.tracker; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeStepAssist; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class StatTrackerStepAssist extends StatTracker { - public static Map lastPosX = new HashMap<>(); - public static Map lastPosZ = new HashMap<>(); - - public static int blocksRequired = 1000; - - public double totalMovement = 0; - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".tracker.stepAssist"; - } - - @Override - public void resetTracker() { - this.totalMovement = 0; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - totalMovement = tag.getDouble(BloodMagic.MODID + ".tracker.stepAssist"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setDouble(BloodMagic.MODID + ".tracker.stepAssist", totalMovement); - - } - - @Override - public boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour) { - if (!lastPosX.containsKey(player)) { - lastPosX.put(player, player.posX); - lastPosZ.put(player, player.posZ); - return false; - } - - if (!player.onGround || player.stepHeight < 1) { - return false; - } - - double distanceTravelled = Math.sqrt(Math.pow(lastPosX.get(player) - player.posX, 2) + Math.pow(lastPosZ.get(player) - player.posZ, 2)); - - if (distanceTravelled > 0.0001 && distanceTravelled < 2) { - double previousMovement = totalMovement; - totalMovement += distanceTravelled; - - lastPosX.put(player, player.posX); - lastPosZ.put(player, player.posZ); - - markDirty(); - - return previousMovement < blocksRequired && totalMovement >= blocksRequired; - } - - lastPosX.put(player, player.posX); - lastPosZ.put(player, player.posZ); - - return false; - } - - @Override - public void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour) { - - } - - @Override - public List getUpgrades() { - List upgradeList = new ArrayList<>(); - - if (totalMovement >= blocksRequired) { - upgradeList.add(new LivingArmourUpgradeStepAssist(0)); - } - - return upgradeList; - } - - @Override - public double getProgress(LivingArmour livingArmour, int currentLevel) { - if (currentLevel == 1) - return 1.0D; - - return totalMovement / (double) blocksRequired; - } - - @Override - public boolean providesUpgrade(String key) { - return key.equals(BloodMagic.MODID + ".upgrade.stepAssist"); - } - - @Override - public void onArmourUpgradeAdded(LivingArmourUpgrade upgrade) { - if (upgrade instanceof LivingArmourUpgradeStepAssist) { - totalMovement = Math.max(totalMovement, blocksRequired); - this.markDirty(); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeArrowProtect.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeArrowProtect.java deleted file mode 100644 index f50e5d59..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeArrowProtect.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; - -public class LivingArmourUpgradeArrowProtect extends LivingArmourUpgrade { - public static final int[] costs = new int[]{4, 9, 16, 30, 60, 90, 125, 165, 210, 250}; - public static final double[] protectionLevel = new double[]{0.1, 0.3, 0.4, 0.5, 0.6, 0.7, 0.75, 0.77, 0.80, 0.83}; - - public LivingArmourUpgradeArrowProtect(int level) { - super(level); - } - - @Override - public double getArmourProtection(EntityLivingBase wearer, DamageSource source) { - if (source.isProjectile()) { - return protectionLevel[this.level]; - } - - return 0; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.arrowProtect"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "arrowProtect"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeArrowShot.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeArrowShot.java deleted file mode 100644 index 64e99f67..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeArrowShot.java +++ /dev/null @@ -1,56 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeArrowShot extends LivingArmourUpgrade { - public static final int[] costs = new int[]{20, 50, 90, 160, 290}; - public static final int[] extraArrow = new int[]{1, 2, 3, 4, 5}; - - public LivingArmourUpgradeArrowShot(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.arrowShot"; - } - - @Override - public int getMaxTier() { - return 5; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "arrowShot"; - } - - public int getExtraArrows() { - return extraArrow[this.level]; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeCriticalStrike.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeCriticalStrike.java deleted file mode 100644 index 64b1ff05..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeCriticalStrike.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class LivingArmourUpgradeCriticalStrike extends LivingArmourUpgrade { - public static final int[] costs = new int[]{5, 12, 22, 35, 49}; - public static final double[] damageBoost = new double[]{0.1, 0.2, 0.3, 0.4, 0.5}; - - public LivingArmourUpgradeCriticalStrike(int level) { - super(level); - } - - @Override - public double getAdditionalDamageOnHit(double damage, EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - boolean flag = wearer.fallDistance > 0.0F && !wearer.onGround && !wearer.isOnLadder() && !wearer.isInWater() && !wearer.isPotionActive(MobEffects.BLINDNESS) && !wearer.isRiding() && !wearer.isSprinting(); - - if (flag) { - return getDamageModifier() * damage; - } - - return 0; - } - - public double getDamageModifier() { - return damageBoost[this.level]; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.criticalStrike"; - } - - @Override - public int getMaxTier() { - return 5; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "criticalStrike"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeDigging.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeDigging.java deleted file mode 100644 index a88e42c9..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeDigging.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -import java.util.HashMap; - -public class LivingArmourUpgradeDigging extends LivingArmourUpgrade { - public static final int[] costs = new int[]{5, 10, 18, 32, 60, 90, 140, 180, 240, 300}; - public static final int[] digSpeedTime = new int[]{0, 50, 60, 100, 100, 100, 100, 150, 150, 150}; - public static final int[] digSpeedLevel = new int[]{0, 0, 0, 1, 1, 1, 1, 1, 2, 2}; - public static final double[] digSpeedModifier = new double[]{1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 2, 2.2, 2.5}; - public static HashMap changeMap = new HashMap<>(); - - public LivingArmourUpgradeDigging(int level) { - super(level); - } - - @Override - public double getMiningSpeedModifier(EntityPlayer player) { - return digSpeedModifier[this.level]; - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (changeMap.containsKey(livingArmour) && changeMap.get(livingArmour)) { - changeMap.put(livingArmour, false); - - if (digSpeedTime[this.level] > 0) { - player.addPotionEffect(new PotionEffect(MobEffects.SPEED, digSpeedTime[this.level], digSpeedLevel[this.level], false, false)); - } - } - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.digging"; - } - - @Override - public int getMaxTier() { - return 10; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "digging"; - } - - public static void hasDug(LivingArmour armour) { - changeMap.put(armour, true); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeElytra.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeElytra.java deleted file mode 100644 index d1699406..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeElytra.java +++ /dev/null @@ -1,51 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeElytra extends LivingArmourUpgrade { - public static final int[] costs = new int[]{20}; - - public LivingArmourUpgradeElytra(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.elytra"; - } - - @Override - public int getMaxTier() { - return 1; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "elytra"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeExperience.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeExperience.java deleted file mode 100644 index ba5abaaa..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeExperience.java +++ /dev/null @@ -1,48 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.nbt.NBTTagCompound; - -public class LivingArmourUpgradeExperience extends LivingArmourUpgrade { - public static final int[] costs = new int[]{7, 13, 22, 40, 65, 90, 130, 180, 250, 350}; - public static final double[] experienceModifier = new double[]{0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05, 1.2, 1.35, 1.5}; - - public LivingArmourUpgradeExperience(int level) { - super(level); - } - - public double getExperienceModifier() { - return experienceModifier[this.level]; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.experienced"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "experienced"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeFallProtect.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeFallProtect.java deleted file mode 100644 index c394a4af..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeFallProtect.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; - -public class LivingArmourUpgradeFallProtect extends LivingArmourUpgrade { - public static final int[] costs = new int[]{2, 5, 9, 15, 25}; - public static final double[] protectionLevel = new double[]{0.2, 0.4, 0.6, 0.8, 1}; - - public LivingArmourUpgradeFallProtect(int level) { - super(level); - } - - @Override - public double getArmourProtection(EntityLivingBase wearer, DamageSource source) { - if (source.equals(DamageSource.FALL)) { - return protectionLevel[this.level]; - } - - return 0; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.fallProtect"; - } - - @Override - public int getMaxTier() { - return 5; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "fallProtect"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeFireResist.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeFireResist.java deleted file mode 100644 index a4725a05..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeFireResist.java +++ /dev/null @@ -1,69 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.world.World; - -public class LivingArmourUpgradeFireResist extends LivingArmourUpgrade { - public static final int[] costs = new int[]{2, 6, 14, 25, 40}; - public static final int[] fireCooldownTime = new int[]{5 * 60 * 20, 5 * 60 * 20, 4 * 60 * 20, 3 * 60 * 20, 2 * 60 * 20}; - public static final int[] fireResistDuration = new int[]{30 * 20, 30 * 20, 40 * 20, 50 * 20, 60 * 20}; - - public int fireCooldown = 0; - - public LivingArmourUpgradeFireResist(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (player.isBurning() && fireCooldown <= 0) { - - player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, fireResistDuration[this.level])); - fireCooldown = fireCooldownTime[this.level]; - - player.sendStatusMessage(new TextComponentString(TextHelper.localizeEffect(chatBase + "fireRemove")), true); - - } else if (fireCooldown > 0) { - fireCooldown--; - } - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.fireResist"; - } - - @Override - public int getMaxTier() { - return 5; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(Constants.NBT.UPGRADE_FIRE_TIMER, fireCooldown); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - fireCooldown = tag.getInteger(Constants.NBT.UPGRADE_FIRE_TIMER); - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "fireResist"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGraveDigger.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGraveDigger.java deleted file mode 100644 index 69a58009..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGraveDigger.java +++ /dev/null @@ -1,61 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemSpade; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class LivingArmourUpgradeGraveDigger extends LivingArmourUpgrade { - public static final int[] costs = new int[]{5, 12, 20, 35, 49, 78, 110, 160, 215, 320}; - public static final double[] damageBoost = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - - public LivingArmourUpgradeGraveDigger(int level) { - super(level); - } - - @Override - public double getAdditionalDamageOnHit(double damage, EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - if (!weapon.isEmpty() && weapon.getItem() instanceof ItemSpade) { - return getDamageModifier(); - } - - return 0; - } - - public double getDamageModifier() { - return damageBoost[this.level]; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.graveDigger"; - } - - @Override - public int getMaxTier() { - return 10; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "graveDigger"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGrimReaperSprint.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGrimReaperSprint.java deleted file mode 100644 index 1e8fdfd3..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeGrimReaperSprint.java +++ /dev/null @@ -1,86 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.world.World; - -public class LivingArmourUpgradeGrimReaperSprint extends LivingArmourUpgrade { - public static final int[] costs = new int[]{20, 50, 130, 270, 450, 580, 700, 800, 900, 1000}; - public static final int[] rebirthDelay = new int[]{20 * 60 * 60, 20 * 60 * 50, 20 * 60 * 45, 20 * 60 * 40, 20 * 60 * 30, 20 * 60 * 25, 20 * 60 * 15, 20 * 60 * 10, 20 * 60 * 5, 20 * 60}; - public static final int[] strengthDuration = new int[]{0, 0, 100, 100, 200, 200, 200, 300, 300, 400}; - public static final int[] strengthValue = new int[]{0, 0, 0, 0, 0, 1, 1, 2, 2, 3}; - public static final int[] resistanceDuration = new int[]{100, 100, 100, 100, 100, 100, 100, 100, 100, 100}; - public static final int[] resistanceValue = new int[]{0, 0, 0, 0, 0, 1, 1, 2, 2, 3}; - public static final float[] healthOnRevive = new float[]{0.2f, 0.2f, 0.3f, 0.3f, 0.4f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f}; - - public int deathTimer = 0; - - public LivingArmourUpgradeGrimReaperSprint(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (deathTimer > 0) { - deathTimer--; - } - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.grimReaper"; - } - - @Override - public int getMaxTier() { - return 10; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - deathTimer = tag.getInteger(BloodMagic.MODID + ".tracker.grimReaper"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.grimReaper", deathTimer); - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "grimReaper"; - } - - public void applyEffectOnRebirth(EntityPlayer player) { - player.setHealth(player.getMaxHealth() * healthOnRevive[this.level]); - - int strDur = strengthDuration[this.level]; - if (strDur > 0) { - player.addPotionEffect(new PotionEffect(MobEffects.STRENGTH, strDur, strengthValue[this.level])); - } - - int resDur = resistanceDuration[this.level]; - if (resDur > 0) { - player.addPotionEffect(new PotionEffect(MobEffects.RESISTANCE, resDur, resistanceValue[this.level])); - } - - deathTimer = rebirthDelay[this.level]; - player.sendStatusMessage(new TextComponentString(TextHelper.localizeEffect(chatBase + "grimReaper")), true); - } - - public boolean canSavePlayer(EntityPlayer player) { - return deathTimer <= 0; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java deleted file mode 100644 index 08ecc06c..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeHealthboost.java +++ /dev/null @@ -1,69 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import org.apache.commons.codec.binary.StringUtils; - -import java.util.UUID; - -public class LivingArmourUpgradeHealthboost extends LivingArmourUpgrade { - public static final int[] costs = new int[]{5, 12, 20, 35, 49, 78, 110, 160, 215, 320}; - public static final int[] healthModifier = new int[]{4, 8, 12, 16, 20, 26, 32, 38, 44, 50}; - - public LivingArmourUpgradeHealthboost(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public Multimap getAttributeModifiers() { - Multimap modifierMap = HashMultimap.create(); - - String name = getUniqueIdentifier() + "-HealthModifier1"; - modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "HealthModifier1", healthModifier[this.level], 0)); - - return modifierMap; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.health"; - } - - @Override - public int getMaxTier() { - return 10; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "health"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeJump.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeJump.java deleted file mode 100644 index 4bb03e62..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeJump.java +++ /dev/null @@ -1,63 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeJump extends LivingArmourUpgrade { - public static final int[] costs = new int[]{3, 6, 11, 23, 37, 50, 70, 100, 140, 200}; - public static final double[] jumpModifier = new double[]{0.10, 0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5}; - public static final double[] fallModifier = new double[]{0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.75, 0.8, 0.85}; - - public LivingArmourUpgradeJump(int level) { - super(level); - } - - public double getJumpModifier() { - return jumpModifier[this.level]; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.jump"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (!world.isRemote) { - double motionY = player.motionY; - - if (motionY < 0) { - player.fallDistance = (float) Math.max(0, player.fallDistance + motionY * fallModifier[this.level]); - } - } - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "jump"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java deleted file mode 100644 index 8909473e..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeKnockbackResist.java +++ /dev/null @@ -1,67 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.nbt.NBTTagCompound; -import org.apache.commons.codec.binary.StringUtils; - -import java.util.UUID; - -public class LivingArmourUpgradeKnockbackResist extends LivingArmourUpgrade { - public static final int[] costs = new int[]{3, 7, 13, 26, 42}; - public static final double[] kbModifier = new double[]{0.2, 0.4, 0.6, 0.8, 1.0}; - public static final int[] healthModifier = new int[]{0, 0, 0, 4, 10}; - - public LivingArmourUpgradeKnockbackResist(int level) { - super(level); - } - - @Override - public Multimap getAttributeModifiers() { - Multimap modifierMap = HashMultimap.create(); - - String name = getUniqueIdentifier() + "-KnockbackModifier1"; - modifierMap.put(SharedMonsterAttributes.KNOCKBACK_RESISTANCE.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "KnockbackModifier1", kbModifier[this.level], 0)); - - if (healthModifier[this.level] > 0) { - name = getUniqueIdentifier() + "-HealthModifier1"; - modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "HealthModifier1", healthModifier[this.level], 0)); - } - - return modifierMap; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.knockback"; - } - - @Override - public int getMaxTier() { - return 5; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "knockback"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java deleted file mode 100644 index 22e206f8..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeMeleeDamage.java +++ /dev/null @@ -1,69 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import org.apache.commons.codec.binary.StringUtils; - -import java.util.UUID; - -public class LivingArmourUpgradeMeleeDamage extends LivingArmourUpgrade { - public static final int[] costs = new int[]{5, 12, 20, 35, 49, 78, 110, 160, 215, 320}; - public static final double[] meleeDamage = new double[]{0.5, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 7}; - - public LivingArmourUpgradeMeleeDamage(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - - } - - @Override - public Multimap getAttributeModifiers() { - Multimap modifierMap = HashMultimap.create(); - - String name = getUniqueIdentifier() + "-DamageModifier1"; - modifierMap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "DamageModifier1", meleeDamage[this.level], 0)); - - return modifierMap; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.meleeDamage"; - } - - @Override - public int getMaxTier() { - return 10; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "meleeDamage"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeNightSight.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeNightSight.java deleted file mode 100644 index b9171625..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeNightSight.java +++ /dev/null @@ -1,77 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class LivingArmourUpgradeNightSight extends LivingArmourUpgrade { - public static final int[] costs = new int[]{5, 8, 15, 20, 34, 45, 70, 100, 150, 200}; - public static final double[] meleeDamage = new double[]{0, 0.5, 1, 1.5, 2, 2.5, 3, 4, 5, 6}; - - public boolean isActive = false; - - public LivingArmourUpgradeNightSight(int level) { - super(level); - } - - @Override - public double getAdditionalDamageOnHit(double damage, EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - return isActive ? meleeDamage[this.level] : 0; - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (world.getLight(player.getPosition(), false) <= 9) { - isActive = true; - if (player.isPotionActive(MobEffects.NIGHT_VISION)) { - int dur = player.getActivePotionEffect(MobEffects.NIGHT_VISION).getDuration(); - if (dur > 100 && dur < 20 * 60 * 20) { - //Don't override the potion effect if the other potion effect is sufficiently long. - return; - } - } - - player.addPotionEffect(new PotionEffect(MobEffects.NIGHT_VISION, Constants.Misc.NIGHT_VISION_CONSTANT_BEGIN, 0, false, false)); - } else { - isActive = false; - } - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.nightSight"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "nightSight"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradePhysicalProtect.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradePhysicalProtect.java deleted file mode 100644 index 9b755a27..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradePhysicalProtect.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; - -public class LivingArmourUpgradePhysicalProtect extends LivingArmourUpgrade { - public static final int[] costs = new int[]{5, 10, 18, 35, 65, 100, 140, 190, 250, 300}; - public static final double[] protectionLevel = new double[]{0.1, 0.3, 0.4, 0.5, 0.6, 0.7, 0.75, 0.77, 0.80, 0.83}; - - public LivingArmourUpgradePhysicalProtect(int level) { - super(level); - } - - @Override - public double getArmourProtection(EntityLivingBase wearer, DamageSource source) { - if (source.getTrueSource() != null && !source.isMagicDamage() && !source.isProjectile()) { - return protectionLevel[this.level]; - } - - return 0; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.physicalProtect"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "physicalProtect"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradePoisonResist.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradePoisonResist.java deleted file mode 100644 index 49bd19c0..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradePoisonResist.java +++ /dev/null @@ -1,70 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.world.World; - -public class LivingArmourUpgradePoisonResist extends LivingArmourUpgrade { - public static final int[] costs = new int[]{2, 6, 14, 25, 40}; - public static final int[] poisonCooldownTime = new int[]{1200, 800, 600, 300, 100}; - public static final int[] poisonMaxCure = new int[]{0, 1, 2, 2, 3}; - - public int poisonCooldown = 0; - - public LivingArmourUpgradePoisonResist(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (player.isPotionActive(MobEffects.POISON) && poisonCooldown <= 0) { - PotionEffect eff = player.getActivePotionEffect(MobEffects.POISON); - if (eff.getAmplifier() <= poisonMaxCure[this.level]) { - player.removePotionEffect(MobEffects.POISON); - poisonCooldown = poisonCooldownTime[this.level]; - - player.sendStatusMessage(new TextComponentString(TextHelper.localize(chatBase + "poisonRemove")), true); - } - } else if (poisonCooldown > 0) { - poisonCooldown--; - } - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.poisonResist"; - } - - @Override - public int getMaxTier() { - return 5; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(Constants.NBT.UPGRADE_POISON_TIMER, poisonCooldown); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - poisonCooldown = tag.getInteger(Constants.NBT.UPGRADE_POISON_TIMER); - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "poisonResist"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeRepairing.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeRepairing.java deleted file mode 100644 index 80f7093d..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeRepairing.java +++ /dev/null @@ -1,73 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class LivingArmourUpgradeRepairing extends LivingArmourUpgrade { - public static final int[] costs = new int[]{15}; - public static final int[] repairDelay = new int[]{200}; - - int maxRepair = 1; - - int delay = 0; - - public LivingArmourUpgradeRepairing(int level) { - super(level); - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - if (delay <= 0) { - delay = repairDelay[this.level]; - - EntityEquipmentSlot randomSlot = EntityEquipmentSlot.values()[2 + world.rand.nextInt(4)]; - ItemStack repairStack = player.getItemStackFromSlot(randomSlot); - if (!repairStack.isEmpty()) { - if (repairStack.isItemStackDamageable() && repairStack.isItemDamaged()) { - int toRepair = Math.min(maxRepair, repairStack.getItemDamage()); - if (toRepair > 0) { - repairStack.setItemDamage(repairStack.getItemDamage() - toRepair); - } - } - } - } else { - delay--; - } - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.repair"; - } - - @Override - public int getMaxTier() { - return 1; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger("repairingDelay", delay); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - delay = tag.getInteger("repairingDelay"); - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "repair"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSelfSacrifice.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSelfSacrifice.java deleted file mode 100644 index 0c3a6db7..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSelfSacrifice.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.nbt.NBTTagCompound; - -public class LivingArmourUpgradeSelfSacrifice extends LivingArmourUpgrade { - //TODO: Add extra effects for higher levels - public static final int[] costs = new int[]{7, 13, 22, 40, 65, 90, 130, 180, 250, 350}; - public static final double[] sacrificeModifier = new double[]{0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05, 1.2, 1.35, 1.5}; - - public LivingArmourUpgradeSelfSacrifice(int level) { - super(level); - } - - public double getSacrificeModifier() { - return sacrificeModifier[this.level]; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.selfSacrifice"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "selfSacrifice"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSolarPowered.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSolarPowered.java deleted file mode 100644 index d285c11d..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSolarPowered.java +++ /dev/null @@ -1,79 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public class LivingArmourUpgradeSolarPowered extends LivingArmourUpgrade { - public static final int[] costs = new int[]{5, 12, 20, 35, 49, 78, 110, 160, 215, 320}; - public static final int[] regenCooldown = new int[]{200, 180, 160, 120, 100, 80, 40, 20, 10, 10}; - public static final int[] fireResistCooldown = new int[]{1, 1, 60 * 60, 50 * 60, 40 * 60, 35 * 60, 30 * 60, 25 * 60, 20 * 60, 10 * 60}; - public static final int[] fireResistTime = new int[]{0, 0, 15 * 60, 20 * 60, 30 * 60, 35 * 60, 40 * 60, 50 * 60, 60 * 60, 100 * 60}; - public static final double[] protectionLevel = new double[]{0.02, 0.04, 0.06, 0.08, 0.10, 0.13, 0.16, 0.19, 0.22, 0.25}; - - public int counter = 0; - - public LivingArmourUpgradeSolarPowered(int level) { - super(level); - } - - @Override - public double getArmourProtection(EntityLivingBase wearer, DamageSource source) { - if (wearer.getEntityWorld().canSeeSky(wearer.getPosition()) || wearer.getEntityWorld().provider.isDaytime()) { - return protectionLevel[this.level]; - } - - return 0; - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) { - counter++; - if (world.canSeeSky(player.getPosition()) || world.provider.isDaytime()) { - if (counter % regenCooldown[this.level] == 0 && player.getHealth() < player.getMaxHealth()) { - player.heal(1); - } - - if (fireResistTime[this.level] != 0 && counter % fireResistCooldown[this.level] == 0) { - player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, fireResistTime[this.level], 0, false, false)); - } - } - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.solarPowered"; - } - - @Override - public int getMaxTier() { - return 10; // Set to here until I can add more upgrades to it. - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(BloodMagic.MODID + ".tracker.solarPowered", counter); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - counter = tag.getInteger(BloodMagic.MODID + ".tracker.solarPowered"); - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "solarPowered"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java deleted file mode 100644 index d0392eec..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSpeed.java +++ /dev/null @@ -1,105 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.ILivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; -import org.apache.commons.codec.binary.StringUtils; - -import java.util.UUID; - -public class LivingArmourUpgradeSpeed extends LivingArmourUpgrade -{ - public static final int[] costs = new int[] { 3, 7, 13, 26, 42, 60, 90, 130, 180, 250 }; - public static final double[] speedModifier = new double[] { 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5 }; - public static final int[] sprintSpeedTime = new int[] { 0, 0, 0, 0, 0, 20, 60, 60, 100, 200 }; - public static final int[] sprintSpeedLevel = new int[] { 0, 0, 0, 0, 0, 0, 0, 1, 1, 2 }; - public static final int[] healthModifier = new int[] { 0, 0, 0, 0, 0, 0, 0, 4, 10, 20 }; - public static final int[] sprintRegenTime = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 25 }; - - public LivingArmourUpgradeSpeed(int level) - { - super(level); - } - - public double getSpeedModifier() - { - return speedModifier[this.level]; - } - - @Override - public void onTick(World world, EntityPlayer player, ILivingArmour livingArmour) - { - if (player.isSprinting()) - { - if (sprintSpeedTime[this.level] > 0) - { - player.addPotionEffect(new PotionEffect(MobEffects.SPEED, sprintSpeedTime[this.level], sprintSpeedLevel[this.level], false, false)); - } - - if (sprintRegenTime[this.level] > 0 && !player.isPotionActive(MobEffects.REGENERATION)) - { - player.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, sprintRegenTime[this.level], 0, false, false)); - } - } - } - - @Override - public Multimap getAttributeModifiers() - { - Multimap modifierMap = HashMultimap.create(); - -// modifierMap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(new UUID(895132, 1), "Speed modifier" + 1, speedModifier[this.level], 1)); - -// if (healthModifier[this.level] > 0) { -// String name = getUniqueIdentifier() + "-HealthModifier1"; -// modifierMap.put(SharedMonsterAttributes.MAX_HEALTH.getName(), new AttributeModifier(UUID.nameUUIDFromBytes(StringUtils.getBytesUtf8(name)), "HealthModifier1", healthModifier[this.level], 0)); -// } - - return modifierMap; - } - - @Override - public String getUniqueIdentifier() - { - return BloodMagic.MODID + ".upgrade.movement"; - } - - @Override - public int getMaxTier() - { - return 10; - } - - @Override - public int getCostOfUpgrade() - { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) - { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) - { - // EMPTY - } - - @Override - public String getUnlocalizedName() - { - return tooltipBase + "speed"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSprintAttack.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSprintAttack.java deleted file mode 100644 index 49504483..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeSprintAttack.java +++ /dev/null @@ -1,74 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class LivingArmourUpgradeSprintAttack extends LivingArmourUpgrade { - public static final int[] costs = new int[]{3, 7, 15, 25, 40}; - public static final double[] damageBoost = new double[]{0.5, 0.75, 1, 1.25, 1.5}; - public static final double[] knockbackModifier = new double[]{1, 2, 3, 4, 5}; - - public LivingArmourUpgradeSprintAttack(int level) { - super(level); - } - - @Override - public double getAdditionalDamageOnHit(double damage, EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - if (wearer.isSprinting()) { - return getDamageModifier(); - } - - return 0; - } - - @Override - public double getKnockbackOnHit(EntityPlayer wearer, EntityLivingBase hitEntity, ItemStack weapon) { - if (wearer.isSprinting()) { - return getKnockbackModifier(); - } - - return 0; - } - - public double getDamageModifier() { - return damageBoost[this.level]; - } - - public double getKnockbackModifier() { - return knockbackModifier[this.level]; - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.sprintAttack"; - } - - @Override - public int getMaxTier() { - return 5; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "sprintAttack"; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeStepAssist.java b/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeStepAssist.java deleted file mode 100644 index 83d414d4..00000000 --- a/src/main/java/WayofTime/bloodmagic/livingArmour/upgrade/LivingArmourUpgradeStepAssist.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.livingArmour.upgrade; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import net.minecraft.nbt.NBTTagCompound; - -public class LivingArmourUpgradeStepAssist extends LivingArmourUpgrade { - public static final int[] costs = new int[]{20}; - public static final float[] assist = new float[]{Constants.Misc.ALTERED_STEP_HEIGHT}; - -// public static final double[] speedModifier = new double[] { 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5 }; -// public static final int[] sprintSpeedTime = new int[] { 0, 0, 0, 0, 0, 20, 60, 60, 100, 200 }; -// public static final int[] sprintSpeedLevel = new int[] { 0, 0, 0, 0, 0, 0, 0, 1, 1, 2 }; -// public static final int[] healthModifier = new int[] { 0, 0, 0, 0, 0, 0, 0, 4, 10, 20 }; -// public static final int[] sprintRegenTime = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 25 }; - - public LivingArmourUpgradeStepAssist(int level) { - super(level); - } - - @Override - public String getUniqueIdentifier() { - return BloodMagic.MODID + ".upgrade.stepAssist"; - } - - @Override - public int getMaxTier() { - return 1; - } - - @Override - public int getCostOfUpgrade() { - return costs[this.level]; - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - // EMPTY - } - - @Override - public String getUnlocalizedName() { - return tooltipBase + "stepAssist"; - } - - public float getStepAssist() { - return assist[this.level]; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/meteor/Meteor.java b/src/main/java/WayofTime/bloodmagic/meteor/Meteor.java deleted file mode 100644 index f547c205..00000000 --- a/src/main/java/WayofTime/bloodmagic/meteor/Meteor.java +++ /dev/null @@ -1,106 +0,0 @@ -package WayofTime.bloodmagic.meteor; - -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; -import java.util.Random; - -public class Meteor { - private static final Random RAND = new Random(); - - private final ItemStack catalystStack; - private final List components; - private final float explosionStrength; - private final int radius; - private final int maxWeight; - public int version; - - public Meteor(ItemStack catalystStack, List components, float explosionStrength, int radius) { - this.catalystStack = catalystStack; - this.components = components; - this.explosionStrength = explosionStrength; - this.radius = radius; - - int weight = 0; - for (MeteorComponent component : components) - weight += component.getWeight(); - this.maxWeight = weight; - } - - public void generateMeteor(World world, BlockPos pos, IBlockState fillerBlock, double radiusModifier, double explosionModifier, double fillerChance) { - world.newExplosion(null, pos.getX(), pos.getY(), pos.getZ(), (float) (explosionStrength * explosionModifier), true, true); - int radius = (int) Math.ceil(getRadius() * radiusModifier); - double floatingRadius = getRadius() * radiusModifier; - - for (int i = -radius; i <= radius; i++) { - for (int j = -radius; j <= radius; j++) { - for (int k = -radius; k <= radius; k++) { - if (i * i + j * j + k * k > (floatingRadius + 0.5) * (floatingRadius + 0.5)) { - continue; - } - - BlockPos newPos = pos.add(i, j, k); - IBlockState state = world.getBlockState(newPos); - - if (world.isAirBlock(newPos) || Utils.isBlockLiquid(state)) { - IBlockState placedState = getRandomOreFromComponents(fillerBlock, fillerChance); - if (placedState != null) { - world.setBlockState(newPos, placedState); - } - } - } - } - } - } - - //fillerChance is the chance that the filler block will NOT be placed - public IBlockState getRandomOreFromComponents(IBlockState fillerBlock, double fillerChance) { - int goal = RAND.nextInt(getMaxWeight()); - - for (MeteorComponent component : getComponents()) { - goal -= component.getWeight(); - if (goal < 0) { - IBlockState state = component.getStateFromOre(); - if (state != null) { - return state; - } else { - return RAND.nextDouble() > fillerChance ? fillerBlock : null; - } - } - } - - return RAND.nextDouble() > fillerChance ? fillerBlock : null; - } - - public ItemStack getCatalystStack() { - return catalystStack; - } - - public List getComponents() { - return components; - } - - public float getExplosionStrength() { - return explosionStrength; - } - - public int getRadius() { - return radius; - } - - public int getMaxWeight() { - return maxWeight; - } - - public int getVersion() { - return version; - } - - public void setVersion(int version) { - this.version = version; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorComponent.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorComponent.java deleted file mode 100644 index df810fe5..00000000 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorComponent.java +++ /dev/null @@ -1,70 +0,0 @@ -package WayofTime.bloodmagic.meteor; - -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.ForgeRegistries; -import net.minecraftforge.oredict.OreDictionary; - -import java.util.List; - -public class MeteorComponent { - public int weight; - public String oreName; - - public MeteorComponent(int weight, String oreName) { - this.weight = weight; - this.oreName = oreName; - } - - public IBlockState getStateFromOre() { - if (oreName.contains(":")) { - String[] stringList = oreName.split(":"); - String domain = stringList[0]; - String block = stringList[1]; - int meta = 0; - if (stringList.length > 2 && Utils.isInteger(stringList[2])) { - meta = Integer.parseInt(stringList[2]); - } - - Block ore = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(domain, block)); - if (ore != Blocks.AIR) { - return ore.getStateFromMeta(meta); - } - } - - List list = OreDictionary.getOres(oreName); - if (list != null && !list.isEmpty()) { - for (ItemStack stack : list) { - if (stack != null && stack.getItem() instanceof ItemBlock) { - Block block = ((ItemBlock) stack.getItem()).getBlock(); - IBlockState state = block.getStateFromMeta(stack.getItemDamage()); - - return state; - } - } - } - - return null; - } - - public int getWeight() { - return weight; - } - - public void setWeight(int weight) { - this.weight = weight; - } - - public String getOreName() { - return oreName; - } - - public void setOreName(String oreName) { - this.oreName = oreName; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java deleted file mode 100644 index c6e1b65c..00000000 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorConfigHandler.java +++ /dev/null @@ -1,162 +0,0 @@ -package WayofTime.bloodmagic.meteor; - -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.gson.Serializers; -import WayofTime.bloodmagic.util.BMLog; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.io.filefilter.FileFilterUtils; -import org.apache.commons.lang3.tuple.Pair; - -import java.io.*; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class MeteorConfigHandler { - private static final Map DEFAULT_METEORS = Maps.newHashMap(); - - private static File meteorDir; - - public static void init(File meteorDirectory) { - meteorDir = meteorDirectory; - handleMeteors(true); - } - - public static void handleMeteors(boolean checkNewVersion) { - if (meteorDir == null) { - BMLog.DEFAULT.error("Attempted to handle meteor config but the folder has not been initialized. Was this run too early?"); - return; - } - - // Clear the meteors so that reloading in-game can be done - MeteorRegistry.meteorMap.clear(); - List> defaultMeteors = getDefaultMeteors(); - - try { - // Create defaults if the folder doesn't exist - if (!meteorDir.exists() && meteorDir.mkdir()) { - for (Pair meteor : defaultMeteors) { - String json = Serializers.GSON.toJson(meteor.getRight()); - FileWriter writer = new FileWriter(new File(meteorDir, meteor.getLeft() + ".json")); - writer.write(json); - writer.close(); - } - } - - // Collect all meteors from the files - File[] meteorFiles = meteorDir.listFiles((FileFilter) FileFilterUtils.suffixFileFilter(".json")); - if (meteorFiles == null) - return; - - List> meteors = Lists.newArrayList(); - - // Filter names so we can compare to defaults - for (File meteorFile : meteorFiles) { - FileReader reader = new FileReader(meteorFile); - Meteor meteor = Serializers.GSON.fromJson(reader, Meteor.class); - meteors.add(Pair.of(FilenameUtils.removeExtension(meteorFile.getName()), meteor)); - reader.close(); - } - - if (checkNewVersion && ConfigHandler.values.shouldResyncMeteors) { - Set discoveredDefaults = Sets.newHashSet(); - - // Check existing defaults for new version - for (Pair meteor : meteors) { - Meteor defaultMeteor = DEFAULT_METEORS.get(meteor.getLeft()); - if (defaultMeteor != null) { - discoveredDefaults.add(meteor.getLeft()); - if (defaultMeteor.version > meteor.getRight().version) { - writeMeteor(meteor.getLeft(), defaultMeteor); - meteors.set(meteors.indexOf(meteor), Pair.of(meteor.getLeft(), defaultMeteor)); - } - } - } - - // Generate new defaults - for (Map.Entry entry : DEFAULT_METEORS.entrySet()) { - if (discoveredDefaults.contains(entry.getKey())) - continue; - - writeMeteor(entry.getKey(), entry.getValue()); - } - } - - // Finally, register all of our meteors - for (Pair meteor : meteors) - MeteorRegistry.registerMeteor(meteor.getRight().getCatalystStack(), meteor.getRight()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private static List> getDefaultMeteors() { - List> holders = Lists.newArrayList(); - - // Iron - List ironMeteorList = Lists.newArrayList(); - ironMeteorList.add(new MeteorComponent(400, "oreIron")); - ironMeteorList.add(new MeteorComponent(200, "oreCopper")); - ironMeteorList.add(new MeteorComponent(140, "oreTin")); - ironMeteorList.add(new MeteorComponent(70, "oreSilver")); - ironMeteorList.add(new MeteorComponent(80, "oreLead")); - ironMeteorList.add(new MeteorComponent(30, "oreGold")); - ironMeteorList.add(new MeteorComponent(60, "oreLapis")); - ironMeteorList.add(new MeteorComponent(100, "oreRedstone")); - Meteor ironMeteor = new Meteor(new ItemStack(Blocks.IRON_BLOCK), ironMeteorList, 15, 5); - ironMeteor.setVersion(2); - - // Gold - List goldMeteorList = Lists.newArrayList(); - goldMeteorList.add(new MeteorComponent(200, "oreIron")); - goldMeteorList.add(new MeteorComponent(100, "oreCopper")); - goldMeteorList.add(new MeteorComponent(60, "oreTin")); - goldMeteorList.add(new MeteorComponent(100, "oreGold")); - goldMeteorList.add(new MeteorComponent(120, "oreLapis")); - goldMeteorList.add(new MeteorComponent(30, "oreDiamond")); - goldMeteorList.add(new MeteorComponent(20, "oreEmerald")); - goldMeteorList.add(new MeteorComponent(20, "oreCoal")); - Meteor goldMeteor = new Meteor(new ItemStack(Blocks.GOLD_BLOCK), goldMeteorList, 18, 6); - goldMeteor.setVersion(3); - - // Diamond - List diamondMeteorList = Lists.newArrayList(); - diamondMeteorList.add(new MeteorComponent(50, "oreIron")); - diamondMeteorList.add(new MeteorComponent(100, "oreGold")); - diamondMeteorList.add(new MeteorComponent(10, "oreLapis")); - diamondMeteorList.add(new MeteorComponent(250, "oreDiamond")); - diamondMeteorList.add(new MeteorComponent(180, "oreEmerald")); - diamondMeteorList.add(new MeteorComponent(50, "oreRedstone")); - diamondMeteorList.add(new MeteorComponent(400, "oreDiamond")); - Meteor diamondMeteor = new Meteor(new ItemStack(Blocks.DIAMOND_BLOCK), diamondMeteorList, 10, 3); - diamondMeteor.setVersion(3); - - holders.add(Pair.of("iron", ironMeteor)); - DEFAULT_METEORS.put("iron", ironMeteor); - - holders.add(Pair.of("gold", goldMeteor)); - DEFAULT_METEORS.put("gold", goldMeteor); - - holders.add(Pair.of("diamond", diamondMeteor)); - DEFAULT_METEORS.put("diamond", diamondMeteor); - return holders; - } - - private static void writeMeteor(String name, Meteor meteor) { - try { - String json = Serializers.GSON.toJson(meteor); - File meteorFile = new File(meteorDir, name + ".json"); - new PrintWriter(meteorFile).close(); // Clear the file - FileWriter fileWriter = new FileWriter(meteorFile); - fileWriter.write(json); // Write the new contents - fileWriter.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/meteor/MeteorRegistry.java b/src/main/java/WayofTime/bloodmagic/meteor/MeteorRegistry.java deleted file mode 100644 index aaf4d0b3..00000000 --- a/src/main/java/WayofTime/bloodmagic/meteor/MeteorRegistry.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.bloodmagic.meteor; - -import com.google.common.collect.Maps; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nullable; -import java.util.List; -import java.util.Map; - -public class MeteorRegistry { - - public static Map meteorMap = Maps.newHashMap(); - - public static void registerMeteor(ItemStack stack, Meteor holder) { - if (!stack.isEmpty()) - meteorMap.put(stack, holder); - } - - public static void registerMeteor(ItemStack stack, List componentList, float explosionStrength, int radius) { - Meteor holder = new Meteor(stack, componentList, explosionStrength, radius); - registerMeteor(stack, holder); - } - - @Nullable - public static Meteor getMeteorForItem(ItemStack stack) { - if (stack.isEmpty()) - return null; - - for (Map.Entry entry : meteorMap.entrySet()) - if (ItemStack.areItemsEqual(stack, entry.getKey())) - return entry.getValue(); - - return null; - } - - public static void generateMeteorForItem(ItemStack stack, World world, BlockPos pos, IBlockState fillerBlock, double radiusModifier, double explosionModifier, double fillerChance) { - Meteor meteor = getMeteorForItem(stack); - if (meteor != null) - meteor.generateMeteor(world, pos, fillerBlock, radiusModifier, explosionModifier, fillerChance); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/network/BloodMagicPacketHandler.java b/src/main/java/WayofTime/bloodmagic/network/BloodMagicPacketHandler.java deleted file mode 100644 index 98856381..00000000 --- a/src/main/java/WayofTime/bloodmagic/network/BloodMagicPacketHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.bloodmagic.network; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.ChatUtil; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fml.common.network.NetworkRegistry; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; -import net.minecraftforge.fml.relauncher.Side; - -public class BloodMagicPacketHandler { - public static final SimpleNetworkWrapper INSTANCE = new SimpleNetworkWrapper(BloodMagic.MODID); - - public static void init() { - INSTANCE.registerMessage(ChatUtil.PacketNoSpamChat.Handler.class, ChatUtil.PacketNoSpamChat.class, 0, Side.CLIENT); - INSTANCE.registerMessage(ItemRouterButtonPacketProcessor.class, ItemRouterButtonPacketProcessor.class, 1, Side.SERVER); - INSTANCE.registerMessage(PlayerVelocityPacketProcessor.class, PlayerVelocityPacketProcessor.class, 2, Side.CLIENT); - INSTANCE.registerMessage(PlayerFallDistancePacketProcessor.class, PlayerFallDistancePacketProcessor.class, 3, Side.SERVER); - INSTANCE.registerMessage(SigilHoldingPacketProcessor.class, SigilHoldingPacketProcessor.class, 4, Side.SERVER); - INSTANCE.registerMessage(KeyProcessor.class, KeyProcessor.class, 5, Side.SERVER); - INSTANCE.registerMessage(DemonAuraPacketProcessor.class, DemonAuraPacketProcessor.class, 6, Side.CLIENT); - INSTANCE.registerMessage(ItemRouterAmountPacketProcessor.class, ItemRouterAmountPacketProcessor.class, 7, Side.SERVER); - } - - public static void sendToAllAround(IMessage message, TileEntity te, int range) { - INSTANCE.sendToAllAround(message, new NetworkRegistry.TargetPoint(te.getWorld().provider.getDimension(), te.getPos().getX(), te.getPos().getY(), te.getPos().getZ(), range)); - } - - public static void sendToAllAround(IMessage message, TileEntity te) { - sendToAllAround(message, te, 64); - } - - public static void sendTo(IMessage message, EntityPlayerMP player) { - INSTANCE.sendTo(message, player); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/network/DemonAuraPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/DemonAuraPacketProcessor.java deleted file mode 100644 index 9d0ea6ce..00000000 --- a/src/main/java/WayofTime/bloodmagic/network/DemonAuraPacketProcessor.java +++ /dev/null @@ -1,57 +0,0 @@ -package WayofTime.bloodmagic.network; - -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.proxy.ClientProxy; -import io.netty.buffer.ByteBuf; -import net.minecraft.network.PacketBuffer; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class DemonAuraPacketProcessor implements IMessage, IMessageHandler { - public DemonWillHolder currentWill = new DemonWillHolder(); - - public DemonAuraPacketProcessor() { - - } - - public DemonAuraPacketProcessor(DemonWillHolder holder) { - this.currentWill = holder; - } - - @Override - public void fromBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - currentWill.willMap.put(type, buff.readDouble()); - } - } - - @Override - public void toBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - if (currentWill.willMap.containsKey(type)) { - buff.writeDouble(currentWill.willMap.get(type)); - } else { - buff.writeDouble(0); - } - } - } - - @Override - public IMessage onMessage(DemonAuraPacketProcessor message, MessageContext ctx) { - if (ctx.side == Side.CLIENT) { - message.onMessageFromServer(); - } - return null; - } - - @SideOnly(Side.CLIENT) - public void onMessageFromServer() { - ClientProxy.currentAura = currentWill; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/network/ItemRouterAmountPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/ItemRouterAmountPacketProcessor.java deleted file mode 100644 index de84fd3d..00000000 --- a/src/main/java/WayofTime/bloodmagic/network/ItemRouterAmountPacketProcessor.java +++ /dev/null @@ -1,70 +0,0 @@ -package WayofTime.bloodmagic.network; - -import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; -import io.netty.buffer.ByteBuf; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; - -public class ItemRouterAmountPacketProcessor implements IMessage, IMessageHandler { - private int ghostItemSlot; - private int amount; - private int dimension; - private BlockPos pos; - - public ItemRouterAmountPacketProcessor() { - - } - - public ItemRouterAmountPacketProcessor(int ghostItemSlot, int amount, BlockPos pos, World world) { - this.ghostItemSlot = ghostItemSlot; - this.amount = amount; - this.pos = pos; - this.dimension = world.provider.getDimension(); - } - - @Override - public void fromBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - dimension = buff.readInt(); - pos = buff.readBlockPos(); - ghostItemSlot = buff.readInt(); - amount = buff.readInt(); - } - - @Override - public void toBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - buff.writeInt(dimension); - buff.writeBlockPos(pos); - buff.writeInt(ghostItemSlot); - buff.writeInt(amount); - } - - @Override - public IMessage onMessage(ItemRouterAmountPacketProcessor message, MessageContext ctx) { - if (ctx.side == Side.SERVER) { - message.onMessageFromClient(); - } - return null; - } - - public void onMessageFromClient() { - World world = DimensionManager.getWorld(dimension); - if (world != null) { - if (!world.isBlockLoaded(pos)) - return; - - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileFilteredRoutingNode) { - ((TileFilteredRoutingNode) tile).setGhostItemAmount(ghostItemSlot, amount); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java deleted file mode 100644 index e8aafad7..00000000 --- a/src/main/java/WayofTime/bloodmagic/network/ItemRouterButtonPacketProcessor.java +++ /dev/null @@ -1,74 +0,0 @@ -package WayofTime.bloodmagic.network; - -import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; -import io.netty.buffer.ByteBuf; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; - -public class ItemRouterButtonPacketProcessor implements IMessage, IMessageHandler { - private int buttonPress; - private int dimension; - private BlockPos pos; - - public ItemRouterButtonPacketProcessor() { - - } - - public ItemRouterButtonPacketProcessor(int buttonPress, BlockPos pos, World world) { - this.buttonPress = buttonPress; - this.pos = pos; - this.dimension = world.provider.getDimension(); - } - - @Override - public void fromBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - dimension = buff.readInt(); - pos = buff.readBlockPos(); - buttonPress = buff.readInt(); - } - - @Override - public void toBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - buff.writeInt(dimension); - buff.writeBlockPos(pos); - buff.writeInt(buttonPress); - } - - @Override - public IMessage onMessage(ItemRouterButtonPacketProcessor message, MessageContext ctx) { - if (ctx.side == Side.SERVER) { - message.onMessageFromClient(); - } - return null; - } - - public void onMessageFromClient() { - World world = DimensionManager.getWorld(dimension); - if (world != null) { - if (!world.isBlockLoaded(pos)) - return; - - TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileFilteredRoutingNode) { - if (buttonPress >= 6) { - if (buttonPress == 6) { - ((TileFilteredRoutingNode) tile).incrementCurrentPriotiryToMaximum(9); - } else if (buttonPress == 7) { - ((TileFilteredRoutingNode) tile).decrementCurrentPriority(); - } - } else { - ((TileFilteredRoutingNode) tile).swapFilters(buttonPress); - } - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/network/KeyProcessor.java b/src/main/java/WayofTime/bloodmagic/network/KeyProcessor.java deleted file mode 100644 index d3620782..00000000 --- a/src/main/java/WayofTime/bloodmagic/network/KeyProcessor.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.bloodmagic.network; - -import WayofTime.bloodmagic.client.key.IKeybindable; -import WayofTime.bloodmagic.client.key.KeyBindings; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class KeyProcessor implements IMessage, IMessageHandler { - public int keyId; - public boolean showInChat; - - public KeyProcessor() { - } - - public KeyProcessor(KeyBindings key, boolean showInChat) { - this.keyId = key.ordinal(); - this.showInChat = showInChat; - } - - @Override - public void fromBytes(ByteBuf buf) { - this.keyId = buf.readInt(); - this.showInChat = buf.readBoolean(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(this.keyId); - buf.writeBoolean(this.showInChat); - } - - @Override - public IMessage onMessage(KeyProcessor msg, MessageContext ctx) { - EntityPlayer entityPlayer = ctx.getServerHandler().player; - - if (entityPlayer != null) { - ItemStack heldStack = entityPlayer.getHeldItemMainhand(); - if (heldStack.getItem() instanceof IKeybindable) { - if (msg.keyId < 0 || msg.keyId >= KeyBindings.values().length) { - return null; - } - KeyBindings key = KeyBindings.values()[msg.keyId]; - ((IKeybindable) heldStack.getItem()).onKeyPressed(heldStack, entityPlayer, key, msg.showInChat); - } - } - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/network/PlayerFallDistancePacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/PlayerFallDistancePacketProcessor.java deleted file mode 100644 index 89dd5980..00000000 --- a/src/main/java/WayofTime/bloodmagic/network/PlayerFallDistancePacketProcessor.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.bloodmagic.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.network.PacketBuffer; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; - -public class PlayerFallDistancePacketProcessor implements IMessage, IMessageHandler { - private float fallDistance; - - public PlayerFallDistancePacketProcessor() { - - } - - public PlayerFallDistancePacketProcessor(float fallDistance) { - this.fallDistance = fallDistance; - } - - @Override - public void fromBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - fallDistance = buff.readFloat(); - } - - @Override - public void toBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - buff.writeFloat(fallDistance); - } - - @Override - public IMessage onMessage(PlayerFallDistancePacketProcessor message, MessageContext ctx) { - if (ctx.side == Side.SERVER) { - message.onMessageFromClient(ctx.getServerHandler().player); - } - return null; - } - - public void onMessageFromClient(EntityPlayer player) { - player.fallDistance = fallDistance; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/network/PlayerVelocityPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/PlayerVelocityPacketProcessor.java deleted file mode 100644 index 39f1ad82..00000000 --- a/src/main/java/WayofTime/bloodmagic/network/PlayerVelocityPacketProcessor.java +++ /dev/null @@ -1,59 +0,0 @@ -package WayofTime.bloodmagic.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.network.PacketBuffer; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class PlayerVelocityPacketProcessor implements IMessage, IMessageHandler { - private double motionX; - private double motionY; - private double motionZ; - - public PlayerVelocityPacketProcessor() { - - } - - public PlayerVelocityPacketProcessor(double motionX, double motionY, double motionZ) { - this.motionX = motionX; - this.motionY = motionY; - this.motionZ = motionZ; - } - - @Override - public void fromBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - motionX = buff.readDouble(); - motionY = buff.readDouble(); - motionZ = buff.readDouble(); - } - - @Override - public void toBytes(ByteBuf buffer) { - PacketBuffer buff = new PacketBuffer(buffer); - buff.writeDouble(motionX); - buff.writeDouble(motionY); - buff.writeDouble(motionZ); - } - - @Override - public IMessage onMessage(PlayerVelocityPacketProcessor message, MessageContext ctx) { - if (ctx.side == Side.CLIENT) { - message.onMessageFromServer(); - } - return null; - } - - @SideOnly(Side.CLIENT) - public void onMessageFromServer() { - EntityPlayer player = Minecraft.getMinecraft().player; - player.motionX = motionX; - player.motionY = motionY; - player.motionZ = motionZ; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/network/SigilHoldingPacketProcessor.java b/src/main/java/WayofTime/bloodmagic/network/SigilHoldingPacketProcessor.java deleted file mode 100644 index 9cd7631f..00000000 --- a/src/main/java/WayofTime/bloodmagic/network/SigilHoldingPacketProcessor.java +++ /dev/null @@ -1,48 +0,0 @@ -package WayofTime.bloodmagic.network; - -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import io.netty.buffer.ByteBuf; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class SigilHoldingPacketProcessor implements IMessage, IMessageHandler { - private int slot; - private int mode; - - public SigilHoldingPacketProcessor() { - } - - public SigilHoldingPacketProcessor(int slot, int mode) { - this.slot = slot; - this.mode = mode; - } - - @Override - public void toBytes(ByteBuf buffer) { - buffer.writeInt(slot); - buffer.writeInt(mode); - } - - @Override - public void fromBytes(ByteBuf buffer) { - slot = buffer.readInt(); - mode = buffer.readInt(); - } - - @Override - public IMessage onMessage(SigilHoldingPacketProcessor message, MessageContext ctx) { - ItemStack itemStack = ItemStack.EMPTY; - - if (message.slot > -1 && message.slot < 9) { - itemStack = ctx.getServerHandler().player.inventory.getStackInSlot(message.slot); - } - - if (!itemStack.isEmpty()) { - ItemSigilHolding.cycleToNextSigil(itemStack, message.mode); - } - - return null; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/orb/BloodOrb.java b/src/main/java/WayofTime/bloodmagic/orb/BloodOrb.java deleted file mode 100644 index 6a8b5a1b..00000000 --- a/src/main/java/WayofTime/bloodmagic/orb/BloodOrb.java +++ /dev/null @@ -1,68 +0,0 @@ -package WayofTime.bloodmagic.orb; - -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraftforge.registries.IForgeRegistryEntry; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -/** - * Base object for all Blood Orbs. Makes Orb creation quite a bit easier. - *

- * Just create a new BloodOrb instance then register it in {@link net.minecraftforge.event.RegistryEvent.Register} - */ -public class BloodOrb extends IForgeRegistryEntry.Impl { - private final String name; - private final int tier; - private final int capacity; - private final int fillRate; - @Nullable - private ModelResourceLocation modelLocation; - - /** - * A base object for BloodOrbs. A bit cleaner than the old way through - * EnergyItems. - * - * @param name - A name for the Orb. Gets put into an unlocalized name. - * @param tier - The tier of the Orb. - * @param capacity - The max amount of LP the Orb can store. - * @param fillRate - The amount of LP per tick the Altar can fill the network with. - */ - public BloodOrb(String name, int tier, int capacity, int fillRate) { - this.name = name; - this.tier = tier; - this.capacity = capacity; - this.fillRate = fillRate; - } - - public String getName() { - return name; - } - - public int getTier() { - return tier; - } - - public int getCapacity() { - return capacity; - } - - public int getFillRate() { - return fillRate; - } - - @Nullable - public ModelResourceLocation getModelLocation() { - return modelLocation; - } - - public BloodOrb withModel(@Nonnull ModelResourceLocation modelLocation) { - this.modelLocation = modelLocation; - return this; - } - - @Override - public String toString() { - return "BloodOrb{" + "name='" + name + '\'' + ", tier=" + tier + ", capacity=" + capacity + ", owner=" + getRegistryName() + '}'; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/orb/IBloodOrb.java b/src/main/java/WayofTime/bloodmagic/orb/IBloodOrb.java deleted file mode 100644 index 09848dbb..00000000 --- a/src/main/java/WayofTime/bloodmagic/orb/IBloodOrb.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.bloodmagic.orb; - -import net.minecraft.item.ItemStack; - -import javax.annotation.Nullable; - -public interface IBloodOrb { - @Nullable - BloodOrb getOrb(ItemStack stack); -} diff --git a/src/main/java/WayofTime/bloodmagic/potion/BMPotionUtils.java b/src/main/java/WayofTime/bloodmagic/potion/BMPotionUtils.java deleted file mode 100644 index 60e7ae9e..00000000 --- a/src/main/java/WayofTime/bloodmagic/potion/BMPotionUtils.java +++ /dev/null @@ -1,137 +0,0 @@ -package WayofTime.bloodmagic.potion; - -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTablePotionAugmentRecipe; -import net.minecraft.block.Block; -import net.minecraft.block.IGrowable; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Random; - -public class BMPotionUtils { - public static Random rand = new Random(); - - public static double damageMobAndGrowSurroundingPlants(EntityLivingBase entity, int horizontalRadius, int verticalRadius, double damageRatio, int maxPlantsGrown) { - World world = entity.getEntityWorld(); - if (world.isRemote) { - return 0; - } - - if (entity.isDead) { - return 0; - } - - double incurredDamage = 0; - - List growList = new ArrayList<>(); - - for (int i = 0; i < maxPlantsGrown; i++) { - BlockPos blockPos = entity.getPosition().add(rand.nextInt(horizontalRadius * 2 + 1) - horizontalRadius, rand.nextInt(verticalRadius * 2 + 1) - verticalRadius, rand.nextInt(horizontalRadius * 2 + 1) - horizontalRadius); - IBlockState state = world.getBlockState(blockPos); - - if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) { - if (state.getBlock() instanceof IGrowable) { - growList.add(blockPos); - } - } - } - - for (BlockPos blockPos : growList) { - Block block = world.getBlockState(blockPos).getBlock(); -// if (world.rand.nextInt(50) == 0) - { - IBlockState preBlockState = world.getBlockState(blockPos); - for (int n = 0; n < 10; n++) - block.updateTick(world, blockPos, world.getBlockState(blockPos), world.rand); - - IBlockState newState = world.getBlockState(blockPos); - if (!newState.equals(preBlockState)) { - world.playEvent(2001, blockPos, Block.getIdFromBlock(newState.getBlock()) + (newState.getBlock().getMetaFromState(newState) << 12)); - incurredDamage += damageRatio; - } - } - } - - if (incurredDamage > 0) { - entity.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, (float) incurredDamage); - } - - return incurredDamage; - } - - public static double getLengthAugment(ItemStack flaskStack, Potion potion) { - NBTHelper.checkNBT(flaskStack); - NBTTagCompound tag = flaskStack.getTagCompound(); - - return tag.getDouble(Constants.NBT.POTION_AUGMENT_LENGHT + potion.getName()); - } - - public static void setLengthAugment(ItemStack flaskStack, Potion potion, double value) { - if (value < 0) { - value = 0; - } - - NBTHelper.checkNBT(flaskStack); - NBTTagCompound tag = flaskStack.getTagCompound(); - - tag.setDouble(Constants.NBT.POTION_AUGMENT_LENGHT + potion.getName(), value); - } - - public static int getAugmentedLength(int originalLength, double lengthAugment, double powerAugment) { - return Math.max((int) (originalLength * (Math.pow(8f / 3f, lengthAugment) * Math.pow(0.5, powerAugment))), 1); - } - - /** - * Copied from PotionUtils - * - * @param stack - * @param effects - * @return - */ - public static ItemStack setEffects(ItemStack stack, Collection effects) { - if (effects.isEmpty()) { - return stack; - } else { - NBTTagCompound nbttagcompound = stack.hasTagCompound() ? stack.getTagCompound() : new NBTTagCompound(); - NBTTagList nbttaglist = new NBTTagList(); - - for (PotionEffect potioneffect : effects) { - nbttaglist.appendTag(potioneffect.writeCustomPotionEffectToNBT(new NBTTagCompound())); - } - - nbttagcompound.setTag("CustomPotionEffects", nbttaglist); - stack.setTagCompound(nbttagcompound); - return stack; - } - } - - public static AlchemyTablePotionAugmentRecipe getLengthAugmentRecipe(int lpDrained, int ticksRequired, int tierRequired, List inputItems, PotionEffect baseEffect, double lengthAugment) { - return new AlchemyTablePotionAugmentRecipe(lpDrained, ticksRequired, tierRequired, inputItems, baseEffect, lengthAugment, 0); - } - - public static AlchemyTablePotionAugmentRecipe getPowerAugmentRecipe(int lpDrained, int ticksRequired, int tierRequired, List inputItems, PotionEffect baseEffect, int powerAugment) { - return new AlchemyTablePotionAugmentRecipe(lpDrained, ticksRequired, tierRequired, inputItems, baseEffect, 0, powerAugment); - } - - public static AlchemyTablePotionAugmentRecipe getLengthAugmentRecipe(int lpDrained, int ticksRequired, int tierRequired, ItemStack inputItem, PotionEffect baseEffect, double lengthAugment) { - return new AlchemyTablePotionAugmentRecipe(lpDrained, ticksRequired, tierRequired, inputItem, baseEffect, lengthAugment, 0); - } - - public static AlchemyTablePotionAugmentRecipe getPowerAugmentRecipe(int lpDrained, int ticksRequired, int tierRequired, ItemStack inputItem, PotionEffect baseEffect, int powerAugment) { - return new AlchemyTablePotionAugmentRecipe(lpDrained, ticksRequired, tierRequired, inputItem, baseEffect, 0, powerAugment); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/potion/PotionBloodMagic.java b/src/main/java/WayofTime/bloodmagic/potion/PotionBloodMagic.java deleted file mode 100644 index d9d552b5..00000000 --- a/src/main/java/WayofTime/bloodmagic/potion/PotionBloodMagic.java +++ /dev/null @@ -1,56 +0,0 @@ -package WayofTime.bloodmagic.potion; - -import WayofTime.bloodmagic.BloodMagic; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class PotionBloodMagic extends Potion { - public static ResourceLocation texture = new ResourceLocation(BloodMagic.MODID, "textures/misc/potions.png"); - - public PotionBloodMagic(String name, boolean badEffect, int potionColor, int iconIndexX, int iconIndexY) { - super(badEffect, potionColor); - this.setPotionName(name); - this.setIconIndex(iconIndexX, iconIndexY); - } - - @Override - public boolean shouldRenderInvText(PotionEffect effect) { - return true; - } - - public PotionEffect apply(EntityLivingBase entity, int duration) { - return apply(entity, duration, 0); - } - - public PotionEffect apply(EntityLivingBase entity, int duration, int level) { - PotionEffect effect = new PotionEffect(this, duration, level, false, false); - entity.addPotionEffect(effect); - return effect; - } - - public int getLevel(EntityLivingBase entity) { - PotionEffect effect = entity.getActivePotionEffect(this); - if (effect != null) { - return effect.getAmplifier(); - } - return 0; - } - - @Override - public boolean shouldRender(PotionEffect effect) { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public int getStatusIconIndex() { - Minecraft.getMinecraft().renderEngine.bindTexture(texture); - - return super.getStatusIconIndex(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java b/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java deleted file mode 100644 index 2ffb368b..00000000 --- a/src/main/java/WayofTime/bloodmagic/potion/PotionEventHandlers.java +++ /dev/null @@ -1,172 +0,0 @@ -package WayofTime.bloodmagic.potion; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.IProjectile; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.entity.projectile.EntityThrowable; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import net.minecraftforge.event.entity.living.LivingAttackEvent; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.event.SacrificeKnifeUsedEvent; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class PotionEventHandlers -{ - public static List flightList = new ArrayList(); - - @SubscribeEvent - public static void onLivingJumpEvent(LivingEvent.LivingJumpEvent event) - { - if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.BOOST)) - { - int i = event.getEntityLiving().getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); - event.getEntityLiving().motionY += (0.1f) * (2 + i); - } - - // if (event.getEntityLiving().isPotionActive(ModPotions.heavyHeart)) { - // event.getEntityLiving().motionY = 0; - // } - } - - @SubscribeEvent - public static void onEntityUpdate(LivingEvent.LivingUpdateEvent event) - { - if (event.getEntityLiving() instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) event.getEntityLiving(); - if (!player.world.isRemote) - { - if (player.isPotionActive(RegistrarBloodMagic.FLIGHT)) - { - if (!player.isSpectator() && !player.capabilities.allowFlying) - { - player.capabilities.allowFlying = true; - player.sendPlayerAbilities(); - flightList.add(player); - } - } else - { - if (flightList.contains(player)) - { - player.capabilities.allowFlying = false; - player.capabilities.isFlying = false; - player.sendPlayerAbilities(); - flightList.remove(player); - } - } - } - } -// if (event.getEntityLiving().isPotionActive(ModPotions.boost)) -// { -// int i = event.getEntityLiving().getActivePotionEffect(ModPotions.boost).getAmplifier(); -// { -// float percentIncrease = (i + 1) * 0.05f; -// -// if (event.getEntityLiving() instanceof EntityPlayer) -// { -// EntityPlayer entityPlayer = (EntityPlayer) event.getEntityLiving(); -// -// if ((entityPlayer.onGround || entityPlayer.capabilities.isFlying) && entityPlayer.moveForward > 0F) -// entityPlayer.moveFlying(0F, 1F, entityPlayer.capabilities.isFlying ? (percentIncrease / 2.0f) : percentIncrease); -// } -// } -// } - - if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.WHIRLWIND)) - { - int d0 = 3; - AxisAlignedBB axisAlignedBB = new AxisAlignedBB(event.getEntityLiving().posX - 0.5, event.getEntityLiving().posY - 0.5, event.getEntityLiving().posZ - 0.5, event.getEntityLiving().posX + 0.5, event.getEntityLiving().posY + 0.5, event.getEntityLiving().posZ + 0.5).expand(d0, d0, d0); - List entityList = event.getEntityLiving().getEntityWorld().getEntitiesWithinAABB(Entity.class, axisAlignedBB); - - for (Entity projectile : entityList) - { - if (projectile == null) - continue; - if (!(projectile instanceof IProjectile)) - continue; - - Entity throwingEntity = null; - - if (projectile instanceof EntityArrow) - throwingEntity = ((EntityArrow) projectile).shootingEntity; - else if (projectile instanceof EntityThrowable) - throwingEntity = ((EntityThrowable) projectile).getThrower(); - - if (throwingEntity != null && throwingEntity.equals(event.getEntityLiving())) - continue; - - double delX = projectile.posX - event.getEntityLiving().posX; - double delY = projectile.posY - event.getEntityLiving().posY; - double delZ = projectile.posZ - event.getEntityLiving().posZ; - - double angle = (delX * projectile.motionX + delY * projectile.motionY + delZ * projectile.motionZ) / (Math.sqrt(delX * delX + delY * delY + delZ * delZ) * Math.sqrt(projectile.motionX * projectile.motionX + projectile.motionY * projectile.motionY + projectile.motionZ * projectile.motionZ)); - - angle = Math.acos(angle); - - if (angle < 3 * (Math.PI / 4)) - continue; // angle is < 135 degrees - - if (throwingEntity != null) - { - delX = -projectile.posX + throwingEntity.posX; - delY = -projectile.posY + (throwingEntity.posY + throwingEntity.getEyeHeight()); - delZ = -projectile.posZ + throwingEntity.posZ; - } - - double curVel = Math.sqrt(delX * delX + delY * delY + delZ * delZ); - - delX /= curVel; - delY /= curVel; - delZ /= curVel; - double newVel = Math.sqrt(projectile.motionX * projectile.motionX + projectile.motionY * projectile.motionY + projectile.motionZ * projectile.motionZ); - projectile.motionX = newVel * delX; - projectile.motionY = newVel * delY; - projectile.motionZ = newVel * delZ; - } - } - } - - @SubscribeEvent - public static void onPlayerRespawn(PlayerEvent.Clone event) - { - if (event.isWasDeath()) - event.getEntityPlayer().addPotionEffect(new PotionEffect(RegistrarBloodMagic.SOUL_FRAY, 400)); - } - - @SubscribeEvent - public static void onSacrificeKnifeUsed(SacrificeKnifeUsedEvent event) - { - if (event.player.isPotionActive(RegistrarBloodMagic.SOUL_FRAY)) - event.lpAdded = (int) (event.lpAdded * 0.1D); - } - - @SubscribeEvent(priority = EventPriority.HIGHEST) - public static void onPlayerDamageEvent(LivingAttackEvent event) - { - if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.WHIRLWIND) && event.isCancelable() && event.getSource().isProjectile()) - event.setCanceled(true); - } - - @SubscribeEvent - public static void onEndermanTeleportEvent(EnderTeleportEvent event) - { - if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.PLANAR_BINDING) && event.isCancelable()) - { - event.setCanceled(true); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java deleted file mode 100644 index f8dd774e..00000000 --- a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java +++ /dev/null @@ -1,158 +0,0 @@ -package WayofTime.bloodmagic.proxy; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.client.helper.ShaderHelper; -import WayofTime.bloodmagic.client.hud.Elements; -import WayofTime.bloodmagic.client.key.KeyBindings; -import WayofTime.bloodmagic.client.render.LayerBloodElytra; -import WayofTime.bloodmagic.client.render.block.*; -import WayofTime.bloodmagic.client.render.entity.*; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.entity.mob.*; -import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; -import WayofTime.bloodmagic.entity.projectile.EntityMeteor; -import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow; -import WayofTime.bloodmagic.entity.projectile.EntitySoulSnare; -import WayofTime.bloodmagic.item.types.AlchemicVialType; -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.tile.*; -import WayofTime.bloodmagic.tile.routing.TileRoutingNode; -import WayofTime.bloodmagic.util.BMLog; -import WayofTime.bloodmagic.util.Constants; - -import com.google.common.collect.ImmutableMap; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.potion.PotionUtils; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.model.ModelLoaderRegistry; -import net.minecraftforge.client.model.animation.AnimationTESR; -import net.minecraftforge.client.model.obj.OBJLoader; -import net.minecraftforge.common.animation.Event; -import net.minecraftforge.common.animation.ITimeValue; -import net.minecraftforge.common.model.animation.IAnimationStateMachine; -import net.minecraftforge.fml.client.registry.ClientRegistry; -import net.minecraftforge.fml.client.registry.RenderingRegistry; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; - -import java.awt.Color; -import java.util.Map; - -public class ClientProxy extends CommonProxy -{ - public static DemonWillHolder currentAura = new DemonWillHolder(); - - @Override - public void preInit() - { - super.preInit(); - - OBJLoader.INSTANCE.addDomain(BloodMagic.MODID); - - ClientRegistry.bindTileEntitySpecialRenderer(TileInversionPillar.class, new AnimationTESR() - { - @Override - public void handleEvents(TileInversionPillar chest, float time, Iterable pastEvents) - { - chest.handleEvents(time, pastEvents); - } - }); - - ClientRegistry.bindTileEntitySpecialRenderer(TileAlchemyArray.class, new RenderAlchemyArray()); - ClientRegistry.bindTileEntitySpecialRenderer(TileAltar.class, new RenderAltar()); - ClientRegistry.bindTileEntitySpecialRenderer(TileRoutingNode.class, new RenderItemRoutingNode()); - ClientRegistry.bindTileEntitySpecialRenderer(TileDemonCrucible.class, new RenderDemonCrucible()); - ClientRegistry.bindTileEntitySpecialRenderer(TileMimic.class, new RenderMimic()); - ClientRegistry.bindTileEntitySpecialRenderer(TileBloodTank.class, new RenderBloodTank()); - - // Initialize key-binds during startup so they load correctly - for (KeyBindings key : KeyBindings.values()) - key.getKey(); - } - - @Override - public void registerRenderers() - { - RenderingRegistry.registerEntityRenderingHandler(EntitySoulSnare.class, new SoulSnareRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntitySentientArrow.class, new SentientArrowRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntityBloodLight.class, new BloodLightRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntityMeteor.class, new MeteorRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntitySentientSpecter.class, new SentientSpecterRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntityMimic.class, new MimicRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntityCorruptedZombie.class, new CorruptedZombieRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntityCorruptedSheep.class, new CorruptedSheepRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntityCorruptedChicken.class, new CorruptedChickenRenderFactory()); - RenderingRegistry.registerEntityRenderingHandler(EntityCorruptedSpider.class, new CorruptedSpiderRenderFactory()); - - ShaderHelper.init(); - } - - @Override - public void init() - { - super.init(); - Minecraft.getMinecraft().getItemColors().registerItemColorHandler((stack, tintIndex) -> - { - try - { - if (stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.COLOR)) - if (tintIndex == 1) - return Color.decode(stack.getTagCompound().getString(Constants.NBT.COLOR)).getRGB(); - } catch (NumberFormatException e) - { - return -1; - } - return -1; - }, RegistrarBloodMagicItems.SIGIL_HOLDING); - Minecraft.getMinecraft().getItemColors().registerItemColorHandler((stack, tintIndex) -> - { - if (tintIndex != 0 && tintIndex != 2) - return -1; - - if (stack.hasTagCompound() && stack.getTagCompound().hasKey("empty")) - return -1; - - return PotionUtils.getPotionColorFromEffectList(PotionUtils.getEffectsFromStack(stack)); - }, RegistrarBloodMagicItems.POTION_FLASK); - Minecraft.getMinecraft().getItemColors().registerItemColorHandler((stack, tintIndex) -> - { -// if (tintIndex != 0 && tintIndex != 2) -// return -1; - - int variant = stack.getMetadata(); - - return AlchemicVialType.getColourForLayer(variant, tintIndex); - }, RegistrarBloodMagicItems.ALCHEMIC_VIAL); - - addElytraLayer(); - } - - @Override - public void postInit() - { - Elements.registerElements(); - } - - private void addElytraLayer() - { - RenderManager renderManager = Minecraft.getMinecraft().getRenderManager(); - try - { - Map skinMap = ObfuscationReflectionHelper.getPrivateValue(RenderManager.class, renderManager, "skinMap", "field_178636_l"); - skinMap.get("default").addLayer(new LayerBloodElytra(skinMap.get("default"))); - skinMap.get("slim").addLayer(new LayerBloodElytra(skinMap.get("slim"))); - BMLog.DEBUG.info("Elytra layer added"); - } catch (Exception e) - { - BMLog.DEBUG.error("Failed to set custom Elytra Layer for Elytra Living Armour Upgrade: {}", e.getMessage()); - } - } - - @Override - public IAnimationStateMachine load(ResourceLocation location, ImmutableMap parameters) - { - return ModelLoaderRegistry.loadASM(location, parameters); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java deleted file mode 100644 index d63dc5a5..00000000 --- a/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.bloodmagic.proxy; - -import WayofTime.bloodmagic.ritual.CapabilityRuneType; -import WayofTime.bloodmagic.ritual.IRitualStone; -import WayofTime.bloodmagic.teleport.TeleportQueue; -import com.google.common.collect.ImmutableMap; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.animation.ITimeValue; -import net.minecraftforge.common.capabilities.CapabilityManager; -import net.minecraftforge.common.model.animation.IAnimationStateMachine; - -public class CommonProxy { - public void preInit() { - MinecraftForge.EVENT_BUS.register(TeleportQueue.getInstance()); - registerRenderers(); - } - - public void init() { - CapabilityManager.INSTANCE.register(IRitualStone.Tile.class, new CapabilityRuneType.RuneTypeStorage(), new CapabilityRuneType.Factory()); - } - - public void postInit() { - - } - - public void registerRenderers() { - - } - - public Object beamCont(World worldObj, double xi, double yi, double zi, double tx, double ty, double tz, int type, int color, boolean reverse, float endmod, Object input, int impact) { - // TODO Auto-generated method stub - return null; - } - - public IAnimationStateMachine load(ResourceLocation location, ImmutableMap parameters) { - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/recipe/LivingArmourDowngradeRecipe.java b/src/main/java/WayofTime/bloodmagic/recipe/LivingArmourDowngradeRecipe.java deleted file mode 100644 index 2a17628f..00000000 --- a/src/main/java/WayofTime/bloodmagic/recipe/LivingArmourDowngradeRecipe.java +++ /dev/null @@ -1,151 +0,0 @@ -package WayofTime.bloodmagic.recipe; - -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import com.google.common.collect.ImmutableList; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.oredict.OreDictionary; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -public class LivingArmourDowngradeRecipe { - protected LivingArmourUpgrade upgrade = null; - protected ItemStack keyStack = ItemStack.EMPTY; - protected List input = new ArrayList<>(); - - public LivingArmourDowngradeRecipe(LivingArmourUpgrade upgrade, ItemStack keyStack, Object... recipe) { - this.upgrade = upgrade; - this.keyStack = keyStack; - 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 { - StringBuilder ret = new StringBuilder("Invalid living armour downgrade recipe: "); - for (Object tmp : recipe) { - ret.append(tmp).append(", "); - } - ret.append(upgrade.toString()); - throw new RuntimeException(ret.toString()); - } - } - } - - /** - * Returns the size of the recipe area - */ - public int getRecipeSize() { - return input.size(); - } - - public LivingArmourUpgrade getRecipeOutput() { - return upgrade; - } - - /** - * Used to check if a recipe matches current crafting inventory. World and - * BlockPos are for future-proofing - */ - @SuppressWarnings("unchecked") - public boolean matches(ItemStack key, List checkedList, World world, BlockPos pos) { - if (!OreDictionary.itemMatches(keyStack, key, false)) { - return false; - } - - ArrayList required = new ArrayList<>(input); - - for (ItemStack slot : checkedList) { - if (slot != null) { - boolean inRecipe = false; - - for (Object aRequired : required) { - boolean match = false; - - Object next = aRequired; - - if (next instanceof ItemStack) { - match = OreDictionary.itemMatches((ItemStack) next, slot, false); - } else if (next instanceof List) { - Iterator itr = ((List) next).iterator(); - while (itr.hasNext() && !match) { - match = OreDictionary.itemMatches(itr.next(), slot, false); - } - } - - if (match) { - inRecipe = true; - required.remove(next); - break; - } - } - - if (!inRecipe) { - return false; - } - } - } - - return required.isEmpty(); - } - - /** - * 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 List getInput() { - return ImmutableList.copyOf(input); - } - - public ItemStack getKey() { - return this.keyStack; - } - - public void consumeInventory(IItemHandler inv) { - for (int i = 0; i < inv.getSlots(); i++) { - ItemStack stack = inv.getStackInSlot(i); - if (stack.isEmpty()) { - continue; - } - - if (stack.getItem().hasContainerItem(stack)) { - inv.extractItem(i, stack.getCount(), false); - inv.insertItem(i, stack.getItem().getContainerItem(stack), false); - } else { - inv.extractItem(i, 1, false); - } - } - } - - protected ItemStack getContainerItem(ItemStack stack) { - if (stack.isEmpty()) { - return ItemStack.EMPTY; - } - - ItemStack copyStack = stack.copy(); - - if (copyStack.getItem().hasContainerItem(stack)) { - return copyStack.getItem().getContainerItem(copyStack); - } - - copyStack.shrink(1); - if (copyStack.isEmpty()) { - return ItemStack.EMPTY; - } - - return copyStack; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/recipe/TartaricForgeRecipe.java b/src/main/java/WayofTime/bloodmagic/recipe/TartaricForgeRecipe.java deleted file mode 100644 index 21f5936b..00000000 --- a/src/main/java/WayofTime/bloodmagic/recipe/TartaricForgeRecipe.java +++ /dev/null @@ -1,160 +0,0 @@ -package WayofTime.bloodmagic.recipe; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import org.apache.commons.lang3.builder.ToStringBuilder; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -public class TartaricForgeRecipe { - protected ItemStack output = null; - protected List input = new ArrayList<>(); - protected double minimumSouls; - protected double soulsDrained; - - public TartaricForgeRecipe(Block result, double minSouls, double drain, Object... recipe) { - this(new ItemStack(result), minSouls, drain, recipe); - } - - public TartaricForgeRecipe(Item result, double minSouls, double drain, Object... recipe) { - this(new ItemStack(result), minSouls, drain, recipe); - } - - public TartaricForgeRecipe(ItemStack result, double minSouls, double drain, Object... recipe) { - output = result.copy(); - this.minimumSouls = minSouls; - this.soulsDrained = drain; - 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 { - StringBuilder ret = new StringBuilder("Invalid soul forge recipe: "); - for (Object tmp : recipe) { - ret.append(tmp).append(", "); - } - ret.append(output); - throw new RuntimeException(ret.toString()); - } - } - } - - /** - * Returns the size of the recipe area - */ - public int getRecipeSize() { - return input.size(); - } - - public ItemStack getRecipeOutput() { - return output.copy(); - } - - /** - * Used to check if a recipe matches current crafting inventory. World and - * BlockPos are for future-proofing - */ - @SuppressWarnings("unchecked") - public boolean matches(List checkedList, World world, BlockPos pos) { - ArrayList required = new ArrayList<>(input); - - for (ItemStack slot : checkedList) { - if (slot != null) { - boolean inRecipe = false; - - for (Object aRequired : required) { - boolean match = false; - - if (aRequired instanceof ItemStack) { - match = OreDictionary.itemMatches((ItemStack) aRequired, slot, false); - } else if (aRequired instanceof List) { - Iterator itr = ((List) aRequired).iterator(); - while (itr.hasNext() && !match) { - match = OreDictionary.itemMatches(itr.next(), slot, false); - } - } - - if (match) { - inRecipe = true; - required.remove(aRequired); - break; - } - } - - if (!inRecipe) { - return false; - } - } - } - - return required.isEmpty(); - } - - /** - * 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 List getInput() { - return this.input; - } - - public double getMinimumSouls() { - return minimumSouls; - } - - public double getSoulsDrained() { - return soulsDrained; - } - - @Override - public String toString() { - return new ToStringBuilder(this) - .append("output", output) - .append("input", input) - .append("minimumSouls", minimumSouls) - .append("soulsDrained", soulsDrained) - .append("recipeSize", getRecipeSize()) - .append("recipeOutput", getRecipeOutput()) - .toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TartaricForgeRecipe)) return false; - - TartaricForgeRecipe that = (TartaricForgeRecipe) o; - - if (Double.compare(that.minimumSouls, minimumSouls) != 0) return false; - if (Double.compare(that.soulsDrained, soulsDrained) != 0) return false; - if (output != null ? !output.equals(that.output) : that.output != null) return false; - return input != null ? input.equals(that.input) : that.input == null; - } - - @Override - public int hashCode() { - int result; - long temp; - result = output != null ? output.hashCode() : 0; - result = 31 * result + (input != null ? input.hashCode() : 0); - temp = Double.doubleToLongBits(minimumSouls); - result = 31 * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(soulsDrained); - result = 31 * result + (int) (temp ^ (temp >>> 32)); - return result; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableCustomRecipe.java b/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableCustomRecipe.java deleted file mode 100644 index 9e13b9aa..00000000 --- a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableCustomRecipe.java +++ /dev/null @@ -1,44 +0,0 @@ -package WayofTime.bloodmagic.recipe.alchemyTable; - -import WayofTime.bloodmagic.iface.ICustomAlchemyConsumable; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -public class AlchemyTableCustomRecipe extends AlchemyTableRecipe { - public AlchemyTableCustomRecipe(Block result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe) { - this(new ItemStack(result), lpDrained, ticksRequired, tierRequired, recipe); - } - - public AlchemyTableCustomRecipe(Item result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe) { - this(new ItemStack(result), lpDrained, ticksRequired, tierRequired, recipe); - } - - public AlchemyTableCustomRecipe(ItemStack result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe) { - super(result, lpDrained, ticksRequired, tierRequired, recipe); - } - - @Override - protected ItemStack getContainerItem(ItemStack stack) { - if (stack.isEmpty()) { - return ItemStack.EMPTY; - } - - ItemStack copyStack = stack.copy(); - - if (copyStack.getItem() instanceof ICustomAlchemyConsumable) { - return ((ICustomAlchemyConsumable) copyStack.getItem()).drainUseOnAlchemyCraft(copyStack); - } - - if (copyStack.getItem().hasContainerItem(stack)) { - return copyStack.getItem().getContainerItem(copyStack); - } - - copyStack.shrink(1); - if (copyStack.isEmpty()) { - return ItemStack.EMPTY; - } - - return copyStack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableDyeableRecipe.java b/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableDyeableRecipe.java deleted file mode 100644 index 93c0feb9..00000000 --- a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableDyeableRecipe.java +++ /dev/null @@ -1,116 +0,0 @@ -package WayofTime.bloodmagic.recipe.alchemyTable; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.init.Items; -import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.ItemBanner; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -import java.util.ArrayList; -import java.util.List; - -public class AlchemyTableDyeableRecipe extends AlchemyTableRecipe { - private ItemStack inputItem; - - public AlchemyTableDyeableRecipe(int lpDrained, int ticksRequired, int tierRequired, ItemStack inputItem) { - super(inputItem, lpDrained, ticksRequired, tierRequired); - - ArrayList validDyes = new ArrayList<>(); - validDyes.add(new ItemStack(Items.NAME_TAG)); - validDyes.add(new ItemStack(Items.DYE, 1, OreDictionary.WILDCARD_VALUE)); - - ArrayList recipe = new ArrayList<>(); - recipe.add(inputItem); - recipe.add(validDyes); - - this.input = recipe; - - this.inputItem = inputItem; - } - - @Override - public ItemStack getRecipeOutput(List inputList) { - int nameTagOrDyeLocation = -1; - int inputItemLocation = -1; - for (int x = 0; x < inputList.size(); x++) { - ItemStack slot = inputList.get(x); - - if (slot != null) { - boolean match = OreDictionary.itemMatches(inputItem, slot, false); - - if (match) { - inputItemLocation = x; - } else { - if (slot.getItem() == Items.NAME_TAG || slot.getItem() == Items.DYE) { - nameTagOrDyeLocation = x; - } - } - } - } - - if (nameTagOrDyeLocation != -1 && inputItemLocation != -1) { - ItemStack tagOrDyeStack = inputList.get(nameTagOrDyeLocation); - ItemStack inputStack = inputList.get(inputItemLocation); - - if (inputStack.isEmpty() || tagOrDyeStack.isEmpty()) { - return output.copy(); - } - - ItemStack outputStack = inputStack.copy(); - - if (tagOrDyeStack.getItem() == Items.NAME_TAG) { - if (!outputStack.hasTagCompound()) { - outputStack.setTagCompound(new NBTTagCompound()); - } - - outputStack.getTagCompound().setString(Constants.NBT.COLOR, tagOrDyeStack.getDisplayName()); - - return outputStack; - } else { - EnumDyeColor dyeColor = ItemBanner.getBaseColor(tagOrDyeStack); - if (!outputStack.hasTagCompound()) { - outputStack.setTagCompound(new NBTTagCompound()); - } - - outputStack.getTagCompound().setString(Constants.NBT.COLOR, String.valueOf(Utils.DYE_COLOR_VALUES.getOrDefault(dyeColor, 0))); - - return outputStack; - } - } - - return output.copy(); - } - - @Override - public boolean matches(List checkedList, World world, BlockPos pos) { - boolean hasNameTagOrDye = false; - boolean hasInputItem = false; - - for (ItemStack slot : checkedList) { - if (!slot.isEmpty()) { - boolean match = OreDictionary.itemMatches(inputItem, slot, false); - - if (match && hasInputItem) { - return false; - } else if (match) { - hasInputItem = true; - } else { - if (slot.getItem() == Items.NAME_TAG || slot.getItem() == Items.DYE) { - if (hasNameTagOrDye) { - return false; - } else { - hasNameTagOrDye = true; - } - } - } - } - } - - return hasNameTagOrDye && hasInputItem; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTablePotionAugmentRecipe.java b/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTablePotionAugmentRecipe.java deleted file mode 100644 index 17162a39..00000000 --- a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTablePotionAugmentRecipe.java +++ /dev/null @@ -1,97 +0,0 @@ -package WayofTime.bloodmagic.recipe.alchemyTable; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.potion.BMPotionUtils; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.potion.PotionUtils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class AlchemyTablePotionAugmentRecipe extends AlchemyTablePotionRecipe { - protected double lengthAugment = 0; - protected int powerAugment = 0; - protected Potion wantedPotion; - - public AlchemyTablePotionAugmentRecipe(int lpDrained, int ticksRequired, int tierRequired, List inputItems, PotionEffect baseEffect, double lengthAugment, int powerAugment) { - super(lpDrained, ticksRequired, tierRequired, inputItems, baseEffect); - - ArrayList recipe = new ArrayList<>(); - recipe.addAll(inputItems); - recipe.add(getAugmentedPotionFlask(baseEffect)); - - this.input = recipe; - - this.wantedPotion = baseEffect.getPotion(); - this.lengthAugment = lengthAugment; - this.powerAugment = powerAugment; - } - - public AlchemyTablePotionAugmentRecipe(int lpDrained, int ticksRequired, int tierRequired, ItemStack inputItem, PotionEffect baseEffect, double lengthAugment, int powerAugment) { - this(lpDrained, ticksRequired, tierRequired, Collections.singletonList(inputItem), baseEffect, lengthAugment, powerAugment); - } - - @Override - public boolean isPotionFlaskValidInput(ItemStack stack) { - List effectList = PotionUtils.getEffectsFromStack(stack); - for (PotionEffect eff : effectList) { - if (eff.getPotion() == wantedPotion) { - double currentAugment = BMPotionUtils.getLengthAugment(stack, wantedPotion); - - return currentAugment < lengthAugment || eff.getAmplifier() < powerAugment; - } - } - - return false; - } - - @Override - public ItemStack getModifiedFlaskForInput(ItemStack inputStack) { - if (inputStack.isEmpty()) { - ItemStack outputStack = new ItemStack(RegistrarBloodMagicItems.POTION_FLASK); - - List effectList = new ArrayList<>(); - int potionLength = wantedPotion.isInstant() ? 1 : BMPotionUtils.getAugmentedLength(baseEffect.getDuration(), lengthAugment, powerAugment - baseEffect.getAmplifier()); - effectList.add(new PotionEffect(wantedPotion, potionLength, powerAugment - baseEffect.getAmplifier())); - - BMPotionUtils.setEffects(outputStack, effectList); - - return outputStack; - } - - ItemStack outputStack = inputStack.copy(); - - List effectList = PotionUtils.getEffectsFromStack(outputStack); - List newEffectList = new ArrayList<>(); - - for (PotionEffect effect : effectList) { - if (effect.getPotion() == wantedPotion) { - double currentLengthAugment = Math.max(lengthAugment, BMPotionUtils.getLengthAugment(outputStack, wantedPotion)); - int currentPowerAugment = Math.max(powerAugment, effect.getAmplifier()); - int potionLength = wantedPotion.isInstant() ? 1 : BMPotionUtils.getAugmentedLength(baseEffect.getDuration(), currentLengthAugment, currentPowerAugment); - newEffectList.add(new PotionEffect(wantedPotion, potionLength, currentPowerAugment)); - BMPotionUtils.setLengthAugment(outputStack, wantedPotion, currentLengthAugment); - } else { - newEffectList.add(effect); - } - } - - BMPotionUtils.setEffects(outputStack, newEffectList); - - return outputStack; - } - - public static ItemStack getAugmentedPotionFlask(PotionEffect baseEffect) { - ItemStack outputStack = new ItemStack(RegistrarBloodMagicItems.POTION_FLASK); - - List effectList = new ArrayList<>(); - effectList.add(baseEffect); - - BMPotionUtils.setEffects(outputStack, effectList); - - return outputStack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTablePotionRecipe.java b/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTablePotionRecipe.java deleted file mode 100644 index 172af124..00000000 --- a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTablePotionRecipe.java +++ /dev/null @@ -1,139 +0,0 @@ -package WayofTime.bloodmagic.recipe.alchemyTable; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.potion.PotionUtils; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -public class AlchemyTablePotionRecipe extends AlchemyTableRecipe { - public static final ItemStack basePotionFlaskStack = new ItemStack(RegistrarBloodMagicItems.POTION_FLASK, 1, OreDictionary.WILDCARD_VALUE); - public static final int temporaryMaximumEffectsOnThePotionFlaskYesThisIsALongFieldItIsJustSoIRemember = 3; - protected PotionEffect baseEffect; - protected double baseAddedImpurity = 5; - - public AlchemyTablePotionRecipe(int lpDrained, int ticksRequired, int tierRequired, List inputItems, PotionEffect baseEffect) { - super(basePotionFlaskStack, lpDrained, ticksRequired, tierRequired); - - ArrayList recipe = new ArrayList<>(); - recipe.addAll(inputItems); - recipe.add(basePotionFlaskStack); - - this.input = recipe; - this.baseEffect = baseEffect; - } - - public AlchemyTablePotionRecipe(int lpDrained, int ticksRequired, int tierRequired, ItemStack inputItem, PotionEffect baseEffect) { - this(lpDrained, ticksRequired, tierRequired, Collections.singletonList(inputItem), baseEffect); - } - - @Override - public ItemStack getRecipeOutput(List inputList) { - int flaskLocation = -1; - for (int x = 0; x < inputList.size(); x++) { - ItemStack slot = inputList.get(x); - - if (slot != null) { - boolean match = slot.getItem() == RegistrarBloodMagicItems.POTION_FLASK; - - if (match) { - flaskLocation = x; - } - } - } - - if (flaskLocation != -1) { - return getModifiedFlaskForInput(inputList.get(flaskLocation)); - } - - return getModifiedFlaskForInput(ItemStack.EMPTY); - } - - @Override - public boolean matches(List checkedList, World world, BlockPos pos) { - ArrayList required = new ArrayList<>(input); - - for (ItemStack slot : checkedList) { - if (slot != null) { - boolean inRecipe = false; - - for (Object aRequired : required) { - boolean match = false; - - Object next = aRequired; - - if (next instanceof ItemStack) { - match = OreDictionary.itemMatches((ItemStack) next, slot, false); - } else if (next instanceof List) { - Iterator itr = ((List) next).iterator(); - while (itr.hasNext() && !match) { - match = OreDictionary.itemMatches(itr.next(), slot, false); - } - } - - if (match) { - if (next instanceof ItemStack && ((ItemStack) next).getItem() == RegistrarBloodMagicItems.POTION_FLASK) { - if (!isPotionFlaskValidInput(slot)) { - break; - } - } - - inRecipe = true; - required.remove(next); - break; - } - } - - if (!inRecipe) { - return false; - } - } - } - - return required.isEmpty(); - } - - public boolean isPotionFlaskValidInput(ItemStack stack) { - List effectList = PotionUtils.getEffectsFromStack(stack); - if (effectList.size() >= temporaryMaximumEffectsOnThePotionFlaskYesThisIsALongFieldItIsJustSoIRemember) { - return false; - } - - for (PotionEffect eff : effectList) { - if (eff.getPotion() == baseEffect.getPotion()) { - return false; - } - } - - return true; - } - - public ItemStack getModifiedFlaskForInput(ItemStack inputStack) { - if (inputStack.isEmpty()) { - ItemStack outputStack = new ItemStack(RegistrarBloodMagicItems.POTION_FLASK); - - List effectList = new ArrayList<>(); - effectList.add(baseEffect); - - PotionUtils.appendEffects(outputStack, effectList); - - return outputStack; - } - - ItemStack outputStack = inputStack.copy(); - - List effectList = PotionUtils.getEffectsFromStack(outputStack); - effectList.add(baseEffect); - - PotionUtils.appendEffects(outputStack, effectList); - - return outputStack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableRecipe.java b/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableRecipe.java deleted file mode 100644 index a845963a..00000000 --- a/src/main/java/WayofTime/bloodmagic/recipe/alchemyTable/AlchemyTableRecipe.java +++ /dev/null @@ -1,201 +0,0 @@ -package WayofTime.bloodmagic.recipe.alchemyTable; - -import com.google.common.collect.ImmutableList; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import org.apache.commons.lang3.builder.ToStringBuilder; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -public class AlchemyTableRecipe { - protected ItemStack output = ItemStack.EMPTY; - protected ArrayList input = new ArrayList<>(); - protected int lpDrained; - protected int ticksRequired; - protected int tierRequired; - - public AlchemyTableRecipe(Block result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe) { - this(new ItemStack(result), lpDrained, ticksRequired, tierRequired, recipe); - } - - public AlchemyTableRecipe(Item result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe) { - this(new ItemStack(result), lpDrained, ticksRequired, tierRequired, recipe); - } - - public AlchemyTableRecipe(ItemStack result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe) { - output = result.copy(); - this.lpDrained = lpDrained; - this.ticksRequired = ticksRequired; - this.tierRequired = tierRequired; - 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 { - StringBuilder ret = new StringBuilder("Invalid alchemy recipe: "); - for (Object tmp : recipe) { - ret.append(tmp).append(", "); - } - ret.append(output); - throw new RuntimeException(ret.toString()); - } - } - } - - /** - * Returns the size of the recipe area - */ - public int getRecipeSize() { - return input.size(); - } - - /** - * Returns the output of the recipe, sensitive to the input list provided. - * If the input list does not technically match, the recipe should return - * the default output. - * - * @param inputList - * @return - */ - public ItemStack getRecipeOutput(List inputList) { - return output.copy(); - } - - /** - * Used to check if a recipe matches current crafting inventory. World and - * BlockPos are for future-proofing - */ - @SuppressWarnings("unchecked") - public boolean matches(List checkedList, World world, BlockPos pos) { - ArrayList required = new ArrayList<>(input); - - for (ItemStack slot : checkedList) { - if (!slot.isEmpty()) { - boolean inRecipe = false; - - for (Object aRequired : required) { - boolean match = false; - - if (aRequired instanceof ItemStack) { - match = OreDictionary.itemMatches((ItemStack) aRequired, slot, false); - } else if (aRequired instanceof List) { - Iterator itr = ((List) aRequired).iterator(); - while (itr.hasNext() && !match) { - match = OreDictionary.itemMatches(itr.next(), slot, false); - } - } - - if (match) { - inRecipe = true; - required.remove(aRequired); - break; - } - } - - if (!inRecipe) { - return false; - } - } - } - - return required.isEmpty(); - } - - /** - * 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 List getInput() { - return ImmutableList.copyOf(input); - } - - public ItemStack[] getRemainingItems(ItemStack[] inventory) { - ItemStack[] ret = inventory.clone(); - for (int i = 0; i < ret.length; i++) { - ret[i] = getContainerItem(inventory[i]); - } - - return ret; - } - - protected ItemStack getContainerItem(ItemStack stack) { - if (stack.isEmpty()) { - return ItemStack.EMPTY; - } - - ItemStack copyStack = stack.copy(); - - if (copyStack.getItem().hasContainerItem(stack)) { - return copyStack.getItem().getContainerItem(copyStack); - } - - copyStack.shrink(1); - if (copyStack.isEmpty()) { - return ItemStack.EMPTY; - } - - return copyStack; - } - - public int getLpDrained() { - return lpDrained; - } - - public int getTicksRequired() { - return ticksRequired; - } - - public int getTierRequired() { - return tierRequired; - } - - @Override - public String toString() { - return new ToStringBuilder(this) - .append("output", output) - .append("input", input) - .append("lpDrained", lpDrained) - .append("ticksRequired", ticksRequired) - .append("tierRequired", tierRequired) - .append("recipeSize", getRecipeSize()) - .toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof AlchemyTableRecipe)) return false; - - AlchemyTableRecipe that = (AlchemyTableRecipe) o; - - if (lpDrained != that.lpDrained) return false; - if (ticksRequired != that.ticksRequired) return false; - if (tierRequired != that.tierRequired) return false; - if (output != null ? !output.equals(that.output) : that.output != null) return false; - return input != null ? input.equals(that.input) : that.input == null; - } - - @Override - public int hashCode() { - int result = output != null ? output.hashCode() : 0; - result = 31 * result + (input != null ? input.hashCode() : 0); - result = 31 * result + lpDrained; - result = 31 * result + ticksRequired; - result = 31 * result + tierRequired; - return result; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java b/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java deleted file mode 100644 index 931169b8..00000000 --- a/src/main/java/WayofTime/bloodmagic/registry/ModArmourTrackers.java +++ /dev/null @@ -1,66 +0,0 @@ -package WayofTime.bloodmagic.registry; - -import WayofTime.bloodmagic.livingArmour.LivingArmourHandler; -import WayofTime.bloodmagic.livingArmour.downgrade.*; -import WayofTime.bloodmagic.livingArmour.tracker.*; -import WayofTime.bloodmagic.livingArmour.upgrade.*; - -public class ModArmourTrackers { - public static void init() { - LivingArmourHandler.registerStatTracker(StatTrackerMovement.class); - LivingArmourHandler.registerStatTracker(StatTrackerDigging.class); - LivingArmourHandler.registerStatTracker(StatTrackerPoison.class); - LivingArmourHandler.registerStatTracker(StatTrackerSelfSacrifice.class); - LivingArmourHandler.registerStatTracker(StatTrackerFood.class); - LivingArmourHandler.registerStatTracker(StatTrackerPhysicalProtect.class); - LivingArmourHandler.registerStatTracker(StatTrackerHealthboost.class); - LivingArmourHandler.registerStatTracker(StatTrackerMeleeDamage.class); - LivingArmourHandler.registerStatTracker(StatTrackerArrowShot.class); - LivingArmourHandler.registerStatTracker(StatTrackerGrimReaperSprint.class); - LivingArmourHandler.registerStatTracker(StatTrackerSolarPowered.class); - LivingArmourHandler.registerStatTracker(StatTrackerExperience.class); - LivingArmourHandler.registerStatTracker(StatTrackerJump.class); - LivingArmourHandler.registerStatTracker(StatTrackerFallProtect.class); - LivingArmourHandler.registerStatTracker(StatTrackerGraveDigger.class); - LivingArmourHandler.registerStatTracker(StatTrackerStepAssist.class); - LivingArmourHandler.registerStatTracker(StatTrackerSprintAttack.class); - LivingArmourHandler.registerStatTracker(StatTrackerCriticalStrike.class); - LivingArmourHandler.registerStatTracker(StatTrackerFireResist.class); - LivingArmourHandler.registerStatTracker(StatTrackerNightSight.class); - LivingArmourHandler.registerStatTracker(StatTrackerRepairing.class); - - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSpeed(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeDigging(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradePoisonResist(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSelfSacrifice(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeKnockbackResist(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradePhysicalProtect(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeHealthboost(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeMeleeDamage(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeArrowShot(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeStepAssist(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeGrimReaperSprint(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSolarPowered(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeExperience(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeJump(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeFallProtect(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeGraveDigger(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSprintAttack(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeCriticalStrike(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeElytra(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeFireResist(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeNightSight(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeRepairing(0)); - - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSlowness(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeCrippledArm(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSlippery(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeBattleHungry(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeQuenched(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeMeleeDecrease(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeDisoriented(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeDigSlowdown(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeStormTrooper(0)); - LivingArmourHandler.registerArmourUpgrade(new LivingArmourUpgradeSlowHeal(0)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModCorruptionBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModCorruptionBlocks.java deleted file mode 100644 index 80525583..00000000 --- a/src/main/java/WayofTime/bloodmagic/registry/ModCorruptionBlocks.java +++ /dev/null @@ -1,16 +0,0 @@ -package WayofTime.bloodmagic.registry; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.inversion.CorruptionHandler; -import net.minecraft.init.Blocks; - -public class ModCorruptionBlocks { - public static void init() { - for (EnumDemonWillType type : EnumDemonWillType.values()) { - CorruptionHandler.registerBlockCorruption(type, Blocks.STONE, 0, RegistrarBloodMagicBlocks.DEMON_EXTRAS.getStateFromMeta(type.ordinal())); - CorruptionHandler.registerBlockCorruption(type, Blocks.GRASS, 0, RegistrarBloodMagicBlocks.DEMON_EXTRAS.getStateFromMeta(type.ordinal())); - CorruptionHandler.registerBlockCorruption(type, Blocks.DIRT, 0, RegistrarBloodMagicBlocks.DEMON_EXTRAS.getStateFromMeta(type.ordinal())); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java deleted file mode 100644 index 25d54dd2..00000000 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ /dev/null @@ -1,288 +0,0 @@ -package WayofTime.bloodmagic.registry; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraftforge.oredict.OreDictionary; - -import org.apache.commons.lang3.tuple.Pair; - -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectArrowTurret; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectAttractor; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBounce; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectFurnaceFuel; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectLaputa; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMobSacrifice; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMovement; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSigil; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSkeletonTurret; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSpike; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectTeleport; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectUpdraft; -import WayofTime.bloodmagic.client.render.alchemyArray.AttractorAlchemyCircleRenderer; -import WayofTime.bloodmagic.client.render.alchemyArray.BindingAlchemyCircleRenderer; -import WayofTime.bloodmagic.client.render.alchemyArray.DualAlchemyCircleRenderer; -import WayofTime.bloodmagic.client.render.alchemyArray.LowAlchemyCircleRenderer; -import WayofTime.bloodmagic.client.render.alchemyArray.LowStaticAlchemyCircleRenderer; -import WayofTime.bloodmagic.client.render.alchemyArray.MobSacrificeAlchemyCircleRenderer; -import WayofTime.bloodmagic.client.render.alchemyArray.SingleAlchemyCircleRenderer; -import WayofTime.bloodmagic.client.render.alchemyArray.StaticAlchemyCircleRenderer; -import WayofTime.bloodmagic.client.render.alchemyArray.TurretAlchemyCircleRenderer; -import WayofTime.bloodmagic.compress.AdvancedCompressionHandler; -import WayofTime.bloodmagic.compress.BaseCompressionHandler; -import WayofTime.bloodmagic.compress.CompressionRegistry; -import WayofTime.bloodmagic.compress.StorageBlockCraftingManager; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.core.registry.AlchemyArrayRecipeRegistry; -import WayofTime.bloodmagic.core.registry.AlchemyTableRecipeRegistry; -import WayofTime.bloodmagic.core.registry.LivingArmourDowngradeRecipeRegistry; -import WayofTime.bloodmagic.iface.ISigil; -import WayofTime.bloodmagic.item.types.ComponentTypes; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeBattleHungry; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeCrippledArm; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeDigSlowdown; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeDisoriented; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeMeleeDecrease; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeQuenched; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeSlowHeal; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeSlowness; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeStormTrooper; -import WayofTime.bloodmagic.potion.BMPotionUtils; -import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTableDyeableRecipe; -import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTablePotionRecipe; -import WayofTime.bloodmagic.util.BMLog; -import WayofTime.bloodmagic.util.Utils; - -import com.google.common.base.Stopwatch; - -public class ModRecipes -{ - - static ItemStack mundaneLengtheningStack = ComponentTypes.CATALYST_LENGTH_1.getStack(); - static ItemStack mundanePowerStack = ComponentTypes.CATALYST_POWER_1.getStack(); - - public static void init() - { - initOreDict(); - addFurnaceRecipes(); - addAltarRecipes(); - addAlchemyArrayRecipes(); - addAlchemyTableRecipes(); - addPotionRecipes(); - addLivingArmourDowngradeRecipes(); - } - - public static void initOreDict() - { - OreDictionary.registerOre("dustIron", ComponentTypes.SAND_IRON.getStack()); - OreDictionary.registerOre("dustGold", ComponentTypes.SAND_GOLD.getStack()); - OreDictionary.registerOre("dustCoal", ComponentTypes.SAND_COAL.getStack()); - OreDictionary.registerOre("dustSulfur", ComponentTypes.SULFUR.getStack()); - OreDictionary.registerOre("dustSaltpeter", ComponentTypes.SALTPETER.getStack()); - } - - public static void addFurnaceRecipes() - { - FurnaceRecipes.instance().addSmeltingRecipe(ComponentTypes.SAND_IRON.getStack(), new ItemStack(Items.IRON_INGOT), (float) 0.15); - FurnaceRecipes.instance().addSmeltingRecipe(ComponentTypes.SAND_GOLD.getStack(), new ItemStack(Items.GOLD_INGOT), (float) 0.15); - } - - public static void addAltarRecipes() - { - - } - - public static void addAlchemyArrayRecipes() - { - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_BINDING.getStack(), new ItemStack(Items.DIAMOND_SWORD), new AlchemyArrayEffectBinding("boundSword", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_SWORD))), new BindingAlchemyCircleRenderer()); - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_BINDING.getStack(), new ItemStack(Items.DIAMOND_AXE), new AlchemyArrayEffectBinding("boundAxe", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_AXE)))); - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_BINDING.getStack(), new ItemStack(Items.DIAMOND_PICKAXE), new AlchemyArrayEffectBinding("boundPickaxe", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_PICKAXE)))); - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_BINDING.getStack(), new ItemStack(Items.DIAMOND_SHOVEL), new AlchemyArrayEffectBinding("boundShovel", Utils.setUnbreakable(new ItemStack(RegistrarBloodMagicItems.BOUND_SHOVEL)))); - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_BINDING.getStack(), new ItemStack(Items.IRON_HELMET), new AlchemyArrayEffectBinding("livingHelmet", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET))); - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_BINDING.getStack(), new ItemStack(Items.IRON_CHESTPLATE), new AlchemyArrayEffectBinding("livingChest", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_CHEST))); - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_BINDING.getStack(), new ItemStack(Items.IRON_LEGGINGS), new AlchemyArrayEffectBinding("livingLegs", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_LEGGINGS))); - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_BINDING.getStack(), new ItemStack(Items.IRON_BOOTS), new AlchemyArrayEffectBinding("livingBoots", new ItemStack(RegistrarBloodMagicItems.LIVING_ARMOUR_BOOTS))); - - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.ROTTEN_FLESH), new AlchemyArrayEffectAttractor("attractor"), new AttractorAlchemyCircleRenderer()); - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.FEATHER), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectMovement("movement"), new StaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png"))); - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.FEATHER), new ItemStack(Items.GLOWSTONE_DUST), new AlchemyArrayEffectUpdraft("updraft"), new AttractorAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/UpdraftArray.png"))); - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.SLIME_BALL), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectBounce("bounce"), new SingleAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/BounceArray.png"))); - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.COAL), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectFurnaceFuel("furnace"), new LowAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FurnaceArray.png"))); - - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ARROW), new ItemStack(Items.FEATHER), new AlchemyArrayEffectSkeletonTurret("skeletonTurret"), new DualAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png"))); - - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ENDER_PEARL), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectTeleport("teleport"), new StaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/teleportation.png"))); - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.BOW), new ItemStack(Items.ARROW), new AlchemyArrayEffectArrowTurret("turret"), new TurretAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"))); - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.REDSTONE), new ItemStack(Blocks.LAPIS_BLOCK), new AlchemyArrayEffectLaputa("laputa"), new AttractorAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/shardoflaputa.png"))); - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Blocks.COBBLESTONE), new ItemStack(Items.IRON_INGOT), new AlchemyArrayEffectSpike("spike"), new LowStaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/spikearray.png"))); - AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Blocks.REDSTONE_BLOCK), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectMobSacrifice("mobSacrifice"), new MobSacrificeAlchemyCircleRenderer()); - - AlchemyArrayRecipeRegistry.registerRecipe(ComponentTypes.REAGENT_FAST_MINER.getStack(), new ItemStack(Items.IRON_PICKAXE), new AlchemyArrayEffectSigil("fastMiner", (ISigil) RegistrarBloodMagicItems.SIGIL_FAST_MINER), new SingleAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/FastMinerSigil.png"))); - - } - - public static void addCompressionHandlers() - { - Stopwatch stopwatch = Stopwatch.createStarted(); - StorageBlockCraftingManager.getInstance().addStorageBlockRecipes(); - CompressionRegistry.registerHandler(new BaseCompressionHandler(new ItemStack(Items.GLOWSTONE_DUST, 4, 0), new ItemStack(Blocks.GLOWSTONE), 64)); - CompressionRegistry.registerHandler(new BaseCompressionHandler(new ItemStack(Items.SNOWBALL, 4, 0), new ItemStack(Blocks.SNOW), 8)); - CompressionRegistry.registerHandler(new AdvancedCompressionHandler()); - - CompressionRegistry.registerItemThreshold(new ItemStack(Blocks.COBBLESTONE), 64); - stopwatch.stop(); - - BMLog.DEBUG.info("Added compression recipes in {}", stopwatch); - } - - public static void addAlchemyTableRecipes() - { - AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableDyeableRecipe(0, 100, 0, new ItemStack(RegistrarBloodMagicItems.SIGIL_HOLDING))); - } - - public static void addPotionRecipes() - { - addPotionRecipe(1000, 1, new ItemStack(Items.GHAST_TEAR), new PotionEffect(MobEffects.REGENERATION, 450)); - addPotionRecipe(1000, 1, new ItemStack(Items.GOLDEN_CARROT), new PotionEffect(MobEffects.NIGHT_VISION, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.MAGMA_CREAM), new PotionEffect(MobEffects.FIRE_RESISTANCE, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.WATER_BUCKET), new PotionEffect(MobEffects.WATER_BREATHING, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.SUGAR), new PotionEffect(MobEffects.SPEED, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.SPECKLED_MELON), new PotionEffect(MobEffects.INSTANT_HEALTH, 1)); - addPotionRecipe(1000, 1, new ItemStack(Items.SPIDER_EYE), new PotionEffect(MobEffects.POISON, 450)); - addPotionRecipe(1000, 1, new ItemStack(Items.DYE, 1, 0), new PotionEffect(MobEffects.BLINDNESS, 450)); - addPotionRecipe(1000, 1, new ItemStack(Items.FERMENTED_SPIDER_EYE), new PotionEffect(MobEffects.WEAKNESS, 450)); - addPotionRecipe(1000, 1, new ItemStack(Items.BLAZE_POWDER), new PotionEffect(MobEffects.STRENGTH, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.FEATHER), new PotionEffect(MobEffects.JUMP_BOOST, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.CLAY_BALL), new PotionEffect(MobEffects.SLOWNESS, 450)); - addPotionRecipe(1000, 1, new ItemStack(Items.REDSTONE), new PotionEffect(MobEffects.HASTE, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.GLASS_BOTTLE), new PotionEffect(MobEffects.INVISIBILITY, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.POISONOUS_POTATO), new PotionEffect(MobEffects.SATURATION, 1)); - addPotionRecipe(1000, 1, new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD, 1, 0), new PotionEffect(MobEffects.HEALTH_BOOST, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Blocks.SLIME_BLOCK), new PotionEffect(RegistrarBloodMagic.BOUNCE, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.STRING), new PotionEffect(RegistrarBloodMagic.CLING, 2 * 60 * 20)); - addPotionRecipe(1000, 1, new ItemStack(Items.CAKE), new PotionEffect(RegistrarBloodMagic.FLIGHT, 2 * 60 * 20)); - - addPotionRecipe(1000, 1, new ItemStack(Items.BEETROOT), new PotionEffect(RegistrarBloodMagic.DEAFNESS, 450)); - } - - public static void addPotionRecipe(int lpDrained, int tier, ItemStack inputStack, PotionEffect baseEffect) - { - AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTablePotionRecipe(lpDrained, 100, tier, inputStack, baseEffect)); - - List lengtheningList = new ArrayList<>(); - lengtheningList.add(inputStack); - lengtheningList.add(mundaneLengtheningStack); - AlchemyTableRecipeRegistry.registerRecipe(BMPotionUtils.getLengthAugmentRecipe(lpDrained, 100, tier, lengtheningList, baseEffect, 1)); - - List powerList = new ArrayList<>(); - powerList.add(inputStack); - powerList.add(mundanePowerStack); - AlchemyTableRecipeRegistry.registerRecipe(BMPotionUtils.getPowerAugmentRecipe(lpDrained, 100, tier, powerList, baseEffect, 1)); - } - - public static void addLivingArmourDowngradeRecipes() - { - String messageBase = "ritual.bloodmagic.downgradeRitual.dialogue."; - - ItemStack bowStack = new ItemStack(Items.BOW); - ItemStack bottleStack = new ItemStack(Items.POTIONITEM, 1, 0); - ItemStack swordStack = new ItemStack(Items.STONE_SWORD); - ItemStack goldenAppleStack = new ItemStack(Items.GOLDEN_APPLE); - ItemStack fleshStack = new ItemStack(Items.ROTTEN_FLESH); - ItemStack shieldStack = new ItemStack(Items.SHIELD); - ItemStack pickStack = new ItemStack(Items.STONE_PICKAXE); - ItemStack minecartStack = new ItemStack(Items.MINECART); - ItemStack stringStack = new ItemStack(Items.STRING); - - Map> dialogueMap = new HashMap<>(); - dialogueMap.put(bowStack, Pair.of("bow", new int[] { 1, 100, 300, 500 })); - dialogueMap.put(bottleStack, Pair.of("quenched", new int[] { 1, 100, 300, 500 })); - dialogueMap.put(swordStack, Pair.of("dulledBlade", new int[] { 1, 100, 300, 500, 700 })); - dialogueMap.put(goldenAppleStack, Pair.of("slowHeal", new int[] { 1, 100, 300, 500, 700 })); - - for (Entry> entry : dialogueMap.entrySet()) - { - ItemStack keyStack = entry.getKey(); - String str = entry.getValue().getKey(); - Map> textMap = new HashMap<>(); - for (int tick : entry.getValue().getValue()) - { - List textList = new ArrayList<>(); - textList.add(new TextComponentTranslation("\u00A74%s", new TextComponentTranslation(messageBase + str + "." + tick))); - textMap.put(tick, textList); - } - - LivingArmourDowngradeRecipeRegistry.registerDialog(keyStack, textMap); - } - - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(0), bowStack, Items.ARROW, "string", "ingotIron", "ingotIron"); - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(1), bowStack, Items.SPECTRAL_ARROW, "ingotGold", "dustRedstone", "dustGlowstone", "gemLapis"); - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(2), bowStack, "gemDiamond", Items.FIRE_CHARGE, Items.BLAZE_ROD, "feather"); - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(3), bowStack, Items.PRISMARINE_SHARD, Items.BLAZE_ROD, "feather", "feather"); - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeStormTrooper(4), bowStack, new ItemStack(Items.TIPPED_ARROW, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(Items.TIPPED_ARROW, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(Items.TIPPED_ARROW, 1, OreDictionary.WILDCARD_VALUE)); -// LivingArmourDowngradeRecipeRegistry.registerDialog(bowStack, bowMap); - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeQuenched(0), bottleStack, Items.DRAGON_BREATH); - LivingArmourDowngradeRecipeRegistry.registerRecipe(new LivingArmourUpgradeCrippledArm(0), shieldStack, "gemDiamond"); - - for (int i = 0; i < 10; i++) - { - addRecipeForTieredDowngrade(new LivingArmourUpgradeMeleeDecrease(i), swordStack, i); - addRecipeForTieredDowngrade(new LivingArmourUpgradeSlowHeal(i), goldenAppleStack, i); - addRecipeForTieredDowngrade(new LivingArmourUpgradeBattleHungry(i), fleshStack, i); - addRecipeForTieredDowngrade(new LivingArmourUpgradeDigSlowdown(i), pickStack, i); - addRecipeForTieredDowngrade(new LivingArmourUpgradeDisoriented(i), minecartStack, i); - addRecipeForTieredDowngrade(new LivingArmourUpgradeSlowness(i), stringStack, i); - } - } - - public static void addRecipeForTieredDowngrade(LivingArmourUpgrade upgrade, ItemStack stack, int tier) - { - switch (tier) - { - case 0: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, "ingotIron", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 0)); - break; - case 1: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, "dustRedstone", "dustRedstone", "ingotIron", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 0)); - break; - case 2: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, "ingotGold", "gemLapis", "gemLapis", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1)); - break; - case 3: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, Blocks.VINE, "dyeRed", Items.GOLDEN_CARROT, new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 1)); - break; - case 4: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, Items.GOLDEN_APPLE, "treeSapling", "treeSapling", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)); - break; - case 5: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, Blocks.IRON_BLOCK, Blocks.REDSTONE_BLOCK, new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 2)); - break; - case 6: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, Blocks.IRON_BLOCK, Blocks.GLOWSTONE, "ingotGold", "ingotGold", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3)); - break; - case 7: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, Blocks.GOLD_BLOCK, Blocks.LAPIS_BLOCK, "gemDiamond", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 3)); - break; - case 8: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, Items.DRAGON_BREATH, "gemDiamond", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 4)); - break; - case 9: - LivingArmourDowngradeRecipeRegistry.registerRecipe(upgrade, stack, Items.NETHER_STAR, "gemDiamond", "gemDiamond", new ItemStack(RegistrarBloodMagicItems.SLATE, 1, 4)); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java b/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java deleted file mode 100644 index f33bbf22..00000000 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.registry; - -import WayofTime.bloodmagic.ritual.harvest.HarvestRegistry; -import WayofTime.bloodmagic.ritual.harvest.HarvestHandlerPlantable; -import WayofTime.bloodmagic.ritual.harvest.HarvestHandlerStem; -import WayofTime.bloodmagic.ritual.harvest.HarvestHandlerTall; -import net.minecraft.init.Blocks; - -public class ModRituals -{ - // TODO Move elsewhere - public static void initHarvestHandlers() - { - HarvestRegistry.registerRangeAmplifier(Blocks.DIAMOND_BLOCK.getDefaultState(), 15); - HarvestRegistry.registerRangeAmplifier(Blocks.GOLD_BLOCK.getDefaultState(), 10); - HarvestRegistry.registerRangeAmplifier(Blocks.IRON_BLOCK.getDefaultState(), 6); - - HarvestRegistry.registerHandler(new HarvestHandlerPlantable()); - HarvestRegistry.registerHandler(new HarvestHandlerTall()); - HarvestRegistry.registerHandler(new HarvestHandlerStem()); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModTranquilityHandlers.java b/src/main/java/WayofTime/bloodmagic/registry/ModTranquilityHandlers.java deleted file mode 100644 index d4fd77b7..00000000 --- a/src/main/java/WayofTime/bloodmagic/registry/ModTranquilityHandlers.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.registry; - -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.incense.EnumTranquilityType; -import WayofTime.bloodmagic.incense.IncenseTranquilityRegistry; -import WayofTime.bloodmagic.incense.TranquilityStack; -import net.minecraft.block.BlockFire; -import net.minecraft.block.BlockGrass; -import net.minecraft.block.BlockLeaves; -import net.minecraft.block.BlockLog; - -public class ModTranquilityHandlers { - - public static void init() { - IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof BlockLeaves ? new TranquilityStack(EnumTranquilityType.PLANT, 1.0D) : null); - IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof BlockFire ? new TranquilityStack(EnumTranquilityType.FIRE, 1.0D) : null); - IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof BlockGrass ? new TranquilityStack(EnumTranquilityType.EARTHEN, 0.5D) : null); - IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof BlockLog ? new TranquilityStack(EnumTranquilityType.TREE, 1.0D) : null); - IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> BloodMagicAPI.INSTANCE.getValueManager().getTranquility().get(state)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/AreaDescriptor.java b/src/main/java/WayofTime/bloodmagic/ritual/AreaDescriptor.java deleted file mode 100644 index b6bcdd7d..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/AreaDescriptor.java +++ /dev/null @@ -1,495 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import WayofTime.bloodmagic.util.Constants; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.gen.structure.template.PlacementSettings; -import net.minecraft.world.gen.structure.template.Template; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -public abstract class AreaDescriptor implements Iterator { - public List getContainedPositions(BlockPos pos) { - return new ArrayList<>(); - } - - public AxisAlignedBB getAABB(BlockPos pos) { - return null; - } - - public abstract void resetCache(); - - public abstract boolean isWithinArea(BlockPos pos); - - public abstract void resetIterator(); - - public void readFromNBT(NBTTagCompound tag) { - - } - - public void writeToNBT(NBTTagCompound tag) { - - } - - public abstract int getVolumeForOffsets(BlockPos offset1, BlockPos offset2); - - public abstract boolean isWithinRange(BlockPos offset1, BlockPos offset2, int verticalLimit, int horizontalLimit); - - public abstract int getVolume(); - - public abstract boolean isWithinRange(int verticalLimit, int horizontalLimit); - - /** - * This method changes the area descriptor so that its range matches the two - * blocks that are selected. When implementing this method, assume that - * these positions are the blocks that are clicked by the player. - * - * @param pos1 - * @param pos2 - */ - public abstract void modifyAreaByBlockPositions(BlockPos pos1, BlockPos pos2); - - public abstract boolean intersects(AreaDescriptor descriptor); - - public abstract AreaDescriptor offset(BlockPos offset); - - public abstract AreaDescriptor rotateDescriptor(PlacementSettings settings); - - public static class Rectangle extends AreaDescriptor { - protected BlockPos minimumOffset; - protected BlockPos maximumOffset; // Non-inclusive maximum offset. - private BlockPos currentPosition; - - private ArrayList blockPosCache; - private BlockPos cachedPosition; - - private boolean cache = true; - - /** - * This constructor takes in the minimum and maximum BlockPos. The - * maximum offset is non-inclusive, meaning if you pass in (0,0,0) and - * (1,1,1), calling getContainedPositions() will only give (0,0,0). - * - * @param minimumOffset - - * @param maximumOffset - - */ - public Rectangle(BlockPos minimumOffset, BlockPos maximumOffset) { - setOffsets(minimumOffset, maximumOffset); - } - - public Rectangle(BlockPos minimumOffset, int sizeX, int sizeY, int sizeZ) { - this(minimumOffset, minimumOffset.add(sizeX, sizeY, sizeZ)); - } - - public Rectangle(BlockPos minimumOffset, int size) { - this(minimumOffset, size, size, size); - } - - @Override - public List getContainedPositions(BlockPos pos) { - if (!cache || !pos.equals(cachedPosition) || blockPosCache.isEmpty()) { - ArrayList posList = new ArrayList<>(); - - for (int j = minimumOffset.getY(); j < maximumOffset.getY(); j++) { - for (int i = minimumOffset.getX(); i < maximumOffset.getX(); i++) { - for (int k = minimumOffset.getZ(); k < maximumOffset.getZ(); k++) { - posList.add(pos.add(i, j, k)); - } - } - } - - blockPosCache = posList; - cachedPosition = pos; - } - - return Collections.unmodifiableList(blockPosCache); - } - - @Override - public AxisAlignedBB getAABB(BlockPos pos) { - AxisAlignedBB tempAABB = new AxisAlignedBB(minimumOffset, maximumOffset); - return tempAABB.offset(pos.getX(), pos.getY(), pos.getZ()); - } - - /** - * Sets the offsets of the AreaDescriptor in a safe way that will make - * minimumOffset the lowest corner - * - * @param offset1 - - * @param offset2 - - */ - public void setOffsets(BlockPos offset1, BlockPos offset2) { - this.minimumOffset = new BlockPos(Math.min(offset1.getX(), offset2.getX()), Math.min(offset1.getY(), offset2.getY()), Math.min(offset1.getZ(), offset2.getZ())); - this.maximumOffset = new BlockPos(Math.max(offset1.getX(), offset2.getX()), Math.max(offset1.getY(), offset2.getY()), Math.max(offset1.getZ(), offset2.getZ())); - blockPosCache = new ArrayList<>(); - } - - @Override - public void resetCache() { - this.blockPosCache = new ArrayList<>(); - } - - @Override - public boolean isWithinArea(BlockPos pos) { - int x = pos.getX(); - int y = pos.getY(); - int z = pos.getZ(); - - return x >= minimumOffset.getX() && x < maximumOffset.getX() && y >= minimumOffset.getY() && y < maximumOffset.getY() && z >= minimumOffset.getZ() && z < maximumOffset.getZ(); - } - - @Override - public boolean hasNext() { - return currentPosition == null || !(currentPosition.getX() + 1 == maximumOffset.getX() && currentPosition.getY() + 1 == maximumOffset.getY() && currentPosition.getZ() + 1 == maximumOffset.getZ()); - } - - @Override - public BlockPos next() { - if (currentPosition != null) { - int nextX = currentPosition.getX() + 1 >= maximumOffset.getX() ? minimumOffset.getX() : currentPosition.getX() + 1; - int nextZ = nextX != minimumOffset.getX() ? currentPosition.getZ() : (currentPosition.getZ() + 1 >= maximumOffset.getZ() ? minimumOffset.getZ() : currentPosition.getZ() + 1); - int nextY = (nextZ != minimumOffset.getZ() || nextX != minimumOffset.getX()) ? currentPosition.getY() : (currentPosition.getY() + 1); - currentPosition = new BlockPos(nextX, nextY, nextZ); - } else { - currentPosition = minimumOffset; - } - - return currentPosition; - } - - @Override - public void remove() { - - } - - @Override - public void resetIterator() { - currentPosition = null; - } - - @Override - public void modifyAreaByBlockPositions(BlockPos pos1, BlockPos pos2) { - setOffsets(pos1, pos2); - maximumOffset = maximumOffset.add(1, 1, 1); - resetIterator(); - resetCache(); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - minimumOffset = new BlockPos(tag.getInteger(Constants.NBT.X_COORD + "min"), tag.getInteger(Constants.NBT.Y_COORD + "min"), tag.getInteger(Constants.NBT.Z_COORD + "min")); - maximumOffset = new BlockPos(tag.getInteger(Constants.NBT.X_COORD + "max"), tag.getInteger(Constants.NBT.Y_COORD + "max"), tag.getInteger(Constants.NBT.Z_COORD + "max")); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - tag.setInteger(Constants.NBT.X_COORD + "min", minimumOffset.getX()); - tag.setInteger(Constants.NBT.Y_COORD + "min", minimumOffset.getY()); - tag.setInteger(Constants.NBT.Z_COORD + "min", minimumOffset.getZ()); - tag.setInteger(Constants.NBT.X_COORD + "max", maximumOffset.getX()); - tag.setInteger(Constants.NBT.Y_COORD + "max", maximumOffset.getY()); - tag.setInteger(Constants.NBT.Z_COORD + "max", maximumOffset.getZ()); - } - - @Override - public int getVolumeForOffsets(BlockPos offset1, BlockPos offset2) { - BlockPos minPos = new BlockPos(Math.min(offset1.getX(), offset2.getX()), Math.min(offset1.getY(), offset2.getY()), Math.min(offset1.getZ(), offset2.getZ())); - BlockPos maxPos = new BlockPos(Math.max(offset1.getX(), offset2.getX()), Math.max(offset1.getY(), offset2.getY()), Math.max(offset1.getZ(), offset2.getZ())); - - maxPos = maxPos.add(1, 1, 1); - - return (maxPos.getX() - minPos.getX()) * (maxPos.getY() - minPos.getY()) * (maxPos.getZ() - minPos.getZ()); - } - - @Override - public boolean isWithinRange(BlockPos offset1, BlockPos offset2, int verticalLimit, int horizontalLimit) { - BlockPos minPos = new BlockPos(Math.min(offset1.getX(), offset2.getX()), Math.min(offset1.getY(), offset2.getY()), Math.min(offset1.getZ(), offset2.getZ())); - BlockPos maxPos = new BlockPos(Math.max(offset1.getX(), offset2.getX()), Math.max(offset1.getY(), offset2.getY()), Math.max(offset1.getZ(), offset2.getZ())); - - return minPos.getY() >= -verticalLimit && maxPos.getY() <= verticalLimit && minPos.getX() >= -horizontalLimit && maxPos.getX() <= horizontalLimit && minPos.getZ() >= -horizontalLimit && maxPos.getZ() <= horizontalLimit; - } - - @Override - public int getVolume() { - return (maximumOffset.getX() - minimumOffset.getX()) * (maximumOffset.getY() - minimumOffset.getY()) * (maximumOffset.getZ() - minimumOffset.getZ()); - } - - @Override - public boolean isWithinRange(int verticalLimit, int horizontalLimit) { - return minimumOffset.getY() >= -verticalLimit && maximumOffset.getY() <= verticalLimit + 1 && minimumOffset.getX() >= -horizontalLimit && maximumOffset.getX() <= horizontalLimit + 1 && minimumOffset.getZ() >= -horizontalLimit && maximumOffset.getZ() <= horizontalLimit + 1; - } - - @Override - public boolean intersects(AreaDescriptor descriptor) { - if (descriptor instanceof AreaDescriptor.Rectangle) { - AreaDescriptor.Rectangle rectangle = (AreaDescriptor.Rectangle) descriptor; - - return !(minimumOffset.getX() >= rectangle.maximumOffset.getX() || minimumOffset.getY() >= rectangle.maximumOffset.getY() || minimumOffset.getZ() >= rectangle.maximumOffset.getZ() || rectangle.minimumOffset.getX() >= maximumOffset.getX() || rectangle.minimumOffset.getY() >= maximumOffset.getY() || rectangle.minimumOffset.getZ() >= maximumOffset.getZ()); - } - - return false; - } - - @Override - public AreaDescriptor offset(BlockPos offset) { - return new AreaDescriptor.Rectangle(this.minimumOffset.add(offset), this.maximumOffset.add(offset)); - } - - @Override - public AreaDescriptor rotateDescriptor(PlacementSettings settings) { - BlockPos rotatePos1 = Template.transformedBlockPos(settings, minimumOffset); - BlockPos rotatePos2 = Template.transformedBlockPos(settings, maximumOffset.add(-1, -1, -1)); //It works, shut up! - - AreaDescriptor.Rectangle rectangle = new AreaDescriptor.Rectangle(this.minimumOffset, 1); - rectangle.modifyAreaByBlockPositions(rotatePos1, rotatePos2); - - return rectangle; - } - } - - public static class HemiSphere extends AreaDescriptor { - private BlockPos minimumOffset; - private int radius; - - private ArrayList blockPosCache; - private BlockPos cachedPosition; - - private boolean cache = true; - - public HemiSphere(BlockPos minimumOffset, int radius) { - setRadius(minimumOffset, radius); - } - - public void setRadius(BlockPos minimumOffset, int radius) { - this.minimumOffset = new BlockPos(Math.min(minimumOffset.getX(), minimumOffset.getX()), Math.min(minimumOffset.getY(), minimumOffset.getY()), Math.min(minimumOffset.getZ(), minimumOffset.getZ())); - this.radius = radius; - blockPosCache = new ArrayList<>(); - } - - @Override - public List getContainedPositions(BlockPos pos) { - if (!cache || !pos.equals(cachedPosition) || blockPosCache.isEmpty()) { - ArrayList posList = new ArrayList<>(); - - int i = -radius; - int j = minimumOffset.getY(); - int k = -radius; - - //TODO For some reason the bottom of the hemisphere is not going up with the minOffset - - while (i <= radius) { - while (j <= radius) { - while (k <= radius) { - if (i * i + j * j + k * k >= (radius + 0.5F) * (radius + 0.5F)) { - k++; - continue; - } - - posList.add(pos.add(i, j, k)); - k++; - } - - k = -radius; - j++; - } - - j = minimumOffset.getY(); - i++; - } - - blockPosCache = posList; - cachedPosition = pos; - } - - return Collections.unmodifiableList(blockPosCache); - } - - /** - * Since you can't make a box using a sphere, this returns null - */ - @Override - public AxisAlignedBB getAABB(BlockPos pos) { - return null; - } - - @Override - public void resetCache() { - this.blockPosCache = new ArrayList<>(); - } - - @Override - public boolean isWithinArea(BlockPos pos) { - return blockPosCache.contains(pos); - } - - @Override - public boolean hasNext() { - return false; - } - - @Override - public BlockPos next() { - return null; - } - - @Override - public void remove() { - - } - - @Override - public void resetIterator() { - - } - - @Override - public void modifyAreaByBlockPositions(BlockPos pos1, BlockPos pos2) { - - } - - @Override - public int getVolumeForOffsets(BlockPos pos1, BlockPos pos2) { - return 0; - } - - @Override - public boolean isWithinRange(BlockPos offset1, BlockPos offset2, int verticalLimit, int horizontalLimit) { - return false; - } - - @Override - public int getVolume() { - return 0; - } - - @Override - public boolean isWithinRange(int verticalLimit, int horizontalLimit) { - return false; - } - - @Override - public boolean intersects(AreaDescriptor descriptor) { - return false; - } - - @Override - public AreaDescriptor offset(BlockPos offset) { - return new AreaDescriptor.HemiSphere(minimumOffset.add(offset), radius); - } - - @Override - public AreaDescriptor rotateDescriptor(PlacementSettings settings) { - return this; - } - } - - public static class Cross extends AreaDescriptor { - - private ArrayList blockPosCache; - private BlockPos cachedPosition; - - private BlockPos centerPos; - private int size; - - private boolean cache = true; - - public Cross(BlockPos center, int size) { - this.centerPos = center; - this.size = size; - this.blockPosCache = new ArrayList<>(); - } - - @Override - public List getContainedPositions(BlockPos pos) { - if (!cache || !pos.equals(cachedPosition) || blockPosCache.isEmpty()) { - resetCache(); - - blockPosCache.add(centerPos.add(pos)); - for (int i = 1; i <= size; i++) { - blockPosCache.add(centerPos.add(pos).add(i, 0, 0)); - blockPosCache.add(centerPos.add(pos).add(0, 0, i)); - blockPosCache.add(centerPos.add(pos).add(-i, 0, 0)); - blockPosCache.add(centerPos.add(pos).add(0, 0, -i)); - } - } - - cachedPosition = pos; - - return Collections.unmodifiableList(blockPosCache); - } - - @Override - public void resetCache() { - blockPosCache = new ArrayList<>(); - } - - @Override - public boolean isWithinArea(BlockPos pos) { - return blockPosCache.contains(pos); - } - - @Override - public boolean hasNext() { - return false; - } - - @Override - public BlockPos next() { - return null; - } - - @Override - public void remove() { - - } - - @Override - public void resetIterator() { - - } - - @Override - public void modifyAreaByBlockPositions(BlockPos pos1, BlockPos pos2) { - - } - - @Override - public int getVolumeForOffsets(BlockPos pos1, BlockPos pos2) { - return 0; - } - - @Override - public boolean isWithinRange(BlockPos offset1, BlockPos offset2, int verticalLimit, int horizontalLimit) { - return false; - } - - @Override - public int getVolume() { - return 0; - } - - @Override - public boolean isWithinRange(int verticalLimit, int horizontalLimit) { - return false; - } - - @Override - public boolean intersects(AreaDescriptor descriptor) { - return false; - } - - @Override - public AreaDescriptor offset(BlockPos offset) { - return new AreaDescriptor.Cross(centerPos.add(offset), size); - } - - @Override - public AreaDescriptor rotateDescriptor(PlacementSettings settings) { - return this; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/CapabilityRuneType.java b/src/main/java/WayofTime/bloodmagic/ritual/CapabilityRuneType.java deleted file mode 100644 index c8800b94..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/CapabilityRuneType.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagByte; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; - -import java.util.concurrent.Callable; - -public final class CapabilityRuneType { - public static class RuneTypeStorage implements Capability.IStorage { - @Override - public NBTBase writeNBT(Capability capability, IRitualStone.Tile instance, EnumFacing side) { - return new NBTTagByte((byte) instance.getRuneType().ordinal()); - } - - @Override - public void readNBT(Capability capability, IRitualStone.Tile instance, EnumFacing side, NBTBase nbt) { - instance.setRuneType(EnumRuneType.byMetadata(((NBTTagByte) nbt).getByte())); - } - } - - public static class RuneTypeWrapper implements IRitualStone.Tile { - private EnumRuneType type = EnumRuneType.BLANK; - - @Override - public boolean isRuneType(EnumRuneType runeType) { - return type == runeType; - } - - @Override - public EnumRuneType getRuneType() { - return type; - } - - public void setRuneType(EnumRuneType runeType) { - type = runeType; - } - } - - public static class Factory implements Callable { - @Override - public IRitualStone.Tile call() throws Exception { - return new RuneTypeWrapper(); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/EnumRitualReaderState.java b/src/main/java/WayofTime/bloodmagic/ritual/EnumRitualReaderState.java deleted file mode 100644 index 55694e32..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/EnumRitualReaderState.java +++ /dev/null @@ -1,8 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -public enum EnumRitualReaderState { - SET_AREA, - INFORMATION, - SET_WILL_TYPES, - ; -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/EnumRuneType.java b/src/main/java/WayofTime/bloodmagic/ritual/EnumRuneType.java deleted file mode 100644 index d827c436..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/EnumRuneType.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.types.ISubItem; -import WayofTime.bloodmagic.util.Constants; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.IStringSerializable; -import net.minecraft.util.text.TextFormatting; - -import javax.annotation.Nonnull; -import java.util.Locale; - -public enum EnumRuneType implements IStringSerializable, ISubItem { - - BLANK(TextFormatting.GRAY), - WATER(TextFormatting.AQUA), - FIRE(TextFormatting.RED), - EARTH(TextFormatting.GREEN), - AIR(TextFormatting.WHITE), - DUSK(TextFormatting.DARK_GRAY), - DAWN(TextFormatting.GOLD); - - public final TextFormatting colorCode; - - EnumRuneType(TextFormatting colorCode) { - this.colorCode = colorCode; - } - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } - - @Nonnull - @Override - public String getInternalName() { - return name().toLowerCase(Locale.ROOT); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - ItemStack ret = new ItemStack(RegistrarBloodMagicItems.INSCRIPTION_TOOL, count, ordinal()); - NBTTagCompound tag = new NBTTagCompound(); - tag.setInteger(Constants.NBT.USES, 10); - ret.setTagCompound(tag); - return ret; - } - - public static EnumRuneType byMetadata(int meta) { - if (meta < 0 || meta >= values().length) - meta = 0; - - return values()[meta]; - } - - -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/IMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/ritual/IMasterRitualStone.java deleted file mode 100644 index eb61019c..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/IMasterRitualStone.java +++ /dev/null @@ -1,64 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; -import java.util.UUID; - -/** - * This interface is for internal implementation only. - *

- * It is provided via the API for easy obtaining of basic data. - */ -public interface IMasterRitualStone { - UUID getOwner(); - - SoulNetwork getOwnerNetwork(); - - boolean activateRitual(ItemStack activationCrystal, EntityPlayer activator, Ritual ritual); - - void performRitual(World world, BlockPos pos); - - void stopRitual(Ritual.BreakType breakType); - - int getCooldown(); - - void setCooldown(int cooldown); - - void setActive(boolean active); - - EnumFacing getDirection(); - - boolean areTanksEmpty(); - - int getRunningTime(); - - World getWorldObj(); - - BlockPos getBlockPos(); - - String getNextBlockRange(String range); - - void provideInformationOfRitualToPlayer(EntityPlayer player); - - void provideInformationOfRangeToPlayer(EntityPlayer player, String range); - - void provideInformationOfWillConfigToPlayer(EntityPlayer player, List typeList); - - void setActiveWillConfig(EntityPlayer player, List typeList); - - boolean setBlockRangeByBounds(EntityPlayer player, String range, BlockPos offset1, BlockPos offset2); - - List getActiveWillConfig(); - - default SoulTicket ticket(int amount) { - return SoulTicket.block(getWorldObj(), getBlockPos(), amount); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/IRitualStone.java b/src/main/java/WayofTime/bloodmagic/ritual/IRitualStone.java deleted file mode 100644 index 73c0e471..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/IRitualStone.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -/** - * This interface is for internal implementation only. - *

- * It is provided via the API for easy obtaining of basic data. - */ -public interface IRitualStone { - boolean isRuneType(World world, BlockPos pos, EnumRuneType runeType); - - void setRuneType(World world, BlockPos pos, EnumRuneType runeType); - - interface Tile { - boolean isRuneType(EnumRuneType runeType); - - EnumRuneType getRuneType(); - - void setRuneType(EnumRuneType runeType); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/Ritual.java b/src/main/java/WayofTime/bloodmagic/ritual/Ritual.java deleted file mode 100644 index be545f56..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/Ritual.java +++ /dev/null @@ -1,384 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import org.apache.commons.lang3.builder.ToStringBuilder; - -import java.util.*; -import java.util.Map.Entry; -import java.util.function.Consumer; - -/** - * Abstract class for creating new rituals. Register your ritual by annotating it with {@link RitualRegister} - */ -public abstract class Ritual { - - protected final Map modableRangeMap = new HashMap<>(); - protected final Map volumeRangeMap = new HashMap<>(); - protected final Map horizontalRangeMap = new HashMap<>(); - protected final Map verticalRangeMap = new HashMap<>(); - private final String name; - private final int crystalLevel; - private final int activationCost; - private final RitualRenderer renderer; - private final String unlocalizedName; - - public Ritual(String name, int crystalLevel, int activationCost, RitualRenderer renderer, String unlocalizedName) { - this.name = name; - this.crystalLevel = crystalLevel; - this.activationCost = activationCost; - this.renderer = renderer; - this.unlocalizedName = unlocalizedName; - } - - /** - * @param name - The name of the ritual - * @param crystalLevel - Required Activation Crystal tier - * @param activationCost - Base LP cost for activating the ritual - */ - public Ritual(String name, int crystalLevel, int activationCost, String unlocalizedName) { - this(name, crystalLevel, activationCost, null, unlocalizedName); - } - - public void readFromNBT(NBTTagCompound tag) { - NBTTagList tags = tag.getTagList("areas", 10); - if (tags.hasNoTags()) { - return; - } - - for (int i = 0; i < tags.tagCount(); i++) { - NBTTagCompound newTag = tags.getCompoundTagAt(i); - String rangeKey = newTag.getString("key"); - - NBTTagCompound storedTag = newTag.getCompoundTag("area"); - AreaDescriptor desc = this.getBlockRange(rangeKey); - if (desc != null) { - desc.readFromNBT(storedTag); - } - } - } - - public void writeToNBT(NBTTagCompound tag) { - NBTTagList tags = new NBTTagList(); - - for (Entry entry : modableRangeMap.entrySet()) { - NBTTagCompound newTag = new NBTTagCompound(); - newTag.setString("key", entry.getKey()); - NBTTagCompound storedTag = new NBTTagCompound(); - - entry.getValue().writeToNBT(storedTag); - - newTag.setTag("area", storedTag); - - tags.appendTag(newTag); - } - - tag.setTag("areas", tags); - } - - /** - * Called when the player attempts to activate the ritual. - *

- * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#activateRitual(ItemStack, EntityPlayer, Ritual)} - * - * @param masterRitualStone - The {@link IMasterRitualStone} that the ritual is bound to - * @param player - The activating player - * @param owner - Owner of the crystal activating this ritual, or the current - * owner of the ritual if being reactivated. - * @return - Whether activation was successful - */ - public boolean activateRitual(IMasterRitualStone masterRitualStone, EntityPlayer player, UUID owner) { - return true; - } - - /** - * Called every {@link #getRefreshTime()} ticks while active. - *

- * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#performRitual(World, BlockPos)} - * - * @param masterRitualStone - The {@link IMasterRitualStone} that the ritual is bound to - */ - public abstract void performRitual(IMasterRitualStone masterRitualStone); - - /** - * Called when the ritual is stopped for a given {@link Ritual.BreakType}. - *

- * {@link WayofTime.bloodmagic.tile.TileMasterRitualStone#stopRitual(Ritual.BreakType)} - * - * @param masterRitualStone - The {@link IMasterRitualStone} that the ritual is bound to - * @param breakType - The type of break that caused the stoppage. - */ - public void stopRitual(IMasterRitualStone masterRitualStone, BreakType breakType) { - - } - - /** - * Used to set the amount of LP drained every {@link #getRefreshTime()} - * ticks. - * - * @return - The amount of LP drained per refresh - */ - public abstract int getRefreshCost(); - - /** - * Used to set the refresh rate of the ritual. (How often - * {@link #performRitual(IMasterRitualStone)} is called. - * - * @return - How often to perform the effect in ticks. - */ - public int getRefreshTime() { - return 20; - } - - public void addBlockRange(String range, AreaDescriptor defaultRange) { - modableRangeMap.put(range, defaultRange); - } - - /** - * Used to grab the range of a ritual for a given effect. - * - * @param range - Range that needs to be pulled. - * @return - - */ - public AreaDescriptor getBlockRange(String range) { - if (modableRangeMap.containsKey(range)) { - return modableRangeMap.get(range); - } - - return null; - } - - public List getListOfRanges() { - return new ArrayList<>(modableRangeMap.keySet()); - } - - public String getNextBlockRange(String range) { - List rangeList = getListOfRanges(); - - if (rangeList.isEmpty()) { - return ""; - } - - if (!rangeList.contains(range)) { - return rangeList.get(0); - } - - boolean hasMatch = false; - - for (String rangeCheck : rangeList) { - if (hasMatch) { - return rangeCheck; - } else if (rangeCheck.equals(range)) { - hasMatch = true; - } - } - - return rangeList.get(0); - } - - public boolean setBlockRangeByBounds(String range, IMasterRitualStone master, BlockPos offset1, BlockPos offset2) { - AreaDescriptor descriptor = this.getBlockRange(range); - World world = master.getWorldObj(); - BlockPos masterPos = master.getBlockPos(); - DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, masterPos); - if (canBlockRangeBeModified(range, descriptor, master, offset1, offset2, holder)) { - descriptor.modifyAreaByBlockPositions(offset1, offset2); - return true; - } - - return false; - } - - protected boolean canBlockRangeBeModified(String range, AreaDescriptor descriptor, IMasterRitualStone master, BlockPos offset1, BlockPos offset2, DemonWillHolder holder) { - List willConfig = master.getActiveWillConfig(); - int maxVolume = getMaxVolumeForRange(range, willConfig, holder); - int maxVertical = getMaxVerticalRadiusForRange(range, willConfig, holder); - int maxHorizontal = getMaxHorizontalRadiusForRange(range, willConfig, holder); - - return (maxVolume <= 0 || descriptor.getVolumeForOffsets(offset1, offset2) <= maxVolume) && descriptor.isWithinRange(offset1, offset2, maxVertical, maxHorizontal); - } - - protected void setMaximumVolumeAndDistanceOfRange(String range, int volume, int horizontalRadius, int verticalRadius) { - volumeRangeMap.put(range, volume); - horizontalRangeMap.put(range, horizontalRadius); - verticalRangeMap.put(range, verticalRadius); - } - - protected boolean checkDescriptorIsWithinRange(AreaDescriptor descriptor, int maxVolume, int maxHorizontal, int maxVertical) { - return descriptor.getVolume() <= maxVolume && descriptor.isWithinRange(maxVertical, maxHorizontal); - } - - public int getMaxVolumeForRange(String range, List activeTypes, DemonWillHolder holder) { - return volumeRangeMap.get(range); - } - - public int getMaxVerticalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) { - return verticalRangeMap.get(range); - } - - public int getMaxHorizontalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) { - return horizontalRangeMap.get(range); - } - - public ITextComponent getErrorForBlockRangeOnFail(EntityPlayer player, String range, IMasterRitualStone master, BlockPos offset1, BlockPos offset2) { - AreaDescriptor descriptor = this.getBlockRange(range); - if (descriptor == null) { - return new TextComponentTranslation("ritual.bloodmagic.blockRange.tooBig", "?"); - } - - List willConfig = master.getActiveWillConfig(); - DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(master.getWorldObj(), master.getBlockPos()); - - int maxVolume = this.getMaxVolumeForRange(range, willConfig, holder); - int maxVertical = this.getMaxVerticalRadiusForRange(range, willConfig, holder); - int maxHorizontal = this.getMaxHorizontalRadiusForRange(range, willConfig, holder); - - if (maxVolume > 0 && descriptor.getVolumeForOffsets(offset1, offset2) > maxVolume) { - return new TextComponentTranslation("ritual.bloodmagic.blockRange.tooBig", maxVolume); - } else { - return new TextComponentTranslation("ritual.bloodmagic.blockRange.tooFar", maxVertical, maxHorizontal); - } - } - - public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player) { - return new ITextComponent[]{new TextComponentTranslation(this.getUnlocalizedName() + ".info")}; - } - - public ITextComponent provideInformationOfRangeToPlayer(EntityPlayer player, String range) { - if (getListOfRanges().contains(range)) { - return new TextComponentTranslation(this.getUnlocalizedName() + "." + range + ".info"); - } else { - return new TextComponentTranslation("ritual.bloodmagic.blockRange.noRange"); - } - } - - public abstract void gatherComponents(Consumer components); - - protected final void addRune(Consumer components, int offset1, int y, int offset2, EnumRuneType rune) { - components.accept(new RitualComponent(new BlockPos(offset1, y, offset2), rune)); - } - - protected final void addOffsetRunes(Consumer components, int offset1, int offset2, int y, EnumRuneType rune) { - addRune(components, offset1, y, offset2, rune); - addRune(components, offset2, y, offset1, rune); - addRune(components, offset1, y, -offset2, rune); - addRune(components, -offset2, y, offset1, rune); - addRune(components, -offset1, y, offset2, rune); - addRune(components, offset2, y, -offset1, rune); - addRune(components, -offset1, y, -offset2, rune); - addRune(components, -offset2, y, -offset1, rune); - } - - protected final void addCornerRunes(Consumer components, int offset, int y, EnumRuneType rune) { - addRune(components, offset, y, offset, rune); - addRune(components, offset, y, -offset, rune); - addRune(components, -offset, y, -offset, rune); - addRune(components, -offset, y, offset, rune); - } - - protected final void addParallelRunes(Consumer components, int offset, int y, EnumRuneType rune) { - addRune(components, offset, y, 0, rune); - addRune(components, -offset, y, 0, rune); - addRune(components, 0, y, -offset, rune); - addRune(components, 0, y, offset, rune); - } - - public double getWillRespectingConfig(World world, BlockPos pos, EnumDemonWillType type, List willConfig) { - return willConfig.contains(type) ? WorldDemonWillHandler.getCurrentWill(world, pos, type) : 0; - } - - public abstract Ritual getNewCopy(); - - public String getName() { - return name; - } - - public int getCrystalLevel() { - return crystalLevel; - } - - public int getActivationCost() { - return activationCost; - } - - public RitualRenderer getRenderer() { - return renderer; - } - - public String getUnlocalizedName() { - return unlocalizedName; - } - - public Map getModableRangeMap() { - return modableRangeMap; - } - - public Map getVolumeRangeMap() { - return volumeRangeMap; - } - - public Map getHorizontalRangeMap() { - return horizontalRangeMap; - } - - public Map getVerticalRangeMap() { - return verticalRangeMap; - } - - @Override - public String toString() { - return new ToStringBuilder(this) - .append("name", name) - .append("crystalLevel", crystalLevel) - .append("activationCost", activationCost) - .append("renderer", renderer) - .append("unlocalizedName", unlocalizedName) - .append("modableRangeMap", modableRangeMap) - .append("volumeRangeMap", volumeRangeMap) - .append("horizontalRangeMap", horizontalRangeMap) - .append("verticalRangeMap", verticalRangeMap) - .append("refreshTime", getRefreshTime()) - .append("listOfRanges", getListOfRanges()) - .toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Ritual)) return false; - - Ritual ritual = (Ritual) o; - - if (crystalLevel != ritual.crystalLevel) return false; - if (activationCost != ritual.activationCost) return false; - if (name != null ? !name.equals(ritual.name) : ritual.name != null) return false; - return unlocalizedName != null ? unlocalizedName.equals(ritual.unlocalizedName) : ritual.unlocalizedName == null; - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + crystalLevel; - result = 31 * result + activationCost; - result = 31 * result + (unlocalizedName != null ? unlocalizedName.hashCode() : 0); - return result; - } - - public enum BreakType { - REDSTONE, - BREAK_MRS, - BREAK_STONE, - ACTIVATE, - DEACTIVATE, - EXPLOSION, - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualComponent.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualComponent.java deleted file mode 100644 index 92feb8ec..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualComponent.java +++ /dev/null @@ -1,60 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; - -/** - * Used to set a {@link EnumRuneType} type to a given {@link BlockPos} for usage - * in Ritual creation. - */ -public class RitualComponent { - private final BlockPos offset; - private final EnumRuneType runeType; - - public RitualComponent(BlockPos offset, EnumRuneType runeType) { - this.offset = offset; - this.runeType = runeType; - } - - public int getX(EnumFacing direction) { - switch (direction) { - case EAST: - return -this.getOffset().getZ(); - case SOUTH: - return -this.getOffset().getX(); - case WEST: - return this.getOffset().getZ(); - default: - return this.getOffset().getX(); - } - } - - public int getY() { - return this.getOffset().getY(); - } - - public int getZ(EnumFacing direction) { - switch (direction) { - case EAST: - return this.getOffset().getX(); - case SOUTH: - return -this.getOffset().getZ(); - case WEST: - return -this.getOffset().getX(); - default: - return this.getOffset().getZ(); - } - } - - public BlockPos getOffset(EnumFacing direction) { - return new BlockPos(getX(direction), offset.getY(), getZ(direction)); - } - - public BlockPos getOffset() { - return offset; - } - - public EnumRuneType getRuneType() { - return runeType; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualManager.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualManager.java deleted file mode 100644 index e6e2287b..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualManager.java +++ /dev/null @@ -1,148 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import WayofTime.bloodmagic.util.BMLog; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import net.minecraft.block.state.IBlockState; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.common.discovery.ASMDataTable; - -import java.util.*; - -public class RitualManager { - - private final Map rituals; - private final Map ritualsReverse; - private final List sortedRituals; - private final Map imperfectRituals; - private final Map imperfectRitualsReverse; - private final Configuration config; - - public RitualManager(Configuration config) { - this.rituals = Maps.newTreeMap(); - this.ritualsReverse = Maps.newHashMap(); - this.sortedRituals = Lists.newArrayList(); - this.imperfectRituals = Maps.newTreeMap(); - this.imperfectRitualsReverse = Maps.newHashMap(); - this.config = config; - } - - public void discover(ASMDataTable dataTable) { - Set data = dataTable.getAll(RitualRegister.class.getName()); - for (ASMDataTable.ASMData found : data) { - try { - Class discoveredClass = Class.forName(found.getClassName()); - if (!Ritual.class.isAssignableFrom(discoveredClass)) - throw new BadRitualException("Annotated class " + found.getClassName() + " does not inherit from " + Ritual.class.getName()); - - Class ritualClass = discoveredClass.asSubclass(Ritual.class); - RitualRegister ritualRegister = ritualClass.getAnnotation(RitualRegister.class); - String id = ritualRegister.value(); - Ritual ritual = ritualRegister.factory().newInstance().apply(ritualClass); - if (ritual == null) { - BMLog.DEFAULT.error("Error creating ritual instance for {}.", id); - continue; - } - - rituals.put(id, ritual); - ritualsReverse.put(ritual, id); - BMLog.DEBUG.info("Registered ritual {}", id); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { - e.printStackTrace(); - } - } - - Set imperfectData = dataTable.getAll(RitualRegister.Imperfect.class.getName()); - for (ASMDataTable.ASMData found : imperfectData) { - try { - Class discoveredClass = Class.forName(found.getClassName()); - if (!ImperfectRitual.class.isAssignableFrom(discoveredClass)) - throw new BadRitualException("Annotated class " + found.getClassName() + " does not inherit from " + ImperfectRitual.class.getName()); - - Class ritualClass = discoveredClass.asSubclass(ImperfectRitual.class); - RitualRegister.Imperfect ritualRegister = ritualClass.getAnnotation(RitualRegister.Imperfect.class); - String id = ritualRegister.value(); - ImperfectRitual ritual = ritualRegister.factory().newInstance().apply(ritualClass); - if (ritual == null) { - BMLog.DEFAULT.error("Error creating imperfect ritual instance for {}.", id); - continue; - } - - imperfectRituals.put(id, ritual); - imperfectRitualsReverse.put(ritual, id); - BMLog.DEBUG.info("Registered imperfect ritual {}", id); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { - e.printStackTrace(); - } - } - - syncConfig(); - - // Sort rituals - sortedRituals.addAll(rituals.values()); - // Oh dear this is probably so slow - sortedRituals.sort((o1, o2) -> { - Set components = Sets.newHashSet(); - o1.gatherComponents(components::add); - int initialSize = components.size(); - components.clear(); - o2.gatherComponents(components::add); - return Integer.compare(initialSize, components.size()); - }); - } - - public Ritual getRitual(String id) { - return rituals.get(id); - } - - public String getId(Ritual ritual) { - return ritualsReverse.get(ritual); - } - - public ImperfectRitual getImperfectRitual(IBlockState state) { - for (ImperfectRitual ritual : imperfectRituals.values()) - if (ritual.getBlockRequirement().test(state)) - return ritual; - - return null; - } - - public String getId(ImperfectRitual ritual) { - return imperfectRitualsReverse.get(ritual); - } - - public Collection getRituals() { - return rituals.values(); - } - - public Collection getImperfectRituals() { - return imperfectRituals.values(); - } - - public List getSortedRituals() { - return sortedRituals; - } - - public void syncConfig() { - config.addCustomCategoryComment("rituals", "Toggles for all rituals"); - rituals.forEach((k, v) -> config.getBoolean(k, "rituals", true, "Enable the " + k + " ritual.")); - imperfectRituals.forEach((k, v) -> config.getBoolean(k, "rituals.imperfect", true, "Enable the " + k + " imperfect ritual.")); - config.save(); - } - - public boolean enabled(String id, boolean imperfect) { - return id != null && config.getBoolean(id, "rituals" + (imperfect ? ".imperfect" : ""), true, ""); - } - - public Configuration getConfig() { - return config; - } - - public static class BadRitualException extends RuntimeException { - public BadRitualException(String message) { - super(message); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualRegister.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualRegister.java deleted file mode 100644 index b077056f..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualRegister.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.util.function.Function; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface RitualRegister { - - String value(); - - Class, Ritual>> factory() default DefaultRitualFactory.class; - - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.TYPE) - @interface Imperfect { - - String value(); - - Class, ImperfectRitual>> factory() default DefaultImperfectRitualFactory.class; - } - - class DefaultRitualFactory implements Function, Ritual> { - @Override - public Ritual apply(Class aClass) { - try { - return aClass.newInstance(); - } catch (Exception e) { - return null; - } - } - } - - class DefaultImperfectRitualFactory implements Function, ImperfectRitual> { - @Override - public ImperfectRitual apply(Class aClass) { - try { - return aClass.newInstance(); - } catch (Exception e) { - return null; - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualRenderer.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualRenderer.java deleted file mode 100644 index a5df2590..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/RitualRenderer.java +++ /dev/null @@ -1,12 +0,0 @@ -package WayofTime.bloodmagic.ritual; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.ResourceLocation; - -public abstract class RitualRenderer { - public abstract void renderAt(IMasterRitualStone masterRitualStone, double x, double y, double z); - - protected void bindTexture(ResourceLocation resourceLocation) { - Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java deleted file mode 100644 index 38a405f9..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerPlantable.java +++ /dev/null @@ -1,120 +0,0 @@ -package WayofTime.bloodmagic.ritual.harvest; - -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.block.Block; -import net.minecraft.block.BlockCrops; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.IPlantable; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.List; - -/** - * Harvest handler for standard plantable crops such as Wheat, Potatoes, and - * Netherwart.
- * Register a new crop for this handler with {@link HarvestRegistry#registerStandardCrop(Block, int)} - */ -public class HarvestHandlerPlantable implements IHarvestHandler { - - public HarvestHandlerPlantable() { - HarvestRegistry.registerStandardCrop(Blocks.CARROTS, 7); - HarvestRegistry.registerStandardCrop(Blocks.WHEAT, 7); - HarvestRegistry.registerStandardCrop(Blocks.POTATOES, 7); - HarvestRegistry.registerStandardCrop(Blocks.BEETROOTS, 3); - HarvestRegistry.registerStandardCrop(Blocks.NETHER_WART, 3); - - addThirdPartyCrop("actuallyadditions", "blockFlax", 7); - addThirdPartyCrop("actuallyadditions", "blockCanola", 7); - addThirdPartyCrop("actuallyadditions", "blockRice", 7); - - addThirdPartyCrop("extrautils2", "redorchid", 6); - addThirdPartyCrop("extrautils2", "enderlily", 7); - - addThirdPartyCrop("roots", "moonglow", 7); - addThirdPartyCrop("roots", "terra_moss", 7); - addThirdPartyCrop("roots", "pereskia", 7); - addThirdPartyCrop("roots", "wildroot", 7); - addThirdPartyCrop("roots", "aubergine", 7); - addThirdPartyCrop("roots", "spirit_herb", 7); - - addPamCrops(); - } - - @Override - public boolean harvest(World world, BlockPos pos, IBlockState state, List drops) { - NonNullList blockDrops = NonNullList.create(); - state.getBlock().getDrops(blockDrops, world, pos, state, 0); - boolean foundSeed = false; - - for (ItemStack stack : blockDrops) { - if (stack.isEmpty()) - continue; - - if (stack.getItem() instanceof IPlantable) { - stack.shrink(1); - foundSeed = true; - break; - } - } - - if (foundSeed) { - world.setBlockState(pos, state.getBlock().getDefaultState()); - world.playEvent(2001, pos, Block.getStateId(state)); - for (ItemStack stack : blockDrops) { - if (stack.isEmpty()) - continue; - - drops.add(stack); - } - - return true; - } - - return false; - } - - @Override - public boolean test(World world, BlockPos pos, IBlockState state) { - return HarvestRegistry.getStandardCrops().containsKey(state.getBlock()) && state.getBlock().getMetaFromState(state) == HarvestRegistry.getStandardCrops().get(state.getBlock()); - } - - private static void addThirdPartyCrop(String modid, String regName, int matureMeta) { - if (!Loader.isModLoaded(modid)) - return; - - Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(modid, regName)); - if (block != null && block != Blocks.AIR) - HarvestRegistry.registerStandardCrop(block, matureMeta); - } - - private static void addPamCrops() { - if (!Loader.isModLoaded("harvestcraft")) - return; - - try { - Class pamRegistry = Class.forName("com.pam.harvestcraft.blocks.CropRegistry"); - Field names = pamRegistry.getDeclaredField("cropNames"); - Method getCrop = pamRegistry.getMethod("getCrop", String.class); - for (String name : (String[]) names.get(null)) { - BlockCrops crop = (BlockCrops) getCrop.invoke(null, name); - HarvestRegistry.registerStandardCrop(crop, crop.getMaxAge()); - } - } catch (ClassNotFoundException e) { - BMLog.DEFAULT.error("HarvestCraft integration cancelled; unable to find registry class"); - } catch (NoSuchMethodException | NoSuchFieldException e) { - BMLog.DEFAULT.error("HarvestCraft integration cancelled; unable to find crop name mapper"); - } catch (IllegalAccessException | InvocationTargetException e) { - BMLog.DEFAULT.error("HarvestCraft integration cancelled; crop name lookup broke"); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java deleted file mode 100644 index 2e7bb2fd..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerStem.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.ritual.harvest; - -import net.minecraft.block.BlockPumpkin; -import net.minecraft.block.BlockStem; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; - -/** - * Harvest handler for crops with stems such as Pumpkins and Melons. Rotation based crop blocks are a good reason - * to use this (see pumpkins).
- * Register a new crop for this handler with - * {@link HarvestRegistry#registerStemCrop(IBlockState, IBlockState)} - */ -public class HarvestHandlerStem implements IHarvestHandler { - - public HarvestHandlerStem() { - for (EnumFacing facing : EnumFacing.HORIZONTALS) - HarvestRegistry.registerStemCrop(Blocks.PUMPKIN.getDefaultState().withProperty(BlockPumpkin.FACING, facing), Blocks.PUMPKIN_STEM.getDefaultState().withProperty(BlockStem.AGE, 7)); - - HarvestRegistry.registerStemCrop(Blocks.MELON_BLOCK.getDefaultState(), Blocks.MELON_STEM.getDefaultState().withProperty(BlockStem.AGE, 7)); - } - - @Override - public boolean harvest(World world, BlockPos pos, IBlockState state, List drops) { - EnumFacing cropDir = state.getBlock().getActualState(state, world, pos).getValue(BlockStem.FACING); - - if (cropDir != EnumFacing.UP) { - BlockPos cropPos = pos.offset(cropDir); - IBlockState probableCrop = world.getBlockState(cropPos); - IBlockState registeredCrop = HarvestRegistry.getStemCrops().get(state); - - if (registeredCrop == probableCrop) { - NonNullList blockDrops = NonNullList.create(); - probableCrop.getBlock().getDrops(blockDrops, world, cropPos, probableCrop, 0); - drops.addAll(blockDrops); - world.destroyBlock(cropPos, false); - return true; - } - } - - return false; - } - - @Override - public boolean test(World world, BlockPos pos, IBlockState state) { - return HarvestRegistry.getStemCrops().containsKey(state); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerTall.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerTall.java deleted file mode 100644 index 544a3d83..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestHandlerTall.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.bloodmagic.ritual.harvest; - -import net.minecraft.block.BlockCactus; -import net.minecraft.block.BlockReed; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; - -/** - * Harvest handler for crops that grow vertically such as Sugar Cane and Cactus.
- * Register a new crop for this handler with - * {@link HarvestRegistry#registerTallCrop(IBlockState)} - */ -public class HarvestHandlerTall implements IHarvestHandler { - - public HarvestHandlerTall() { - for (int i = 0; i < 15; i++) { - HarvestRegistry.registerTallCrop(Blocks.REEDS.getDefaultState().withProperty(BlockReed.AGE, i)); - HarvestRegistry.registerTallCrop(Blocks.CACTUS.getDefaultState().withProperty(BlockCactus.AGE, i)); - } - } - - @Override - public boolean harvest(World world, BlockPos pos, IBlockState state, List drops) { - IBlockState up = world.getBlockState(pos.up()); - if (up.getBlock() == state.getBlock()) { - NonNullList blockDrops = NonNullList.create(); - up.getBlock().getDrops(blockDrops, world, pos.up(), up, 0); - drops.addAll(blockDrops); - world.destroyBlock(pos.up(), false); - return true; - } - - return false; - } - - @Override - public boolean test(World world, BlockPos pos, IBlockState state) { - return HarvestRegistry.getTallCrops().contains(state); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestRegistry.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestRegistry.java deleted file mode 100644 index c5deba16..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/HarvestRegistry.java +++ /dev/null @@ -1,105 +0,0 @@ -package WayofTime.bloodmagic.ritual.harvest; - -import com.google.common.collect.*; -import net.minecraft.block.Block; -import net.minecraft.block.BlockStem; -import net.minecraft.block.state.IBlockState; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class HarvestRegistry { - - private static final List HARVEST_HANDLERS = Lists.newArrayList(); - private static final Map STANDARD_CROPS = Maps.newHashMap(); - private static final Set TALL_CROPS = Sets.newHashSet(); - private static final Map STEM_CROPS = Maps.newHashMap(); - private static final Map AMPLIFIERS = Maps.newHashMap(); - - /** - * Registers a handler for the Harvest Ritual to call. - * - * @param handler - The custom handler to register - */ - public static void registerHandler(IHarvestHandler handler) { - if (!HARVEST_HANDLERS.contains(handler)) - HARVEST_HANDLERS.add(handler); - } - - /** - * Registers a standard crop (IE: Wheat, Carrots, Potatoes, Netherwart, etc) - * for the - * {@link WayofTime.bloodmagic.ritual.harvest.HarvestHandlerPlantable} - * handler to handle. - * - * @param crop - The crop block to handle. - * @param matureMeta - The meta value at which the crop is considered mature and ready - * to be harvested. - */ - public static void registerStandardCrop(Block crop, int matureMeta) { - if (!STANDARD_CROPS.containsKey(crop)) - STANDARD_CROPS.put(crop, matureMeta); - } - - /** - * Registers a tall crop (Sugar Cane and Cactus) for the - * {@link WayofTime.bloodmagic.ritual.harvest.HarvestHandlerTall} handler to - * handle. - * - * @param crop - The crop block to handle. - */ - public static void registerTallCrop(IBlockState crop) { - if (!TALL_CROPS.contains(crop)) - TALL_CROPS.add(crop); - } - - /** - * Registers a stem crop (Melon and Pumpkin) for the - * {@link WayofTime.bloodmagic.ritual.harvest.HarvestHandlerStem} handler to - * handle. - *

- * Use {@link net.minecraftforge.oredict.OreDictionary#WILDCARD_VALUE} to - * accept any meta for the crop block. - *

- * The Stem must be instanceof {@link BlockStem} - * - * @param crop - The crop block to handle. - * @param stem - The stem of the crop - */ - public static void registerStemCrop(IBlockState crop, IBlockState stem) { - if (!STEM_CROPS.containsKey(crop) && stem.getBlock() instanceof BlockStem) - STEM_CROPS.put(stem, crop); - } - - /** - * Registers a range amplifier for the Harvest Ritual. - * - * @param block - The block for the amplifier. - * @param range - The range the amplifier provides. - */ - public static void registerRangeAmplifier(IBlockState block, int range) { - if (!AMPLIFIERS.containsKey(block)) - AMPLIFIERS.put(block, range); - } - - public static List getHarvestHandlers() { - return ImmutableList.copyOf(HARVEST_HANDLERS); - } - - public static Map getStandardCrops() { - return ImmutableMap.copyOf(STANDARD_CROPS); - } - - public static Set getTallCrops() { - return ImmutableSet.copyOf(TALL_CROPS); - } - - public static Map getStemCrops() { - return ImmutableMap.copyOf(STEM_CROPS); - } - - public static Map getAmplifiers() { - return ImmutableMap.copyOf(AMPLIFIERS); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/harvest/IHarvestHandler.java b/src/main/java/WayofTime/bloodmagic/ritual/harvest/IHarvestHandler.java deleted file mode 100644 index b8b49316..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/harvest/IHarvestHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.bloodmagic.ritual.harvest; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; - -/** - * Used to define a HarvestHandler for the Harvest Ritual. - */ -public interface IHarvestHandler { - - /** - * Called whenever the Harvest Ritual attempts to harvest a block.
- * Use this to break the block and plant a new one.
- * Add the items to be dropped to the drops list.
- * - * @param world - The world - * @param pos - The position of the {@link IBlockState} being checked - * @param state - The {@link IBlockState} being checked - * @param drops - The items to be dropped - * @return If the block was successfully harvested. - */ - boolean harvest(World world, BlockPos pos, IBlockState state, List drops); - - /** - * Tests to see if the block is valid for harvest. - * - * @param world The world - * @param pos The position in the world of the {@link IBlockState} being checked - * @param state The {@link IBlockState} being checked - * @return if this block is valid for harvest. - */ - boolean test(World world, BlockPos pos, IBlockState state); -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/IImperfectRitualStone.java b/src/main/java/WayofTime/bloodmagic/ritual/imperfect/IImperfectRitualStone.java deleted file mode 100644 index 205bdf87..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/IImperfectRitualStone.java +++ /dev/null @@ -1,19 +0,0 @@ -package WayofTime.bloodmagic.ritual.imperfect; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -/** - * This interface is for internal implementation only. - *

- * It is provided via the API for easy obtaining of basic data. - */ -public interface IImperfectRitualStone { - - boolean performRitual(World world, BlockPos pos, ImperfectRitual imperfectRitual, EntityPlayer player); - - World getRitualWorld(); - - BlockPos getRitualPos(); -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitual.java b/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitual.java deleted file mode 100644 index 6aa24daa..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/ImperfectRitual.java +++ /dev/null @@ -1,91 +0,0 @@ -package WayofTime.bloodmagic.ritual.imperfect; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -import java.util.function.Predicate; - -/** - * Abstract class for creating new imperfect rituals. To register, annotate your class with {@link WayofTime.bloodmagic.ritual.RitualRegister.Imperfect} - */ -public abstract class ImperfectRitual { - - private final String name; - private final Predicate blockRequirement; - private final int activationCost; - private final boolean lightShow; - private final String unlocalizedName; - - public ImperfectRitual(String name, Predicate blockRequirement, int activationCost, boolean lightShow, String unlocalizedName) { - this.name = name; - this.blockRequirement = blockRequirement; - this.activationCost = activationCost; - this.lightShow = lightShow; - this.unlocalizedName = unlocalizedName; - } - - /** - * @param name The name of the ritual - * @param blockRequirement The block required above the ImperfectRitualStone - * @param activationCost Base LP cost for activating the ritual - */ - public ImperfectRitual(String name, Predicate blockRequirement, int activationCost, String unlocalizedName) { - this(name, blockRequirement, activationCost, false, unlocalizedName); - } - - /** - * Called when the player activates the ritual - * {@link WayofTime.bloodmagic.tile.TileImperfectRitualStone#performRitual(World, net.minecraft.util.math.BlockPos, ImperfectRitual, EntityPlayer)} - * - * @param imperfectRitualStone - The {@link IImperfectRitualStone} that the ritual is bound to - * @param player - The player activating the ritual - * @return - Whether activation was successful - */ - public abstract boolean onActivate(IImperfectRitualStone imperfectRitualStone, EntityPlayer player); - - public String getName() { - return name; - } - - public Predicate getBlockRequirement() { - return blockRequirement; - } - - public int getActivationCost() { - return activationCost; - } - - public boolean isLightShow() { - return lightShow; - } - - public String getUnlocalizedName() { - return unlocalizedName; - } - - @Override - public String toString() { - return getName() + "@" + getActivationCost(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ImperfectRitual)) return false; - - ImperfectRitual that = (ImperfectRitual) o; - - if (activationCost != that.activationCost) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - return unlocalizedName != null ? unlocalizedName.equals(that.unlocalizedName) : that.unlocalizedName == null; - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + activationCost; - result = 31 * result + (unlocalizedName != null ? unlocalizedName.hashCode() : 0); - return result; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/package-info.java b/src/main/java/WayofTime/bloodmagic/ritual/imperfect/package-info.java deleted file mode 100644 index 9b848792..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/imperfect/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -package WayofTime.bloodmagic.ritual.imperfect; - -import mcp.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/ritual/portal/LocationsHandler.java b/src/main/java/WayofTime/bloodmagic/ritual/portal/LocationsHandler.java deleted file mode 100644 index bdcd9fdd..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/portal/LocationsHandler.java +++ /dev/null @@ -1,108 +0,0 @@ -package WayofTime.bloodmagic.ritual.portal; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.teleport.PortalLocation; -import WayofTime.bloodmagic.util.BMLog; -import net.minecraftforge.common.DimensionManager; - -import java.io.*; -import java.util.ArrayList; -import java.util.HashMap; - -public class LocationsHandler implements Serializable { - - public static final long serialVersionUID = 10102001; - private static final String fileName = String.valueOf(DimensionManager.getCurrentSaveRootDirectory()) + "/" + BloodMagic.MODID + "/PortalLocations.dat"; - private static HashMap> portals; - private static LocationsHandler locationsHandler; - - private LocationsHandler() { - portals = new HashMap<>(); - } - - public boolean addLocation(String name, PortalLocation location) { - ArrayList portalLocations = portals.get(name); - if (portalLocations == null) { - portals.put(name, new ArrayList<>()); - updateFile(fileName, portals); - } - if (!portals.get(name).isEmpty() && portals.get(name).size() >= 2) { - BMLog.DEBUG.info("Location {} already exists.", name); - updateFile(fileName, portals); - return false; - } else { - portals.get(name).add(location); - BMLog.DEBUG.info("Adding {}", name); - updateFile(fileName, portals); - return true; - } - } - - public boolean removeLocation(String name, PortalLocation location) { - if (portals.get(name) != null && !portals.get(name).isEmpty()) { - if (portals.get(name).contains(location)) { - portals.get(name).remove(location); - BMLog.DEBUG.info("Removing {}", name); - updateFile(fileName, portals); - return true; - } else { - BMLog.DEBUG.info("No location matching {}", name); - updateFile(fileName, portals); - return false; - } - } - return false; - } - - public ArrayList getLinkedLocations(String name) { - return portals.get(name); - } - - public static LocationsHandler getLocationsHandler() { - if (locationsHandler == null || loadFile() == null) { - locationsHandler = new LocationsHandler(); - return locationsHandler; - } else { - portals = loadFile(); - return locationsHandler; - } - } - - private static HashMap> loadFile() { - HashMap> map; - File file = new File(fileName); - try { - if (!file.exists()) { - if (file.getParentFile().mkdir()) { - if (file.createNewFile()) { - BMLog.DEBUG.info("Creating {} in {}", fileName, DimensionManager.getCurrentSaveRootDirectory()); - } - } else if (file.createNewFile()) { - BMLog.DEBUG.info("Creating {} in {}", fileName, DimensionManager.getCurrentSaveRootDirectory()); - } - } - FileInputStream fileIn = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(fileIn); - map = (HashMap>) in.readObject(); - in.close(); - fileIn.close(); - return map; - } catch (IOException e) { - return null; - } catch (ClassNotFoundException e) { - BMLog.DEFAULT.error("{} was not found in {}", file, DimensionManager.getCurrentSaveRootDirectory()); - return null; - } - } - - private static void updateFile(String file, HashMap> object) { - try { - FileOutputStream fos = new FileOutputStream(file); - ObjectOutputStream oos = new ObjectOutputStream(fos); - oos.writeObject(object); - oos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/ritual/portal/Teleports.java b/src/main/java/WayofTime/bloodmagic/ritual/portal/Teleports.java deleted file mode 100644 index 5f253ca1..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/portal/Teleports.java +++ /dev/null @@ -1,245 +0,0 @@ -package WayofTime.bloodmagic.ritual.portal; - -import WayofTime.bloodmagic.core.data.SoulNetwork; - -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.event.TeleposeEvent; -import WayofTime.bloodmagic.teleport.Teleport; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import net.minecraft.entity.*; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.SoundEvents; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.play.server.SPacketEntityEffect; -import net.minecraft.network.play.server.SPacketPlayerAbilities; -import net.minecraft.network.play.server.SPacketRespawn; -import net.minecraft.network.play.server.SPacketUpdateHealth; -import net.minecraft.potion.PotionEffect; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.management.PlayerList; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraftforge.common.ForgeChunkManager; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.common.FMLCommonHandler; - -import java.util.UUID; - -public class Teleports { - - public static class TeleportSameDim extends Teleport { - private final boolean teleposer; - - public TeleportSameDim(int x, int y, int z, Entity entity, UUID networkOwner, boolean teleposer) { - this(new BlockPos(x, y, z), entity, networkOwner, teleposer); - } - - public TeleportSameDim(BlockPos blockPos, Entity entity, UUID networkOwner, boolean teleposer) { - super(blockPos, entity, networkOwner); - this.teleposer = teleposer; - } - - @Override - public void teleport() { - if (entity != null) { - BlockPos targetTeleposer = new BlockPos(x,y,z); - if (entity.timeUntilPortal <= 0) { - if (entity instanceof EntityPlayer) { - - SoulNetwork network = NetworkHelper.getSoulNetwork(networkOwner); - if (network.getCurrentEssence() < getTeleportCost()) - return; - - if (teleposer && MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), targetTeleposer))) - return; - - EntityPlayerMP player = (EntityPlayerMP) entity; - - network.syphon(ticket(entity.world, player, getTeleportCost())); - - player.setPositionAndUpdate(x + 0.5, y + 0.5, z + 0.5); - player.getEntityWorld().updateEntityWithOptionalForce(player, false); - player.connection.sendPacket(new SPacketUpdateHealth(player.getHealth(), player.getFoodStats().getFoodLevel(), player.getFoodStats().getSaturationLevel())); - player.timeUntilPortal = 150; - - player.getEntityWorld().playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); - if (teleposer) - MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), targetTeleposer)); - } else { - SoulNetwork network = NetworkHelper.getSoulNetwork(networkOwner); - if (network.getCurrentEssence() < (getTeleportCost() / 10)) - return; - - if (teleposer && MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), targetTeleposer))) - return; - - WorldServer world = (WorldServer) entity.getEntityWorld(); - - network.syphon(ticket(world, entity, getTeleportCost() / 10)); - - entity.setPosition(x + 0.5, y + 0.5, z + 0.5); - entity.timeUntilPortal = 150; - world.resetUpdateEntityTick(); - - entity.getEntityWorld().playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); - if (teleposer) - MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), targetTeleposer)); - } - } - } - } - - @Override - public int getTeleportCost() { - return 1000; - } - } - - public static class TeleportToDim extends Teleport { - private World oldWorld; - private int newWorldID; - private boolean teleposer; - - public TeleportToDim(int x, int y, int z, Entity entity, UUID networkOwner, World oldWorld, int newWorld, boolean teleposer) { - this(new BlockPos(x, y, z), entity, networkOwner, oldWorld, newWorld, teleposer); - } - - public TeleportToDim(BlockPos blockPos, Entity entity, UUID networkOwner, World oldWorld, int newWorldID, boolean teleposer) { - super(blockPos, entity, networkOwner); - this.oldWorld = oldWorld; - this.newWorldID = newWorldID; - this.teleposer = teleposer; - } - - @Override - public void teleport() { - if (entity != null) { - if (entity.timeUntilPortal <= 0) { - MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); - WorldServer oldWorldServer = server.getWorld(entity.dimension); - WorldServer newWorldServer = server.getWorld(newWorldID); - BlockPos targetTeleposer = new BlockPos(x,y,z); - ChunkPos teleposerChunk = new ChunkPos(targetTeleposer); - ForgeChunkManager.Ticket chunkTicket = ForgeChunkManager.requestTicket("bloodmagic", newWorldServer, ForgeChunkManager.Type.NORMAL); - ForgeChunkManager.forceChunk(chunkTicket ,teleposerChunk); - - if (entity instanceof EntityPlayer) { - EntityPlayerMP player = (EntityPlayerMP) entity; - - - if (!player.getEntityWorld().isRemote) { - SoulNetwork network = NetworkHelper.getSoulNetwork(networkOwner); - if (network.getCurrentEssence() < getTeleportCost()) - return; - - if (teleposer && MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.getEntityWorld(), entity.getPosition(), newWorldServer, targetTeleposer))) - return; - - network.syphon(ticket(oldWorld, player, getTeleportCost())); - - - - /* begin brandon3055 "BrandonsCore" intedimensional teleportation code */ - - PlayerList playerList = server.getPlayerList(); - - player.dimension = newWorldID; - player.connection.sendPacket(new SPacketRespawn(player.dimension, newWorldServer.getDifficulty(), newWorldServer.getWorldInfo().getTerrainType(), player.interactionManager.getGameType())); - playerList.updatePermissionLevel(player); - oldWorldServer.removeEntityDangerously(player); - player.isDead = false; - - //region Transfer to world - - player.setLocationAndAngles(x + 0.5, y + 0.5, z + 0.5, player.rotationYaw, player.rotationPitch); - player.connection.setPlayerLocation(x + 0.5, y + 0.5, z + 0.5, player.rotationYaw, player.rotationPitch); - newWorldServer.spawnEntity(player); - newWorldServer.updateEntityWithOptionalForce(player, false); - player.setWorld(newWorldServer); - - //endregion - - playerList.preparePlayer(player, oldWorldServer); - player.connection.setPlayerLocation(x + 0.5, y + 0.5, z + 0.5, player.rotationYaw, player.rotationPitch); - player.interactionManager.setWorld(newWorldServer); - player.connection.sendPacket(new SPacketPlayerAbilities(player.capabilities)); - - playerList.updateTimeAndWeatherForPlayer(player, newWorldServer); - playerList.syncPlayerInventory(player); - - for (PotionEffect potioneffect : player.getActivePotionEffects()) { - player.connection.sendPacket(new SPacketEntityEffect(player.getEntityId(), potioneffect)); - } - FMLCommonHandler.instance().firePlayerChangedDimensionEvent(player, entity.dimension, newWorldID); - player.setLocationAndAngles(x + 0.5, y + 0.5, z + 0.5, player.rotationYaw, player.rotationPitch); - - /* end brandon3055 teleportation code */ - - if (teleposer) - MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), newWorldServer, targetTeleposer)); - } - - } else if (!entity.getEntityWorld().isRemote) { - SoulNetwork network = NetworkHelper.getSoulNetwork(networkOwner); - if (network.getCurrentEssence() < (getTeleportCost() / 10)) - return; - - if (teleposer && MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent(entity, entity.getEntityWorld(), entity.getPosition(), newWorldServer, targetTeleposer))) - return; - - network.syphon(ticket(oldWorld, entity, getTeleportCost() / 10)); - - NBTTagCompound tag = new NBTTagCompound(); - - entity.writeToNBTOptional(tag); - entity.setDead(); - oldWorld.playSound(entity.posX, entity.posY, entity.posZ, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); - - Entity teleportedEntity = EntityList.createEntityFromNBT(tag, newWorldServer); - if (teleportedEntity != null) { - teleportedEntity.setLocationAndAngles(x + 0.5, y + 0.5, z + 0.5, entity.rotationYaw, entity.rotationPitch); - teleportedEntity.forceSpawn = true; - newWorldServer.spawnEntity(teleportedEntity); - teleportedEntity.setWorld(newWorldServer); - teleportedEntity.timeUntilPortal = teleportedEntity instanceof EntityPlayer ? 150 : 20; - } - - oldWorldServer.resetUpdateEntityTick(); - newWorldServer.resetUpdateEntityTick(); - if (teleposer) - MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), newWorldServer, targetTeleposer)); - } - entity.timeUntilPortal = entity instanceof EntityLiving ? 150 : 20; - newWorldServer.playSound(x, y, z, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); - ForgeChunkManager.releaseTicket(chunkTicket); - } - } - } - - @Override - public int getTeleportCost() { - return 10000; - } - - public World getOldWorld() { - return oldWorld; - } - - public int getNewWorldID() { - return newWorldID; - } - - public boolean isTeleposer() { - return teleposer; - } - } - - public static SoulTicket ticket(World world, Entity entity, int amount) { - return new SoulTicket(new TextComponentString("teleport|" + world.provider.getDimension() + "|" + entity.getName() + "|" + entity.getPosition().toLong()), amount); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualAltarBuilder.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualAltarBuilder.java deleted file mode 100644 index 1cf2f0ce..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualAltarBuilder.java +++ /dev/null @@ -1,261 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.BlockStack; -import WayofTime.bloodmagic.altar.AltarComponent; -import WayofTime.bloodmagic.altar.ComponentType; -import WayofTime.bloodmagic.altar.AltarTier; -import WayofTime.bloodmagic.block.BlockBloodRune; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.Block; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.function.Consumer; - -@RitualRegister("altar_builder") -public class RitualAltarBuilder extends Ritual { - private Iterator altarComponentsIterator = new ArrayList<>(AltarTier.SIX.getAltarComponents()).iterator(); - private boolean cycleDone = false; - - private AltarComponent currentComponent; - private BlockPos currentPos; - - public RitualAltarBuilder() { - super("ritualAltarBuilder", 0, 450, "ritual." + BloodMagic.MODID + ".altarBuilderRitual"); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - TileEntity tileEntity = world.getTileEntity(masterRitualStone.getBlockPos().up()); - BlockPos altarPos = masterRitualStone.getBlockPos().up(2); - - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - if (cycleDone) { - altarComponentsIterator = new ArrayList<>(AltarTier.SIX.getAltarComponents()).iterator(); - } - - if (world.getBlockState(altarPos).getBlock().isReplaceable(world, altarPos) && hasItem(tileEntity, Item.getItemFromBlock(RegistrarBloodMagicBlocks.ALTAR), 0, true)) { - world.setBlockState(altarPos, RegistrarBloodMagicBlocks.ALTAR.getDefaultState()); - lightning(world, altarPos); - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - } - - if (altarComponentsIterator.hasNext()) { - currentComponent = altarComponentsIterator.next(); - currentPos = altarPos.add(currentComponent.getOffset()); - - if (world.getBlockState(currentPos).getBlock().isReplaceable(world, currentPos)) { - switch (currentComponent.getComponent()) { - case NOTAIR: { - BlockStack blockStack = getMundaneBlock(tileEntity); - if (blockStack != null) { - world.setBlockState(currentPos, blockStack.getState(), 3); - lightning(world, currentPos); - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - } - break; - } - case BLOODRUNE: { - BlockStack blockStack = getBloodRune(tileEntity); - if (blockStack != null) { - world.setBlockState(currentPos, blockStack.getState(), 3); - lightning(world, currentPos); - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - } - break; - } - default: { - BlockStack blockStack = new BlockStack(Utils.getBlockForComponent(currentComponent.getComponent()), 0); - if (hasItem(tileEntity, Item.getItemFromBlock(blockStack.getBlock()), blockStack.getMeta(), true)) { - world.setBlockState(currentPos, blockStack.getState(), 3); - lightning(world, currentPos); - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - } - break; - } - } - } - } else { - cycleDone = true; - } - } - - @Override - public int getRefreshCost() { - return 75; - } - - @Override - public int getRefreshTime() { - return 12; - } - - @Override - public void gatherComponents(Consumer components) { - for (int i = -12; i <= -8; i++) { - addRune(components, i, -6, 13, EnumRuneType.AIR); - addRune(components, i, -6, -13, EnumRuneType.FIRE); - - addRune(components, 13, -6, i, EnumRuneType.EARTH); - addRune(components, -13, -6, i, EnumRuneType.WATER); - - addRune(components, i, 5, 13, EnumRuneType.AIR); - addRune(components, i, 5, -13, EnumRuneType.FIRE); - - addRune(components, 13, 5, i, EnumRuneType.EARTH); - addRune(components, -13, 5, i, EnumRuneType.WATER); - } - - for (int i = 8; i <= 12; i++) { - addRune(components, i, -6, 13, EnumRuneType.AIR); - addRune(components, i, -6, -13, EnumRuneType.FIRE); - - addRune(components, 13, -6, i, EnumRuneType.EARTH); - addRune(components, -13, -6, i, EnumRuneType.WATER); - - addRune(components, i, 5, 13, EnumRuneType.AIR); - addRune(components, i, 5, -13, EnumRuneType.FIRE); - - addRune(components, 13, 5, i, EnumRuneType.EARTH); - addRune(components, -13, 5, i, EnumRuneType.WATER); - } - - for (int i = -6; i <= -4; i++) { - addCornerRunes(components, 13, i, EnumRuneType.DUSK); - } - - for (int i = 3; i <= 5; i++) { - addCornerRunes(components, 13, i, EnumRuneType.DUSK); - } - } - - @Override - public Ritual getNewCopy() { - return new RitualAltarBuilder(); - } - - public void lightning(World world, BlockPos blockPos) { - world.addWeatherEffect(new EntityLightningBolt(world, blockPos.getX(), blockPos.getY(), blockPos.getZ(), true)); - } - - /* - * - * These methods are utilities for this ritual. They support both the old - * forge inventory system, and the new one. - */ - public boolean hasItem(TileEntity tileEntity, Item item, int damage, boolean consumeItem) { - if (tileEntity != null) { - if (tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN)) { - IItemHandler itemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN); - - if (itemHandler.getSlots() <= 0) { - return false; - } - - for (int i = 0; i < itemHandler.getSlots(); i++) { - if (!itemHandler.getStackInSlot(i).isEmpty() && itemHandler.getStackInSlot(i).getItem() == item && itemHandler.getStackInSlot(i).getItemDamage() == damage && !itemHandler.extractItem(i, 1, !consumeItem).isEmpty()) { - return true; - } - } - } else if (tileEntity instanceof IInventory) { - IInventory inv = (IInventory) tileEntity; - for (int i = 0; i < inv.getSizeInventory(); i++) { - if (!inv.getStackInSlot(0).isEmpty() && inv.getStackInSlot(i).getItem() == item && inv.getStackInSlot(i).getItemDamage() == damage) { - if (consumeItem) { - inv.decrStackSize(i, 1); - } - return true; - } - } - } - } - return false; - } - - public BlockStack getBloodRune(TileEntity tileEntity) { - if (tileEntity != null) { - if (tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN)) { - IItemHandler itemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN); - - if (itemHandler.getSlots() <= 0) { - return null; - } - - for (int i = 0; i < itemHandler.getSlots(); i++) { - if (!itemHandler.getStackInSlot(i).isEmpty() && itemHandler.getStackInSlot(i).getItem() instanceof ItemBlock && Block.getBlockFromItem(itemHandler.getStackInSlot(i).getItem()) instanceof BlockBloodRune && itemHandler.extractItem(i, 1, true) != null) { - BlockStack blockStack = new BlockStack(Utils.getBlockForComponent(ComponentType.BLOODRUNE), itemHandler.getStackInSlot(i).getItemDamage()); - itemHandler.extractItem(i, 1, false); - return blockStack; - } - } - } else if (tileEntity instanceof IInventory) { - IInventory inv = (IInventory) tileEntity; - for (int i = 0; i < inv.getSizeInventory(); i++) { - if (!inv.getStackInSlot(i).isEmpty() && inv.getStackInSlot(i).getItem() instanceof ItemBlock && Block.getBlockFromItem(inv.getStackInSlot(i).getItem()) instanceof BlockBloodRune) { - BlockStack blockStack = new BlockStack(Utils.getBlockForComponent(ComponentType.BLOODRUNE), inv.getStackInSlot(i).getItemDamage()); - inv.decrStackSize(i, 1); - return blockStack; - } - } - } - } - return null; - } - - public BlockStack getMundaneBlock(TileEntity tileEntity) { - if (tileEntity != null) { - if (tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN)) { - IItemHandler itemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN); - - if (itemHandler.getSlots() <= 0) { - return null; - } - - for (int i = 0; i < itemHandler.getSlots(); i++) { - if (!itemHandler.getStackInSlot(i).isEmpty() && itemHandler.getStackInSlot(i).getItem() instanceof ItemBlock && !(Block.getBlockFromItem(itemHandler.getStackInSlot(i).getItem()) instanceof BlockBloodRune) && !itemHandler.extractItem(i, 1, true).isEmpty()) { - Block block = Block.getBlockFromItem(itemHandler.getStackInSlot(i).getItem()); - if (block != Blocks.AIR && block != Blocks.GLOWSTONE && block != RegistrarBloodMagicBlocks.DECORATIVE_BRICK) { - BlockStack blockStack = new BlockStack(block, itemHandler.getStackInSlot(i).getItemDamage()); - itemHandler.extractItem(i, 1, false); - return blockStack; - } - } - } - } else if (tileEntity instanceof IInventory) { - IInventory inv = (IInventory) tileEntity; - for (int i = 0; i < inv.getSizeInventory(); i++) { - if (!inv.getStackInSlot(i).isEmpty() && inv.getStackInSlot(i).getItem() instanceof ItemBlock && !(Block.getBlockFromItem(inv.getStackInSlot(i).getItem()) instanceof BlockBloodRune)) { - Block block = Block.getBlockFromItem(inv.getStackInSlot(i).getItem()); - if (block != Blocks.GLOWSTONE && block != RegistrarBloodMagicBlocks.DECORATIVE_BRICK) { - BlockStack blockStack = new BlockStack(block, inv.getStackInSlot(i).getItemDamage()); - inv.decrStackSize(i, 1); - return blockStack; - } - } - } - } - } - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualAnimalGrowth.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualAnimalGrowth.java deleted file mode 100644 index 401398cc..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualAnimalGrowth.java +++ /dev/null @@ -1,220 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("animal_growth") -public class RitualAnimalGrowth extends Ritual { - public static final double rawWillDrain = 0.05; - public static final double vengefulWillDrain = 0.02; - public static final double steadfastWillDrain = 0.1; - public static final double destructiveWillDrain = 1; - - public static final String GROWTH_RANGE = "growing"; - public static final String CHEST_RANGE = "chest"; - public static int defaultRefreshTime = 20; - public int refreshTime = 20; - - public RitualAnimalGrowth() { - super("ritualAnimalGrowth", 0, 10000, "ritual." + BloodMagic.MODID + ".animalGrowthRitual"); - addBlockRange(GROWTH_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-2, 1, -2), 5, 2, 5)); - addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - - setMaximumVolumeAndDistanceOfRange(GROWTH_RANGE, 0, 7, 7); - setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - int maxGrowths = currentEssence / getRefreshCost(); - int totalGrowths = 0; - BlockPos pos = masterRitualStone.getBlockPos(); - - AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); - TileEntity chest = world.getTileEntity(chestRange.getContainedPositions(pos).get(0)); - IItemHandler itemHandler = null; - if (chest != null) { - itemHandler = Utils.getInventory(chest, null); - } - - List willConfig = masterRitualStone.getActiveWillConfig(); - - double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); - double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); - double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); - double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); - double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); - - refreshTime = getRefreshTimeForRawWill(rawWill); - - boolean consumeRawWill = rawWill >= rawWillDrain && refreshTime != defaultRefreshTime; - - double vengefulDrain = 0; - double steadfastDrain = 0; - double destructiveDrain = 0; - - boolean decreaseBreedTimer = vengefulWill >= vengefulWillDrain; - boolean breedAnimals = steadfastWill >= steadfastWillDrain && itemHandler != null; - boolean kamikaze = destructiveWill >= destructiveWillDrain; - - AreaDescriptor growingRange = getBlockRange(GROWTH_RANGE); - AxisAlignedBB axis = growingRange.getAABB(masterRitualStone.getBlockPos()); - List animalList = world.getEntitiesWithinAABB(EntityAnimal.class, axis); - - boolean performedEffect = false; - - for (EntityAnimal animal : animalList) { - if (animal.getGrowingAge() < 0) { - animal.addGrowth(5); - totalGrowths++; - performedEffect = true; - } else if (animal.getGrowingAge() > 0) { - if (decreaseBreedTimer) { - if (vengefulWill >= vengefulWillDrain) { - animal.setGrowingAge(Math.max(0, animal.getGrowingAge() - getBreedingDecreaseForWill(vengefulWill))); - vengefulDrain += vengefulWillDrain; - vengefulWill -= vengefulWillDrain; - performedEffect = true; - } else { - decreaseBreedTimer = false; - } - } - } else { - if (kamikaze) { - if (destructiveWill >= destructiveWillDrain) { - if (!animal.isPotionActive(RegistrarBloodMagic.SACRIFICIAL_LAMB)) { - animal.addPotionEffect(new PotionEffect(RegistrarBloodMagic.SACRIFICIAL_LAMB, 1200)); - destructiveDrain += destructiveWillDrain; - destructiveWill -= destructiveWillDrain; - performedEffect = true; - } - } else { - kamikaze = false; - } - } - - if (breedAnimals) { - if (steadfastWill >= steadfastWillDrain) { - if (!animal.isInLove()) { - for (int slot = 0; slot < itemHandler.getSlots(); slot++) { - ItemStack foodStack = itemHandler.getStackInSlot(slot); - if (foodStack != null && animal.isBreedingItem(foodStack) && itemHandler.extractItem(slot, 1, true) != null) { - animal.setInLove(null); - itemHandler.extractItem(slot, 1, false); - steadfastDrain += steadfastWillDrain; - steadfastWill -= steadfastWillDrain; - performedEffect = true; - break; - } - } - } - } else { - breedAnimals = false; - } - } - } - - if (totalGrowths >= maxGrowths) { - break; - } - } - - if (performedEffect && consumeRawWill) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawWillDrain, true); - } - - if (vengefulDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulDrain, true); - } - - if (steadfastDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastDrain, true); - } - - if (destructiveDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DESTRUCTIVE, destructiveDrain, true); - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(totalGrowths * getRefreshCost())); - } - - @Override - public int getRefreshCost() { - return 2; - } - - @Override - public void gatherComponents(Consumer components) { - - addParallelRunes(components, 2, 0, EnumRuneType.DUSK); - addParallelRunes(components, 1, 0, EnumRuneType.WATER); - components.accept(new RitualComponent(new BlockPos(1, 0, 2), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(1, 0, -2), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(-1, 0, 2), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(-1, 0, -2), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(2, 0, 1), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(2, 0, -1), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(-2, 0, 1), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(-2, 0, -1), EnumRuneType.AIR)); - } - - @Override - public Ritual getNewCopy() { - return new RitualAnimalGrowth(); - } - - @Override - public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player) { - return new ITextComponent[]{ - new TextComponentTranslation(this.getUnlocalizedName() + ".info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".default.info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".corrosive.info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".steadfast.info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".destructive.info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".vengeful.info") - }; - } - - public int getBreedingDecreaseForWill(double vengefulWill) { - return (int) (10 + vengefulWill / 5); - } - - public int getRefreshTimeForRawWill(double rawWill) { - if (rawWill >= rawWillDrain) { - return (int) Math.max(defaultRefreshTime - rawWill / 10, 1); - } - - return defaultRefreshTime; - } - - @Override - public int getRefreshTime() { - return refreshTime; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualArmourEvolve.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualArmourEvolve.java deleted file mode 100644 index 175069ea..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualArmourEvolve.java +++ /dev/null @@ -1,87 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.ritual.*; -import com.google.common.collect.Iterables; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("armour_evolve") -public class RitualArmourEvolve extends Ritual { - public static final String CHECK_RANGE = "fillRange"; - - public RitualArmourEvolve() { - super("ritualArmourEvolve", 0, 50000, "ritual." + BloodMagic.MODID + ".armourEvolveRitual"); - addBlockRange(CHECK_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1, 2, 1)); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - - if (world.isRemote) { - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - - AreaDescriptor checkRange = getBlockRange(CHECK_RANGE); - - List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, checkRange.getAABB(pos)); - - for (EntityPlayer player : playerList) { - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = Iterables.toArray(player.getArmorInventoryList(), ItemStack.class)[2]; - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - if (armour.maxUpgradePoints < 300) { - armour.maxUpgradePoints = 300; - ((ItemLivingArmour) chestStack.getItem()).setLivingArmour(chestStack, armour, true); - - masterRitualStone.setActive(false); - - world.spawnEntity(new EntityLightningBolt(world, pos.getX(), pos.getY() - 1, pos.getZ(), true)); - } - } - } - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 0; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.DUSK); - addCornerRunes(components, 2, 0, EnumRuneType.FIRE); - addOffsetRunes(components, 1, 2, 0, EnumRuneType.FIRE); - addCornerRunes(components, 1, 1, EnumRuneType.DUSK); - addParallelRunes(components, 4, 0, EnumRuneType.EARTH); - addCornerRunes(components, 1, 3, EnumRuneType.DUSK); - addParallelRunes(components, 1, 4, EnumRuneType.EARTH); - - for (int i = 0; i < 4; i++) { - addCornerRunes(components, 3, i, EnumRuneType.EARTH); - } - } - - @Override - public Ritual getNewCopy() { - return new RitualArmourEvolve(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCobblestone.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCobblestone.java deleted file mode 100644 index f9d0d6e9..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCobblestone.java +++ /dev/null @@ -1,96 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.tile.TileAlchemyArray; -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.function.Consumer; - -@RitualRegister("cobblestone") -public class RitualCobblestone extends Ritual { - - public static final String COBBLESTONE_RANGE = "cobblestoneRange"; - - public RitualCobblestone() { - super("ritualCobblestone", 0, 500, "ritual." + BloodMagic.MODID + ".cobblestoneRitual"); - addBlockRange(COBBLESTONE_RANGE, new AreaDescriptor.Cross(new BlockPos(0, 1, 0), 1)); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - TileEntity tileEntity = world.getTileEntity(masterRitualStone.getBlockPos().up()); - Block block = Blocks.COBBLESTONE; - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - int maxEffects = currentEssence / getRefreshCost(); - int totalEffects = 0; - - AreaDescriptor cobblestoneRange = getBlockRange(COBBLESTONE_RANGE); - - if (tileEntity != null && tileEntity instanceof TileAlchemyArray) { - TileAlchemyArray alchemyArray = (TileAlchemyArray) tileEntity; - if (!alchemyArray.getStackInSlot(0).isEmpty() && alchemyArray.getStackInSlot(0).getItem() == RegistrarBloodMagicItems.COMPONENT) { - switch (alchemyArray.getStackInSlot(0).getItemDamage()) { - case 0: - block = Blocks.OBSIDIAN; - alchemyArray.decrStackSize(0, 1); - world.setBlockToAir(alchemyArray.getPos()); - break; - case 1: - block = Blocks.NETHERRACK; - alchemyArray.decrStackSize(0, 1); - world.setBlockToAir(alchemyArray.getPos()); - break; - /* - * case 4: block = Blocks.end_stone; - * alchemyArray.decrStackSize(0, 1); - * world.setBlockToAir(alchemyArray.getPos()); break; - */ - default: - break; - } - } - } - - for (BlockPos blockPos : cobblestoneRange.getContainedPositions(masterRitualStone.getBlockPos())) { - if (world.isAirBlock(blockPos)) { - world.setBlockState(blockPos, block.getDefaultState()); - totalEffects++; - } - - if (totalEffects >= maxEffects) { - break; - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); - } - - @Override - public int getRefreshCost() { - return 25; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 1, EnumRuneType.FIRE); - addParallelRunes(components, 1, 0, EnumRuneType.WATER); - } - - @Override - public Ritual getNewCopy() { - return new RitualCobblestone(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualContainment.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualContainment.java deleted file mode 100644 index 51c8432e..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualContainment.java +++ /dev/null @@ -1,71 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.function.Consumer; - -@RitualRegister("containment") -public class RitualContainment extends Ritual { - public static final String CONTAINMENT_RANGE = "containmentRange"; - - public RitualContainment() { - super("ritualContainment", 0, 2000, "ritual." + BloodMagic.MODID + ".containmentRitual"); - addBlockRange(CONTAINMENT_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-3, 0, -3), 7)); - setMaximumVolumeAndDistanceOfRange(CONTAINMENT_RANGE, 0, 10, 10); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - AreaDescriptor containmentRange = getBlockRange(CONTAINMENT_RANGE); - - for (EntityLivingBase entity : world.getEntitiesWithinAABB(EntityLivingBase.class, containmentRange.getAABB(masterRitualStone.getBlockPos()))) { - if (entity instanceof EntityPlayer && (((EntityPlayer) entity).capabilities.isCreativeMode || ((EntityPlayer) entity).getGameProfile().getId().equals(masterRitualStone.getOwner()))) - continue; - - double xDif = entity.posX - (masterRitualStone.getBlockPos().getX() + 0.5); - double yDif = entity.posY - (masterRitualStone.getBlockPos().getY() + 2.5); - double zDif = entity.posZ - (masterRitualStone.getBlockPos().getZ() + 0.5); - - entity.motionX = -0.05 * xDif; - entity.motionY = -0.05 * yDif; - entity.motionZ = -0.05 * zDif; - entity.fallDistance = 0; - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 1; - } - - @Override - public void gatherComponents(Consumer components) { - addParallelRunes(components, 1, 0, EnumRuneType.EARTH); - addCornerRunes(components, 2, 0, EnumRuneType.EARTH); - addParallelRunes(components, 1, 5, EnumRuneType.EARTH); - addCornerRunes(components, 2, 5, EnumRuneType.EARTH); - } - - @Override - public Ritual getNewCopy() { - return new RitualContainment(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrushing.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrushing.java deleted file mode 100644 index 8f1a5855..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrushing.java +++ /dev/null @@ -1,293 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.compress.CompressionRegistry; -import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTableRecipe; -import WayofTime.bloodmagic.core.registry.AlchemyTableRecipeRegistry; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.util.Utils; -import com.mojang.authlib.GameProfile; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.FakePlayerFactory; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.function.Consumer; - -@RitualRegister("crushing") -public class RitualCrushing extends Ritual { - public static final String CRUSHING_RANGE = "crushingRange"; - public static final String CHEST_RANGE = "chest"; - - public static double rawWillDrain = 0.05; - public static double steadfastWillDrain = 0.2; - public static double destructiveWillDrain = 0.2; - public static double vengefulWillDrain = 0.2; - - public static Map cuttingFluidLPMap = new HashMap<>(); - public static Map cuttingFluidWillMap = new HashMap<>(); - public static int defaultRefreshTime = 40; - private FakePlayer fakePlayer; - public int refreshTime = 40; - - public RitualCrushing() { - super("ritualCrushing", 0, 5000, "ritual." + BloodMagic.MODID + ".crushingRitual"); - addBlockRange(CRUSHING_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, -3, -1), 3)); - addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - - setMaximumVolumeAndDistanceOfRange(CRUSHING_RANGE, 50, 10, 10); - setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); - TileEntity tile = world.getTileEntity(chestRange.getContainedPositions(pos).get(0)); - - if (tile != null && Utils.getNumberOfFreeSlots(tile, EnumFacing.DOWN) < 1) { - return; - } - - List willConfig = masterRitualStone.getActiveWillConfig(); - - double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); - double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); - double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); - double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); - double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); - - refreshTime = getRefreshTimeForRawWill(rawWill); - - boolean consumeRawWill = rawWill >= rawWillDrain && refreshTime != defaultRefreshTime; - - boolean isSilkTouch = steadfastWill >= steadfastWillDrain; - boolean useCuttingFluid = corrosiveWill > 0; - - int fortune = destructiveWill > 0 ? 3 : 0; - - AreaDescriptor crushingRange = getBlockRange(CRUSHING_RANGE); - boolean hasOperated = false; - - double rawDrain = 0; - - for (BlockPos newPos : crushingRange.getContainedPositions(pos)) { - if (world.isAirBlock(newPos)) { - continue; - } - - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - if (block.equals(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER) || block.equals(RegistrarBloodMagicBlocks.RITUAL_STONE) || block.getBlockHardness(state, world, newPos) == -1.0F || Utils.isBlockLiquid(state)) { - continue; - } - - boolean isBlockClaimed = false; - if (useCuttingFluid) { - ItemStack checkStack = block.getItem(world, newPos, state); - if (checkStack.isEmpty()) { - continue; - } - - ItemStack copyStack = checkStack.copy(); - - for (Entry entry : cuttingFluidLPMap.entrySet()) { - ItemStack cuttingStack = entry.getKey(); - int lpDrain = entry.getValue(); - double willDrain = cuttingFluidWillMap.containsKey(cuttingStack) ? cuttingFluidWillMap.get(cuttingStack) : 0; - - if (corrosiveWill < willDrain || currentEssence < lpDrain + getRefreshCost()) { - continue; - } - - cuttingStack = cuttingStack.copy(); - List input = new ArrayList<>(); - input.add(cuttingStack); - input.add(copyStack); - - AlchemyTableRecipe recipe = AlchemyTableRecipeRegistry.getMatchingRecipe(input, world, pos); - if (recipe == null) { - continue; - } - - ItemStack result = recipe.getRecipeOutput(input); - if (result.isEmpty()) { - continue; - } - - if (tile != null) { - result = Utils.insertStackIntoTile(result, tile, EnumFacing.DOWN); - if (!result.isEmpty()) { - Utils.spawnStackAtBlock(world, pos, EnumFacing.UP, result); - } - } else { - Utils.spawnStackAtBlock(world, pos, EnumFacing.UP, result); - } - - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, willDrain, true); - corrosiveWill -= willDrain; - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(lpDrain)); - currentEssence -= lpDrain; - - isBlockClaimed = true; - } - } - - if (!isBlockClaimed && isSilkTouch && block.canSilkHarvest(world, newPos, state, getFakePlayer((WorldServer) world))) { - ItemStack checkStack = block.getItem(world, newPos, state); - if (checkStack.isEmpty()) { - continue; - } - - ItemStack copyStack = checkStack.copy(); - - if (steadfastWill >= steadfastWillDrain) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastWillDrain, true); - steadfastWill -= steadfastWillDrain; - } else { - continue; - } - - if (tile != null) - copyStack = Utils.insertStackIntoTile(copyStack, tile, EnumFacing.DOWN); - else - Utils.spawnStackAtBlock(world, pos, EnumFacing.UP, copyStack); - - if (!copyStack.isEmpty()) { - Utils.spawnStackAtBlock(world, pos, EnumFacing.UP, copyStack); - } - } else if (!isBlockClaimed) { - if (fortune > 0 && destructiveWill < destructiveWillDrain) { - fortune = 0; - } - - List stackList = block.getDrops(world, newPos, state, fortune); - - for (ItemStack item : stackList) { - ItemStack copyStack = item.copy(); - - if (tile != null) { - copyStack = Utils.insertStackIntoTile(copyStack, tile, EnumFacing.DOWN); - } else { - Utils.spawnStackAtBlock(world, pos, EnumFacing.UP, copyStack); - continue; - } - if (!copyStack.isEmpty()) { - Utils.spawnStackAtBlock(world, pos, EnumFacing.UP, copyStack); - } - } - - if (fortune > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DESTRUCTIVE, destructiveWillDrain, true); - destructiveWill -= destructiveWillDrain; - } - } - - world.destroyBlock(newPos, false); - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - hasOperated = true; - - if (consumeRawWill) { - rawDrain += rawWillDrain; - rawWill -= rawWillDrain; - } - - break; - } - - if (hasOperated && tile != null && vengefulWill >= vengefulWillDrain) { - Pair pair = CompressionRegistry.compressInventory(tile, world); - if (pair.getRight()) { - ItemStack returned = pair.getLeft(); - if (returned != null) { - Utils.spawnStackAtBlock(world, pos, EnumFacing.UP, returned); - } - - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulWillDrain, true); - } - } - - if (rawDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrain, true); - } - } - - public int getRefreshTimeForRawWill(double rawWill) { - if (rawWill >= rawWillDrain) { - return Math.max(1, (int) (40 - rawWill / 5)); - } - - return defaultRefreshTime; - } - - @Override - public int getRefreshTime() { - return refreshTime; - } - - @Override - public int getRefreshCost() { - return 7; - } - - @Override - public void gatherComponents(Consumer components) { - addParallelRunes(components, 1, 0, EnumRuneType.EARTH); - addParallelRunes(components, 2, 0, EnumRuneType.FIRE); - addCornerRunes(components, 2, 0, EnumRuneType.DUSK); - addParallelRunes(components, 2, 1, EnumRuneType.AIR); - } - - @Override - public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player) { - return new ITextComponent[]{ - new TextComponentTranslation(this.getUnlocalizedName() + ".info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".default.info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".corrosive.info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".steadfast.info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".destructive.info"), - new TextComponentTranslation(this.getUnlocalizedName() + ".vengeful.info") - }; - } - - @Override - public Ritual getNewCopy() { - return new RitualCrushing(); - } - - public static void registerCuttingFluid(ItemStack stack, int lpDrain, double willDrain) { - cuttingFluidLPMap.put(stack, lpDrain); - cuttingFluidWillMap.put(stack, willDrain); - } - - private FakePlayer getFakePlayer(WorldServer world) { - return fakePlayer == null ? fakePlayer = FakePlayerFactory.get(world, new GameProfile(null, BloodMagic.MODID + "_ritual_crushing")) : fakePlayer; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrystalHarvest.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrystalHarvest.java deleted file mode 100644 index a28c8433..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrystalHarvest.java +++ /dev/null @@ -1,87 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.tile.TileDemonCrystal; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.function.Consumer; - -@RitualRegister("crystal_harvest") -public class RitualCrystalHarvest extends Ritual { - public static final String CRYSTAL_RANGE = "crystal"; - - public RitualCrystalHarvest() { - super("ritualCrystalHarvest", 0, 40000, "ritual." + BloodMagic.MODID + ".crystalHarvestRitual"); - addBlockRange(CRYSTAL_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-3, 2, -3), 7, 5, 7)); - - setMaximumVolumeAndDistanceOfRange(CRYSTAL_RANGE, 250, 5, 7); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - BlockPos pos = masterRitualStone.getBlockPos(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - int maxEffects = 1; - int totalEffects = 0; - - AreaDescriptor crystalRange = getBlockRange(CRYSTAL_RANGE); - - crystalRange.resetIterator(); - while (crystalRange.hasNext()) { - BlockPos nextPos = crystalRange.next().add(pos); - TileEntity tile = world.getTileEntity(nextPos); - if (tile instanceof TileDemonCrystal) { - TileDemonCrystal demonCrystal = (TileDemonCrystal) tile; - if (demonCrystal.dropSingleCrystal()) { - IBlockState state = world.getBlockState(nextPos); - world.notifyBlockUpdate(nextPos, state, state, 3); - totalEffects++; - if (totalEffects >= maxEffects) { - break; - } - } - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); - } - - @Override - public int getRefreshTime() { - return 25; - } - - @Override - public int getRefreshCost() { - return 50; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.AIR); - addParallelRunes(components, 1, 1, EnumRuneType.DUSK); - addParallelRunes(components, 1, -1, EnumRuneType.FIRE); - addParallelRunes(components, 2, -1, EnumRuneType.FIRE); - addParallelRunes(components, 3, -1, EnumRuneType.FIRE); - addOffsetRunes(components, 3, 1, -1, EnumRuneType.FIRE); - addCornerRunes(components, 3, -1, EnumRuneType.EARTH); - addCornerRunes(components, 3, 0, EnumRuneType.EARTH); - addOffsetRunes(components, 3, 2, 0, EnumRuneType.DUSK); - } - - @Override - public Ritual getNewCopy() { - return new RitualCrystalHarvest(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrystalSplit.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrystalSplit.java deleted file mode 100644 index a52f5181..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualCrystalSplit.java +++ /dev/null @@ -1,190 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import java.util.function.Consumer; - -import WayofTime.bloodmagic.ritual.*; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.tile.TileDemonCrystal; - -@RitualRegister("crystal_split") -public class RitualCrystalSplit extends Ritual -{ - public RitualCrystalSplit() - { - super("ritualCrystalSplit", 0, 20000, "ritual." + BloodMagic.MODID + ".crystalSplitRitual"); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) - { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) - { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - EnumFacing direction = masterRitualStone.getDirection(); - BlockPos rawPos = pos.up(2); - - TileEntity tile = world.getTileEntity(rawPos); - if (!(tile instanceof TileDemonCrystal) || ((TileDemonCrystal) tile).getType() != EnumDemonWillType.DEFAULT) - { - return; - } - - IBlockState rawState = world.getBlockState(rawPos); - - TileDemonCrystal rawTile = (TileDemonCrystal) tile; - if (rawTile.crystalCount >= 5) - { - BlockPos vengefulPos = pos.offset(rotateFacing(EnumFacing.NORTH, direction)).up(); - BlockPos corrosivePos = pos.offset(rotateFacing(EnumFacing.EAST, direction)).up(); - BlockPos steadfastPos = pos.offset(rotateFacing(EnumFacing.SOUTH, direction)).up(); - BlockPos destructivePos = pos.offset(rotateFacing(EnumFacing.WEST, direction)).up(); - - int vengefulCrystals = 0; - int corrosiveCrystals = 0; - int steadfastCrystals = 0; - int destructiveCrystals = 0; - - tile = world.getTileEntity(vengefulPos); - if (tile instanceof TileDemonCrystal && ((TileDemonCrystal) tile).getType() == EnumDemonWillType.VENGEFUL && ((TileDemonCrystal) tile).crystalCount < 7) - { - vengefulCrystals = ((TileDemonCrystal) tile).crystalCount; - } else if (!(tile instanceof TileDemonCrystal) && world.isAirBlock(vengefulPos)) - { - // #donothing, no point setting the crystal to 0 again - } else - { - return; - } - - tile = world.getTileEntity(corrosivePos); - if (tile instanceof TileDemonCrystal && ((TileDemonCrystal) tile).getType() == EnumDemonWillType.CORROSIVE && ((TileDemonCrystal) tile).crystalCount < 7) - { - corrosiveCrystals = ((TileDemonCrystal) tile).crystalCount; - } else if (!(tile instanceof TileDemonCrystal) && world.isAirBlock(corrosivePos)) - { - - } else - { - return; - } - - tile = world.getTileEntity(steadfastPos); - if (tile instanceof TileDemonCrystal && ((TileDemonCrystal) tile).getType() == EnumDemonWillType.STEADFAST && ((TileDemonCrystal) tile).crystalCount < 7) - { - steadfastCrystals = ((TileDemonCrystal) tile).crystalCount; - } else if (!(tile instanceof TileDemonCrystal) && world.isAirBlock(steadfastPos)) - { - - } else - { - return; - } - - tile = world.getTileEntity(destructivePos); - if (tile instanceof TileDemonCrystal && ((TileDemonCrystal) tile).getType() == EnumDemonWillType.DESTRUCTIVE && ((TileDemonCrystal) tile).crystalCount < 7) - { - destructiveCrystals = ((TileDemonCrystal) tile).crystalCount; - } else if (!(tile instanceof TileDemonCrystal) && world.isAirBlock(destructivePos)) - { - - } else - { - return; - } - - rawTile.crystalCount -= 4; - - growCrystal(world, vengefulPos, EnumDemonWillType.VENGEFUL, vengefulCrystals); - growCrystal(world, corrosivePos, EnumDemonWillType.CORROSIVE, corrosiveCrystals); - growCrystal(world, steadfastPos, EnumDemonWillType.STEADFAST, steadfastCrystals); - growCrystal(world, destructivePos, EnumDemonWillType.DESTRUCTIVE, destructiveCrystals); - rawTile.markDirty(); - world.notifyBlockUpdate(rawPos, rawState, rawState, 3); - } - } - - public EnumFacing rotateFacing(EnumFacing facing, EnumFacing rotation) - { - switch (rotation) - { - case EAST: - return facing.rotateY(); - case SOUTH: - return facing.rotateY().rotateY(); - case WEST: - return facing.rotateYCCW(); - case NORTH: - default: - return facing; - } - } - - public void growCrystal(World world, BlockPos pos, EnumDemonWillType type, int currentCrystalCount) - { - if (currentCrystalCount <= 0) - { - world.setBlockState(pos, RegistrarBloodMagicBlocks.DEMON_CRYSTAL.getStateFromMeta(type.ordinal()), 3); - } else - { - TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos); - tile.crystalCount++; - tile.markDirty(); - IBlockState state = world.getBlockState(pos); - world.notifyBlockUpdate(pos, state, state, 3); - } - } - - @Override - public int getRefreshTime() - { - return 20; - } - - @Override - public int getRefreshCost() - { - return 1000; - } - - @Override - public void gatherComponents(Consumer components) - { - addRune(components, 0, 0, -1, EnumRuneType.FIRE); - addRune(components, 1, 0, 0, EnumRuneType.EARTH); - addRune(components, 0, 0, 1, EnumRuneType.WATER); - addRune(components, -1, 0, 0, EnumRuneType.AIR); - - this.addOffsetRunes(components, 1, 2, -1, EnumRuneType.DUSK); - this.addCornerRunes(components, 1, 0, EnumRuneType.BLANK); - this.addParallelRunes(components, 2, 0, EnumRuneType.DUSK); - } - - @Override - public Ritual getNewCopy() - { - return new RitualCrystalSplit(); - } - - @Override - public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player) - { - return new ITextComponent[] { new TextComponentTranslation(this.getUnlocalizedName() + ".info") }; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualEllipsoid.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualEllipsoid.java deleted file mode 100644 index 636e5806..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualEllipsoid.java +++ /dev/null @@ -1,261 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; - -import java.util.function.Consumer; - -@RitualRegister("ellipsoid") -public class RitualEllipsoid extends Ritual -{ - public static final String SPHEROID_RANGE = "spheroidRange"; - public static final String CHEST_RANGE = "chest"; - - private boolean cached = false; - private BlockPos currentPos; //Offset - - public RitualEllipsoid() - { - super("ritualEllipsoid", 0, 20000, "ritual." + BloodMagic.MODID + ".ellipseRitual"); - addBlockRange(SPHEROID_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-10, -10, -10), new BlockPos(11, 11, 11))); - addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - - setMaximumVolumeAndDistanceOfRange(SPHEROID_RANGE, 0, 32, 32); - setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) - { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - BlockPos masterPos = masterRitualStone.getBlockPos(); - AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); - TileEntity tileInventory = world.getTileEntity(chestRange.getContainedPositions(masterPos).get(0)); - - if (currentEssence < getRefreshCost()) - { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - AreaDescriptor sphereRange = getBlockRange(SPHEROID_RANGE); - AxisAlignedBB sphereBB = sphereRange.getAABB(masterPos); - int minX = (int) (masterPos.getX() - sphereBB.minX); - int maxX = (int) (sphereBB.maxX - masterPos.getX()) - 1; - int minY = (int) (masterPos.getY() - sphereBB.minY); - int maxY = (int) (sphereBB.maxY - masterPos.getY()) - 1; - int minZ = (int) (masterPos.getZ() - sphereBB.minZ); - int maxZ = (int) (sphereBB.maxZ - masterPos.getZ()) - 1; - - if (tileInventory != null) - { - if (tileInventory.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN)) - { - IItemHandler itemHandler = tileInventory.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN); - - if (itemHandler.getSlots() <= 0) - { - return; - } - - int blockSlot = -1; - for (int invSlot = 0; invSlot < itemHandler.getSlots(); invSlot++) - { - ItemStack stack = itemHandler.extractItem(invSlot, 1, true); - if (stack.isEmpty() || !(stack.getItem() instanceof ItemBlock)) - continue; - - blockSlot = invSlot; - break; - } - - if (blockSlot == -1) - { - return; - } - - int xR = Math.max(maxX, minX); - int yR = Math.max(maxY, minY); - int zR = Math.max(maxZ, minZ); - - int j = -minX; - int i = -minY; - int k = -minZ; - - if (currentPos != null) - { - j = currentPos.getY(); - i = Math.min(xR, Math.max(-minX, currentPos.getX())); - k = Math.min(zR, Math.max(-minZ, currentPos.getZ())); - } - int checks = 0; - int maxChecks = 100; - - while (j <= maxY) - { - while (i <= maxX) - { - while (k <= maxZ) - { - checks++; - if (checks >= maxChecks) - { - this.currentPos = new BlockPos(i, j, k); - return; - } - - if (checkIfEllipsoidShell(xR, yR, zR, i, j, k)) - { - BlockPos newPos = masterPos.add(i, j, k); -// - if (!world.getBlockState(newPos).getBlock().isReplaceable(world, newPos)) - { - k++; - continue; - } - - IBlockState placeState = Block.getBlockFromItem(itemHandler.getStackInSlot(blockSlot).getItem()).getStateFromMeta(itemHandler.getStackInSlot(blockSlot).getItemDamage()); - world.setBlockState(newPos, placeState); - - itemHandler.extractItem(blockSlot, 1, false); - tileInventory.markDirty(); - //TODO: - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - k++; - this.currentPos = new BlockPos(i, j, k); - return; - } - k++; - } - i++; - k = -minZ; - } - j++; - i = -minX; - this.currentPos = new BlockPos(i, j, k); - return; - } - - j = -minY; - this.currentPos = new BlockPos(i, j, k); - return; - } - } - } - - public boolean checkIfEllipsoidShell(int xR, int yR, int zR, int xOff, int yOff, int zOff) - { - //Checking shell in the x-direction - if (!checkIfEllipsoid(xR, yR, zR, xOff, yOff, zOff)) - { - return false; - } - - return !((checkIfEllipsoid(xR, yR, zR, xOff + 1, yOff, zOff) && checkIfEllipsoid(xR, yR, zR, xOff - 1, yOff, zOff)) && (checkIfEllipsoid(xR, yR, zR, xOff, yOff + 1, zOff) && checkIfEllipsoid(xR, yR, zR, xOff, yOff - 1, zOff)) && (checkIfEllipsoid(xR, yR, zR, xOff, yOff, zOff + 1) && checkIfEllipsoid(xR, yR, zR, xOff, yOff, zOff - 1))); -// if (xOff * xOff + yOff * yOff + zOff * zOff >= (xR - 0.5) * (xR - 0.5) && xOff * xOff + yOff * yOff + zOff * zOff <= (xR + 0.5) * (xR + 0.5)) -// if (checkIfEllipsoid(xR, yR, zR, xOff, yOff, zOff)) -// { -// if (xOff * xOff / ((xR - 0.5) * (xR - 0.5)) + yOff * yOff / ((yR - 0.5) * (yR - 0.5)) >= 1 - zOff * zOff / ((zR + possOffset) * (zR + possOffset))) -// { -// return true; -// } -// -// if (xOff * xOff / ((xR - 0.5) * (xR - 0.5)) + zOff * zOff / ((zR - 0.5) * (zR - 0.5)) >= 1 - yOff * yOff / ((yR + possOffset) * (yR + possOffset))) -// { -// return true; -// } -// -// if (zOff * zOff / ((zR - 0.5) * (zR - 0.5)) + yOff * yOff / ((yR - 0.5) * (yR - 0.5)) >= 1 - xOff * xOff / ((xR + possOffset) * (xR + possOffset))) -// { -// return true; -// } -// } -// return false; - } - - public boolean checkIfEllipsoid(float xR, float yR, float zR, float xOff, float yOff, float zOff) - { - float possOffset = 0.5f; - return xOff * xOff / ((xR + possOffset) * (xR + possOffset)) + yOff * yOff / ((yR + possOffset) * (yR + possOffset)) + zOff * zOff / ((zR + possOffset) * (zR + possOffset)) <= 1; - } - - @Override - public int getRefreshCost() - { - return 5; - } - - @Override - public int getRefreshTime() - { - return 1; - } - -// @Override -// public void readFromNBT(NBTTagCompound tag) -// { -// super.readFromNBT(tag); -// tag -// } - - @Override - public void gatherComponents(Consumer components) - { - addCornerRunes(components, 1, 0, EnumRuneType.DUSK); - - addRune(components, 4, 0, 0, EnumRuneType.FIRE); - addRune(components, 5, 0, 0, EnumRuneType.FIRE); - addRune(components, 5, 0, -1, EnumRuneType.FIRE); - addRune(components, 5, 0, -2, EnumRuneType.FIRE); - addRune(components, -4, 0, 0, EnumRuneType.FIRE); - addRune(components, -5, 0, 0, EnumRuneType.FIRE); - addRune(components, -5, 0, 1, EnumRuneType.FIRE); - addRune(components, -5, 0, 2, EnumRuneType.FIRE); - - addRune(components, 0, 0, 4, EnumRuneType.AIR); - addRune(components, 0, 0, 5, EnumRuneType.AIR); - addRune(components, 1, 0, 5, EnumRuneType.AIR); - addRune(components, 2, 0, 5, EnumRuneType.AIR); - addRune(components, 0, 0, -4, EnumRuneType.AIR); - addRune(components, 0, 0, -5, EnumRuneType.AIR); - addRune(components, -1, 0, -5, EnumRuneType.AIR); - addRune(components, -2, 0, -5, EnumRuneType.AIR); - - addRune(components, 3, 0, 1, EnumRuneType.EARTH); - addRune(components, 3, 0, 2, EnumRuneType.EARTH); - addRune(components, 3, 0, 3, EnumRuneType.EARTH); - addRune(components, 2, 0, 3, EnumRuneType.EARTH); - addRune(components, -3, 0, -1, EnumRuneType.EARTH); - addRune(components, -3, 0, -2, EnumRuneType.EARTH); - addRune(components, -3, 0, -3, EnumRuneType.EARTH); - addRune(components, -2, 0, -3, EnumRuneType.EARTH); - - addRune(components, 1, 0, -3, EnumRuneType.WATER); - addRune(components, 2, 0, -3, EnumRuneType.WATER); - addRune(components, 3, 0, -3, EnumRuneType.WATER); - addRune(components, 3, 0, -2, EnumRuneType.WATER); - addRune(components, -1, 0, 3, EnumRuneType.WATER); - addRune(components, -2, 0, 3, EnumRuneType.WATER); - addRune(components, -3, 0, 3, EnumRuneType.WATER); - addRune(components, -3, 0, 2, EnumRuneType.WATER); - } - - @Override - public Ritual getNewCopy() - { - return new RitualEllipsoid(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualExpulsion.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualExpulsion.java deleted file mode 100644 index 1294ea4f..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualExpulsion.java +++ /dev/null @@ -1,237 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.Utils; -import com.google.common.collect.Lists; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import net.minecraftforge.items.IItemHandler; - -import java.util.List; -import java.util.Random; -import java.util.UUID; -import java.util.function.Consumer; - -@RitualRegister("expulsion") -public class RitualExpulsion extends Ritual { - public static final String EXPULSION_RANGE = "expulsionRange"; - - public RitualExpulsion() { - super("ritualExpulsion", 0, 10000, "ritual." + BloodMagic.MODID + ".expulsionRitual"); - addBlockRange(EXPULSION_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-12, 0, -12), 25)); - setMaximumVolumeAndDistanceOfRange(EXPULSION_RANGE, 0, 12, 12); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - if (masterRitualStone.getWorldObj().isRemote) - return; - - AreaDescriptor expulsionRange = getBlockRange(EXPULSION_RANGE); - - List whitelist = Lists.newArrayList(); - BlockPos masterPos = masterRitualStone.getBlockPos(); - TileEntity tile = world.getTileEntity(masterPos.up()); - - if (tile != null) { - IItemHandler handler = Utils.getInventory(tile, null); - if (handler != null) { - for (int i = 0; i < handler.getSlots(); i++) { - ItemStack itemStack = handler.getStackInSlot(i); - if (!itemStack.isEmpty() && itemStack.getItem() instanceof IBindable) { - Binding binding = ((IBindable) itemStack.getItem()).getBinding(itemStack); - if (binding != null && !whitelist.contains(binding.getOwnerId())) - whitelist.add(binding.getOwnerId()); - } - } - } - } - - final int teleportDistance = 100; - - for (EntityPlayer player : world.getEntitiesWithinAABB(EntityPlayer.class, expulsionRange.getAABB(masterRitualStone.getBlockPos()))) { - if (player.capabilities.isCreativeMode || player.getGameProfile().getId().equals(masterRitualStone.getOwner()) || whitelist.contains(player.getGameProfile().getId())) - continue; - - if (teleportRandomly(player, teleportDistance)) - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * 1000)); - } - - whitelist.clear(); - } - - public boolean teleportRandomly(EntityLivingBase entityLiving, double distance) { - if (entityLiving instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entityLiving; - if (player.capabilities.isCreativeMode) - return false; - } - - double x = entityLiving.posX; - double y = entityLiving.posY; - double z = entityLiving.posZ; - Random rand = new Random(); - double randX = x + (rand.nextDouble() - 0.5D) * distance; - double randY = y + (rand.nextInt((int) distance) - (distance) / 2); - double randZ = z + (rand.nextDouble() - 0.5D) * distance; - int i = 0; - - while (!teleportTo(entityLiving, randX, randY, randZ, x, y, z) && i < 100) { - randX = x + (rand.nextDouble() - 0.5D) * distance; - randY = y + (rand.nextInt((int) distance) - (distance) / 2); - randZ = z + (rand.nextDouble() - 0.5D) * distance; - i++; - } - - return i >= 100; - } - - public boolean teleportTo(EntityLivingBase entityLiving, double par1, double par3, double par5, double lastX, double lastY, double lastZ) { - EnderTeleportEvent event = new EnderTeleportEvent(entityLiving, par1, par3, par5, 0); - - if (MinecraftForge.EVENT_BUS.post(event)) { - return false; - } - - moveEntityViaTeleport(entityLiving, event.getTargetX(), event.getTargetY(), event.getTargetZ()); - boolean flag = false; - int i = MathHelper.floor(entityLiving.posX); - int j = MathHelper.floor(entityLiving.posY); - int k = MathHelper.floor(entityLiving.posZ); - int l; - - if (!entityLiving.getEntityWorld().isAirBlock(new BlockPos(i, j, k))) { - boolean flag1 = false; - - while (!flag1 && j > 0) { - IBlockState state = entityLiving.getEntityWorld().getBlockState(new BlockPos(i, j - 1, k)); - - if (state.getMaterial().blocksMovement()) { - flag1 = true; - } else { - --entityLiving.posY; - --j; - } - } - - if (flag1) { - moveEntityViaTeleport(entityLiving, entityLiving.posX, entityLiving.posY, entityLiving.posZ); - - if (!entityLiving.collided && !entityLiving.getEntityWorld().containsAnyLiquid(entityLiving.getEntityBoundingBox())) { - flag = true; - } - } - } - - if (!flag) { - moveEntityViaTeleport(entityLiving, lastX, lastY, lastZ); - return false; - } else { - for (l = 0; l < 128; ++l) { - double lengthVal = (double) l / ((double) 128 - 1.0D); - float randF1 = (entityLiving.getEntityWorld().rand.nextFloat() - 0.5F) * 0.2F; - float randF2 = (entityLiving.getEntityWorld().rand.nextFloat() - 0.5F) * 0.2F; - float randF3 = (entityLiving.getEntityWorld().rand.nextFloat() - 0.5F) * 0.2F; - double lengthValX = lastX + (entityLiving.posX - lastX) * lengthVal + (entityLiving.getEntityWorld().rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; - double lengthValY = lastY + (entityLiving.posY - lastY) * lengthVal + entityLiving.getEntityWorld().rand.nextDouble() * (double) entityLiving.height; - double lengthValZ = lastZ + (entityLiving.posZ - lastZ) * lengthVal + (entityLiving.getEntityWorld().rand.nextDouble() - 0.5D) * (double) entityLiving.width * 2.0D; - entityLiving.getEntityWorld().spawnParticle(EnumParticleTypes.PORTAL, lengthValX, lengthValY, lengthValZ, (double) randF1, (double) randF2, (double) randF3); - } - - return true; - } - } - - public void moveEntityViaTeleport(EntityLivingBase entityLiving, double x, double y, double z) { - if (entityLiving instanceof EntityPlayerMP) { - EntityPlayerMP player = (EntityPlayerMP) entityLiving; - - EnderTeleportEvent event = new EnderTeleportEvent(player, x, y, z, 5.0F); - - if (!MinecraftForge.EVENT_BUS.post(event)) { - if (entityLiving.isRiding()) - player.mountEntityAndWakeUp(); - - entityLiving.setPositionAndUpdate(event.getTargetX(), event.getTargetY(), event.getTargetZ()); - } - } else if (entityLiving != null) { - entityLiving.setPosition(x, y, z); - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 2; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 2, 0, EnumRuneType.EARTH); - addRune(components, 2, 0, 1, EnumRuneType.EARTH); - addRune(components, 1, 0, 2, EnumRuneType.EARTH); - addRune(components, 2, 0, -1, EnumRuneType.EARTH); - addRune(components, -1, 0, 2, EnumRuneType.EARTH); - addRune(components, -2, 0, 1, EnumRuneType.EARTH); - addRune(components, 1, 0, -2, EnumRuneType.EARTH); - addRune(components, -2, 0, -1, EnumRuneType.EARTH); - addRune(components, -1, 0, -2, EnumRuneType.EARTH); - addRune(components, 4, 0, 2, EnumRuneType.AIR); - addRune(components, 5, 0, 2, EnumRuneType.AIR); - addRune(components, 4, 0, -2, EnumRuneType.AIR); - addRune(components, 5, 0, -2, EnumRuneType.AIR); - addRune(components, -4, 0, 2, EnumRuneType.AIR); - addRune(components, -5, 0, 2, EnumRuneType.AIR); - addRune(components, -4, 0, -2, EnumRuneType.AIR); - addRune(components, -5, 0, -2, EnumRuneType.AIR); - addRune(components, 2, 0, 4, EnumRuneType.AIR); - addRune(components, 2, 0, 5, EnumRuneType.AIR); - addRune(components, -2, 0, 4, EnumRuneType.AIR); - addRune(components, -2, 0, 5, EnumRuneType.AIR); - addRune(components, 2, 0, -4, EnumRuneType.AIR); - addRune(components, 2, 0, -5, EnumRuneType.AIR); - addRune(components, -2, 0, -4, EnumRuneType.AIR); - addRune(components, -2, 0, -5, EnumRuneType.AIR); - addParallelRunes(components, 5, 0, EnumRuneType.DUSK); - addParallelRunes(components, 6, 0, EnumRuneType.EARTH); - addRune(components, -6, 0, 1, EnumRuneType.DUSK); - addRune(components, -6, 0, -1, EnumRuneType.DUSK); - addRune(components, 6, 0, 1, EnumRuneType.DUSK); - addRune(components, 6, 0, -1, EnumRuneType.DUSK); - addRune(components, 1, 0, 6, EnumRuneType.DUSK); - addRune(components, -1, 0, 6, EnumRuneType.DUSK); - addRune(components, 1, 0, -6, EnumRuneType.DUSK); - addRune(components, -1, 0, -6, EnumRuneType.DUSK); - addCornerRunes(components, 4, 0, EnumRuneType.FIRE); - } - - @Override - public Ritual getNewCopy() { - return new RitualExpulsion(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFeatheredKnife.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFeatheredKnife.java deleted file mode 100644 index eae72593..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFeatheredKnife.java +++ /dev/null @@ -1,220 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.altar.IBloodAltar; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.util.helper.PlayerSacrificeHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSelfSacrifice; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("feathered_knife") -public class RitualFeatheredKnife extends Ritual { - public static final String ALTAR_RANGE = "altar"; - public static final String DAMAGE_RANGE = "damage"; - - public static double rawWillDrain = 0.05; - public static double destructiveWillDrain = 0.05; - public static double corrosiveWillThreshold = 10; - public static double steadfastWillThreshold = 10; - public static double vengefulWillThreshold = 10; - public static int defaultRefreshTime = 20; - public int refreshTime = 20; - public BlockPos altarOffsetPos = new BlockPos(0, 0, 0); //TODO: Save! - - public RitualFeatheredKnife() { - super("ritualFeatheredKnife", 0, 25000, "ritual." + BloodMagic.MODID + ".featheredKnifeRitual"); - addBlockRange(ALTAR_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-5, -10, -5), 11, 21, 11)); - addBlockRange(DAMAGE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-15, -20, -15), 31, 41, 31)); - - setMaximumVolumeAndDistanceOfRange(ALTAR_RANGE, 0, 10, 15); - setMaximumVolumeAndDistanceOfRange(DAMAGE_RANGE, 0, 25, 15); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - - List willConfig = masterRitualStone.getActiveWillConfig(); - - double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); - double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); - double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); - double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); - double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); - - refreshTime = getRefreshTimeForRawWill(rawWill); - - boolean consumeRawWill = rawWill >= rawWillDrain && refreshTime != defaultRefreshTime; - - int maxEffects = currentEssence / getRefreshCost(); - int totalEffects = 0; - - BlockPos altarPos = pos.add(altarOffsetPos); - - TileEntity tile = world.getTileEntity(altarPos); - - AreaDescriptor altarRange = getBlockRange(ALTAR_RANGE); - - if (!altarRange.isWithinArea(altarOffsetPos) || !(tile instanceof IBloodAltar)) { - for (BlockPos newPos : altarRange.getContainedPositions(pos)) { - TileEntity nextTile = world.getTileEntity(newPos); - if (nextTile instanceof IBloodAltar) { - tile = nextTile; - altarOffsetPos = newPos.subtract(pos); - - altarRange.resetCache(); - break; - } - } - } - - boolean useIncense = corrosiveWill >= corrosiveWillThreshold; - - if (tile instanceof IBloodAltar) { - IBloodAltar tileAltar = (IBloodAltar) tile; - - AreaDescriptor damageRange = getBlockRange(DAMAGE_RANGE); - AxisAlignedBB range = damageRange.getAABB(pos); - - double destructiveDrain = 0; - - List entities = world.getEntitiesWithinAABB(EntityPlayer.class, range); - - for (EntityPlayer player : entities) { - float healthThreshold = steadfastWill >= steadfastWillThreshold ? 0.7f : 0.3f; - - if (vengefulWill >= vengefulWillThreshold && !player.getGameProfile().getId().equals(masterRitualStone.getOwner())) { - healthThreshold = 0.1f; - } - - float health = player.getHealth(); - float maxHealth = player.getMaxHealth(); - - float sacrificedHealth = 1; - double lpModifier = 1; - - if ((health / player.getMaxHealth() > healthThreshold) && (!useIncense || !player.isPotionActive(RegistrarBloodMagic.SOUL_FRAY))) { - if (useIncense) { - double incenseAmount = PlayerSacrificeHelper.getPlayerIncense(player); - - sacrificedHealth = health - maxHealth * healthThreshold; - lpModifier *= PlayerSacrificeHelper.getModifier(incenseAmount); - - PlayerSacrificeHelper.setPlayerIncense(player, 0); - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.SOUL_FRAY, PlayerSacrificeHelper.soulFrayDuration)); - } - - if (destructiveWill >= destructiveWillDrain * sacrificedHealth) { - lpModifier *= getLPModifierForWill(destructiveWill); - destructiveWill -= destructiveWillDrain * sacrificedHealth; - destructiveDrain += destructiveWillDrain * sacrificedHealth; - } - - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.selfSacrifice", chestStack); - - if (upgrade instanceof LivingArmourUpgradeSelfSacrifice) { - double modifier = ((LivingArmourUpgradeSelfSacrifice) upgrade).getSacrificeModifier(); - - lpModifier *= (1 + modifier); - } - } - } - - player.setHealth(health - sacrificedHealth); - - tileAltar.sacrificialDaggerCall((int) (ConfigHandler.values.sacrificialDaggerConversion * lpModifier * sacrificedHealth), false); - - totalEffects++; - - if (totalEffects >= maxEffects) { - break; - } - - } - } - - if (destructiveDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, destructiveDrain, true); - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); - if (totalEffects > 0 && consumeRawWill) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawWillDrain, true); - } - } - - @Override - public int getRefreshTime() { - return refreshTime; - } - - @Override - public int getRefreshCost() { - return 20; - } - - @Override - public void gatherComponents(Consumer components) { - addParallelRunes(components, 1, 0, EnumRuneType.DUSK); - addParallelRunes(components, 2, -1, EnumRuneType.WATER); - addCornerRunes(components, 1, -1, EnumRuneType.AIR); - addOffsetRunes(components, 2, 4, -1, EnumRuneType.FIRE); - addOffsetRunes(components, 2, 4, 0, EnumRuneType.EARTH); - addOffsetRunes(components, 4, 3, 0, EnumRuneType.EARTH); - addCornerRunes(components, 3, 0, EnumRuneType.AIR); - } - - @Override - public Ritual getNewCopy() { - return new RitualFeatheredKnife(); - } - - @Override - public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player) { - return new ITextComponent[]{new TextComponentTranslation(this.getUnlocalizedName() + ".info"), new TextComponentTranslation(this.getUnlocalizedName() + ".default.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".corrosive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".steadfast.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".destructive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".vengeful.info")}; - } - - public double getLPModifierForWill(double destructiveWill) { - return 1 + destructiveWill * 0.2 / 100; - } - - public int getRefreshTimeForRawWill(double rawWill) { - if (rawWill >= rawWillDrain) { - return 10; - } - - return defaultRefreshTime; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFelling.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFelling.java deleted file mode 100644 index 6e1f01e1..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFelling.java +++ /dev/null @@ -1,110 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; - -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.function.Consumer; - -@RitualRegister("felling") -public class RitualFelling extends Ritual { - public static final String FELLING_RANGE = "fellingRange"; - public static final String CHEST_RANGE = "chest"; - - private ArrayList treePartsCache; - private Iterator blockPosIterator; - - private boolean cached = false; - private BlockPos currentPos; - - public RitualFelling() { - super("ritualFelling", 0, 20000, "ritual." + BloodMagic.MODID + ".fellingRitual"); - addBlockRange(FELLING_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-10, -3, -10), new BlockPos(11, 27, 11))); - addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - - setMaximumVolumeAndDistanceOfRange(FELLING_RANGE, 14000, 15, 30); - setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); - - treePartsCache = new ArrayList<>(); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - BlockPos masterPos = masterRitualStone.getBlockPos(); - AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); - TileEntity tileInventory = world.getTileEntity(chestRange.getContainedPositions(masterPos).get(0)); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - if (!cached || treePartsCache.isEmpty()) { - for (BlockPos blockPos : getBlockRange(FELLING_RANGE).getContainedPositions(masterRitualStone.getBlockPos())) { - if (!treePartsCache.contains(blockPos)) - if (!world.isAirBlock(blockPos) && (world.getBlockState(blockPos).getBlock().isWood(world, blockPos) || world.getBlockState(blockPos).getBlock().isLeaves(world.getBlockState(blockPos), world, blockPos))) { - treePartsCache.add(blockPos); - } - } - - cached = true; - blockPosIterator = treePartsCache.iterator(); - } - - if (blockPosIterator.hasNext() && tileInventory != null) { - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - currentPos = blockPosIterator.next(); - IItemHandler inventory = Utils.getInventory(tileInventory, EnumFacing.DOWN); - placeInInventory(world.getBlockState(currentPos), world, currentPos, inventory); - world.setBlockToAir(currentPos); - blockPosIterator.remove(); - } - } - - @Override - public int getRefreshCost() { - return 10; - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.EARTH); - addCornerRunes(components, 1, 1, EnumRuneType.EARTH); - } - - @Override - public Ritual getNewCopy() { - return new RitualFelling(); - } - - private void placeInInventory(IBlockState choppedState, World world, BlockPos choppedPos, @Nullable IItemHandler inventory) { - if (inventory == null) - return; - - for (ItemStack stack : choppedState.getBlock().getDrops(world, choppedPos, world.getBlockState(choppedPos), 0)) { - ItemStack remainder = ItemHandlerHelper.insertItem(inventory, stack, false); - if (!remainder.isEmpty()) - world.spawnEntity(new EntityItem(world, choppedPos.getX() + 0.4, choppedPos.getY() + 2, choppedPos.getZ() + 0.4, remainder)); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualForsakenSoul.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualForsakenSoul.java deleted file mode 100644 index 0e3207bc..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualForsakenSoul.java +++ /dev/null @@ -1,199 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.tile.TileDemonCrystal; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.common.registry.EntityRegistry; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("forsaken_soul") -public class RitualForsakenSoul extends Ritual { - public static final String CRYSTAL_RANGE = "crystal"; - public static final String DAMAGE_RANGE = "damage"; - public static final int MAX_UNIQUENESS = 10; - - public static final int HEALTH_THRESHOLD = 20; - - public double willBuffer = 0; - public double crystalBuffer = 0; - - public List keyList = new ArrayList<>(); - - public RitualForsakenSoul() { - super("ritualForsakenSoul", 0, 40000, "ritual." + BloodMagic.MODID + ".forsakenSoulRitual"); - addBlockRange(CRYSTAL_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-3, 2, -3), 7, 5, 7)); - addBlockRange(DAMAGE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-10, -10, -10), 21)); - - setMaximumVolumeAndDistanceOfRange(CRYSTAL_RANGE, 250, 5, 7); - setMaximumVolumeAndDistanceOfRange(DAMAGE_RANGE, 0, 10, 10); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - super.readFromNBT(tag); - - willBuffer = tag.getDouble("willBuffer"); - crystalBuffer = tag.getDouble("crystalBuffer"); - - keyList.clear(); - for (int i = 0; i < MAX_UNIQUENESS; i++) { - String key = "uniq" + i; - if (tag.hasKey(key)) { - keyList.add(tag.getInteger(key)); - } - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - super.writeToNBT(tag); - - tag.setDouble("willBuffer", willBuffer); - tag.setDouble("crystalBuffer", crystalBuffer); - - for (int i = 0; i < Math.min(MAX_UNIQUENESS, keyList.size()); i++) { - String key = "uniq" + i; - tag.setInteger(key, keyList.get(i)); - } - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - BlockPos pos = masterRitualStone.getBlockPos(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - int maxEffects = 100; - int totalEffects = 0; - - List crystalList = new ArrayList<>(); - - AreaDescriptor crystalRange = getBlockRange(CRYSTAL_RANGE); - - crystalRange.resetIterator(); - while (crystalRange.hasNext()) { - BlockPos nextPos = crystalRange.next().add(pos); - TileEntity tile = world.getTileEntity(nextPos); - if (tile instanceof TileDemonCrystal) { - crystalList.add((TileDemonCrystal) tile); - } - } - - AreaDescriptor damageRange = getBlockRange(DAMAGE_RANGE); - AxisAlignedBB range = damageRange.getAABB(pos); - - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, range); - - for (EntityLivingBase entity : entities) { - EntityEntry entityEntry = EntityRegistry.getEntry(entity.getClass()); - - if (entityEntry == null || BloodMagicAPI.INSTANCE.getBlacklist().getSacrifice().contains(entityEntry.getRegistryName())) - continue; - - if (entity.isEntityAlive() && !(entity instanceof EntityPlayer)) { - if (entity.attackEntityFrom(DamageSource.OUT_OF_WORLD, 1)) { - if (!entity.isEntityAlive()) { - int uniqueness = calculateUniqueness(entity); - double modifier = 1; - if (entity instanceof EntityAnimal && !((EntityAnimal) entity).collided) { - modifier = 4; - } - - willBuffer += modifier * getWillForUniqueness(uniqueness) / HEALTH_THRESHOLD * entity.getMaxHealth(); - crystalBuffer += modifier * entity.getMaxHealth() / HEALTH_THRESHOLD; - - totalEffects++; - if (totalEffects >= maxEffects) { - break; - } - } - } - } - } - - if (crystalList.size() > 0 && crystalBuffer > 0) { - double growth = Math.min(crystalBuffer, 1); - double willSyphonAmount = growth * willBuffer / crystalBuffer; - TileDemonCrystal chosenCrystal = crystalList.get(world.rand.nextInt(crystalList.size())); - double percentageGrowth = chosenCrystal.growCrystalWithWillAmount(growth * willBuffer / crystalBuffer, growth); - if (percentageGrowth > 0) { - crystalBuffer -= percentageGrowth; - willBuffer -= percentageGrowth * willSyphonAmount; - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); - } - - /** - * @param mob - * @return The amount of uniqueness to the last 10 mobs killed - */ - public int calculateUniqueness(EntityLivingBase mob) { - int key = mob.getClass().hashCode(); - keyList.add(key); - if (keyList.size() > MAX_UNIQUENESS) { - keyList.remove(0); - } - - List uniquenessList = new ArrayList<>(); - for (int value : keyList) { - if (!uniquenessList.contains(value)) { - uniquenessList.add(value); - } - } - - return Math.min(uniquenessList.size(), MAX_UNIQUENESS); - } - - public double getWillForUniqueness(int uniqueness) { - return Math.max(50 - 15 * Math.sqrt(uniqueness), 0); - } - - @Override - public int getRefreshTime() { - return 25; - } - - @Override - public int getRefreshCost() { - return 2; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.AIR); - addParallelRunes(components, 1, -1, EnumRuneType.DUSK); - addParallelRunes(components, 1, 1, EnumRuneType.FIRE); - addParallelRunes(components, 2, 1, EnumRuneType.FIRE); - addParallelRunes(components, 3, 1, EnumRuneType.FIRE); - addOffsetRunes(components, 3, 1, 1, EnumRuneType.FIRE); - addCornerRunes(components, 3, 1, EnumRuneType.EARTH); - addCornerRunes(components, 3, 0, EnumRuneType.EARTH); - addOffsetRunes(components, 3, 2, 0, EnumRuneType.EARTH); - } - - @Override - public Ritual getNewCopy() { - return new RitualForsakenSoul(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFullStomach.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFullStomach.java deleted file mode 100644 index b803b810..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualFullStomach.java +++ /dev/null @@ -1,109 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemFood; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.FoodStats; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("full_stomach") -public class RitualFullStomach extends Ritual { - public static final String FILL_RANGE = "fillRange"; - public static final String CHEST_RANGE = "chest"; - - public RitualFullStomach() { - super("ritualFullStomach", 0, 100000, "ritual." + BloodMagic.MODID + ".fullStomachRitual"); - addBlockRange(FILL_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-25, -25, -25), 51)); - addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - - setMaximumVolumeAndDistanceOfRange(FILL_RANGE, 0, 25, 25); - setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - BlockPos pos = masterRitualStone.getBlockPos(); - - int maxEffects = currentEssence / getRefreshCost(); - int totalEffects = 0; - - AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); - TileEntity tile = world.getTileEntity(chestRange.getContainedPositions(pos).get(0)); - if (tile == null || !tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null)) - return; - - IItemHandler inventory = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); - int lastSlot = 0; - AreaDescriptor fillingRange = getBlockRange(FILL_RANGE); - List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, fillingRange.getAABB(pos)); - - for (EntityPlayer player : playerList) { - FoodStats foodStats = player.getFoodStats(); - float satLevel = foodStats.getSaturationLevel(); - - for (int i = lastSlot; i < inventory.getSlots(); i++) { - ItemStack stack = inventory.extractItem(i, 1, true); - if (!stack.isEmpty() && stack.getItem() instanceof ItemFood) { - ItemFood foodItem = (ItemFood) stack.getItem(); - - int healAmount = foodItem.getHealAmount(stack); - float saturationAmount = foodItem.getSaturationModifier(stack) * healAmount * 2.0f; - - // Checks to make sure we're being efficient with the food and not wasting high value foods - // If the food provides more than the max saturation, we just accept it no matter what if the player is low - // Pam please stop being weird. Fix your mod. - if (saturationAmount + satLevel <= 20 || satLevel < 5) { - foodStats.addStats(foodItem, stack); - inventory.extractItem(i, 1, false); - totalEffects++; - lastSlot = i; - break; - } - } - } - - if (totalEffects >= maxEffects) { - masterRitualStone.getOwnerNetwork().causeNausea(); - break; - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); - } - - @Override - public int getRefreshTime() { - return 20; - } - - @Override - public int getRefreshCost() { - return 100; - } - - @Override - public void gatherComponents(Consumer components) { - addParallelRunes(components, 3, 0, EnumRuneType.FIRE); - addCornerRunes(components, 1, 0, EnumRuneType.AIR); - addOffsetRunes(components, 1, 2, 0, EnumRuneType.AIR); - addCornerRunes(components, 4, 0, EnumRuneType.WATER); - addOffsetRunes(components, 4, 3, 0, EnumRuneType.EARTH); - } - - @Override - public Ritual getNewCopy() { - return new RitualFullStomach(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualGreenGrove.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualGreenGrove.java deleted file mode 100644 index d8cdf397..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualGreenGrove.java +++ /dev/null @@ -1,277 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.*; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; - -import java.util.List; -import java.util.Random; -import java.util.function.Consumer; - -@RitualRegister("green_grove") -public class RitualGreenGrove extends Ritual { - public static final String GROW_RANGE = "growing"; - public static final String LEECH_RANGE = "leech"; - public static final String HYDRATE_RANGE = "hydrate"; - - public static double corrosiveWillDrain = 0.2; - public static double rawWillDrain = 0.05; - public static double vengefulWillDrain = 0.05; - public static double steadfastWillDrain = 0.05; - public static int defaultRefreshTime = 20; - public static double defaultGrowthChance = 0.3; - public static IBlockState farmlandState = Blocks.FARMLAND.getDefaultState().withProperty(BlockFarmland.MOISTURE, 7); - public int refreshTime = 20; - - public RitualGreenGrove() { - super("ritualGreenGrove", 0, 5000, "ritual." + BloodMagic.MODID + ".greenGroveRitual"); - addBlockRange(GROW_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, 2, -1), 3, 1, 3)); - addBlockRange(LEECH_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1)); - addBlockRange(HYDRATE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1)); - setMaximumVolumeAndDistanceOfRange(GROW_RANGE, 81, 4, 4); - setMaximumVolumeAndDistanceOfRange(LEECH_RANGE, 0, 15, 15); - setMaximumVolumeAndDistanceOfRange(HYDRATE_RANGE, 0, 15, 15); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - BlockPos pos = masterRitualStone.getBlockPos(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - int maxGrowths = currentEssence / getRefreshCost(); - int totalGrowths = 0; - - List willConfig = masterRitualStone.getActiveWillConfig(); - - DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, pos); - double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); - double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); - double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); - double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); - - refreshTime = getRefreshTimeForRawWill(rawWill); - double growthChance = getPlantGrowthChanceForWill(vengefulWill); - - boolean consumeRawWill = rawWill >= rawWillDrain && refreshTime != defaultRefreshTime; - boolean consumeVengefulWill = vengefulWill >= vengefulWillDrain && growthChance != defaultGrowthChance; - - double rawDrain = 0; - double vengefulDrain = 0; - - AreaDescriptor growingRange = getBlockRange(GROW_RANGE); - - int maxGrowthVolume = getMaxVolumeForRange(GROW_RANGE, willConfig, holder); - if (!growingRange.isWithinRange(getMaxVerticalRadiusForRange(GROW_RANGE, willConfig, holder), getMaxHorizontalRadiusForRange(GROW_RANGE, willConfig, holder)) || (maxGrowthVolume != 0 && growingRange.getVolume() > maxGrowthVolume)) { - return; - } - - for (BlockPos newPos : growingRange.getContainedPositions(pos)) { - IBlockState state = world.getBlockState(newPos); - - if (!BloodMagicAPI.INSTANCE.getBlacklist().getGreenGrove().contains(state)) { - boolean flag = state.getBlock() instanceof IGrowable || state.getBlock() instanceof BlockCactus || state.getBlock() instanceof BlockReed; - if (flag) { - if (world.rand.nextDouble() < growthChance) { - state.getBlock().updateTick(world, newPos, state, new Random()); - IBlockState newState = world.getBlockState(newPos); - if (!newState.equals(state)) { - world.playEvent(2005, newPos, 0); - totalGrowths++; - if (consumeRawWill) { - rawWill -= rawWillDrain; - rawDrain += rawWillDrain; - } - - if (consumeVengefulWill) { - vengefulWill -= vengefulWillDrain; - vengefulDrain += vengefulWillDrain; - } - } - } - } - } - - if (totalGrowths >= maxGrowths || (consumeRawWill && rawWill < rawWillDrain) || (consumeVengefulWill && vengefulWill < vengefulWillDrain)) { - break; - } - } - - if (rawDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrain, true); - } - - if (vengefulDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulDrain, true); - } - - AreaDescriptor hydrateRange = getBlockRange(HYDRATE_RANGE); - - double steadfastDrain = 0; - if (steadfastWill > steadfastWillDrain) { - AxisAlignedBB aabb = hydrateRange.getAABB(pos); - steadfastDrain += steadfastWillDrain * Utils.plantSeedsInArea(world, aabb, 2, 1); - steadfastWill -= steadfastDrain; - - for (BlockPos newPos : hydrateRange.getContainedPositions(pos)) { - if (steadfastWill < steadfastWillDrain) { - break; - } - - IBlockState state = world.getBlockState(newPos); - Block block = state.getBlock(); - - boolean hydratedBlock = false; - if (block == Blocks.DIRT || block == Blocks.GRASS) { - world.setBlockState(newPos, farmlandState); - hydratedBlock = true; - } else if (block == Blocks.FARMLAND) { - int meta = block.getMetaFromState(state); - if (meta < 7) { - world.setBlockState(newPos, farmlandState); - hydratedBlock = true; - } - } - - if (hydratedBlock) { - steadfastWill -= steadfastWillDrain; - steadfastDrain += steadfastWillDrain; - } - } - } - - if (steadfastDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastDrain, true); - } - - double corrosiveDrain = 0; - if (corrosiveWill > corrosiveWillDrain) { - AreaDescriptor leechRange = getBlockRange(LEECH_RANGE); - AxisAlignedBB mobArea = leechRange.getAABB(pos); - List entityList = world.getEntitiesWithinAABB(EntityLivingBase.class, mobArea); - for (EntityLivingBase entityLiving : entityList) { - if (corrosiveWill < corrosiveWillDrain) { - break; - } - - if (entityLiving instanceof EntityPlayer) { - continue; - } - - if (entityLiving.isPotionActive(RegistrarBloodMagic.PLANT_LEECH) || !entityLiving.isPotionApplicable(new PotionEffect(RegistrarBloodMagic.PLANT_LEECH))) { - continue; - } - - entityLiving.addPotionEffect(new PotionEffect(RegistrarBloodMagic.PLANT_LEECH, 200, 0)); - - corrosiveWill -= corrosiveWillDrain; - corrosiveDrain += corrosiveWillDrain; - } - - if (corrosiveDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveDrain, true); - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(totalGrowths * getRefreshCost())); - } - - public double getPlantGrowthChanceForWill(double will) { - if (will > 0) { - return 0.3 + will / 200; - } - - return defaultGrowthChance; - } - - public int getRefreshTimeForRawWill(double rawWill) { - if (rawWill > 0) { - return 10; - } - - return defaultRefreshTime; - } - - @Override - public int getRefreshTime() { - return refreshTime; - } - - @Override - public int getMaxVolumeForRange(String range, List activeTypes, DemonWillHolder holder) { - if (GROW_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) { - double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); - if (destructiveWill > 0) { - return 81 + (int) Math.pow(destructiveWill / 4, 1.5); - } - } - - return volumeRangeMap.get(range); - } - - @Override - public int getMaxVerticalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) { - if (GROW_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) { - double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); - if (destructiveWill > 0) { - return (int) (4 + destructiveWill / 10d); - } - } - - return verticalRangeMap.get(range); - } - - @Override - public int getMaxHorizontalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) { - if (GROW_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) { - double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); - if (destructiveWill > 0) { - return (int) (4 + destructiveWill / 10d); - } - } - - return horizontalRangeMap.get(range); - } - - @Override - public int getRefreshCost() { - return 20; //TODO: Need to find a way to balance this - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.EARTH); - addParallelRunes(components, 1, 0, EnumRuneType.WATER); - } - - @Override - public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player) { - return new ITextComponent[]{new TextComponentTranslation(this.getUnlocalizedName() + ".info"), new TextComponentTranslation(this.getUnlocalizedName() + ".default.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".corrosive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".steadfast.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".destructive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".vengeful.info")}; - } - - @Override - public Ritual getNewCopy() { - return new RitualGreenGrove(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualHarvest.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualHarvest.java deleted file mode 100644 index fed3bb5b..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualHarvest.java +++ /dev/null @@ -1,142 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.ritual.harvest.IHarvestHandler; -import WayofTime.bloodmagic.ritual.harvest.HarvestRegistry; -import com.google.common.collect.Lists; -import net.minecraft.block.state.IBlockState; -import net.minecraft.inventory.InventoryHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; - -import java.util.List; -import java.util.function.Consumer; - -/** - * This ritual uses registered {@link IHarvestHandler}'s to harvest blocks. - *

- * To register a new Handler for this ritual use - * {@link HarvestRegistry#registerHandler(IHarvestHandler)} - *

- * This ritual includes a way to change the range based on what block is above - * the MasterRitualStone. You can use - * {@link HarvestRegistry#registerRangeAmplifier(net.minecraft.block.state.IBlockState, int)} to register a - * new amplifier. - */ -@RitualRegister("harvest") -public class RitualHarvest extends Ritual { - public static final String HARVEST_RANGE = "harvestRange"; - - public RitualHarvest() { - super("ritualHarvest", 0, 20000, "ritual." + BloodMagic.MODID + ".harvestRitual"); - addBlockRange(HARVEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-4, 1, -4), 9, 5, 9)); - setMaximumVolumeAndDistanceOfRange(HARVEST_RANGE, 0, 15, 15); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - BlockPos pos = masterRitualStone.getBlockPos(); - - if (masterRitualStone.getOwnerNetwork().getCurrentEssence() < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - int harvested = 0; - - AreaDescriptor harvestArea = getBlockRange(HARVEST_RANGE); - - harvestArea.resetIterator(); - while (harvestArea.hasNext()) { - BlockPos nextPos = harvestArea.next().add(pos); - if (harvestBlock(world, nextPos, masterRitualStone.getBlockPos())) { - harvested++; - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * harvested)); - } - - @Override - public int getRefreshCost() { - return 20; - } - - @Override - public int getRefreshTime() { - return 5; - } - - @Override - public void gatherComponents(Consumer components) { - components.accept(new RitualComponent(new BlockPos(1, 0, 1), EnumRuneType.DUSK)); - components.accept(new RitualComponent(new BlockPos(1, 0, -1), EnumRuneType.DUSK)); - components.accept(new RitualComponent(new BlockPos(-1, 0, -1), EnumRuneType.DUSK)); - components.accept(new RitualComponent(new BlockPos(-1, 0, 1), EnumRuneType.DUSK)); - components.accept(new RitualComponent(new BlockPos(2, 0, 0), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(-2, 0, 0), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(0, 0, 2), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(0, 0, -2), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(3, 0, 1), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(3, 0, -1), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(-3, 0, 1), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(-3, 0, -1), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(1, 0, 3), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(-1, 0, 3), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(1, 0, -3), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(-1, 0, -3), EnumRuneType.EARTH)); - components.accept(new RitualComponent(new BlockPos(2, 0, 3), EnumRuneType.WATER)); - components.accept(new RitualComponent(new BlockPos(3, 0, 2), EnumRuneType.WATER)); - components.accept(new RitualComponent(new BlockPos(2, 0, -3), EnumRuneType.WATER)); - components.accept(new RitualComponent(new BlockPos(-3, 0, 2), EnumRuneType.WATER)); - components.accept(new RitualComponent(new BlockPos(-2, 0, 3), EnumRuneType.WATER)); - components.accept(new RitualComponent(new BlockPos(3, 0, -2), EnumRuneType.WATER)); - components.accept(new RitualComponent(new BlockPos(-2, 0, -3), EnumRuneType.WATER)); - components.accept(new RitualComponent(new BlockPos(-3, 0, -2), EnumRuneType.WATER)); - } - - @Override - public Ritual getNewCopy() { - return new RitualHarvest(); - } - - public static boolean harvestBlock(World world, BlockPos cropPos, BlockPos controllerPos) { - IBlockState harvestState = world.getBlockState(cropPos); - TileEntity potentialInventory = world.getTileEntity(controllerPos.up()); - IItemHandler itemHandler = null; - if (potentialInventory != null && potentialInventory.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN)) - itemHandler = potentialInventory.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN); - - for (IHarvestHandler handler : HarvestRegistry.getHarvestHandlers()) { - if (handler.test(world, cropPos, harvestState)) { - List drops = Lists.newArrayList(); - if (handler.harvest(world, cropPos, harvestState, drops)) { - for (ItemStack stack : drops) { - if (stack.isEmpty()) - continue; - - // TODO I wrote this, but didn't actually think about whether it should be a thing. Remove the true if we want to keep it - if (itemHandler == null || true) - InventoryHelper.spawnItemStack(world, cropPos.getX(), cropPos.getY(), cropPos.getZ(), stack); - else { - ItemStack remainder = ItemHandlerHelper.insertItemStacked(itemHandler, stack, false); - if (!remainder.isEmpty()) - InventoryHelper.spawnItemStack(world, cropPos.getX(), cropPos.getY(), cropPos.getZ(), remainder); - } - } - return true; - } - } - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualInterdiction.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualInterdiction.java deleted file mode 100644 index 861b2f32..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualInterdiction.java +++ /dev/null @@ -1,73 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.function.Consumer; - -@RitualRegister("interdiction") -public class RitualInterdiction extends Ritual { - public static final String INTERDICTION_RANGE = "interdictionRange"; - - public RitualInterdiction() { - super("ritualInterdiction", 0, 1000, "ritual." + BloodMagic.MODID + ".interdictionRitual"); - addBlockRange(INTERDICTION_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-2, 0, -2), 5)); - setMaximumVolumeAndDistanceOfRange(INTERDICTION_RANGE, 0, 10, 10); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - AreaDescriptor interdictionRange = getBlockRange(INTERDICTION_RANGE); - - for (EntityLivingBase entity : world.getEntitiesWithinAABB(EntityLivingBase.class, interdictionRange.getAABB(masterRitualStone.getBlockPos()))) { - if (entity instanceof EntityPlayer && (((EntityPlayer) entity).capabilities.isCreativeMode || ((EntityPlayer) entity).getGameProfile().getId().equals(masterRitualStone.getOwner()))) - continue; - - double xDif = entity.posX - (masterRitualStone.getBlockPos().getX() + 0.5); - double yDif = entity.posY - masterRitualStone.getBlockPos().getY() + 1; - double zDif = entity.posZ - (masterRitualStone.getBlockPos().getZ() + 0.5); - - entity.motionX = 0.1 * xDif; - entity.motionY = 0.1 * yDif; - entity.motionZ = 0.1 * zDif; - entity.fallDistance = 0; - - if (entity instanceof EntityPlayer) { - entity.velocityChanged = true; - } - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 1; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.AIR); - addParallelRunes(components, 1, 0, EnumRuneType.AIR); - } - - @Override - public Ritual getNewCopy() { - return new RitualInterdiction(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualJumping.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualJumping.java deleted file mode 100644 index 975f84d7..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualJumping.java +++ /dev/null @@ -1,82 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("jumping") -public class RitualJumping extends Ritual { - public static final String JUMP_RANGE = "jumpRange"; - - public RitualJumping() { - super("ritualJump", 0, 5000, "ritual." + BloodMagic.MODID + ".jumpRitual"); - addBlockRange(JUMP_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, 1, -1), 3, 1, 3)); - setMaximumVolumeAndDistanceOfRange(JUMP_RANGE, 0, 5, 5); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - int maxEffects = currentEssence / getRefreshCost(); - int totalEffects = 0; - - AreaDescriptor jumpRange = getBlockRange(JUMP_RANGE); - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, jumpRange.getAABB(masterRitualStone.getBlockPos())); - for (EntityLivingBase entity : entities) { - if (totalEffects >= maxEffects) { - break; - } - - double motionY = 1.5; - - entity.fallDistance = 0; - if (entity.isSneaking()) { - continue; - } - - entity.motionY = motionY; - totalEffects++; - - if (entity instanceof EntityPlayer) { - Utils.setPlayerSpeedFromServer((EntityPlayer) entity, entity.motionX, entity.motionY, entity.motionZ); - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 5; - } - - @Override - public void gatherComponents(Consumer components) { - for (int i = -1; i <= 1; i++) - addCornerRunes(components, 1, i, EnumRuneType.AIR); - } - - @Override - public Ritual getNewCopy() { - return new RitualJumping(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualLava.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualLava.java deleted file mode 100644 index e7e064a8..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualLava.java +++ /dev/null @@ -1,297 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.MobEffects; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("lava") -public class RitualLava extends Ritual { - public static final String LAVA_RANGE = "lavaRange"; - public static final String FIRE_FUSE_RANGE = "fireFuse"; - public static final String FIRE_RESIST_RANGE = "fireResist"; - public static final String FIRE_DAMAGE_RANGE = "fireDamage"; - public static final String LAVA_TANK_RANGE = "lavaTank"; - - public static final double vengefulWillDrain = 1; - public static final double steadfastWillDrain = 0.5; - public static final double corrosiveWillDrain = 0.2; - public static final int corrosiveRefreshTime = 20; - public int timer = 0; - - public RitualLava() { - super("ritualLava", 0, 10000, "ritual." + BloodMagic.MODID + ".lavaRitual"); - addBlockRange(LAVA_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - addBlockRange(FIRE_FUSE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-2, -2, -2), 5)); - addBlockRange(FIRE_RESIST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1)); - addBlockRange(FIRE_DAMAGE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1)); - addBlockRange(LAVA_TANK_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - - setMaximumVolumeAndDistanceOfRange(LAVA_RANGE, 9, 3, 3); - setMaximumVolumeAndDistanceOfRange(FIRE_FUSE_RANGE, 0, 10, 10); - setMaximumVolumeAndDistanceOfRange(FIRE_RESIST_RANGE, 0, 10, 10); - setMaximumVolumeAndDistanceOfRange(FIRE_DAMAGE_RANGE, 0, 10, 10); - setMaximumVolumeAndDistanceOfRange(LAVA_TANK_RANGE, 1, 10, 10); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - timer++; - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - int lpDrain = 0; - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - List willConfig = masterRitualStone.getActiveWillConfig(); - - double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); - double rawDrained = 0; - - DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, pos); - AreaDescriptor lavaRange = getBlockRange(LAVA_RANGE); - - int maxLavaVolume = getMaxVolumeForRange(LAVA_RANGE, willConfig, holder); - if (!lavaRange.isWithinRange(getMaxVerticalRadiusForRange(LAVA_RANGE, willConfig, holder), getMaxHorizontalRadiusForRange(LAVA_RANGE, willConfig, holder)) || (maxLavaVolume != 0 && lavaRange.getVolume() > maxLavaVolume)) { - return; - } - - for (BlockPos newPos : lavaRange.getContainedPositions(pos)) { - IBlockState state = world.getBlockState(newPos); - if (world.isAirBlock(newPos) || Utils.isFlowingLiquid(world, newPos, state)) { - int lpCost = getLPCostForRawWill(rawWill); - if (currentEssence < lpCost) { - break; - } - world.setBlockState(newPos, Blocks.FLOWING_LAVA.getDefaultState()); - currentEssence -= lpCost; - lpDrain += lpCost; - if (rawWill > 0) { - double drain = getWillCostForRawWill(rawWill); - rawWill -= drain; - rawDrained += drain; - } - } - } - - if (rawWill > 0) { - AreaDescriptor chestRange = getBlockRange(LAVA_TANK_RANGE); - TileEntity tile = world.getTileEntity(chestRange.getContainedPositions(pos).get(0)); - double drain = getWillCostForRawWill(rawWill); - int lpCost = getLPCostForRawWill(rawWill); - - if (rawWill >= drain && currentEssence >= lpCost) { - if (tile != null) { - if (tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { - IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); - double filled = handler.fill(new FluidStack(FluidRegistry.LAVA, 1000), true); - - double ratio = filled / 1000; - - rawWill -= drain * ratio; - rawDrained += drain * ratio; - - currentEssence -= Math.ceil(lpCost * ratio); - lpDrain += Math.ceil(lpCost * ratio); - } - } - } - } - - double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); - double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); - double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); - - if (vengefulWill >= vengefulWillDrain) { - double vengefulDrained = 0; - AreaDescriptor fuseRange = getBlockRange(FIRE_FUSE_RANGE); - - AxisAlignedBB fuseArea = fuseRange.getAABB(pos); - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, fuseArea); - - for (EntityLivingBase entity : entities) { - if (vengefulWill < vengefulWillDrain) { - break; - } - - if (entity instanceof EntityPlayer) { - continue; - } - - if (!entity.isPotionActive(RegistrarBloodMagic.FIRE_FUSE)) { - entity.addPotionEffect(new PotionEffect(RegistrarBloodMagic.FIRE_FUSE, 100, 0)); - - vengefulDrained += vengefulWillDrain; - vengefulWill -= vengefulWillDrain; - } - } - - if (vengefulDrained > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulDrained, true); - } - } - - if (steadfastWill >= steadfastWillDrain) { - double steadfastDrained = 0; - AreaDescriptor resistRange = getBlockRange(FIRE_RESIST_RANGE); - - int duration = getFireResistForWill(steadfastWill); - - AxisAlignedBB resistArea = resistRange.getAABB(pos); - List entities = world.getEntitiesWithinAABB(EntityPlayer.class, resistArea); - - for (EntityPlayer entity : entities) { - if (steadfastWill < steadfastWillDrain) { - break; - } - if (!entity.isPotionActive(MobEffects.FIRE_RESISTANCE) || (entity.getActivePotionEffect(MobEffects.FIRE_RESISTANCE).getDuration() < 2)) { - entity.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 100, 0)); - - steadfastDrained += steadfastWillDrain; - steadfastWill -= steadfastWillDrain; - } - } - - if (steadfastDrained > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastDrained, true); - } - } - - if (timer % corrosiveRefreshTime == 0 && corrosiveWill >= corrosiveWillDrain) { - double corrosiveDrained = 0; - AreaDescriptor resistRange = getBlockRange(FIRE_DAMAGE_RANGE); - - float damage = getCorrosiveDamageForWill(corrosiveWill); - - AxisAlignedBB damageArea = resistRange.getAABB(pos); - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, damageArea); - - for (EntityLivingBase entity : entities) { - if (corrosiveWill < corrosiveWillDrain) { - break; - } - - if (!entity.isDead && entity.hurtTime <= 0 && Utils.isImmuneToFireDamage(entity)) { - if (entity.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, damage)) { - corrosiveDrained += corrosiveWillDrain; - corrosiveWill -= corrosiveWillDrain; - } - } - } - - if (corrosiveDrained > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveDrained, true); - } - } - - if (rawDrained > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrained, true); - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(lpDrain)); - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 500; - } - - @Override - public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player) { - return new ITextComponent[]{new TextComponentTranslation(this.getUnlocalizedName() + ".info"), new TextComponentTranslation(this.getUnlocalizedName() + ".default.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".corrosive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".steadfast.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".destructive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".vengeful.info")}; - } - - @Override - public void gatherComponents(Consumer components) { - addParallelRunes(components, 1, 0, EnumRuneType.FIRE); - } - - @Override - public Ritual getNewCopy() { - return new RitualLava(); - } - - @Override - public int getMaxVolumeForRange(String range, List activeTypes, DemonWillHolder holder) { - if (LAVA_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) { - double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); - if (destructiveWill > 0) { - return 9 + (int) Math.pow(destructiveWill / 10, 1.5); - } - } - - return volumeRangeMap.get(range); - } - - @Override - public int getMaxVerticalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) { - if (LAVA_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) { - double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); - if (destructiveWill > 0) { - return (int) (3 + destructiveWill / 10d); - } - } - - return verticalRangeMap.get(range); - } - - @Override - public int getMaxHorizontalRadiusForRange(String range, List activeTypes, DemonWillHolder holder) { - if (LAVA_RANGE.equals(range) && activeTypes.contains(EnumDemonWillType.DESTRUCTIVE)) { - double destructiveWill = holder.getWill(EnumDemonWillType.DESTRUCTIVE); - if (destructiveWill > 0) { - return (int) (3 + destructiveWill / 10d); - } - } - - return horizontalRangeMap.get(range); - } - - public int getFireResistForWill(double steadfastWill) { - return (int) (200 + steadfastWill * 3); - } - - public float getCorrosiveDamageForWill(double corrosiveWill) { - return (float) (1 + corrosiveWill * 0.05); - } - - public int getLPCostForRawWill(double raw) { - return Math.max((int) (500 - raw), 0); - } - - public double getWillCostForRawWill(double raw) { - return Math.min(1, raw / 500); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualLivingArmourDowngrade.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualLivingArmourDowngrade.java deleted file mode 100644 index 35aa10ba..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualLivingArmourDowngrade.java +++ /dev/null @@ -1,208 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.recipe.LivingArmourDowngradeRecipe; -import WayofTime.bloodmagic.core.registry.LivingArmourDowngradeRecipeRegistry; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.item.EntityItemFrame; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("armour_downgrade") -public class RitualLivingArmourDowngrade extends Ritual { - public static final String DOWNGRADE_RANGE = "containmentRange"; - private int internalTimer = 0; - - public RitualLivingArmourDowngrade() { - super("ritualDowngrade", 0, 10000, "ritual." + BloodMagic.MODID + ".downgradeRitual"); - addBlockRange(DOWNGRADE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-3, 0, -3), 7)); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos masterPos = masterRitualStone.getBlockPos(); - - AreaDescriptor downgradeRange = getBlockRange(DOWNGRADE_RANGE); - - boolean isActivatorPresent = false; - for (EntityPlayer player : world.getEntitiesWithinAABB(EntityPlayer.class, downgradeRange.getAABB(masterRitualStone.getBlockPos()))) { - if (player.getGameProfile().getId().equals(masterRitualStone.getOwner())) { - ItemStack keyStack = getStackFromItemFrame(world, masterPos, masterRitualStone.getDirection()); - if (keyStack.isEmpty()) { - return; - } - - List textList = LivingArmourDowngradeRecipeRegistry.getDialogForProcessTick(keyStack, internalTimer); - if (textList != null) { - ChatUtil.sendChat(player, textList.toArray(new ITextComponent[textList.size()])); - } - - internalTimer++; - - if (player.isSneaking()) { - double distance2 = masterPos.offset(EnumFacing.UP).distanceSqToCenter(player.posX, player.posY, player.posZ); - if (distance2 > 1) { - return; - } - - BlockPos chestPos = masterPos.offset(masterRitualStone.getDirection(), 2).offset(EnumFacing.UP); - TileEntity tile = world.getTileEntity(chestPos); - if (tile == null) { - return; - } - IItemHandler inv = Utils.getInventory(tile, null); - if (inv != null) { - List recipeList = new ArrayList<>(); - for (int i = 0; i < inv.getSlots(); i++) { - ItemStack invStack = inv.getStackInSlot(i); - if (!invStack.isEmpty()) { - recipeList.add(invStack); - } - } - - LivingArmourDowngradeRecipe recipe = LivingArmourDowngradeRecipeRegistry.getMatchingRecipe(keyStack, recipeList, world, masterPos); - if (recipe != null) { - LivingArmourUpgrade upgrade = recipe.getRecipeOutput(); - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - if (armour.canApplyUpgrade(player, upgrade)) { - if (armour.upgradeArmour(player, upgrade)) { - ItemLivingArmour.setLivingArmour(chestStack, armour); - - recipe.consumeInventory(inv); - - EntityLightningBolt lightning = new EntityLightningBolt(world, chestPos.getX(), chestPos.getY(), chestPos.getZ(), true); - world.spawnEntity(lightning); - - masterRitualStone.setActive(false); - } - } else { - //TODO: You are not able to receive my blessing... - //TODO: Need to add a timer that will stop it from working. - } - } - } - } - } - } - - return; - } - } - - if (!isActivatorPresent) { - internalTimer = 0; - } - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - super.readFromNBT(tag); - - this.internalTimer = tag.getInteger("internalTimer"); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - super.writeToNBT(tag); - - tag.setInteger("internalTimer", internalTimer); - } - - public ItemStack getStackFromItemFrame(World world, BlockPos masterPos, EnumFacing direction) { - BlockPos offsetPos = new BlockPos(0, 3, 0); - offsetPos = offsetPos.offset(direction, 2); - - AxisAlignedBB bb = new AxisAlignedBB(masterPos.add(offsetPos)); - List frames = world.getEntitiesWithinAABB(EntityItemFrame.class, bb); - for (EntityItemFrame frame : frames) { - if (!frame.getDisplayedItem().isEmpty()) { - return frame.getDisplayedItem(); - } - } - - return ItemStack.EMPTY; - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 0; - } - - @Override - public void gatherComponents(Consumer components) { - addRune(components, 0, 0, -1, EnumRuneType.AIR); - addRune(components, 0, 0, -2, EnumRuneType.DUSK); - addRune(components, 0, 1, -3, EnumRuneType.DUSK); - addRune(components, 0, 2, -3, EnumRuneType.BLANK); - addRune(components, 0, 3, -3, EnumRuneType.BLANK); - addRune(components, 0, 1, -4, EnumRuneType.FIRE); - - for (int i = 1; i <= 3; i++) - addRune(components, 0, 0, i, EnumRuneType.AIR); - - for (int sgn = -1; sgn <= 1; sgn += 2) { - addRune(components, sgn, 0, 4, EnumRuneType.AIR); - addRune(components, sgn * 2, 0, 2, EnumRuneType.AIR); - addRune(components, sgn * 3, 0, 2, EnumRuneType.AIR); - addRune(components, sgn * 3, 0, 3, EnumRuneType.AIR); - addRune(components, sgn, 0, 0, EnumRuneType.EARTH); - addRune(components, sgn, 0, 1, EnumRuneType.EARTH); - addRune(components, sgn * 2, 0, -1, EnumRuneType.FIRE); - addRune(components, sgn * 2, 0, -2, EnumRuneType.FIRE); - addRune(components, sgn * 3, 0, -2, EnumRuneType.FIRE); - addRune(components, sgn * 3, 0, -3, EnumRuneType.FIRE); - addRune(components, sgn * 3, 0, -4, EnumRuneType.FIRE); - addRune(components, sgn, 1, -1, EnumRuneType.AIR); - addRune(components, sgn, 1, -2, EnumRuneType.AIR); - addRune(components, sgn, 1, -4, EnumRuneType.FIRE); - addRune(components, sgn * 2, 1, -4, EnumRuneType.FIRE); - addRune(components, sgn, 0, -3, EnumRuneType.EARTH); - addRune(components, sgn, 0, -4, EnumRuneType.EARTH); - addRune(components, sgn, 0, -5, EnumRuneType.EARTH); - addRune(components, sgn, 1, -5, EnumRuneType.EARTH); - addRune(components, sgn, 2, -5, EnumRuneType.EARTH); - addRune(components, sgn, 3, -5, EnumRuneType.EARTH); - addRune(components, sgn, 3, -4, EnumRuneType.EARTH); - } - } - - @Override - public Ritual getNewCopy() { - return new RitualLivingArmourDowngrade(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualMagnetic.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualMagnetic.java deleted file mode 100644 index 8d9a662c..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualMagnetic.java +++ /dev/null @@ -1,162 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.FakePlayerFactory; - - -import java.util.function.Consumer; - -@RitualRegister("magnetism") -public class RitualMagnetic extends Ritual { - public static final String PLACEMENT_RANGE = "placementRange"; - // public static final String SEARCH_RANGE = "searchRange"; - public BlockPos lastPos; // An offset - private FakePlayer fakePlayer; - - public RitualMagnetic() { - super("ritualMagnetic", 0, 5000, "ritual." + BloodMagic.MODID + ".magneticRitual"); - addBlockRange(PLACEMENT_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, 1, -1), 3)); - setMaximumVolumeAndDistanceOfRange(PLACEMENT_RANGE, 50, 4, 4); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - Vec3d MRSpos = new Vec3d(masterRitualStone.getBlockPos()); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - - AreaDescriptor placementRange = getBlockRange(PLACEMENT_RANGE); - - BlockPos replacement = pos; - boolean replace = false; - - for (BlockPos offset : placementRange.getContainedPositions(pos)) { - if (world.isAirBlock(offset)) { - replacement = offset; - replace = true; - break; - } - } - - IBlockState downState = world.getBlockState(pos.down()); - int radius = getRadius(downState.getBlock()); - - if (replace) { - int j = -1; - int i = -radius; - int k = -radius; - - if (lastPos != null) { - j = lastPos.getY(); - i = Math.min(radius, Math.max(-radius, lastPos.getX())); - k = Math.min(radius, Math.max(-radius, lastPos.getZ())); - } - - if (j + pos.getY() >= 0) { - while (i <= radius) { - while (k <= radius) { - BlockPos newPos = pos.add(i, j, k); - Vec3d newPosVector = new Vec3d(newPos); - IBlockState state = world.getBlockState(newPos); - RayTraceResult fakeRayTrace = world.rayTraceBlocks(MRSpos, newPosVector, false); - ItemStack checkStack = state.getBlock().getPickBlock(state, fakeRayTrace, world, newPos, getFakePlayer((WorldServer) world)); - if (isBlockOre(checkStack)) { - Utils.swapLocations(world, newPos, world, replacement); - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - k++; - this.lastPos = new BlockPos(i, j, k); - return; - } else { - k++; - } - } - i++; - k = -radius; - } - j--; - i = -radius; - this.lastPos = new BlockPos(i, j, k); - return; - } - - j = -1; - this.lastPos = new BlockPos(i, j, k); - } - - } - - public int getRadius(Block block) { - if (block == Blocks.IRON_BLOCK) { - return 7; - } - - if (block == Blocks.GOLD_BLOCK) { - return 15; - } - - if (block == Blocks.DIAMOND_BLOCK) { - return 31; - } - - return 3; - } - - @Override - public int getRefreshTime() { - return 40; - } - - @Override - public int getRefreshCost() { - return 50; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.EARTH); - addParallelRunes(components, 2, 1, EnumRuneType.EARTH); - addCornerRunes(components, 2, 1, EnumRuneType.AIR); - addParallelRunes(components, 2, 2, EnumRuneType.FIRE); - } - - @Override - public Ritual getNewCopy() { - return new RitualMagnetic(); - } - - private FakePlayer getFakePlayer(WorldServer world) { - return fakePlayer == null ? fakePlayer = FakePlayerFactory.get(world, new GameProfile(null, BloodMagic.MODID + "_ritual_magnetic")) : fakePlayer; - } - - public static boolean isBlockOre(ItemStack stack) { - if (stack.isEmpty()) - return false; - - for (int id : OreDictionary.getOreIDs(stack)) { - String oreName = OreDictionary.getOreName(id); - if (oreName.contains("ore")) - return true; - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualMeteor.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualMeteor.java deleted file mode 100644 index b9dbc916..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualMeteor.java +++ /dev/null @@ -1,143 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.entity.projectile.EntityMeteor; -import WayofTime.bloodmagic.meteor.Meteor; -import WayofTime.bloodmagic.meteor.MeteorRegistry; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("meteor") -public class RitualMeteor extends Ritual { - public static final String ITEM_RANGE = "itemRange"; - public static final double destructiveWillDrain = 50; - - public RitualMeteor() { - super("ritualMeteor", 0, 1000000, "ritual." + BloodMagic.MODID + ".meteorRitual"); - addBlockRange(ITEM_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - setMaximumVolumeAndDistanceOfRange(ITEM_RANGE, 0, 10, 10); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - BlockPos pos = masterRitualStone.getBlockPos(); - - List willConfig = masterRitualStone.getActiveWillConfig(); - - double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); - double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); - double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); - double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); - double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); - - AreaDescriptor itemDetectionRange = getBlockRange(ITEM_RANGE); - List itemList = world.getEntitiesWithinAABB(EntityItem.class, itemDetectionRange.getAABB(pos)); - - double radiusModifier = getRadiusModifier(rawWill); - double explosionModifier = getExplosionModifier(steadfastWill); - double fillerChance = getFillerChance(corrosiveWill); - - boolean successful = false; - - for (EntityItem entityItem : itemList) { - ItemStack stack = entityItem.getItem(); - Meteor meteor = MeteorRegistry.getMeteorForItem(stack); - if (meteor != null) { - EntityMeteor entityMeteor = new EntityMeteor(world, pos.getX(), 260, pos.getZ(), 0, -0.1, 0, radiusModifier, explosionModifier, fillerChance); - entityMeteor.setMeteorStack(stack.copy()); - world.spawnEntity(entityMeteor); - - entityItem.setDead(); - - if (destructiveWill >= destructiveWillDrain && currentEssence >= 1000000000) { - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(1000000)); - } else { - masterRitualStone.setActive(false); - } - successful = true; - break; - } - } - - if (successful) { - if (rawWill > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawWill, true); - } - - if (corrosiveWill > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveWill, true); - } - - if (steadfastWill > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastWill, true); - } - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 0; - } - - @Override - public void gatherComponents(Consumer components) { - addParallelRunes(components, 2, 0, EnumRuneType.FIRE); - addOffsetRunes(components, 3, 1, 0, EnumRuneType.AIR); - addOffsetRunes(components, 4, 2, 0, EnumRuneType.AIR); - addOffsetRunes(components, 5, 3, 0, EnumRuneType.DUSK); - addCornerRunes(components, 4, 0, EnumRuneType.DUSK); - - for (int i = 4; i <= 6; i++) { - addParallelRunes(components, 4, 0, EnumRuneType.EARTH); - } - - addParallelRunes(components, 8, 0, EnumRuneType.EARTH); - addParallelRunes(components, 8, 1, EnumRuneType.EARTH); - addParallelRunes(components, 7, 1, EnumRuneType.EARTH); - addParallelRunes(components, 7, 2, EnumRuneType.EARTH); - addParallelRunes(components, 6, 2, EnumRuneType.FIRE); - addParallelRunes(components, 6, 3, EnumRuneType.WATER); - addParallelRunes(components, 5, 3, EnumRuneType.WATER); - addParallelRunes(components, 5, 4, EnumRuneType.AIR); - - addOffsetRunes(components, 1, 4, 4, EnumRuneType.AIR); - addParallelRunes(components, 4, 4, EnumRuneType.AIR); - - addOffsetRunes(components, 2, 4, 4, EnumRuneType.WATER); - addOffsetRunes(components, 2, 3, 4, EnumRuneType.FIRE); - addCornerRunes(components, 3, 4, EnumRuneType.FIRE); - } - - @Override - public Ritual getNewCopy() { - return new RitualMeteor(); - } - - public double getRadiusModifier(double rawWill) { - return Math.pow(1 + rawWill / 100, 1 / 3); - } - - public double getFillerChance(double corrosiveWill) { - return corrosiveWill / 200; - } - - public double getExplosionModifier(double steadfastWill) { - return Math.max(Math.pow(0.4, steadfastWill / 100), 1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPlacer.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPlacer.java deleted file mode 100644 index 90469c94..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPlacer.java +++ /dev/null @@ -1,104 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; - -import java.util.function.Consumer; - -@RitualRegister("placer") -public class RitualPlacer extends Ritual { - public static final String PLACER_RANGE = "placerRange"; - public static final String CHEST_RANGE = "chest"; - - public RitualPlacer() { - super("ritualPlacer", 0, 5000, "ritual." + BloodMagic.MODID + ".placerRitual"); - addBlockRange(PLACER_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-2, 0, -2), 5, 1, 5)); - addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - - setMaximumVolumeAndDistanceOfRange(PLACER_RANGE, 300, 7, 7); - setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - BlockPos masterPos = masterRitualStone.getBlockPos(); - AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); - TileEntity tileEntity = world.getTileEntity(chestRange.getContainedPositions(masterPos).get(0)); - - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - AreaDescriptor areaDescriptor = getBlockRange(PLACER_RANGE); - - if (tileEntity != null) { - if (tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN)) { - IItemHandler itemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN); - - if (itemHandler.getSlots() <= 0) { - return; - } - - posLoop: - for (BlockPos blockPos : areaDescriptor.getContainedPositions(masterRitualStone.getBlockPos())) { - if (!world.getBlockState(blockPos).getBlock().isReplaceable(world, blockPos)) - continue; - - for (int invSlot = 0; invSlot < itemHandler.getSlots(); invSlot++) { - ItemStack stack = itemHandler.extractItem(invSlot, 1, true); - if (stack.isEmpty() || !(stack.getItem() instanceof ItemBlock)) - continue; - - IBlockState placeState = Block.getBlockFromItem(itemHandler.getStackInSlot(invSlot).getItem()).getStateFromMeta(itemHandler.getStackInSlot(invSlot).getItemDamage()); - world.setBlockState(blockPos, placeState); - itemHandler.extractItem(invSlot, 1, false); - tileEntity.markDirty(); - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - break posLoop; // Break instead of return in case we add things later - } - } - } - } - } - - @Override - public int getRefreshCost() { - return 50; - } - - @Override - public void gatherComponents(Consumer components) { - addRune(components, 3, 0, 3, EnumRuneType.EARTH); - addRune(components, 3, 0, -3, EnumRuneType.EARTH); - addRune(components, -3, 0, 3, EnumRuneType.EARTH); - addRune(components, -3, 0, -3, EnumRuneType.EARTH); - - addRune(components, 3, 0, 2, EnumRuneType.WATER); - addRune(components, 3, 0, -2, EnumRuneType.WATER); - addRune(components, 2, 0, 3, EnumRuneType.WATER); - addRune(components, 2, 0, -3, EnumRuneType.WATER); - addRune(components, -2, 0, 3, EnumRuneType.WATER); - addRune(components, -2, 0, -3, EnumRuneType.WATER); - addRune(components, -3, 0, 2, EnumRuneType.WATER); - addRune(components, -3, 0, -2, EnumRuneType.WATER); - } - - @Override - public Ritual getNewCopy() { - return new RitualPlacer(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPortal.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPortal.java deleted file mode 100644 index 8ec0b006..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPortal.java +++ /dev/null @@ -1,230 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.teleport.PortalLocation; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.ritual.portal.LocationsHandler; -import WayofTime.bloodmagic.tile.TileDimensionalPortal; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -import java.util.UUID; -import java.util.function.Consumer; - -@RitualRegister("portal") -public class RitualPortal extends Ritual { - - public static final String PORTAL_NBT_TAG = "PortalRitualTag"; - public static final String PORTAL_ID_TAG = "PortalRitualID"; - private NBTTagCompound portalRitualTag; - - public RitualPortal() { - super("ritualPortal", 0, 50000, "ritual." + BloodMagic.MODID + ".portalRitual"); - portalRitualTag = new NBTTagCompound(); - } - - @Override - public boolean activateRitual(IMasterRitualStone masterRitualStone, EntityPlayer player, UUID owner) { - World world = masterRitualStone.getWorldObj(); - int x = masterRitualStone.getBlockPos().getX(); - int y = masterRitualStone.getBlockPos().getY(); - int z = masterRitualStone.getBlockPos().getZ(); - EnumFacing direction = masterRitualStone.getDirection(); - - String name = owner.toString(); - IBlockState blockState; - - if (!world.isRemote) { - portalRitualTag.removeTag(PORTAL_ID_TAG); - - if (direction == EnumFacing.NORTH || direction == EnumFacing.SOUTH) { - for (int i = x - 3; i <= x + 3; i++) { - for (int k = z - 2; k <= z + 2; k++) { - if (!world.isAirBlock(new BlockPos(i, y, k)) && !(getBlockState(world, i, y, k).getBlock() == RegistrarBloodMagicBlocks.RITUAL_STONE)) { - blockState = getBlockState(world, i, y, k); - name = addStringToEnd(name, ForgeRegistries.BLOCKS.getKey(blockState.getBlock()) + String.valueOf(blockState.getBlock().getMetaFromState(blockState))); - } - } - } - for (int j = y + 1; j <= y + 5; j++) { - if (!world.isAirBlock(new BlockPos(x - 3, j, z)) && !(getBlockState(world, x - 3, j, z).getBlock() == RegistrarBloodMagicBlocks.RITUAL_STONE)) { - blockState = getBlockState(world, x - 3, j, z); - name = addStringToEnd(name, ForgeRegistries.BLOCKS.getKey(blockState.getBlock()) + String.valueOf(blockState.getBlock().getMetaFromState(blockState))); - } - } - for (int j = y + 1; j <= y + 5; j++) { - if (!world.isAirBlock(new BlockPos(x + 3, j, z)) && !(getBlockState(world, x + 3, j, z) == RegistrarBloodMagicBlocks.RITUAL_STONE)) { - blockState = getBlockState(world, x + 3, j, z); - name = addStringToEnd(name, ForgeRegistries.BLOCKS.getKey(blockState.getBlock()) + String.valueOf(blockState.getBlock().getMetaFromState(blockState))); - } - } - } else if (direction == EnumFacing.EAST || direction == EnumFacing.WEST) { - for (int k = z - 3; k <= z + 3; k++) { - for (int i = x - 2; i <= x + 2; i++) { - if (!world.isAirBlock(new BlockPos(i, y, k)) && !(getBlockState(world, i, y, k).getBlock() == RegistrarBloodMagicBlocks.RITUAL_STONE)) { - blockState = getBlockState(world, i, y, k); - name = addStringToEnd(name, ForgeRegistries.BLOCKS.getKey(blockState.getBlock()) + String.valueOf(blockState.getBlock().getMetaFromState(blockState))); - } - } - } - for (int j = y + 1; j <= y + 5; j++) { - if (!world.isAirBlock(new BlockPos(x, j, z - 3)) && !(getBlockState(world, x, j, z - 3).getBlock() == RegistrarBloodMagicBlocks.RITUAL_STONE)) { - blockState = getBlockState(world, x, j, z - 3); - name = addStringToEnd(name, ForgeRegistries.BLOCKS.getKey(blockState.getBlock()) + String.valueOf(blockState.getBlock().getMetaFromState(blockState))); - } - } - for (int j = y + 1; j <= y + 5; j++) { - if (!world.isAirBlock(new BlockPos(x, j, z + 3)) && !(getBlockState(world, x, j, z + 3).getBlock() == RegistrarBloodMagicBlocks.RITUAL_STONE)) { - blockState = getBlockState(world, x, j, z + 3); - name = addStringToEnd(name, ForgeRegistries.BLOCKS.getKey(blockState.getBlock()) + String.valueOf(blockState.getBlock().getMetaFromState(blockState))); - } - } - } - - if (LocationsHandler.getLocationsHandler().addLocation(name, new PortalLocation(x, y + 1, z, world.provider.getDimension()))) { - portalRitualTag.setString(PORTAL_ID_TAG, name); - return true; - } - } - return false; - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - if (world.isRemote) { - return; - } - - int x = masterRitualStone.getBlockPos().getX(); - int y = masterRitualStone.getBlockPos().getY(); - int z = masterRitualStone.getBlockPos().getZ(); - EnumFacing direction = masterRitualStone.getDirection(); - - if (direction == EnumFacing.NORTH || direction == EnumFacing.SOUTH) { - for (int i = x - 1; i <= x + 1; i++) { - for (int j = y + 1; j <= y + 3; j++) { - BlockPos tempPos = new BlockPos(i, j, z); - - if (world.isAirBlock(tempPos)) { - IBlockState blockState = RegistrarBloodMagicBlocks.DIMENSIONAL_PORTAL.getStateFromMeta(0); - world.setBlockState(tempPos, blockState, 3); - - if (world.getTileEntity(tempPos) != null && world.getTileEntity(tempPos) instanceof TileDimensionalPortal) { - TileDimensionalPortal tile = (TileDimensionalPortal) world.getTileEntity(tempPos); - tile.setMasterStonePos(masterRitualStone.getBlockPos()); - tile.portalID = portalRitualTag.getString(PORTAL_ID_TAG); - } - } - } - } - } else if (direction == EnumFacing.EAST || direction == EnumFacing.WEST) { - for (int k = z - 1; k <= z + 1; k++) { - for (int j = y + 1; j <= y + 3; j++) { - BlockPos tempPos = new BlockPos(x, j, k); - if (world.isAirBlock(tempPos)) { - IBlockState blockState = RegistrarBloodMagicBlocks.DIMENSIONAL_PORTAL.getStateFromMeta(1); - world.setBlockState(tempPos, blockState, 3); - - if (world.getTileEntity(tempPos) != null && world.getTileEntity(tempPos) instanceof TileDimensionalPortal) { - TileDimensionalPortal tile = (TileDimensionalPortal) world.getTileEntity(tempPos); - tile.setMasterStonePos(masterRitualStone.getBlockPos()); - tile.portalID = portalRitualTag.getString(PORTAL_ID_TAG); - } - } - } - } - } - - } - - @Override - public void stopRitual(IMasterRitualStone masterRitualStone, BreakType breakType) { - World world = masterRitualStone.getWorldObj(); - int x = masterRitualStone.getBlockPos().getX(); - int y = masterRitualStone.getBlockPos().getY(); - int z = masterRitualStone.getBlockPos().getZ(); - EnumFacing direction = masterRitualStone.getDirection(); - - LocationsHandler.getLocationsHandler().removeLocation(portalRitualTag.getString(PORTAL_ID_TAG), new PortalLocation(x, y + 1, z, world.provider.getDimension())); - - if (direction == EnumFacing.NORTH || direction == EnumFacing.SOUTH) { - for (int i = x - 2; i <= x + 2; i++) { - for (int j = y + 1; j <= y + 3; j++) { - if (getBlockState(world, i, j, z).getBlock() == RegistrarBloodMagicBlocks.DIMENSIONAL_PORTAL) { - world.setBlockToAir(new BlockPos(i, j, z)); - } - } - } - } else if (direction == EnumFacing.EAST || direction == EnumFacing.WEST) { - for (int k = z - 2; k <= z + 2; k++) { - for (int j = y + 1; j <= y + 3; j++) { - if (getBlockState(world, x, j, k).getBlock() == RegistrarBloodMagicBlocks.DIMENSIONAL_PORTAL) { - world.setBlockToAir(new BlockPos(x, j, k)); - } - } - } - } - - portalRitualTag.removeTag(PORTAL_ID_TAG); - } - - @Override - public int getRefreshCost() { - return 0; - } - - @Override - public void gatherComponents(Consumer components) { - addRune(components, 1, 0, 0, EnumRuneType.AIR); - addRune(components, 2, 0, 0, EnumRuneType.WATER); - addRune(components, -1, 0, 0, EnumRuneType.FIRE); - addRune(components, -2, 0, 0, EnumRuneType.EARTH); - addRune(components, 2, 1, 0, EnumRuneType.DUSK); - - addRune(components, 2, 2, 0, EnumRuneType.AIR); - addRune(components, 2, 3, 0, EnumRuneType.WATER); - addRune(components, 2, 4, 0, EnumRuneType.FIRE); - addRune(components, 1, 4, 0, EnumRuneType.EARTH); - addRune(components, 0, 4, 0, EnumRuneType.DUSK); - - addRune(components, -1, 4, 0, EnumRuneType.AIR); - addRune(components, -2, 4, 0, EnumRuneType.WATER); - addRune(components, -2, 3, 0, EnumRuneType.FIRE); - addRune(components, -2, 2, 0, EnumRuneType.EARTH); - addRune(components, -2, 1, 0, EnumRuneType.DUSK); - } - - @Override - public Ritual getNewCopy() { - return new RitualPortal(); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - super.readFromNBT(tag); - - portalRitualTag = tag.getCompoundTag(PORTAL_NBT_TAG); - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - super.writeToNBT(tag); - - tag.setTag(PORTAL_NBT_TAG, portalRitualTag); - } - - public IBlockState getBlockState(World world, int x, int y, int z) { - return world.getBlockState(new BlockPos(x, y, z)); - } - - public String addStringToEnd(String input, String toAdd) { - return input + toAdd; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPump.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPump.java deleted file mode 100644 index 2fb5001a..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualPump.java +++ /dev/null @@ -1,108 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import com.google.common.collect.Lists; -import net.minecraft.block.BlockLiquid; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; -import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.Iterator; -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("pump") -public class RitualPump extends Ritual { - public static final String PUMP_RANGE = "pumpRange"; - - private List> liquidsCache; - private Iterator> blockPosIterator; - - public RitualPump() { - super("ritualPump", 0, 500, "ritual." + BloodMagic.MODID + ".pumpRitual"); - addBlockRange(PUMP_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-16, -16, -16), new BlockPos(17, 17, 17))); - - setMaximumVolumeAndDistanceOfRange(PUMP_RANGE, 0, 16, 16); - liquidsCache = Lists.newArrayList(); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - TileEntity tileEntity = world.getTileEntity(masterRitualStone.getBlockPos().up()); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - if (tileEntity != null && tileEntity.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.DOWN)) { - IFluidHandler fluidHandler = tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.DOWN); - IBlockState tankState = world.getBlockState(masterRitualStone.getBlockPos().up()); - int maxDrain = fluidHandler.getTankProperties()[0].getCapacity(); - - if (fluidHandler.getTankProperties()[0].getContents() != null && fluidHandler.getTankProperties()[0].getContents().amount >= maxDrain) - return; - - for (BlockPos pos : getBlockRange(PUMP_RANGE).getContainedPositions(masterRitualStone.getBlockPos())) { - IBlockState state = world.getBlockState(pos); - IFluidHandler blockHandler = null; - if (state.getBlock() instanceof BlockLiquid) - blockHandler = new BlockLiquidWrapper((BlockLiquid) state.getBlock(), world, pos); - else if (state.getBlock() instanceof IFluidHandler) - blockHandler = new FluidBlockWrapper((IFluidBlock) state.getBlock(), world, pos); - - if (blockHandler != null) { - FluidStack blockDrain = blockHandler.drain(maxDrain, false); - if (blockDrain != null && fluidHandler.fill(blockDrain, false) == blockDrain.amount) { - Pair posInfo = Pair.of(pos, blockHandler.drain(maxDrain, false)); - if (!liquidsCache.contains(posInfo)) - liquidsCache.add(posInfo); - } - } - } - - blockPosIterator = liquidsCache.iterator(); - if (blockPosIterator.hasNext()) { - Pair posInfo = blockPosIterator.next(); - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost())); - fluidHandler.fill(posInfo.getRight(), true); - world.setBlockState(posInfo.getLeft(), Blocks.STONE.getDefaultState()); - world.notifyBlockUpdate(posInfo.getLeft(), tankState, tankState, 3); - blockPosIterator.remove(); - } - } - } - - @Override - public int getRefreshCost() { - return 25; - } - - @Override - public void gatherComponents(Consumer components) { - addRune(components, 1, 0, 1, EnumRuneType.WATER); - addRune(components, 1, 0, -1, EnumRuneType.EARTH); - addRune(components, -1, 0, -1, EnumRuneType.AIR); - addRune(components, -1, 0, 1, EnumRuneType.FIRE); - - addCornerRunes(components, 1, 1, EnumRuneType.DUSK); - } - - @Override - public Ritual getNewCopy() { - return new RitualPump(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualRegeneration.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualRegeneration.java deleted file mode 100644 index 1f431459..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualRegeneration.java +++ /dev/null @@ -1,185 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.DamageSourceBloodMagic; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.Collections; -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("regeneration") -public class RitualRegeneration extends Ritual { - public static final String HEAL_RANGE = "heal"; - public static final String VAMPIRE_RANGE = "vampire"; - - public static final int SACRIFICE_AMOUNT = 100; - - public static final double corrosiveWillDrain = 0.04; - - public RitualRegeneration() { - super("ritualRegeneration", 0, 25000, "ritual." + BloodMagic.MODID + ".regenerationRitual"); - addBlockRange(HEAL_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-15, -15, -15), 31)); - addBlockRange(VAMPIRE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-15, -15, -15), 31)); - - setMaximumVolumeAndDistanceOfRange(HEAL_RANGE, 0, 20, 20); - setMaximumVolumeAndDistanceOfRange(VAMPIRE_RANGE, 0, 20, 20); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - - int maxEffects = currentEssence / getRefreshCost(); - int totalEffects = 0; - - int totalCost = 0; - - List willConfig = masterRitualStone.getActiveWillConfig(); - - double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); - double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); - double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); - double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); - double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); - - double vengefulDrain = 0; - double steadfastDrain = 0; - double destructiveDrain = 0; - double corrosiveDrain = 0; - - boolean syphonHealth = corrosiveWill >= corrosiveWillDrain; - boolean applyAbsorption = false; - float absorptionRate = 1; - int maxAbsorption = 20; - - AreaDescriptor healArea = getBlockRange(HEAL_RANGE); - AxisAlignedBB healRange = healArea.getAABB(pos); - - AreaDescriptor damageArea = getBlockRange(VAMPIRE_RANGE); - AxisAlignedBB damageRange = damageArea.getAABB(pos); - - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, healRange); - List players = world.getEntitiesWithinAABB(EntityPlayer.class, healRange); - List damagedEntities = world.getEntitiesWithinAABB(EntityLivingBase.class, damageRange); - - if (syphonHealth) { - for (EntityPlayer player : players) { - if (player.getHealth() <= player.getMaxHealth() - 1) { - float syphonedHealthAmount = getSyphonAmountForWill(corrosiveWill); - Collections.shuffle(damagedEntities); - for (EntityLivingBase damagedEntity : damagedEntities) { - if (damagedEntity instanceof EntityPlayer) { - continue; - } - - float currentHealth = damagedEntity.getHealth(); - - damagedEntity.attackEntityFrom(DamageSourceBloodMagic.INSTANCE, Math.min(player.getMaxHealth() - player.getHealth(), syphonedHealthAmount)); - - float healthDifference = currentHealth - damagedEntity.getHealth(); - if (healthDifference > 0) { - corrosiveDrain += corrosiveWillDrain; - corrosiveWill -= corrosiveWillDrain; - player.heal(healthDifference); - } - - break; - } - } - } - } - - for (EntityLivingBase entity : entities) { - float health = entity.getHealth(); - if (health <= entity.getMaxHealth() - 1) { - if (entity.isPotionApplicable(new PotionEffect(MobEffects.REGENERATION))) { - if (entity instanceof EntityPlayer) { - totalCost += getRefreshCost(); - currentEssence -= getRefreshCost(); - } else { - totalCost += getRefreshCost() / 10; - currentEssence -= getRefreshCost() / 10; - } - - entity.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 50, 0, false, false)); - - totalEffects++; - - if (totalEffects >= maxEffects) { - break; - } - } - } - if (applyAbsorption && entity instanceof EntityPlayer) { - if (applyAbsorption) { - float added = Utils.addAbsorptionToMaximum(entity, absorptionRate, maxAbsorption, 1000); - } - } - } - - if (corrosiveDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveDrain, true); - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(totalCost)); - } - - @Override - public int getRefreshTime() { - return 50; - } - - @Override - public int getRefreshCost() { - return SACRIFICE_AMOUNT; - } - - @Override - public void gatherComponents(Consumer components) { - components.accept(new RitualComponent(new BlockPos(4, 0, 0), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(5, 0, -1), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(5, 0, 1), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(-4, 0, 0), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(-5, 0, -1), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(-5, 0, 1), EnumRuneType.AIR)); - components.accept(new RitualComponent(new BlockPos(0, 0, 4), EnumRuneType.FIRE)); - components.accept(new RitualComponent(new BlockPos(1, 0, 5), EnumRuneType.FIRE)); - components.accept(new RitualComponent(new BlockPos(-1, 0, 5), EnumRuneType.FIRE)); - components.accept(new RitualComponent(new BlockPos(0, 0, -4), EnumRuneType.FIRE)); - components.accept(new RitualComponent(new BlockPos(1, 0, -5), EnumRuneType.FIRE)); - components.accept(new RitualComponent(new BlockPos(-1, 0, -5), EnumRuneType.FIRE)); - addOffsetRunes(components, 3, 5, 0, EnumRuneType.WATER); - addCornerRunes(components, 3, 0, EnumRuneType.DUSK); - addOffsetRunes(components, 4, 5, 0, EnumRuneType.EARTH); - addOffsetRunes(components, 4, 5, -1, EnumRuneType.EARTH); - addCornerRunes(components, 5, 0, EnumRuneType.EARTH); - } - - @Override - public Ritual getNewCopy() { - return new RitualRegeneration(); - } - - public float getSyphonAmountForWill(double corrosiveWill) { - return 1; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualSpeed.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualSpeed.java deleted file mode 100644 index c40fb66a..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualSpeed.java +++ /dev/null @@ -1,184 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("speed") -public class RitualSpeed extends Ritual { - public static final String SPEED_RANGE = "sanicRange"; - - public static final double vengefulWillDrain = 0.05; - public static final double destructiveWillDrain = 0.05; - public static final double rawWillDrain = 0.1; - - public RitualSpeed() { - super("ritualSpeed", 0, 1000, "ritual." + BloodMagic.MODID + ".speedRitual"); - addBlockRange(SPEED_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-2, 1, -2), new BlockPos(2, 5, 2))); - setMaximumVolumeAndDistanceOfRange(SPEED_RANGE, 0, 2, 5); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - - List willConfig = masterRitualStone.getActiveWillConfig(); - - double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig); - double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig); - double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig); - double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig); - double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig); - - AreaDescriptor speedRange = getBlockRange(SPEED_RANGE); - - double vengefulDrain = 0; - double destructiveDrain = 0; - double rawDrain = 0; - - if (rawWill < rawWillDrain) { - rawWill = 0; //Simplifies later calculations - } - - for (EntityLivingBase entity : world.getEntitiesWithinAABB(EntityLivingBase.class, speedRange.getAABB(masterRitualStone.getBlockPos()))) { - if (entity.isSneaking()) - continue; - - boolean transportChildren = destructiveWill < destructiveWillDrain; - boolean transportAdults = vengefulWill < vengefulWillDrain; - - if ((entity.isChild() && !transportChildren) || (!entity.isChild() && !transportAdults)) { - continue; - } - - if (entity instanceof EntityPlayer && (transportChildren ^ transportAdults)) { - continue; - } - - if (!transportChildren) { - destructiveWill -= destructiveWillDrain; - destructiveDrain += destructiveWillDrain; - } - - if (!transportAdults) { - vengefulWill -= vengefulWillDrain; - vengefulDrain += vengefulWillDrain; - } - - double motionY = getVerticalSpeedForWill(rawWill); - double speed = getHorizontalSpeedForWill(rawWill); - EnumFacing direction = masterRitualStone.getDirection(); - - if (rawWill >= rawWillDrain) { - rawWill -= rawWillDrain; - rawDrain += rawWillDrain; - } - - entity.motionY = motionY; - entity.fallDistance = 0; - - switch (direction) { - case NORTH: - entity.motionX = 0; - entity.motionY = motionY; - entity.motionZ = -speed; - break; - - case SOUTH: - entity.motionX = 0; - entity.motionY = motionY; - entity.motionZ = speed; - break; - - case WEST: - entity.motionX = -speed; - entity.motionY = motionY; - entity.motionZ = 0; - break; - - case EAST: - entity.motionX = speed; - entity.motionY = motionY; - entity.motionZ = 0; - break; - default: - break; - } - - if (entity instanceof EntityPlayer) { - Utils.setPlayerSpeedFromServer((EntityPlayer) entity, entity.motionX, entity.motionY, entity.motionZ); - } - } - - if (rawDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DEFAULT, rawDrain, true); - } - - if (vengefulDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulDrain, true); - } - - if (destructiveDrain > 0) { - WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.DESTRUCTIVE, destructiveDrain, true); - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 5; - } - - @Override - public void gatherComponents(Consumer components) { - addRune(components, 0, 0, -2, EnumRuneType.DUSK); - addRune(components, 1, 0, -1, EnumRuneType.AIR); - addRune(components, -1, 0, -1, EnumRuneType.AIR); - for (int i = 0; i < 3; i++) { - addRune(components, 2, 0, i, EnumRuneType.AIR); - addRune(components, -2, 0, i, EnumRuneType.AIR); - } - } - - @Override - public Ritual getNewCopy() { - return new RitualSpeed(); - } - - @Override - public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player) { - return new ITextComponent[]{new TextComponentTranslation(this.getUnlocalizedName() + ".info"), new TextComponentTranslation(this.getUnlocalizedName() + ".default.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".corrosive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".steadfast.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".destructive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".vengeful.info")}; - } - - public double getVerticalSpeedForWill(double rawWill) { - return 1.2 + rawWill / 200; - } - - public double getHorizontalSpeedForWill(double rawWill) { - return 3 + rawWill / 40; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualSuppression.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualSuppression.java deleted file mode 100644 index 5934ab9f..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualSuppression.java +++ /dev/null @@ -1,76 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.tile.TileSpectralBlock; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.function.Consumer; - -@RitualRegister("suppression") -public class RitualSuppression extends Ritual { - public static final String SUPPRESSION_RANGE = "suppressionRange"; - - public RitualSuppression() { - super("ritualSuppression", 0, 10000, "ritual." + BloodMagic.MODID + ".suppressionRitual"); - addBlockRange(SUPPRESSION_RANGE, new AreaDescriptor.HemiSphere(new BlockPos(0, 0, 0), 10)); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - final int refresh = 100; - AreaDescriptor suppressionRange = getBlockRange(SUPPRESSION_RANGE); - - for (BlockPos blockPos : suppressionRange.getContainedPositions(masterRitualStone.getBlockPos())) { - IBlockState state = world.getBlockState(blockPos); - - if (Utils.isBlockLiquid(state) && world.getTileEntity(blockPos) == null) - TileSpectralBlock.createSpectralBlock(world, blockPos, refresh); - else { - TileEntity tile = world.getTileEntity(blockPos); - if (tile instanceof TileSpectralBlock) - ((TileSpectralBlock) tile).resetDuration(refresh); - } - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 2; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 2, 0, EnumRuneType.WATER); - addRune(components, -2, 0, -1, EnumRuneType.AIR); - addRune(components, -1, 0, -2, EnumRuneType.AIR); - addRune(components, -2, 0, 1, EnumRuneType.AIR); - addRune(components, 1, 0, -2, EnumRuneType.AIR); - addRune(components, 2, 0, 1, EnumRuneType.AIR); - addRune(components, 1, 0, 2, EnumRuneType.AIR); - addRune(components, 2, 0, -1, EnumRuneType.AIR); - addRune(components, -1, 0, 2, EnumRuneType.AIR); - } - - @Override - public Ritual getNewCopy() { - return new RitualSuppression(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualUpgradeRemove.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualUpgradeRemove.java deleted file mode 100644 index ba9d5a04..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualUpgradeRemove.java +++ /dev/null @@ -1,125 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.livingArmour.StatTracker; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.helper.ItemHelper.LivingUpgrades; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import com.google.common.collect.Iterables; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; -import java.util.function.Consumer; - -@RitualRegister("upgrade_remove") -public class RitualUpgradeRemove extends Ritual { - public static final String CHECK_RANGE = "fillRange"; - - public RitualUpgradeRemove() { - super("ritualUpgradeRemove", 0, 25000, "ritual." + BloodMagic.MODID + ".upgradeRemoveRitual"); - addBlockRange(CHECK_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1, 2, 1)); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - - if (world.isRemote) { - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - - AreaDescriptor checkRange = getBlockRange(CHECK_RANGE); - - List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, checkRange.getAABB(pos)); - - for (EntityPlayer player : playerList) { - if (LivingArmour.hasFullSet(player)) { - boolean removedUpgrade = false; - - ItemStack chestStack = Iterables.toArray(player.getArmorInventoryList(), ItemStack.class)[2]; - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - @SuppressWarnings("unchecked") - HashMap upgradeMap = (HashMap) armour.upgradeMap.clone(); - - for (Entry entry : upgradeMap.entrySet()) { - LivingArmourUpgrade upgrade = entry.getValue(); - String upgradeKey = entry.getKey(); - - ItemStack upgradeStack = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); - LivingUpgrades.setKey(upgradeStack, upgradeKey); - LivingUpgrades.setLevel(upgradeStack, upgrade.getUpgradeLevel()); - - boolean successful = armour.removeUpgrade(player, upgrade); - - if (successful) { - removedUpgrade = true; - world.spawnEntity(new EntityItem(world, player.posX, player.posY, player.posZ, upgradeStack)); - for (Entry trackerEntry : armour.trackerMap.entrySet()) { - StatTracker tracker = trackerEntry.getValue(); - if (tracker != null) { - if (tracker.providesUpgrade(upgradeKey)) { - tracker.resetTracker(); //Resets the tracker if the upgrade corresponding to it was removed. - } - } - } - } - } - - if (removedUpgrade) { - ((ItemLivingArmour) chestStack.getItem()).setLivingArmour(chestStack, armour, true); - ItemLivingArmour.setLivingArmour(chestStack, armour); - armour.recalculateUpgradePoints(); - - masterRitualStone.setActive(false); - - world.spawnEntity(new EntityLightningBolt(world, pos.getX(), pos.getY() - 1, pos.getZ(), true)); - } - - } - } - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 0; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.DUSK); - addCornerRunes(components, 2, 0, EnumRuneType.FIRE); - addOffsetRunes(components, 1, 2, 0, EnumRuneType.FIRE); - addCornerRunes(components, 1, 1, EnumRuneType.WATER); - addParallelRunes(components, 4, 0, EnumRuneType.EARTH); - addCornerRunes(components, 1, 3, EnumRuneType.WATER); - addParallelRunes(components, 1, 4, EnumRuneType.AIR); - - for (int i = 0; i < 4; i++) { - addCornerRunes(components, 3, i, EnumRuneType.EARTH); - } - } - - @Override - public Ritual getNewCopy() { - return new RitualUpgradeRemove(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualWater.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualWater.java deleted file mode 100644 index c4f7d6b1..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualWater.java +++ /dev/null @@ -1,69 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.function.Consumer; - -@RitualRegister("water") -public class RitualWater extends Ritual { - public static final String WATER_RANGE = "waterRange"; - - public RitualWater() { - super("ritualWater", 0, 500, "ritual." + BloodMagic.MODID + ".waterRitual"); - addBlockRange(WATER_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - setMaximumVolumeAndDistanceOfRange(WATER_RANGE, 9, 3, 3); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - int maxEffects = currentEssence / getRefreshCost(); - int totalEffects = 0; - - AreaDescriptor waterRange = getBlockRange(WATER_RANGE); - - for (BlockPos newPos : waterRange.getContainedPositions(masterRitualStone.getBlockPos())) { - if (world.isAirBlock(newPos)) { - world.setBlockState(newPos, Blocks.FLOWING_WATER.getDefaultState()); - totalEffects++; - } - - if (totalEffects >= maxEffects) { - break; - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 25; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.WATER); - } - - @Override - public Ritual getNewCopy() { - return new RitualWater(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualWellOfSuffering.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualWellOfSuffering.java deleted file mode 100644 index 8e20ebf6..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualWellOfSuffering.java +++ /dev/null @@ -1,136 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.tile.TileAltar; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.common.registry.EntityRegistry; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("well_of_suffering") -public class RitualWellOfSuffering extends Ritual { - public static final String ALTAR_RANGE = "altar"; - public static final String DAMAGE_RANGE = "damage"; - - public static final int SACRIFICE_AMOUNT = 25; - - public BlockPos altarOffsetPos = new BlockPos(0, 0, 0); //TODO: Save! - - public RitualWellOfSuffering() { - super("ritualWellOfSuffering", 0, 40000, "ritual." + BloodMagic.MODID + ".wellOfSufferingRitual"); - addBlockRange(ALTAR_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-5, -10, -5), 11, 21, 11)); - addBlockRange(DAMAGE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-10, -10, -10), 21)); - - setMaximumVolumeAndDistanceOfRange(ALTAR_RANGE, 0, 10, 15); - setMaximumVolumeAndDistanceOfRange(DAMAGE_RANGE, 0, 15, 15); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - BlockPos pos = masterRitualStone.getBlockPos(); - - int maxEffects = currentEssence / getRefreshCost(); - int totalEffects = 0; - - BlockPos altarPos = pos.add(altarOffsetPos); - - TileEntity tile = world.getTileEntity(altarPos); - - AreaDescriptor altarRange = getBlockRange(ALTAR_RANGE); - - if (!altarRange.isWithinArea(altarOffsetPos) || !(tile instanceof TileAltar)) { - for (BlockPos newPos : altarRange.getContainedPositions(pos)) { - TileEntity nextTile = world.getTileEntity(newPos); - if (nextTile instanceof TileAltar) { - tile = nextTile; - altarOffsetPos = newPos.subtract(pos); - - altarRange.resetCache(); - break; - } - } - } - - if (tile instanceof TileAltar) { - TileAltar tileAltar = (TileAltar) tile; - - AreaDescriptor damageRange = getBlockRange(DAMAGE_RANGE); - AxisAlignedBB range = damageRange.getAABB(pos); - - List entities = world.getEntitiesWithinAABB(EntityLivingBase.class, range); - - for (EntityLivingBase entity : entities) { - EntityEntry entityEntry = EntityRegistry.getEntry(entity.getClass()); - - if (entityEntry == null || BloodMagicAPI.INSTANCE.getBlacklist().getSacrifice().contains(entityEntry.getRegistryName())) - continue; - - int lifeEssenceRatio = BloodMagicAPI.INSTANCE.getValueManager().getSacrificial().getOrDefault(entityEntry.getRegistryName(), SACRIFICE_AMOUNT); - - if (lifeEssenceRatio <= 0) - continue; - - if (entity.isEntityAlive() && !(entity instanceof EntityPlayer)) { - if (entity.attackEntityFrom(DamageSource.OUT_OF_WORLD, 1)) { - if (entity.isChild()) - lifeEssenceRatio *= 0.5F; - - tileAltar.sacrificialDaggerCall(lifeEssenceRatio, true); - - totalEffects++; - - if (totalEffects >= maxEffects) { - break; - } - } - } - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * totalEffects)); - } - - @Override - public int getRefreshTime() { - return 25; - } - - @Override - public int getRefreshCost() { - return 2; - } - - @Override - public void gatherComponents(Consumer components) { - addCornerRunes(components, 1, 0, EnumRuneType.FIRE); - addCornerRunes(components, 2, -1, EnumRuneType.FIRE); - addParallelRunes(components, 2, -1, EnumRuneType.EARTH); - addCornerRunes(components, -3, -1, EnumRuneType.DUSK); - addOffsetRunes(components, 2, 4, -1, EnumRuneType.WATER); - addOffsetRunes(components, 1, 4, 0, EnumRuneType.WATER); - addParallelRunes(components, 4, 1, EnumRuneType.AIR); - } - - @Override - public Ritual getNewCopy() { - return new RitualWellOfSuffering(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualZephyr.java b/src/main/java/WayofTime/bloodmagic/ritual/types/RitualZephyr.java deleted file mode 100644 index 9935e162..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/RitualZephyr.java +++ /dev/null @@ -1,95 +0,0 @@ -package WayofTime.bloodmagic.ritual.types; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.*; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; -import java.util.function.Consumer; - -@RitualRegister("zephyr") -public class RitualZephyr extends Ritual { - public static final String ZEPHYR_RANGE = "zephyrRange"; - public static final String CHEST_RANGE = "chest"; - - public RitualZephyr() { - super("ritualZephyr", 0, 1000, "ritual." + BloodMagic.MODID + ".zephyrRitual"); - addBlockRange(ZEPHYR_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-5, -5, -5), 11)); - addBlockRange(CHEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1)); - - setMaximumVolumeAndDistanceOfRange(ZEPHYR_RANGE, 0, 10, 10); - setMaximumVolumeAndDistanceOfRange(CHEST_RANGE, 1, 3, 3); - } - - @Override - public void performRitual(IMasterRitualStone masterRitualStone) { - World world = masterRitualStone.getWorldObj(); - int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence(); - BlockPos masterPos = masterRitualStone.getBlockPos(); - AreaDescriptor chestRange = getBlockRange(CHEST_RANGE); - TileEntity tileInventory = world.getTileEntity(chestRange.getContainedPositions(masterPos).get(0)); - if (!masterRitualStone.getWorldObj().isRemote && tileInventory != null) { - if (currentEssence < getRefreshCost()) { - masterRitualStone.getOwnerNetwork().causeNausea(); - return; - } - - AreaDescriptor zephyrRange = getBlockRange(ZEPHYR_RANGE); - - List itemList = world.getEntitiesWithinAABB(EntityItem.class, zephyrRange.getAABB(masterRitualStone.getBlockPos())); - int count = 0; - - for (EntityItem entityItem : itemList) { - if (entityItem.isDead) { - continue; - } - - ItemStack copyStack = entityItem.getItem().copy(); - int originalAmount = copyStack.getCount(); - ItemStack newStack = Utils.insertStackIntoTile(copyStack, tileInventory, EnumFacing.DOWN); - - if (!newStack.isEmpty() && newStack.getCount() < originalAmount) { - count++; - if (newStack.isEmpty()) - entityItem.setDead(); - - entityItem.getItem().setCount(newStack.getCount()); - } - - if (newStack.isEmpty()) { - entityItem.setDead(); - } - } - - masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost() * Math.min(count, 100))); - } - } - - @Override - public int getRefreshTime() { - return 1; - } - - @Override - public int getRefreshCost() { - return 1; - } - - @Override - public void gatherComponents(Consumer components) { - addParallelRunes(components, 2, 0, EnumRuneType.AIR); - addCornerRunes(components, 1, 1, EnumRuneType.AIR); - addParallelRunes(components, 1, -1, EnumRuneType.AIR); - } - - @Override - public Ritual getNewCopy() { - return new RitualZephyr(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualDay.java b/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualDay.java deleted file mode 100644 index 9d2a87ed..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualDay.java +++ /dev/null @@ -1,23 +0,0 @@ -package WayofTime.bloodmagic.ritual.types.imperfect; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.imperfect.IImperfectRitualStone; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; - -//@RitualRegister.Imperfect("day") -public class ImperfectRitualDay extends ImperfectRitual { - public ImperfectRitualDay() { - super("day", s -> s.getBlock() == Blocks.GOLD_BLOCK, 5000, true, "ritual." + BloodMagic.MODID + ".imperfect.day"); - } - - @Override - public boolean onActivate(IImperfectRitualStone imperfectRitualStone, EntityPlayer player) { - - if (!imperfectRitualStone.getRitualWorld().isRemote) - imperfectRitualStone.getRitualWorld().setWorldTime((imperfectRitualStone.getRitualWorld().getWorldTime() / 24000) * 24000); - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualNight.java b/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualNight.java deleted file mode 100644 index f5a8746b..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualNight.java +++ /dev/null @@ -1,24 +0,0 @@ -package WayofTime.bloodmagic.ritual.types.imperfect; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.RitualRegister; -import WayofTime.bloodmagic.ritual.imperfect.IImperfectRitualStone; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; - -@RitualRegister.Imperfect("night") -public class ImperfectRitualNight extends ImperfectRitual { - public ImperfectRitualNight() { - super("night", s -> s.getBlock() == Blocks.LAPIS_BLOCK, 100, true, "ritual." + BloodMagic.MODID + ".imperfect.night"); - } - - @Override - public boolean onActivate(IImperfectRitualStone imperfectRitualStone, EntityPlayer player) { - - if (!imperfectRitualStone.getRitualWorld().isRemote) - imperfectRitualStone.getRitualWorld().setWorldTime((imperfectRitualStone.getRitualWorld().getWorldTime() / 24000) * 24000 + 13800); - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualRain.java b/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualRain.java deleted file mode 100644 index b7790a1e..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualRain.java +++ /dev/null @@ -1,29 +0,0 @@ -package WayofTime.bloodmagic.ritual.types.imperfect; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.RitualRegister; -import WayofTime.bloodmagic.ritual.imperfect.IImperfectRitualStone; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; - -@RitualRegister.Imperfect("rain") -public class ImperfectRitualRain extends ImperfectRitual { - public ImperfectRitualRain() { - super("rain", s -> s.getBlock() == Blocks.WATER, 5000, true, "ritual." + BloodMagic.MODID + ".imperfect.rain"); - } - - @Override - public boolean onActivate(IImperfectRitualStone imperfectRitualStone, EntityPlayer player) { - if (!imperfectRitualStone.getRitualWorld().isRemote) { - imperfectRitualStone.getRitualWorld().getWorldInfo().setRaining(true); - } - - if (imperfectRitualStone.getRitualWorld().isRemote) { - imperfectRitualStone.getRitualWorld().setRainStrength(1.0F); - imperfectRitualStone.getRitualWorld().setThunderStrength(1.0F); - } - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualResistance.java b/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualResistance.java deleted file mode 100644 index b0281f53..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualResistance.java +++ /dev/null @@ -1,25 +0,0 @@ -package WayofTime.bloodmagic.ritual.types.imperfect; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.RitualRegister; -import WayofTime.bloodmagic.ritual.imperfect.IImperfectRitualStone; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.MobEffects; -import net.minecraft.potion.PotionEffect; - -@RitualRegister.Imperfect("resistance") -public class ImperfectRitualResistance extends ImperfectRitual { - public ImperfectRitualResistance() { - super("resistance", s -> s.getBlock() == Blocks.BEDROCK, 5000, "ritual." + BloodMagic.MODID + ".imperfect.resistance"); - } - - @Override - public boolean onActivate(IImperfectRitualStone imperfectRitualStone, EntityPlayer player) { - - player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 1200, 1)); - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualZombie.java b/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualZombie.java deleted file mode 100644 index bc8cb7cf..00000000 --- a/src/main/java/WayofTime/bloodmagic/ritual/types/imperfect/ImperfectRitualZombie.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.bloodmagic.ritual.types.imperfect; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.RitualRegister; -import WayofTime.bloodmagic.ritual.imperfect.IImperfectRitualStone; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.MobEffects; -import net.minecraft.potion.PotionEffect; - -@RitualRegister.Imperfect("zombie") -public class ImperfectRitualZombie extends ImperfectRitual { - public ImperfectRitualZombie() { - super("zombie", s -> s.getBlock() == Blocks.COAL_BLOCK, 5000, "ritual." + BloodMagic.MODID + ".imperfect.zombie"); - } - - @Override - public boolean onActivate(IImperfectRitualStone imperfectRitualStone, EntityPlayer player) { - EntityZombie zombie = new EntityZombie(imperfectRitualStone.getRitualWorld()); - zombie.setPosition(imperfectRitualStone.getRitualPos().getX() + 0.5, imperfectRitualStone.getRitualPos().getY() + 2.1, imperfectRitualStone.getRitualPos().getZ() + 0.5); - zombie.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 2000)); - zombie.addPotionEffect(new PotionEffect(MobEffects.STRENGTH, 20000, 7)); - zombie.addPotionEffect(new PotionEffect(MobEffects.RESISTANCE, 20000, 3)); - - if (!imperfectRitualStone.getRitualWorld().isRemote) - imperfectRitualStone.getRitualWorld().spawnEntity(zombie); - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java deleted file mode 100644 index c33f19c9..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java +++ /dev/null @@ -1,117 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; - -import java.util.List; - -/** - * This particular implementation of IItemFilter allows any item to be drained - * from or inputed to the connected inventory. Every stack is accepted here! - * We're basically Olive Gardens. - * - * @author WayofTime - */ -public class DefaultItemFilter implements IItemFilter { - protected TileEntity accessedTile; - protected IItemHandler itemHandler; - - /** - * Initializes the filter so that it knows what it wants to fulfill. - * - * @param filteredList - The list of ItemStacks that the filter is set to. - * @param itemHandler - The inventory that is being accessed. This inventory is either - * being pulled from or pushed to. - * @param isFilterOutput - Tells the filter what actions to expect. If true, it should be - * initialized as an output filter. If false, it should be - * initialized as an input filter. - */ - @Override - public void initializeFilter(List filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput) { - this.accessedTile = tile; - this.itemHandler = itemHandler; - } - - /** - * This method is only called when the output inventory this filter is - * managing receives an ItemStack. Should only really be called by the Input - * filter via it's transfer method. - * - * @param inputStack - The stack to transfer - * @return - The remainder of the stack after it has been absorbed into the - * inventory. - */ - @Override - public ItemStack transferStackThroughOutputFilter(ItemStack inputStack) { - int allowedAmount = inputStack.getCount(); //This is done to make the migration to a maximum amount transfered a lot easier - - if (allowedAmount <= 0) { - return inputStack; - } - - ItemStack testStack = inputStack.copy(); - testStack.setCount(allowedAmount); - ItemStack remainderStack = Utils.insertStackIntoTile(testStack, itemHandler); - - int changeAmount = allowedAmount - (remainderStack.isEmpty() ? 0 : remainderStack.getCount()); - testStack = inputStack.copy(); - testStack.shrink(changeAmount); - - World world = accessedTile.getWorld(); - BlockPos pos = accessedTile.getPos(); - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); - - return testStack; - } - - /** - * This method is only called on an input filter to transfer ItemStacks from - * the input inventory to the output inventory. - */ - @Override - public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer) { - for (int slot = 0; slot < itemHandler.getSlots(); slot++) { - ItemStack inputStack = itemHandler.getStackInSlot(slot); - if (inputStack.isEmpty() || itemHandler.extractItem(slot, inputStack.getCount(), true).isEmpty())//(accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide))) - { - continue; - } - - int allowedAmount = Math.min(itemHandler.extractItem(slot, inputStack.getCount(), true).getCount(), maxTransfer); - - ItemStack testStack = inputStack.copy(); - testStack.setCount(allowedAmount); - ItemStack remainderStack = outputFilter.transferStackThroughOutputFilter(testStack); - int changeAmount = allowedAmount - (remainderStack.isEmpty() ? 0 : remainderStack.getCount()); - - if (!remainderStack.isEmpty() && remainderStack.getCount() == allowedAmount) { - //Nothing has changed. Moving on! - continue; - } - - itemHandler.extractItem(slot, changeAmount, false); - - World world = accessedTile.getWorld(); - BlockPos pos = accessedTile.getPos(); - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); - - return changeAmount; - } - - return 0; - } - - @Override - public boolean doesStackMatchFilter(ItemStack testStack) { - return true; - } - - @Override - public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack) { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IFluidFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IFluidFilter.java deleted file mode 100644 index d4851334..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IFluidFilter.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.IFluidHandler; - -import java.util.List; - -public interface IFluidFilter extends IRoutingFilter { - void initializeFilter(List filteredList, TileEntity tile, IFluidHandler fluidHandler, boolean isFilterOutput); - - /** - * This method is only called when the output tank this filter is managing - * receives an ItemStack. Should only really be called by the Input filter - * via it's transfer method. - * - * @param fluidStack - The stack to filter - * @return - The remainder of the stack after it has been absorbed into the - * tank. - */ - FluidStack transferStackThroughOutputFilter(FluidStack fluidStack); - - /** - * This method is only called on an input filter to transfer FluidStacks - * from the input tank to the output tank. - */ - int transferThroughInputFilter(IFluidFilter outputFilter, int maxTransfer); - - boolean doesStackMatchFilter(FluidStack testStack); - - boolean doStacksMatch(FluidStack filterStack, FluidStack testStack); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IFluidRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IFluidRoutingNode.java deleted file mode 100644 index 97bfdb01..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IFluidRoutingNode.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.util.EnumFacing; - -public interface IFluidRoutingNode extends IRoutingNode { - boolean isTankConnectedToSide(EnumFacing side); - - int getPriority(EnumFacing side); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IInputFluidRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IInputFluidRoutingNode.java deleted file mode 100644 index 8f8e7a6d..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IInputFluidRoutingNode.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.util.EnumFacing; - -public interface IInputFluidRoutingNode extends IFluidRoutingNode { - boolean isFluidInput(EnumFacing side); - - IFluidFilter getInputFluidFilterForSide(EnumFacing side); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IInputItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IInputItemRoutingNode.java deleted file mode 100644 index 6e833a54..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IInputItemRoutingNode.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.util.EnumFacing; - -public interface IInputItemRoutingNode extends IItemRoutingNode { - boolean isInput(EnumFacing side); - - IItemFilter getInputFilterForSide(EnumFacing side); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java deleted file mode 100644 index 443b0d69..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.items.IItemHandler; - -import java.util.List; - -public interface IItemFilter extends IRoutingFilter { - void initializeFilter(List filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput); - - /** - * This method is only called when the output inventory this filter is - * managing receives an ItemStack. Should only really be called by the Input - * filter via it's transfer method. - * - * @param inputStack - The stack to filter - * @return - The remainder of the stack after it has been absorbed into the - * inventory. - */ - ItemStack transferStackThroughOutputFilter(ItemStack inputStack); - - /** - * This method is only called on an input filter to transfer ItemStacks from - * the input inventory to the output inventory. - */ - int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer); - - boolean doesStackMatchFilter(ItemStack testStack); - - boolean doStacksMatch(ItemStack filterStack, ItemStack testStack); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IItemRoutingNode.java deleted file mode 100644 index d52126a0..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IItemRoutingNode.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.util.EnumFacing; - -public interface IItemRoutingNode extends IRoutingNode { - boolean isInventoryConnectedToSide(EnumFacing side); - - int getPriority(EnumFacing side); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IMasterRoutingNode.java deleted file mode 100644 index dba8ba08..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IMasterRoutingNode.java +++ /dev/null @@ -1,17 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.util.math.BlockPos; - -import java.util.List; - -public interface IMasterRoutingNode extends IRoutingNode { - boolean isConnected(List path, BlockPos nodePos); - - void addNodeToList(IRoutingNode node); - - void addConnections(BlockPos pos, List connectionList); - - void addConnection(BlockPos pos1, BlockPos pos2); - - void removeConnection(BlockPos pos1, BlockPos pos2); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IOutputFluidRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IOutputFluidRoutingNode.java deleted file mode 100644 index 08c3ce67..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IOutputFluidRoutingNode.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.util.EnumFacing; - -public interface IOutputFluidRoutingNode extends IFluidRoutingNode { - boolean isFluidOutput(EnumFacing side); - - IFluidFilter getOutputFluidFilterForSide(EnumFacing side); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IOutputItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IOutputItemRoutingNode.java deleted file mode 100644 index 819e2813..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IOutputItemRoutingNode.java +++ /dev/null @@ -1,9 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.util.EnumFacing; - -public interface IOutputItemRoutingNode extends IItemRoutingNode { - boolean isOutput(EnumFacing side); - - IItemFilter getOutputFilterForSide(EnumFacing side); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IRoutingFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IRoutingFilter.java deleted file mode 100644 index d7413770..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IRoutingFilter.java +++ /dev/null @@ -1,5 +0,0 @@ -package WayofTime.bloodmagic.routing; - -public interface IRoutingFilter { - -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IRoutingNode.java b/src/main/java/WayofTime/bloodmagic/routing/IRoutingNode.java deleted file mode 100644 index 3498c570..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IRoutingNode.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; - -public interface IRoutingNode { - void connectMasterToRemainingNode(World world, List alreadyChecked, IMasterRoutingNode master); - - BlockPos getBlockPos(); - - List getConnected(); - - BlockPos getMasterPos(); - - boolean isConnectionEnabled(BlockPos testPos); - - boolean isMaster(IMasterRoutingNode master); - - void addConnection(BlockPos pos1); - - void removeConnection(BlockPos pos1); - - void removeAllConnections(); -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/IgnoreNBTItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IgnoreNBTItemFilter.java deleted file mode 100644 index b7ef367d..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/IgnoreNBTItemFilter.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.item.ItemStack; - -public class IgnoreNBTItemFilter extends TestItemFilter { - @Override - public boolean doesStackMatchFilter(ItemStack testStack) { - for (ItemStack filterStack : requestList) { - if (doStacksMatch(filterStack, testStack)) { - return true; - } - } - - return false; - } - - @Override - public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack) { - return ItemStack.areItemsEqual(filterStack, testStack); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/ModIdItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/ModIdItemFilter.java deleted file mode 100644 index 36531585..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/ModIdItemFilter.java +++ /dev/null @@ -1,16 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.item.ItemStack; - -public class ModIdItemFilter extends TestItemFilter { - - @Override - public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack) { - return getModID(filterStack).equalsIgnoreCase(getModID(testStack)); - } - - public String getModID(ItemStack stack) { - String modid = stack.getItem().getCreatorModId(stack); - return modid == null ? "" : modid; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/NodeHelper.java b/src/main/java/WayofTime/bloodmagic/routing/NodeHelper.java deleted file mode 100644 index bd9ff18a..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/NodeHelper.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class NodeHelper { - public static boolean isNodeConnectionEnabled(World world, IRoutingNode node, BlockPos testPos) { - if (!node.isConnectionEnabled(testPos)) { - return false; - } - TileEntity tile = world.getTileEntity(testPos); - if (!(tile instanceof IRoutingNode)) { - return false; - } - - IRoutingNode testNode = (IRoutingNode) tile; - - return testNode.isConnectionEnabled(node.getBlockPos()); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/OreDictItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/OreDictItemFilter.java deleted file mode 100644 index 812c4cc3..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/OreDictItemFilter.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -public class OreDictItemFilter extends TestItemFilter { - @Override - public boolean doesStackMatchFilter(ItemStack testStack) { - for (ItemStack filterStack : requestList) { - if (doStacksMatch(filterStack, testStack)) { - return true; - } - } - - return false; - } - - @Override - public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack) { - int[] filterIds = OreDictionary.getOreIDs(filterStack); - int[] testIds = OreDictionary.getOreIDs(testStack); - - if (filterIds.length <= 0 || testIds.length <= 0) { - return false; - } - - for (int filterId : filterIds) { - for (int testId : testIds) { - if (filterId == testId) { - return true; - } - } - } - - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java b/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java deleted file mode 100644 index 6ff9f8d9..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/RoutingFluidFilter.java +++ /dev/null @@ -1,225 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import javax.annotation.Nullable; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidTankProperties; - -public class RoutingFluidFilter implements IFluidFilter -{ - protected List requestList; - protected TileEntity accessedTile; - protected IFluidHandler fluidHandler; - - @Override - public void initializeFilter(List filteredList, TileEntity tile, IFluidHandler fluidHandler, boolean isFilterOutput) - { - this.accessedTile = tile; - this.fluidHandler = fluidHandler; - if (isFilterOutput) - { - //The requestList contains a list of how much can be extracted. - requestList = new ArrayList<>(); - for (ItemStack filterStack : filteredList) - { - FluidStack fluidFilterStack = getFluidStackFromItemStack(filterStack); - if (fluidFilterStack != null) - { - requestList.add(fluidFilterStack); - } - } - - IFluidTankProperties[] properties = fluidHandler.getTankProperties(); - - for (IFluidTankProperties property : properties) - { - FluidStack containedStack = property.getContents(); - if (containedStack != null) - { - for (FluidStack fluidFilterStack : requestList) - { - if (doStacksMatch(fluidFilterStack, containedStack)) - { - fluidFilterStack.amount = Math.max(fluidFilterStack.amount - containedStack.amount, 0); - } - } - } - } - } else - { - requestList = new ArrayList<>(); - for (ItemStack filterStack : filteredList) - { - FluidStack fluidFilterStack = getFluidStackFromItemStack(filterStack); - if (fluidFilterStack != null) - { - fluidFilterStack.amount *= -1; - requestList.add(fluidFilterStack); - } - } - - IFluidTankProperties[] properties = fluidHandler.getTankProperties(); - - for (IFluidTankProperties property : properties) - { - FluidStack containedStack = property.getContents(); - if (containedStack != null) - { - for (FluidStack fluidFilterStack : requestList) - { - if (doStacksMatch(fluidFilterStack, containedStack)) - { - fluidFilterStack.amount += containedStack.amount; - } - } - } - } - } - } - - /** - * Gives the remainder~ - */ - @Override - public FluidStack transferStackThroughOutputFilter(FluidStack fluidStack) - { - int allowedAmount = 0; - for (FluidStack filterStack : requestList) - { - if (doStacksMatch(filterStack, fluidStack)) - { - allowedAmount = Math.min(filterStack.amount, fluidStack.amount); - break; - } - } - - if (allowedAmount <= 0) - { - return fluidStack; - } - - FluidStack copyStack = fluidStack.copy(); - int filledAmount = fluidHandler.fill(fluidStack, true); - copyStack.amount = fluidStack.amount - filledAmount; - - Iterator itr = requestList.iterator(); - while (itr.hasNext()) - { - FluidStack filterStack = itr.next(); - if (doStacksMatch(filterStack, copyStack)) - { - filterStack.amount -= filledAmount; - if (filterStack.amount <= 0) - { - itr.remove(); - } - } - } - - World world = accessedTile.getWorld(); - BlockPos pos = accessedTile.getPos(); - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); - - return copyStack.amount <= 0 ? null : copyStack; - } - - @Override - public int transferThroughInputFilter(IFluidFilter outputFilter, int maxTransfer) - { - for (FluidStack filterFluidStack : requestList) - { - int allowedAmount = Math.min(filterFluidStack.amount, maxTransfer); - if (allowedAmount <= 0) - { - continue; - } - - FluidStack copyStack = filterFluidStack.copy(); - copyStack.amount = allowedAmount; - FluidStack drainStack = fluidHandler.drain(copyStack, false); - if (drainStack != null) //Can't pull this liquid out for some reason if it fails this check - { - FluidStack remainderStack = outputFilter.transferStackThroughOutputFilter(drainStack); - int drained = remainderStack == null ? copyStack.amount : (copyStack.amount - remainderStack.amount); - - if (drained > 0) - { - drainStack.amount = drained; - - fluidHandler.drain(drainStack, true); - maxTransfer -= drained; - } - - Iterator itr = requestList.iterator(); - while (itr.hasNext()) - { - FluidStack filterStack = itr.next(); - if (doStacksMatch(filterStack, copyStack)) - { - filterStack.amount -= drained; - if (filterStack.amount <= 0) - { - itr.remove(); - } - } - } - - World world = accessedTile.getWorld(); - BlockPos pos = accessedTile.getPos(); - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); - - return maxTransfer; - } - } - - return 0; - } - - @Override - public boolean doesStackMatchFilter(FluidStack testStack) - { - for (FluidStack filterStack : requestList) - { - if (doStacksMatch(filterStack, testStack)) - { - return true; - } - } - - return false; - } - - @Override - public boolean doStacksMatch(FluidStack filterStack, FluidStack testStack) - { - return testStack != null && filterStack.getFluid() == testStack.getFluid(); - } - - @Nullable - public static FluidStack getFluidStackFromItemStack(ItemStack inputStack) - { - boolean isEmpty = false; - if (inputStack.getCount() == 0) - { - isEmpty = true; - inputStack.setCount(1); - } - - FluidStack fluidStack = FluidUtil.getFluidContained(inputStack); - if (fluidStack == null) - return null; - - fluidStack.amount = isEmpty ? 0 : inputStack.getCount(); - return fluidStack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java deleted file mode 100644 index 2e45865d..00000000 --- a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java +++ /dev/null @@ -1,214 +0,0 @@ -package WayofTime.bloodmagic.routing; - -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.items.IItemHandler; - -import java.util.Iterator; -import java.util.List; - -/** - * This particular implementation of IItemFilter checks to make sure that a) as - * an output filter it will fill until the requested amount and b) as an input - * filter it will only syphon until the requested amount. - * - * @author WayofTime - */ -public class TestItemFilter implements IItemFilter { - /* - * This list acts as the way the filter keeps track of its contents. For the - * case of an output filter, it holds a list of ItemStacks that needs to be - * inserted in the inventory to finish its request. For the case of an input - * filter, it keeps track of how many can be removed. - */ - protected List requestList; - protected TileEntity accessedTile; - protected IItemHandler itemHandler; - - /** - * Initializes the filter so that it knows what it wants to fulfill. - * - * @param filteredList - The list of ItemStacks that the filter is set to. - * @param tile - The inventory that is being accessed. This inventory is either - * being pulled from or pushed to. - * @param itemHandler - The item handler - * @param isFilterOutput - Tells the filter what actions to expect. If true, it should be - * initialized as an output filter. If false, it should be - * initialized as an input filter. - */ - @Override - public void initializeFilter(List filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput) { - this.accessedTile = tile; - this.itemHandler = itemHandler; - if (isFilterOutput) { - requestList = filteredList; - - for (int slot = 0; slot < itemHandler.getSlots(); slot++) { - ItemStack checkedStack = itemHandler.getStackInSlot(slot); - if (checkedStack.isEmpty()) { - continue; - } - - int stackSize = checkedStack.getCount(); - - for (ItemStack filterStack : requestList) { - if (filterStack.getCount() == 0) { - continue; - } - - if (doStacksMatch(filterStack, checkedStack)) { - filterStack.setCount(Math.max(filterStack.getCount() - stackSize, 0)); - } - } - } - } else { - requestList = filteredList; - for (ItemStack filterStack : requestList) { - filterStack.setCount(filterStack.getCount() * -1); //Invert the stack size so that - } - - for (int slot = 0; slot < itemHandler.getSlots(); slot++) { - ItemStack checkedStack = itemHandler.getStackInSlot(slot); - if (checkedStack.isEmpty()) { - continue; - } - - int stackSize = checkedStack.getCount(); - - for (ItemStack filterStack : filteredList) { - if (doStacksMatch(filterStack, checkedStack)) { - filterStack.grow(stackSize); - } - } - } - } - - requestList.removeIf(ItemStack::isEmpty); - } - - /** - * This method is only called when the output inventory this filter is - * managing receives an ItemStack. Should only really be called by the Input - * filter via it's transfer method. - * - * @param inputStack - The stack to transfer - * @return - The remainder of the stack after it has been absorbed into the - * inventory. - */ - @Override - public ItemStack transferStackThroughOutputFilter(ItemStack inputStack) { - int allowedAmount = 0; - for (ItemStack filterStack : requestList) { - if (doStacksMatch(filterStack, inputStack)) { - allowedAmount = Math.min(filterStack.getCount(), inputStack.getCount()); - break; - } - } - - if (allowedAmount <= 0) { - return inputStack; - } - - ItemStack testStack = inputStack.copy(); - testStack.setCount(allowedAmount); - ItemStack remainderStack = Utils.insertStackIntoTile(testStack, itemHandler); - - int changeAmount = allowedAmount - (remainderStack.isEmpty() ? 0 : remainderStack.getCount()); - testStack = inputStack.copy(); - testStack.shrink(changeAmount); - - Iterator itr = requestList.iterator(); - while (itr.hasNext()) { - ItemStack filterStack = itr.next(); - if (doStacksMatch(filterStack, inputStack)) { - filterStack.shrink(changeAmount); - if (filterStack.isEmpty()) { - itr.remove(); - } - } - } - - World world = accessedTile.getWorld(); - BlockPos pos = accessedTile.getPos(); - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); - - return testStack; - } - - /** - * This method is only called on an input filter to transfer ItemStacks from - * the input inventory to the output inventory. - */ - @Override - public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer) { - for (int slot = 0; slot < itemHandler.getSlots(); slot++) { - ItemStack inputStack = itemHandler.getStackInSlot(slot); - if (inputStack.isEmpty() || itemHandler.extractItem(slot, inputStack.getCount(), true).isEmpty())//(accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide))) - { - continue; - } - - int allowedAmount = 0; - for (ItemStack filterStack : requestList) { - if (doStacksMatch(filterStack, inputStack)) { - allowedAmount = Math.min(maxTransfer, Math.min(filterStack.getCount(), itemHandler.extractItem(slot, inputStack.getCount(), true).getCount())); - break; - } - } - - if (allowedAmount <= 0) { - continue; - } - - ItemStack testStack = inputStack.copy(); - testStack.setCount(allowedAmount); - ItemStack remainderStack = outputFilter.transferStackThroughOutputFilter(testStack); - int changeAmount = allowedAmount - (remainderStack.isEmpty() ? 0 : remainderStack.getCount()); - - if (!remainderStack.isEmpty() && remainderStack.getCount() == allowedAmount) { - //Nothing has changed. Moving on! - continue; - } - - itemHandler.extractItem(slot, changeAmount, false); - - Iterator itr = requestList.iterator(); - while (itr.hasNext()) { - ItemStack filterStack = itr.next(); - if (doStacksMatch(filterStack, inputStack)) { - filterStack.shrink(changeAmount); - if (filterStack.isEmpty()) { - itr.remove(); - } - } - } - - World world = accessedTile.getWorld(); - BlockPos pos = accessedTile.getPos(); - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); - - return changeAmount; - } - - return 0; - } - - @Override - public boolean doesStackMatchFilter(ItemStack testStack) { - for (ItemStack filterStack : requestList) { - if (doStacksMatch(filterStack, testStack)) { - return true; - } - } - - return false; - } - - @Override - public boolean doStacksMatch(ItemStack filterStack, ItemStack testStack) { - return Utils.canCombine(filterStack, testStack); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/DemonWillHolder.java b/src/main/java/WayofTime/bloodmagic/soul/DemonWillHolder.java deleted file mode 100644 index 5ac2397d..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/DemonWillHolder.java +++ /dev/null @@ -1,81 +0,0 @@ -package WayofTime.bloodmagic.soul; - -import net.minecraft.nbt.NBTTagCompound; - -import java.util.HashMap; -import java.util.Map.Entry; - -public class DemonWillHolder { - public HashMap willMap = new HashMap<>(); - - public double addWill(EnumDemonWillType type, double amount, double max) { - double current = 0; - if (willMap.containsKey(type)) { - current = willMap.get(type); - } - - double added = Math.min(max - current, amount); - addWill(type, amount); - - return added; - } - - public void addWill(EnumDemonWillType type, double amount) { - if (willMap.containsKey(type)) { - willMap.put(type, amount + willMap.get(type)); - } else { - willMap.put(type, amount); - } - } - - public double drainWill(EnumDemonWillType type, double amount) { - if (willMap.containsKey(type)) { - double current = willMap.get(type); - double reduced = Math.min(current, amount); - - if (reduced >= current) { - willMap.remove(type); - } else { - willMap.put(type, current - reduced); - } - - return reduced; - } - - return 0; - } - - public double getWill(EnumDemonWillType type) { - if (willMap.containsKey(type)) { - return willMap.get(type); - } - - return 0; - } - - public void readFromNBT(NBTTagCompound tag, String key) { - NBTTagCompound willTag = tag.getCompoundTag(key); - - willMap.clear(); - - for (EnumDemonWillType type : EnumDemonWillType.values()) { - double amount = willTag.getDouble("EnumWill" + type.getName()); - if (amount > 0) { - willMap.put(type, amount); - } - } - } - - public void writeToNBT(NBTTagCompound tag, String key) { - NBTTagCompound willTag = new NBTTagCompound(); - for (Entry entry : willMap.entrySet()) { - willTag.setDouble("EnumWill" + entry.getKey().getName(), entry.getValue()); - } - - tag.setTag(key, willTag); - } - - public void clearWill() { - willMap.clear(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/EnumDemonWillType.java b/src/main/java/WayofTime/bloodmagic/soul/EnumDemonWillType.java deleted file mode 100644 index 8854afb6..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/EnumDemonWillType.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.bloodmagic.soul; - -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.types.ISubItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IStringSerializable; - -import javax.annotation.Nonnull; -import java.util.Locale; - -public enum EnumDemonWillType implements IStringSerializable, ISubItem { - DEFAULT("default"), - CORROSIVE("corrosive"), - DESTRUCTIVE("destructive"), - VENGEFUL("vengeful"), - STEADFAST("steadfast"); - - public final String name; - - EnumDemonWillType(String name) { - this.name = name; - } - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } - - @Override - public String getName() { - return this.toString(); - } - - - @Nonnull - @Override - public String getInternalName() { - return getName(); - } - - @Nonnull - @Override - public ItemStack getStack(int count) { - return new ItemStack(RegistrarBloodMagicItems.ITEM_DEMON_CRYSTAL, count, ordinal()); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/IDemonWill.java b/src/main/java/WayofTime/bloodmagic/soul/IDemonWill.java deleted file mode 100644 index cb83bc1d..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/IDemonWill.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.bloodmagic.soul; - -import net.minecraft.item.ItemStack; - -public interface IDemonWill { - /** - * Obtains the amount of Will an ItemStack contains. - * - * @param willStack - The stack to retrieve the Will from - * @return - The amount of Will an ItemStack contains - */ - double getWill(EnumDemonWillType type, ItemStack willStack); - - @Deprecated - double getWill(ItemStack willStack); - - /** - * Sets the amount of Will in a given ItemStack. - * - * @param willStack - The ItemStack of the Will - * @param will - The amount of will to set the stack to - */ - void setWill(EnumDemonWillType type, ItemStack willStack, double will); - - @Deprecated - void setWill(ItemStack willStack, double will); - - /** - * Drains the demonic will from the willStack. If all of the will is - * drained, the willStack will be removed. - * - * @param willStack - The ItemStack of the will - * @param drainAmount - The amount of Will to drain - * @return The amount of will drained. - */ - double drainWill(EnumDemonWillType type, ItemStack willStack, double drainAmount); - - @Deprecated - double drainWill(ItemStack willStack, double drainAmount); - - /** - * Creates a new ItemStack with the specified number of will. Implementation - * should respect the number requested. - * - * @param meta - The meta of the ItemStack to create - * @param number - The amount of Will to create the Stack with. - * @return - An ItemStack with the set amount of Will - */ - ItemStack createWill(int meta, double number); - - EnumDemonWillType getType(ItemStack stack); -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/IDemonWillConduit.java b/src/main/java/WayofTime/bloodmagic/soul/IDemonWillConduit.java deleted file mode 100644 index 0d5027ae..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/IDemonWillConduit.java +++ /dev/null @@ -1,18 +0,0 @@ -package WayofTime.bloodmagic.soul; - -/** - * Implement this interface on a block that can accept and store Demonic Will. - */ -public interface IDemonWillConduit { - int getWeight(); - - double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill); - - double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain); - - boolean canFill(EnumDemonWillType type); - - boolean canDrain(EnumDemonWillType type); - - double getCurrentWill(EnumDemonWillType type); -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/IDemonWillGem.java b/src/main/java/WayofTime/bloodmagic/soul/IDemonWillGem.java deleted file mode 100644 index 78c64544..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/IDemonWillGem.java +++ /dev/null @@ -1,27 +0,0 @@ -package WayofTime.bloodmagic.soul; - -import net.minecraft.item.ItemStack; - -public interface IDemonWillGem { - /** - * @param willGemStack - The ItemStack for this demon will gem. - * @param willStack - The ItemStack for the will. Item should extend IDemonWill - * @return - The remainder willStack after the will has been absorbed into - * the gem. Return null if there is no will left in the stack. - */ - ItemStack fillDemonWillGem(ItemStack willGemStack, ItemStack willStack); - - /** - * Returns the number of souls that are left in the soul gem. Returns a - * double because souls can be fractionally drained. - */ - double getWill(EnumDemonWillType type, ItemStack willGemStack); - - void setWill(EnumDemonWillType type, ItemStack willGemStack, double amount); - - int getMaxWill(EnumDemonWillType type, ItemStack willGemStack); - - double drainWill(EnumDemonWillType type, ItemStack stack, double drainAmount, boolean doDrain); - - double fillWill(EnumDemonWillType type, ItemStack stack, double fillAmount, boolean doFill); -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/IDemonWillWeapon.java b/src/main/java/WayofTime/bloodmagic/soul/IDemonWillWeapon.java deleted file mode 100644 index f90c2c98..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/IDemonWillWeapon.java +++ /dev/null @@ -1,10 +0,0 @@ -package WayofTime.bloodmagic.soul; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -import java.util.List; - -public interface IDemonWillWeapon { - List getRandomDemonWillDrop(EntityLivingBase killedEntity, EntityLivingBase attackingEntity, ItemStack stack, int looting); -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/IDiscreteDemonWill.java b/src/main/java/WayofTime/bloodmagic/soul/IDiscreteDemonWill.java deleted file mode 100644 index 9709817a..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/IDiscreteDemonWill.java +++ /dev/null @@ -1,40 +0,0 @@ -package WayofTime.bloodmagic.soul; - -import net.minecraft.item.ItemStack; - -public interface IDiscreteDemonWill { - /** - * Obtains the amount of Will an ItemStack contains. - * - * @param soulStack - The stack to retrieve the Will from - * @return - The amount of Will an ItemStack contains - */ - double getWill(ItemStack soulStack); - - /** - * Drains the demonic will from the willStack. If all of the will is - * drained, the willStack will be removed. Will only drain in discrete - * amounts, determined by getDiscretization. - * - * @param willStack - The ItemStack of the will - * @param drainAmount - The amount of Will to drain - * @return The amount of will drained. - */ - double drainWill(ItemStack willStack, double drainAmount); - - /** - * Gets the discrete number for this demonic will. - * - * @param willStack - The ItemStack of the will - * @return - The discrete number for the given stack. - */ - double getDiscretization(ItemStack willStack); - - /** - * Obtains the type of will this is. - * - * @param willStack - The ItemStack of the will - * @return - The type of will this is. - */ - EnumDemonWillType getType(ItemStack willStack); -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/ISoulBreathContainer.java b/src/main/java/WayofTime/bloodmagic/soul/ISoulBreathContainer.java deleted file mode 100644 index f8b9b137..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/ISoulBreathContainer.java +++ /dev/null @@ -1,16 +0,0 @@ -package WayofTime.bloodmagic.soul; - -import net.minecraft.item.ItemStack; - -public interface ISoulBreathContainer -{ - double getBreath(ItemStack stack); - - void setBreath(ItemStack stack, double amount); - - int getMaxBreath(ItemStack stack); - - double drainBreath(ItemStack stack, double drainAmount, boolean doDrain); - - double fillBreath(ItemStack stack, double fillAmount, boolean doFill); -} diff --git a/src/main/java/WayofTime/bloodmagic/soul/PlayerDemonWillHandler.java b/src/main/java/WayofTime/bloodmagic/soul/PlayerDemonWillHandler.java deleted file mode 100644 index 89d3b97a..00000000 --- a/src/main/java/WayofTime/bloodmagic/soul/PlayerDemonWillHandler.java +++ /dev/null @@ -1,176 +0,0 @@ -package WayofTime.bloodmagic.soul; - -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; - -/** - * This class provides several helper methods in order to handle soul - * consumption and use for a player. This refers to the Soul System, meaning - * Monster Souls and Soul Gems, etc. The Soul Network's helper methods are found - * in {@link NetworkHelper} - */ -public class PlayerDemonWillHandler { - /** - * Gets the total amount of Will a player contains in their inventory - * - * @param type - The type of Will to check for - * @param player - The player to check the will of - * @return - The amount of will the player contains - */ - public static double getTotalDemonWill(EnumDemonWillType type, EntityPlayer player) { - NonNullList inventory = player.inventory.mainInventory; - double souls = 0; - - for (ItemStack stack : inventory) { - if (stack.getItem() instanceof IDemonWill && ((IDemonWill) stack.getItem()).getType(stack) == type) { - souls += ((IDemonWill) stack.getItem()).getWill(type, stack); - } else if (stack.getItem() instanceof IDemonWillGem) { - souls += ((IDemonWillGem) stack.getItem()).getWill(type, stack); - } - } - - return souls; - } - - public static EnumDemonWillType getLargestWillType(EntityPlayer player) { - EnumDemonWillType type = EnumDemonWillType.DEFAULT; - double max = getTotalDemonWill(type, player); - - for (EnumDemonWillType testType : EnumDemonWillType.values()) { - double value = getTotalDemonWill(testType, player); - if (value > max) { - type = testType; - } - } - - return type; - } - - /** - * Checks if the player's Tartaric gems are completely full. - * - * @param type - The type of Will to check for - * @param player - The player to check the Will of - * @return - True if all Will containers are full, false if not. - */ - public static boolean isDemonWillFull(EnumDemonWillType type, EntityPlayer player) { - NonNullList inventory = player.inventory.mainInventory; - - boolean hasGem = false; - for (ItemStack stack : inventory) { - if (stack.getItem() instanceof IDemonWillGem) { - hasGem = true; - if (((IDemonWillGem) stack.getItem()).getWill(type, stack) < ((IDemonWillGem) stack.getItem()).getMaxWill(type, stack)) - return false; - } - } - - return hasGem; - } - - /** - * Consumes Will from the inventory of a given player - * - * @param player - The player to consume the will of - * @param amount - The amount of will to consume - * @return - The amount of will consumed. - */ - public static double consumeDemonWill(EnumDemonWillType type, EntityPlayer player, double amount) { - double consumed = 0; - - NonNullList inventory = player.inventory.mainInventory; - - for (int i = 0; i < inventory.size(); i++) { - if (consumed >= amount) - return consumed; - - ItemStack stack = inventory.get(i); - if (stack.getItem() instanceof IDemonWill && ((IDemonWill) stack.getItem()).getType(stack) == type) { - consumed += ((IDemonWill) stack.getItem()).drainWill(type, stack, amount - consumed); - if (((IDemonWill) stack.getItem()).getWill(type, stack) <= 0) - inventory.set(i, ItemStack.EMPTY); - } else if (stack.getItem() instanceof IDemonWillGem) { - consumed += ((IDemonWillGem) stack.getItem()).drainWill(type, stack, amount - consumed, true); - } - } - - return consumed; - } - - /** - * Adds an IDemonWill contained in an ItemStack to one of the Soul Gems in - * the player's inventory. - * - * @param player - The player to add will to - * @param willStack - ItemStack that contains an IDemonWill to be added - * @return - The modified willStack - */ - public static ItemStack addDemonWill(EntityPlayer player, ItemStack willStack) { - if (willStack.isEmpty()) - return ItemStack.EMPTY; - - NonNullList inventory = player.inventory.mainInventory; - - for (ItemStack stack : inventory) { - if (stack.getItem() instanceof IDemonWillGem) { - ItemStack newStack = ((IDemonWillGem) stack.getItem()).fillDemonWillGem(stack, willStack); - if (newStack.isEmpty()) - return ItemStack.EMPTY; - } - } - - return willStack; - } - - /** - * Adds an IDiscreteDemonWill contained in an ItemStack to one of the Soul - * Gems in the player's inventory. - * - * @param type - The type of Will to add - * @param player - The player to check the Will of - * @param amount - The amount of will to add - * @return - The amount of will added - */ - public static double addDemonWill(EnumDemonWillType type, EntityPlayer player, double amount) { - NonNullList inventory = player.inventory.mainInventory; - double remaining = amount; - - for (ItemStack stack : inventory) { - if (stack.getItem() instanceof IDemonWillGem) { - remaining -= ((IDemonWillGem) stack.getItem()).fillWill(type, stack, remaining, true); - if (remaining <= 0) - break; - } - } - - return amount - remaining; - } - - /** - * Adds an IDiscreteDemonWill contained in an ItemStack to one of the Soul - * Gems in the player's inventory while ignoring a specified stack. - * - * @param type - The type of Will to add - * @param player - The player to check the Will of - * @param amount - The amount of will to add - * @param ignored - A stack to ignore - * @return - The amount of will added - */ - public static double addDemonWill(EnumDemonWillType type, EntityPlayer player, double amount, ItemStack ignored) { - NonNullList inventory = player.inventory.mainInventory; - double remaining = amount; - - for (ItemStack stack : inventory) { - if (!stack.equals(ignored) && stack.getItem() instanceof IDemonWillGem) { - remaining -= ((IDemonWillGem) stack.getItem()).fillWill(type, stack, remaining, true); - - if (remaining <= 0) - break; - } - } - - return amount - remaining; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/BuildTestStructure.java b/src/main/java/WayofTime/bloodmagic/structures/BuildTestStructure.java deleted file mode 100644 index bf1d7826..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/BuildTestStructure.java +++ /dev/null @@ -1,56 +0,0 @@ -package WayofTime.bloodmagic.structures; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.Mirror; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Rotation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldServer; -import net.minecraft.world.gen.structure.template.PlacementSettings; -import net.minecraft.world.gen.structure.template.Template; -import net.minecraft.world.gen.structure.template.TemplateManager; - -import java.util.Random; - -public class BuildTestStructure { - public boolean placeStructureAtPosition(Random rand, Rotation baseRotation, WorldServer world, BlockPos pos, int iteration) { - if (pos == null) - return false; - - MinecraftServer minecraftserver = world.getMinecraftServer(); - TemplateManager templatemanager = world.getStructureTemplateManager(); - - ResourceLocation resource = new ResourceLocation(BloodMagic.MODID, "Corridor1"); - Template template = templatemanager.getTemplate(minecraftserver, resource); - - if (template == null) { - BMLog.DEBUG.warn("Invalid template for location: " + resource); - return false; - } - - PlacementSettings settings = new PlacementSettings(); - settings.setMirror(Mirror.NONE); - - Rotation rot; - - rot = baseRotation; - if (rot == null) - rot = Rotation.NONE; - - settings.setRotation(rot); - settings.setIgnoreEntities(true); - settings.setChunk(null); - settings.setReplacedBlock(null); - settings.setIgnoreStructureBlock(false); - -// settings.func_189946_a(MathHelper.clamp_float(schema.integrity, 0.0F, 1.0F)); - - BlockPos offset = Template.transformedBlockPos(settings, new BlockPos(0, 0, 0)); - BlockPos finalPos = pos.add(offset); - template.addBlocksToWorldChunk(world, finalPos, settings); - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/Dungeon.java b/src/main/java/WayofTime/bloodmagic/structures/Dungeon.java deleted file mode 100644 index dab32935..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/Dungeon.java +++ /dev/null @@ -1,152 +0,0 @@ -package WayofTime.bloodmagic.structures; - -import WayofTime.bloodmagic.ritual.AreaDescriptor; -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.Mirror; -import net.minecraft.util.Rotation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldServer; -import net.minecraft.world.gen.structure.template.PlacementSettings; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.*; -import java.util.Map.Entry; - -public class Dungeon { - public static boolean placeStructureAtPosition(Random rand, WorldServer world, BlockPos pos) { - long startTime = System.nanoTime(); - - Map> availableDoorMap = new HashMap<>(); //Map of doors. The EnumFacing indicates what way this door faces. - List descriptorList = new ArrayList<>(); - Map> roomMap = new HashMap<>(); // Placement positions in terms of actual positions - - PlacementSettings settings = new PlacementSettings(); - Mirror mir = Mirror.NONE; - - settings.setMirror(mir); - - Rotation rot = Rotation.NONE; - - settings.setRotation(rot); - settings.setIgnoreEntities(true); - settings.setChunk(null); - settings.setReplacedBlock(null); - settings.setIgnoreStructureBlock(false); - - DungeonRoom room = getRandomRoom(rand); - roomMap.put(pos, Pair.of(room, settings.copy())); - descriptorList.addAll(room.getAreaDescriptors(settings, pos)); - for (EnumFacing facing : EnumFacing.VALUES) { - if (availableDoorMap.containsKey(facing)) { - List doorList = availableDoorMap.get(facing); - doorList.addAll(room.getDoorOffsetsForFacing(settings, facing, pos)); - } else { - List doorList = room.getDoorOffsetsForFacing(settings, facing, pos); - availableDoorMap.put(facing, doorList); - } - } - - //Initial AreaDescriptors and door positions are initialized. Time for fun! - for (int i = 0; i < 100; i++) { - List facingList = new ArrayList<>(); - for (Entry> entry : availableDoorMap.entrySet()) { - if (entry.getValue() != null && !entry.getValue().isEmpty()) { - facingList.add(entry.getKey()); - } - } - - Collections.shuffle(facingList); //Shuffle the list so that it is random what is chosen - - Pair removedDoor1 = null; - Pair removedDoor2 = null; - BlockPos roomLocation = null; - - for (EnumFacing doorFacing : facingList) { - EnumFacing oppositeDoorFacing = doorFacing.getOpposite(); - List availableDoorList = availableDoorMap.get(doorFacing); //May need to copy here - Collections.shuffle(availableDoorList); - - settings.setRotation(Rotation.values()[rand.nextInt(Rotation.values().length)]); //Same for the Mirror - DungeonRoom testingRoom = getRandomRoom(rand); - - List otherDoorList = testingRoom.getDoorOffsetsForFacing(settings, oppositeDoorFacing, BlockPos.ORIGIN); - if (otherDoorList != null && !otherDoorList.isEmpty()) { - //See if one of these doors works. - Collections.shuffle(otherDoorList); - BlockPos testDoor = otherDoorList.get(0); - testDoor: - for (BlockPos availableDoor : availableDoorList) { - //TODO: Test if it fits, then add the doors to the list. - roomLocation = availableDoor.subtract(testDoor).add(doorFacing.getDirectionVec()); - - List descriptors = testingRoom.getAreaDescriptors(settings, roomLocation); - for (AreaDescriptor testDesc : descriptors) { - for (AreaDescriptor currentDesc : descriptorList) { - if (testDesc.intersects(currentDesc)) { - break testDoor; - } - } - } - - roomMap.put(roomLocation, Pair.of(testingRoom, settings.copy())); - descriptorList.addAll(descriptors); - removedDoor1 = Pair.of(doorFacing, availableDoor); - removedDoor2 = Pair.of(oppositeDoorFacing, testDoor.add(roomLocation)); - - room = testingRoom; - - } - - break; - } - -// Collections.shuffle(otherDoorList); - } - - if (removedDoor1 != null) { - for (EnumFacing facing : EnumFacing.VALUES) { - if (availableDoorMap.containsKey(facing)) { - List doorList = availableDoorMap.get(facing); - doorList.addAll(room.getDoorOffsetsForFacing(settings, facing, roomLocation)); - } else { - List doorList = room.getDoorOffsetsForFacing(settings, facing, roomLocation); - availableDoorMap.put(facing, doorList); - } - } - - EnumFacing face = removedDoor1.getKey(); - if (availableDoorMap.containsKey(face)) { - availableDoorMap.get(face).remove(removedDoor1.getRight()); - } - } - - if (removedDoor2 != null) { - EnumFacing face = removedDoor2.getKey(); - if (availableDoorMap.containsKey(face)) { - availableDoorMap.get(face).remove(removedDoor2.getRight()); - } - } - } - - long endTime = System.nanoTime(); - - long duration = (endTime - startTime); //divide by 1000000 to get milliseconds. - BMLog.DEBUG.info("Duration: " + duration + "(ns), " + duration / 1000000 + "(ms)"); - - //Building what I've got - for (Entry> entry : roomMap.entrySet()) { - BlockPos placementPos = entry.getKey(); - DungeonRoom placedRoom = entry.getValue().getKey(); - PlacementSettings placementSettings = entry.getValue().getValue(); - - placedRoom.placeStructureAtPosition(rand, placementSettings, world, placementPos); - } - - return false; - } - - public static DungeonRoom getRandomRoom(Random rand) { - return DungeonRoomRegistry.getRandomDungeonRoom(rand); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/DungeonRoom.java b/src/main/java/WayofTime/bloodmagic/structures/DungeonRoom.java deleted file mode 100644 index cef16685..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/DungeonRoom.java +++ /dev/null @@ -1,62 +0,0 @@ -package WayofTime.bloodmagic.structures; - -import WayofTime.bloodmagic.ritual.AreaDescriptor; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldServer; -import net.minecraft.world.gen.structure.template.PlacementSettings; -import net.minecraft.world.gen.structure.template.Template; - -import java.util.*; -import java.util.Map.Entry; - -public class DungeonRoom { - public int dungeonWeight = 1; - public Map structureMap = new HashMap<>(); - - public Map> doorMap = new HashMap<>(); //Map of doors. The EnumFacing indicates what way this door faces. - public List descriptorList = new ArrayList<>(); - - public DungeonRoom(Map structureMap, Map> doorMap, List descriptorList) { - this.structureMap = structureMap; - this.doorMap = doorMap; - this.descriptorList = descriptorList; - } - - public List getAreaDescriptors(PlacementSettings settings, BlockPos offset) { - List newList = new ArrayList<>(); - - for (AreaDescriptor desc : descriptorList) { - newList.add(desc.rotateDescriptor(settings).offset(offset)); - } - - return newList; - } - - public List getDoorOffsetsForFacing(PlacementSettings settings, EnumFacing facing, BlockPos offset) { - List offsetList = new ArrayList<>(); - - EnumFacing originalFacing = DungeonUtil.reverseRotate(settings.getMirror(), settings.getRotation(), facing); - if (doorMap.containsKey(originalFacing)) { - List doorList = doorMap.get(originalFacing); - for (BlockPos doorPos : doorList) { - offsetList.add(Template.transformedBlockPos(settings, doorPos).add(offset)); - } - } - - return offsetList; - } - - public boolean placeStructureAtPosition(Random rand, PlacementSettings settings, WorldServer world, BlockPos pos) { - for (Entry entry : structureMap.entrySet()) { - ResourceLocation location = new ResourceLocation(entry.getKey()); - DungeonStructure structure = new DungeonStructure(location); - BlockPos offsetPos = Template.transformedBlockPos(settings, entry.getValue()); - - structure.placeStructureAtPosition(rand, settings, world, pos.add(offsetPos)); - } - - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/DungeonRoomLoader.java b/src/main/java/WayofTime/bloodmagic/structures/DungeonRoomLoader.java deleted file mode 100644 index a8b3038f..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/DungeonRoomLoader.java +++ /dev/null @@ -1,75 +0,0 @@ -package WayofTime.bloodmagic.structures; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.gson.Serializers; -import com.google.common.base.Charsets; -import com.google.common.io.Resources; -import com.google.common.reflect.TypeToken; -import net.minecraft.util.ResourceLocation; -import org.apache.commons.io.IOUtils; - -import java.io.*; -import java.net.URL; -import java.util.List; -import java.util.Random; - -public class DungeonRoomLoader { - public static void saveDungeons() { - for (DungeonRoom room : DungeonRoomRegistry.dungeonWeightMap.keySet()) { - saveSingleDungeon(room); - } - } - - public static void saveSingleDungeon(DungeonRoom room) { - String json = Serializers.GSON.toJson(room); - - Writer writer; - try { - File file = new File("config/BloodMagic/schematics"); - file.mkdirs(); - - writer = new FileWriter("config/BloodMagic/schematics/" + new Random().nextInt() + ".json"); - writer.write(json); - writer.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public static void loadDungeons() { - try { - URL schematicURL = DungeonRoomLoader.class.getResource(resLocToResourcePath(new ResourceLocation("bloodmagic:schematics"))); - List schematics = Serializers.GSON.fromJson(Resources.toString(schematicURL, Charsets.UTF_8), new TypeToken>() { - }.getType()); - for (String schematicKey : schematics) { - ResourceLocation schematic = new ResourceLocation(schematicKey); - URL dungeonURL = DungeonRoomLoader.class.getResource(resLocToResourcePath(schematic)); - DungeonRoom dungeonRoom = Serializers.GSON.fromJson(Resources.toString(dungeonURL, Charsets.UTF_8), DungeonRoom.class); - DungeonRoomRegistry.registerDungeonRoom(dungeonRoom, Math.max(1, dungeonRoom.dungeonWeight)); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void test() { - ResourceLocation id = new ResourceLocation(BloodMagic.MODID, "testGson"); - String s = id.getResourceDomain(); - String s1 = id.getResourcePath(); - InputStream inputstream = null; - - try { - inputstream = DungeonRoomLoader.class.getResourceAsStream("/assets/" + s + "/schematics/" + s1 + ".nbt"); -// this.readTemplateFromStream(s1, inputstream); - return; - } catch (Throwable var10) { - - } finally { - IOUtils.closeQuietly(inputstream); - } - } - - public static String resLocToResourcePath(ResourceLocation resourceLocation) { - return "/assets/" + resourceLocation.getResourceDomain() + "/schematics/" + resourceLocation.getResourcePath() + ".json"; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/DungeonRoomRegistry.java b/src/main/java/WayofTime/bloodmagic/structures/DungeonRoomRegistry.java deleted file mode 100644 index 5dd80e81..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/DungeonRoomRegistry.java +++ /dev/null @@ -1,28 +0,0 @@ -package WayofTime.bloodmagic.structures; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; - -public class DungeonRoomRegistry { - public static Map dungeonWeightMap = new HashMap<>(); - private static int totalWeight = 0; - - public static void registerDungeonRoom(DungeonRoom room, int weight) { - dungeonWeightMap.put(room, weight); - totalWeight += weight; - } - - public static DungeonRoom getRandomDungeonRoom(Random rand) { - int wantedWeight = rand.nextInt(totalWeight); - for (Entry entry : dungeonWeightMap.entrySet()) { - wantedWeight -= entry.getValue(); - if (wantedWeight < 0) { - return entry.getKey(); - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/DungeonStructure.java b/src/main/java/WayofTime/bloodmagic/structures/DungeonStructure.java deleted file mode 100644 index 198869e6..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/DungeonStructure.java +++ /dev/null @@ -1,47 +0,0 @@ -package WayofTime.bloodmagic.structures; - -import WayofTime.bloodmagic.util.BMLog; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldServer; -import net.minecraft.world.gen.structure.template.PlacementSettings; -import net.minecraft.world.gen.structure.template.Template; -import net.minecraft.world.gen.structure.template.TemplateManager; - -import java.util.Random; - -public class DungeonStructure { - public ResourceLocation resource; - - public DungeonStructure(ResourceLocation resource) { - this.resource = resource; - } - - public boolean placeStructureAtPosition(Random rand, PlacementSettings settings, WorldServer world, BlockPos pos) { - if (pos == null) - return false; - - MinecraftServer minecraftserver = world.getMinecraftServer(); - TemplateManager templatemanager = world.getStructureTemplateManager(); - - Template template = templatemanager.getTemplate(minecraftserver, resource); - - if (template == null) { - BMLog.DEBUG.warn("Invalid template for location: " + resource); - return false; - } - -// settings.func_189946_a(MathHelper.clamp_float(schema.integrity, 0.0F, 1.0F)); - - BlockPos offset = Template.transformedBlockPos(settings, new BlockPos(0, 0, 0)); - BlockPos finalPos = pos.add(offset); - template.addBlocksToWorldChunk(world, finalPos, settings); - - return true; - } - - public DungeonStructure copy() { - return new DungeonStructure(resource); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/DungeonTester.java b/src/main/java/WayofTime/bloodmagic/structures/DungeonTester.java deleted file mode 100644 index 70bc4aaf..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/DungeonTester.java +++ /dev/null @@ -1,82 +0,0 @@ -package WayofTime.bloodmagic.structures; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldServer; - -import java.util.Random; - -public class DungeonTester { - public static void testDungeonGeneration(WorldServer world, BlockPos pos) { - - } - - public static void testDungeonElementWithOutput(WorldServer world, BlockPos pos) { - Dungeon.placeStructureAtPosition(new Random(), world, pos); -// ResourceLocation resource = new ResourceLocation(Constants.Mod.MODID, "Corridor1"); -// -// DungeonStructure structure = new DungeonStructure(resource); -// Map structureMap = new HashMap(); -// structureMap.put(structure, new BlockPos(0, 0, 0)); -// -// Map> doorMap = new HashMap>(); -// List descriptorList = new ArrayList(); -// descriptorList.add(new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 5, 3, 7)); -// -// DungeonUtil.addRoom(doorMap, EnumFacing.NORTH, new BlockPos(3, 0, 0)); -// DungeonUtil.addRoom(doorMap, EnumFacing.SOUTH, new BlockPos(3, 0, 6)); -// DungeonUtil.addRoom(doorMap, EnumFacing.WEST, new BlockPos(0, 0, 3)); -// -// DungeonRoom room = new DungeonRoom(structureMap, doorMap, descriptorList); -// -// PlacementSettings settings = new PlacementSettings(); -// -// Mirror mir = Mirror.NONE; -// settings.setMirror(mir); -// -// Rotation rot = Rotation.NONE; -// settings.setRotation(rot); -// -// settings.setIgnoreEntities(true); -// settings.setChunk((ChunkPos) null); -// settings.setReplacedBlock((Block) null); -// settings.setIgnoreStructureBlock(false); -// -// int i = 0; -// -// for (Mirror mirror : Mirror.values()) -// { -// System.out.print("Mirror: " + mirror + '\n'); -// int j = 0; -// for (Rotation rotation : Rotation.values()) -// { -// System.out.print("Rotation: " + rot + '\n'); -// settings.setRotation(rotation); -// settings.setMirror(mirror); -// -// BlockPos offsetPos = pos.add(i * 16, 0, j * 16); -// room.placeStructureAtPosition(new Random(), settings, world, offsetPos); -// -//// List descriptors = structure.getAreaDescriptors(settings, offsetPos); -//// for (AreaDescriptor desc : descriptors) -//// { -//// List posList = desc.getContainedPositions(new BlockPos(0, 0, 0)); -//// for (BlockPos placePos : posList) -//// { -//// world.setBlockState(placePos, Blocks.REDSTONE_BLOCK.getDefaultState()); -//// } -//// } -// -//// for (EnumFacing facing : EnumFacing.HORIZONTALS) -//// { -//// List doorList = structure.getDoorOffsetsForFacing(settings, facing); -//// for (BlockPos doorPos : doorList) -//// { -//// System.out.print("Door at " + doorPos + " facing " + facing + '\n'); -//// } -//// } -// j++; -// } -// i++; -// } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/DungeonUtil.java b/src/main/java/WayofTime/bloodmagic/structures/DungeonUtil.java deleted file mode 100644 index ddf6c518..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/DungeonUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.bloodmagic.structures; - -import net.minecraft.util.EnumFacing; -import net.minecraft.util.Mirror; -import net.minecraft.util.Rotation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.gen.structure.template.PlacementSettings; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class DungeonUtil { - public static EnumFacing rotate(Mirror mirror, Rotation rotation, EnumFacing original) { - return rotation.rotate(mirror.mirror(original)); - } - - public static EnumFacing reverseRotate(Mirror mirror, Rotation rotation, EnumFacing original) { - return mirror.mirror(getOppositeRotation(rotation).rotate(original)); - } - - public static EnumFacing getFacingForSettings(PlacementSettings settings, EnumFacing original) { - return rotate(settings.getMirror(), settings.getRotation(), original); - } - - public static Rotation getOppositeRotation(Rotation rotation) { - switch (rotation) { - case CLOCKWISE_90: - return Rotation.COUNTERCLOCKWISE_90; - case COUNTERCLOCKWISE_90: - return Rotation.CLOCKWISE_90; - default: - return rotation; - } - } - - public static void addRoom(Map> doorMap, EnumFacing facing, BlockPos offsetPos) { - if (doorMap.containsKey(facing)) { - doorMap.get(facing).add(offsetPos); - } else { - List doorList = new ArrayList<>(); - doorList.add(offsetPos); - doorMap.put(facing, doorList); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/structures/ModDungeons.java b/src/main/java/WayofTime/bloodmagic/structures/ModDungeons.java deleted file mode 100644 index 469e3abe..00000000 --- a/src/main/java/WayofTime/bloodmagic/structures/ModDungeons.java +++ /dev/null @@ -1,26 +0,0 @@ -package WayofTime.bloodmagic.structures; - -public class ModDungeons { - public static void init() { -// ResourceLocation resource = new ResourceLocation(Constants.Mod.MODID, "HallChest1"); -// -// Map structureMap = new HashMap(); -// structureMap.put(resource.toString(), new BlockPos(0, 0, 0)); -// -// Map> doorMap = new HashMap>(); -// List descriptorList = new ArrayList(); -// descriptorList.add(new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 12, 5, 9)); -// -// DungeonUtil.addRoom(doorMap, EnumFacing.EAST, new BlockPos(11, 0, 4)); -// DungeonUtil.addRoom(doorMap, EnumFacing.WEST, new BlockPos(0, 0, 4)); -// -// DungeonRoom room = new DungeonRoom(structureMap, doorMap, descriptorList); -// DungeonRoomLoader.saveSingleDungeon(room); -// -// DungeonRoomRegistry.registerDungeonRoom(room, 1); -// -// DungeonRoomLoader.saveDungeons(); - - DungeonRoomLoader.loadDungeons(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/teleport/ITeleport.java b/src/main/java/WayofTime/bloodmagic/teleport/ITeleport.java deleted file mode 100644 index 1f9242f4..00000000 --- a/src/main/java/WayofTime/bloodmagic/teleport/ITeleport.java +++ /dev/null @@ -1,7 +0,0 @@ -package WayofTime.bloodmagic.teleport; - -public interface ITeleport { - void teleport(); - - int getTeleportCost(); -} diff --git a/src/main/java/WayofTime/bloodmagic/teleport/PortalLocation.java b/src/main/java/WayofTime/bloodmagic/teleport/PortalLocation.java deleted file mode 100644 index ccb55eeb..00000000 --- a/src/main/java/WayofTime/bloodmagic/teleport/PortalLocation.java +++ /dev/null @@ -1,90 +0,0 @@ -package WayofTime.bloodmagic.teleport; - -import WayofTime.bloodmagic.util.Constants; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.math.BlockPos; - -import java.io.Serializable; - -public class PortalLocation implements Serializable { - private int x; - private int y; - private int z; - private int dimension; - - public PortalLocation(int x, int y, int z, int dimension) { - this.x = x; - this.y = y; - this.z = z; - this.dimension = dimension; - } - - public PortalLocation(BlockPos blockPos, int dimension) { - this(blockPos.getX(), blockPos.getY(), blockPos.getZ(), dimension); - } - - public NBTTagCompound writeToNBT(NBTTagCompound tag) { - NBTTagCompound locationTag = new NBTTagCompound(); - - locationTag.setInteger(Constants.NBT.X_COORD, x); - locationTag.setInteger(Constants.NBT.Y_COORD, y); - locationTag.setInteger(Constants.NBT.Z_COORD, z); - locationTag.setInteger(Constants.NBT.DIMENSION_ID, dimension); - tag.setTag(Constants.NBT.PORTAL_LOCATION, locationTag); - - return tag; - } - - public BlockPos getBlockPos() { - return new BlockPos(x, y, z); - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - PortalLocation that = (PortalLocation) o; - - if (x != that.x) - return false; - if (y != that.y) - return false; - return z == that.z; - - } - - @Override - public int hashCode() { - int result = x; - result = 31 * result + y; - result = 31 * result + z; - return result; - } - - public int getX() { - return x; - } - - public int getY() { - return y; - } - - public int getZ() { - return z; - } - - public int getDimension() { - return dimension; - } - - public static PortalLocation readFromNBT(NBTTagCompound tag) { - if (tag.hasKey(Constants.NBT.PORTAL_LOCATION)) { - NBTTagCompound locationTag = tag.getCompoundTag(Constants.NBT.PORTAL_LOCATION); - return new PortalLocation(locationTag.getInteger(Constants.NBT.X_COORD), locationTag.getInteger(Constants.NBT.Y_COORD), locationTag.getInteger(Constants.NBT.Z_COORD), locationTag.getInteger(Constants.NBT.DIMENSION_ID)); - } - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/teleport/Teleport.java b/src/main/java/WayofTime/bloodmagic/teleport/Teleport.java deleted file mode 100644 index 742b4000..00000000 --- a/src/main/java/WayofTime/bloodmagic/teleport/Teleport.java +++ /dev/null @@ -1,70 +0,0 @@ -package WayofTime.bloodmagic.teleport; - -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; - -import java.util.UUID; - -public abstract class Teleport implements ITeleport { - protected int x; - protected int y; - protected int z; - protected Entity entity; - protected UUID networkOwner; - - public Teleport(int x, int y, int z, Entity entity, UUID networkOwner) { - this.x = x; - this.y = y; - this.z = z; - this.entity = entity; - this.networkOwner = networkOwner; - } - - public Teleport(BlockPos blockPos, Entity entity, UUID networkOwner) { - this(blockPos.getX(), blockPos.getY(), blockPos.getZ(), entity, networkOwner); - } - - public int getX() { - return x; - } - - public int getY() { - return y; - } - - public int getZ() { - return z; - } - - public Entity getEntity() { - return entity; - } - - public UUID getNetworkOwner() { - return networkOwner; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Teleport)) return false; - - Teleport teleport = (Teleport) o; - - if (x != teleport.x) return false; - if (y != teleport.y) return false; - if (z != teleport.z) return false; - if (entity != null ? !entity.equals(teleport.entity) : teleport.entity != null) return false; - return networkOwner != null ? networkOwner.equals(teleport.networkOwner) : teleport.networkOwner == null; - } - - @Override - public int hashCode() { - int result = x; - result = 31 * result + y; - result = 31 * result + z; - result = 31 * result + (entity != null ? entity.hashCode() : 0); - result = 31 * result + (networkOwner != null ? networkOwner.hashCode() : 0); - return result; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/teleport/TeleportQueue.java b/src/main/java/WayofTime/bloodmagic/teleport/TeleportQueue.java deleted file mode 100644 index 1f7463f5..00000000 --- a/src/main/java/WayofTime/bloodmagic/teleport/TeleportQueue.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.bloodmagic.teleport; - -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; - -import java.util.ArrayList; -import java.util.List; - -public class TeleportQueue { - private static TeleportQueue INSTANCE = new TeleportQueue(); - private static List queue; - - private TeleportQueue() { - queue = new ArrayList<>(); - } - - public void addITeleport(ITeleport iTeleport) { - queue.add(iTeleport); - } - - @SubscribeEvent - public void serverTick(TickEvent.ServerTickEvent event) { - if (event.phase != TickEvent.Phase.END) { - return; - } - - for (ITeleport iTeleport : queue) { - iTeleport.teleport(); - } - - queue.clear(); - } - - public static TeleportQueue getInstance() { - return INSTANCE; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/teleport/TeleporterBloodMagic.java b/src/main/java/WayofTime/bloodmagic/teleport/TeleporterBloodMagic.java deleted file mode 100644 index 4a02d90a..00000000 --- a/src/main/java/WayofTime/bloodmagic/teleport/TeleporterBloodMagic.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.bloodmagic.teleport; - -import net.minecraft.entity.Entity; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.Teleporter; -import net.minecraft.world.WorldServer; - -public class TeleporterBloodMagic extends Teleporter { - public TeleporterBloodMagic(WorldServer worldServer) { - super(worldServer); - } - - @Override - public boolean makePortal(Entity entity) { - return true; - } - - @Override - public void removeStalePortalLocations(long worldTime) { - - } - - @Override - public boolean placeInExistingPortal(Entity entityIn, float rotationYaw) { - return true; - } - - @Override - public void placeInPortal(Entity entity, float rotationYaw) { - entity.setLocationAndAngles(MathHelper.floor(entity.posX), MathHelper.floor(entity.posY) + 2, MathHelper.floor(entity.posZ), entity.rotationYaw, entity.rotationPitch); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java deleted file mode 100644 index c1c82c2c..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java +++ /dev/null @@ -1,202 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ITickable; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffect; -import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectCraftingNew; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyArray; -import WayofTime.bloodmagic.core.registry.AlchemyArrayRecipeRegistry; -import WayofTime.bloodmagic.iface.IAlchemyArray; -import WayofTime.bloodmagic.util.Constants; - -public class TileAlchemyArray extends TileInventory implements ITickable, IAlchemyArray -{ - public boolean isActive = false; - public int activeCounter = 0; - public EnumFacing rotation = EnumFacing.HORIZONTALS[0]; - - private String key = "empty"; - public AlchemyArrayEffect arrayEffect; - private boolean doDropIngredients = true; - - public TileAlchemyArray() - { - super(2, "alchemyArray"); - } - - public void onEntityCollidedWithBlock(IBlockState state, Entity entity) - { - if (arrayEffect != null) - { - arrayEffect.onEntityCollidedWithBlock(this, getWorld(), pos, state, entity); - } - } - - @Override - public void deserialize(NBTTagCompound tagCompound) - { - super.deserialize(tagCompound); - this.isActive = tagCompound.getBoolean("isActive"); - this.activeCounter = tagCompound.getInteger("activeCounter"); - this.key = tagCompound.getString("key"); - if (!tagCompound.hasKey("doDropIngredients")) //Check if the array is old - { - this.doDropIngredients = true; - } else - { - this.doDropIngredients = tagCompound.getBoolean("doDropIngredients"); - } - this.rotation = EnumFacing.HORIZONTALS[tagCompound.getInteger(Constants.NBT.DIRECTION)]; - - NBTTagCompound arrayTag = tagCompound.getCompoundTag("arrayTag"); - arrayEffect = AlchemyArrayRecipeRegistry.getAlchemyArrayEffect(key); - if (arrayEffect != null) - { - arrayEffect.readFromNBT(arrayTag); - } - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tagCompound) - { - super.serialize(tagCompound); - tagCompound.setBoolean("isActive", isActive); - tagCompound.setInteger("activeCounter", activeCounter); - tagCompound.setString("key", "".equals(key) ? "empty" : key); - tagCompound.setBoolean("doDropIngredients", doDropIngredients); - tagCompound.setInteger(Constants.NBT.DIRECTION, rotation.getHorizontalIndex()); - - NBTTagCompound arrayTag = new NBTTagCompound(); - if (arrayEffect != null) - { - arrayEffect.writeToNBT(arrayTag); - } - tagCompound.setTag("arrayTag", arrayTag); - - return tagCompound; - } - - @Override - public int getInventoryStackLimit() - { - return 1; - } - - //Use this to prevent the Array from dropping items - useful for arrays that need to "consume" ingredients well before the effect. - public void setItemDrop(boolean dropItems) - { - this.doDropIngredients = dropItems; - } - - @Override - public void update() - { - if (isActive && attemptCraft()) - { - activeCounter++; - } else - { - isActive = false; - doDropIngredients = true; - activeCounter = 0; - arrayEffect = null; - key = "empty"; - } - } - - /** - * This occurs when the block is destroyed. - */ - @Override - public void dropItems() - { - if (arrayEffect == null || doDropIngredients) - { - super.dropItems(); - } - } - - public boolean attemptCraft() - { - AlchemyArrayEffect effect = AlchemyArrayRecipeRegistry.getAlchemyArrayEffect(this.getStackInSlot(0), this.getStackInSlot(1)); - if (effect != null) - { - if (arrayEffect == null) - { - arrayEffect = effect; - key = effect.getKey(); - } else - { - String effectKey = effect.getKey(); - if (effectKey.equals(key)) - { - //Good! Moving on. - } else - { - //Something has changed, therefore we have to move our stuffs. - //TODO: Add an AlchemyArrayEffect.onBreak(); ? - arrayEffect = effect; - key = effect.getKey(); - } - } - } else - { - RecipeAlchemyArray recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyArray(getStackInSlot(0), getStackInSlot(1)); - if (recipe == null) - return false; - - AlchemyArrayEffect newEffect = new AlchemyArrayEffectCraftingNew(recipe); - if (arrayEffect == null) - { - arrayEffect = newEffect; - key = newEffect.key; - } else if (!newEffect.key.equals(key)) - { - arrayEffect = newEffect; - key = newEffect.key; - } - } - - if (arrayEffect != null) - { - isActive = true; - - if (arrayEffect.update(this, this.activeCounter)) - { - this.decrStackSize(0, 1); - this.decrStackSize(1, 1); - this.getWorld().setBlockToAir(getPos()); - } - - return true; - } - - return false; - } - - @Override - public EnumFacing getRotation() - { - return rotation; - } - - public void setRotation(EnumFacing rotation) - { - this.rotation = rotation; - } - - @Override - @SideOnly(Side.CLIENT) - public AxisAlignedBB getRenderBoundingBox() - { - return Block.FULL_BLOCK_AABB.offset(getPos()); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyTable.java deleted file mode 100644 index b023c5c0..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyTable.java +++ /dev/null @@ -1,516 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.api.event.BloodMagicCraftedEvent; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyTable; -import WayofTime.bloodmagic.core.data.*; -import WayofTime.bloodmagic.core.registry.AlchemyTableRecipeRegistry; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.iface.ICustomAlchemyConsumable; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTableRecipe; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import net.minecraft.block.state.IBlockState; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ITickable; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; -import org.apache.commons.lang3.ArrayUtils; - -import java.util.ArrayList; -import java.util.List; - -public class TileAlchemyTable extends TileInventory implements ISidedInventory, ITickable -{ - public static final int orbSlot = 6; - public static final int toolSlot = 7; - public static final int outputSlot = 8; - - public EnumFacing direction = EnumFacing.NORTH; - public boolean isSlave = false; - public int burnTime = 0; - public int ticksRequired = 1; - - public BlockPos connectedPos = BlockPos.ORIGIN; - public boolean[] blockedSlots = new boolean[] { false, false, false, false, false, false }; - - public TileAlchemyTable() - { - super(9, "alchemyTable"); - } - - public void setInitialTableParameters(EnumFacing direction, boolean isSlave, BlockPos connectedPos) - { - this.isSlave = isSlave; - this.connectedPos = connectedPos; - - if (!isSlave) - { - this.direction = direction; - } - } - - public boolean isInvisible() - { - return isSlave(); - } - - public boolean isInputSlotAccessible(int slot) - { - return !(slot < 6 && slot >= 0) || !blockedSlots[slot]; - } - - public void toggleInputSlotAccessible(int slot) - { - if (slot < 6 && slot >= 0) - blockedSlots[slot] = !blockedSlots[slot]; - } - - @Override - public void deserialize(NBTTagCompound tag) - { - super.deserialize(tag); - - isSlave = tag.getBoolean("isSlave"); - direction = EnumFacing.getFront(tag.getInteger(Constants.NBT.DIRECTION)); - connectedPos = new BlockPos(tag.getInteger(Constants.NBT.X_COORD), tag.getInteger(Constants.NBT.Y_COORD), tag.getInteger(Constants.NBT.Z_COORD)); - - burnTime = tag.getInteger("burnTime"); - ticksRequired = tag.getInteger("ticksRequired"); - - byte[] array = tag.getByteArray("blockedSlots"); - for (int i = 0; i < array.length; i++) - blockedSlots[i] = array[i] != 0; - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) - { - super.serialize(tag); - - tag.setBoolean("isSlave", isSlave); - tag.setInteger(Constants.NBT.DIRECTION, direction.getIndex()); - tag.setInteger(Constants.NBT.X_COORD, connectedPos.getX()); - tag.setInteger(Constants.NBT.Y_COORD, connectedPos.getY()); - tag.setInteger(Constants.NBT.Z_COORD, connectedPos.getZ()); - - tag.setInteger("burnTime", burnTime); - tag.setInteger("ticksRequired", ticksRequired); - - byte[] blockedSlotArray = new byte[blockedSlots.length]; - for (int i = 0; i < blockedSlots.length; i++) - blockedSlotArray[i] = (byte) (blockedSlots[i] ? 1 : 0); - - tag.setByteArray("blockedSlots", blockedSlotArray); - return tag; - } - - @SuppressWarnings("unchecked") - @Override - public T getCapability(Capability capability, EnumFacing facing) - { - if (facing != null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - { - if (this.isSlave()) - { - TileEntity tile = getWorld().getTileEntity(connectedPos); - if (tile instanceof TileAlchemyTable && !((TileAlchemyTable) tile).isSlave) - { - return (T) tile.getCapability(capability, facing); - } - } else - { - return super.getCapability(capability, facing); - } - } - - return super.getCapability(capability, facing); - } - - @Override - public int[] getSlotsForFace(EnumFacing side) - { - switch (side) - { - case DOWN: - return new int[] { outputSlot }; - case UP: - return new int[] { orbSlot, toolSlot }; - default: - return new int[] { 0, 1, 2, 3, 4, 5 }; - } - } - - @Override - public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction) - { - switch (direction) - { - case DOWN: - return index != outputSlot && index != orbSlot && index != toolSlot; - case UP: - if (index == orbSlot && !stack.isEmpty() && stack.getItem() instanceof IBloodOrb) - { - return true; - } else if (index == toolSlot) - { - return false; //TODO: - } else - { - return true; - } - default: - if (this.isSlave) - { - TileEntity tile = getWorld().getTileEntity(connectedPos); - if (tile instanceof TileAlchemyTable && !((TileAlchemyTable) tile).isSlave) - { - return ((TileAlchemyTable) tile).canInsertItem(index, stack, direction); - } - } - return getAccessibleInputSlots(direction).contains(index); - } - } - - @Override - public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) - { - switch (direction) - { - case DOWN: - return index == outputSlot; - case UP: - if (index == orbSlot && !stack.isEmpty() && stack.getItem() instanceof IBloodOrb) - { - return true; - } else if (index == toolSlot) - { - return true; //TODO: - } else - { - return true; - } - default: - if (this.isSlave) - { - TileEntity tile = getWorld().getTileEntity(connectedPos); - if (tile instanceof TileAlchemyTable && !((TileAlchemyTable) tile).isSlave) - { - return ((TileAlchemyTable) tile).canExtractItem(index, stack, direction); - } - } - return getAccessibleInputSlots(direction).contains(index); - } - } - - public List getAccessibleInputSlots(EnumFacing direction) - { - List list = new ArrayList<>(); - - for (int i = 0; i < 6; i++) - { - if (isInputSlotAccessible(i)) - { - list.add(i); - } - } - - return list; - } - - @Override - public void update() - { - if (isSlave()) - { - return; - } - - List inputList = new ArrayList<>(); - - for (int i = 0; i < 6; i++) - { - if (!getStackInSlot(i).isEmpty()) - { - inputList.add(getStackInSlot(i)); - } - } - - int tier = getTierOfOrb(); - - // special recipes like dying - AlchemyTableRecipe recipe = AlchemyTableRecipeRegistry.getMatchingRecipe(inputList, getWorld(), getPos()); - if (recipe != null && (burnTime > 0 || (!getWorld().isRemote && tier >= recipe.getTierRequired() && this.getContainedLp() >= recipe.getLpDrained()))) - { - if (burnTime == 1) - notifyUpdate(); - - if (canCraft(recipe.getRecipeOutput(inputList))) - { - ticksRequired = recipe.getTicksRequired(); - burnTime++; - - if (burnTime == ticksRequired) - { - if (!getWorld().isRemote) - { - int requiredLp = recipe.getLpDrained(); - if (requiredLp > 0) - { - if (!getWorld().isRemote) - { - consumeLp(requiredLp); - } - } - - if (!getWorld().isRemote) - { - craftItem(inputList, recipe); - } - } - - burnTime = 0; - - IBlockState state = getWorld().getBlockState(pos); - getWorld().notifyBlockUpdate(getPos(), state, state, 3); - } else if (burnTime > ticksRequired + 10) - { - burnTime = 0; - } - } else - { - burnTime = 0; - } - } else - { // Simple recipes - RecipeAlchemyTable recipeAlchemyTable = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getAlchemyTable(inputList); - if (recipeAlchemyTable != null && (burnTime > 0 || (!getWorld().isRemote && tier >= recipeAlchemyTable.getMinimumTier() && getContainedLp() >= recipeAlchemyTable.getSyphon()))) - { - if (burnTime == 1) - notifyUpdate(); - - if (canCraft(recipeAlchemyTable.getOutput())) - { - ticksRequired = recipeAlchemyTable.getTicks(); - burnTime++; - if (burnTime >= ticksRequired) - { - if (!getWorld().isRemote) - { - if (recipeAlchemyTable.getSyphon() > 0) - { - if (consumeLp(recipeAlchemyTable.getSyphon()) < recipeAlchemyTable.getSyphon()) - { - //There was not enough LP to craft or there was no orb - burnTime = 0; - notifyUpdate(); - return; - } - } - - ItemStack[] inputs = new ItemStack[0]; - for (ItemStack stack : inputList) - ArrayUtils.add(inputs, stack.copy()); - - BloodMagicCraftedEvent.AlchemyTable event = new BloodMagicCraftedEvent.AlchemyTable(recipeAlchemyTable.getOutput().copy(), inputs); - MinecraftForge.EVENT_BUS.post(event); - - ItemStack outputSlotStack = getStackInSlot(outputSlot); - if (outputSlotStack.isEmpty()) - setInventorySlotContents(outputSlot, event.getOutput()); - else - outputSlotStack.grow(event.getOutput().getCount()); - - for (int i = 0; i < 6; i++) - { - ItemStack currentStack = getStackInSlot(i); - if (currentStack.getItem().hasContainerItem(currentStack)) - setInventorySlotContents(i, currentStack.getItem().getContainerItem(currentStack)); - else if (currentStack.getItem() instanceof ICustomAlchemyConsumable) - setInventorySlotContents(i, ((ICustomAlchemyConsumable) currentStack.getItem()).drainUseOnAlchemyCraft(currentStack)); - else - currentStack.shrink(1); - } - - burnTime = 0; - notifyUpdate(); - } - } - } - } else - { - burnTime = 0; - } - } - } - - public double getProgressForGui() - { - return ((double) burnTime) / ticksRequired; - } - - private boolean canCraft(ItemStack output) - { - ItemStack currentOutputStack = getStackInSlot(outputSlot); - if (output.isEmpty()) - return false; - if (currentOutputStack.isEmpty()) - return true; - if (!ItemHandlerHelper.canItemStacksStack(output, currentOutputStack)) - return false; - int result = currentOutputStack.getCount() + output.getCount(); - return result <= getInventoryStackLimit() && result <= currentOutputStack.getMaxStackSize(); - } - - public int getTierOfOrb() - { - ItemStack orbStack = getStackInSlot(orbSlot); - if (!orbStack.isEmpty()) - { - if (orbStack.getItem() instanceof IBloodOrb) - { - BloodOrb orb = ((IBloodOrb) orbStack.getItem()).getOrb(orbStack); - return orb == null ? 0 : orb.getTier(); - } - } - - return 0; - } - - public int getContainedLp() - { - ItemStack orbStack = getStackInSlot(orbSlot); - if (!orbStack.isEmpty()) - { - if (orbStack.getItem() instanceof IBloodOrb) - { - Binding binding = ((IBindable) orbStack.getItem()).getBinding(orbStack); - if (binding == null) - { - return 0; - } - - SoulNetwork network = NetworkHelper.getSoulNetwork(binding); - - return network.getCurrentEssence(); - } - } - - return 0; - } - - public void craftItem(List inputList, AlchemyTableRecipe recipe) - { - ItemStack outputStack = recipe.getRecipeOutput(inputList); - if (this.canCraft(outputStack)) - { - ItemStack currentOutputStack = getStackInSlot(outputSlot); - - ItemStack[] inputs = new ItemStack[0]; - for (ItemStack stack : inputList) - ArrayUtils.add(inputs, stack.copy()); - - BloodMagicCraftedEvent.AlchemyTable event = new BloodMagicCraftedEvent.AlchemyTable(outputStack.copy(), inputs); - MinecraftForge.EVENT_BUS.post(event); - outputStack = event.getOutput(); - - if (currentOutputStack.isEmpty()) - { - setInventorySlotContents(outputSlot, outputStack); - } else if (ItemHandlerHelper.canItemStacksStack(outputStack, currentOutputStack)) - { - currentOutputStack.grow(outputStack.getCount()); - } - - consumeInventory(recipe); - } - } - - public int consumeLp(int requested) - { - ItemStack orbStack = getStackInSlot(orbSlot); - - if (!orbStack.isEmpty()) - { - if (orbStack.getItem() instanceof IBloodOrb) - { - if (NetworkHelper.syphonFromContainer(orbStack, SoulTicket.item(orbStack, world, pos, requested))) - { - return requested; - } - } - } - - return 0; - } - - public void consumeInventory(AlchemyTableRecipe recipe) - { - ItemStack[] input = new ItemStack[6]; - - for (int i = 0; i < 6; i++) - { - input[i] = getStackInSlot(i); - } - - ItemStack[] result = recipe.getRemainingItems(input); - for (int i = 0; i < 6; i++) - { - setInventorySlotContents(i, result[i]); - } - } - - public EnumFacing getDirection() - { - return direction; - } - - public boolean isSlave() - { - return isSlave; - } - - public int getBurnTime() - { - return burnTime; - } - - public int getTicksRequired() - { - return ticksRequired; - } - - public BlockPos getConnectedPos() - { - return connectedPos; - } - - public boolean[] getBlockedSlots() - { - return blockedSlots; - } - - public static int getOrbSlot() - { - return orbSlot; - } - - public static int getToolSlot() - { - return toolSlot; - } - - public static int getOutputSlot() - { - return outputSlot; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java deleted file mode 100644 index b0ecd0c9..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAltar.java +++ /dev/null @@ -1,190 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.altar.BloodAltar; -import WayofTime.bloodmagic.altar.AltarTier; -import WayofTime.bloodmagic.altar.IBloodAltar; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ITickable; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public class TileAltar extends TileInventory implements IBloodAltar, ITickable { - private BloodAltar bloodAltar; - - public TileAltar() { - super(1, "altar"); - this.bloodAltar = new BloodAltar(this); - } - - @Override - public void deserialize(NBTTagCompound tagCompound) { - super.deserialize(tagCompound); - - NBTTagCompound altarTag = tagCompound.getCompoundTag("bloodAltar"); - - this.bloodAltar.readFromNBT(altarTag); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tagCompound) { - super.serialize(tagCompound); - - NBTTagCompound altarTag = new NBTTagCompound(); - this.bloodAltar.writeToNBT(altarTag); - - tagCompound.setTag("bloodAltar", altarTag); - return tagCompound; - } - - @Override - public void update() { - bloodAltar.update(); - } - - @Override - public void sacrificialDaggerCall(int amount, boolean isSacrifice) { - bloodAltar.sacrificialDaggerCall(amount, isSacrifice); - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemstack) { - return slot == 0; - } - - @Override - public int getCapacity() { - return bloodAltar.getCapacity(); - } - - @Override - public int getCurrentBlood() { - return bloodAltar.getCurrentBlood(); - } - - @Override - public AltarTier getTier() { - return bloodAltar.getTier(); - } - - @Override - public int getProgress() { - return bloodAltar.getProgress(); - } - - @Override - public float getSacrificeMultiplier() { - return bloodAltar.getSacrificeMultiplier(); - } - - @Override - public float getSelfSacrificeMultiplier() { - return bloodAltar.getSelfSacrificeMultiplier(); - } - - @Override - public float getOrbMultiplier() { - return bloodAltar.getOrbMultiplier(); - } - - @Override - public float getDislocationMultiplier() { - return bloodAltar.getDislocationMultiplier(); - } - - @Override - public float getConsumptionMultiplier() { - return bloodAltar.getConsumptionMultiplier(); - } - - @Override - public float getConsumptionRate() { - return bloodAltar.getConsumptionRate(); - } - - @Override - public int getLiquidRequired() { - return bloodAltar.getLiquidRequired(); - } - - @Override - public int getBufferCapacity() { - return bloodAltar.getBufferCapacity(); - } - - @Override - public void startCycle() { - bloodAltar.startCycle(); - } - - @Override - public void checkTier() { - bloodAltar.checkTier(); - } - - @Override - public void requestPauseAfterCrafting(int cooldown) { - bloodAltar.requestPauseAfterCrafting(cooldown); - } - - @Override - public boolean isActive() { - return bloodAltar.isActive(); - } - - @Override - public int fillMainTank(int amount) { - return bloodAltar.fillMainTank(amount); - } - - @Override - public void setActive() { - bloodAltar.setActive(); - } - - @Override - public int getChargingRate() { - return bloodAltar.getChargingRate(); - } - - @Override - public int getTotalCharge() { - return bloodAltar.getTotalCharge(); - } - - @Override - public int getChargingFrequency() { - return bloodAltar.getChargingFrequency(); - } - - public AltarTier getCurrentTierDisplayed() { - return bloodAltar.getCurrentTierDisplayed(); - } - - public boolean setCurrentTierDisplayed(AltarTier altarTier) { - return bloodAltar.setCurrentTierDisplayed(altarTier); - } - - @Override - public boolean hasCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { - if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { - return true; - } - - return super.hasCapability(capability, facing); - } - - @SuppressWarnings("unchecked") - @Override - public T getCapability(@Nonnull Capability capability, @Nullable EnumFacing facing) { - if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { - return (T) bloodAltar; - } - - return super.getCapability(capability, facing); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java b/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java deleted file mode 100644 index f0b0b41a..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java +++ /dev/null @@ -1,80 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.tile.base.TileBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; - -public class TileBloodTank extends TileBase { - public static final int[] CAPACITIES = {16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65336, 131072, 262144, 524288}; - public int capacity; - protected FluidTank tank; - - public TileBloodTank(int meta) { - capacity = CAPACITIES[meta] * Fluid.BUCKET_VOLUME; - tank = new FluidTank(capacity); - } - - public TileBloodTank() { - capacity = CAPACITIES[0] * Fluid.BUCKET_VOLUME; - tank = new FluidTank(capacity); - } - - @Override - public void deserialize(NBTTagCompound tagCompound) { - super.deserialize(tagCompound); - tank.readFromNBT(tagCompound.getCompoundTag(Constants.NBT.TANK)); - capacity = tagCompound.getInteger(Constants.NBT.ALTAR_CAPACITY); - tank.setCapacity(capacity); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tagCompound) { - super.serialize(tagCompound); - if (tank.getFluidAmount() != 0) - tagCompound.setTag(Constants.NBT.TANK, tank.writeToNBT(new NBTTagCompound())); - tagCompound.setInteger(Constants.NBT.ALTAR_CAPACITY, capacity); - return tagCompound; - } - - public int getCapacity() { - return capacity; - } - - public FluidTank getTank() { - return tank; - } - - public Fluid getClientRenderFluid() { - if (tank != null && tank.getFluid() != null) - return tank.getFluid().getFluid(); - return null; - } - - public float getRenderHeight() { - if (tank != null && tank.getFluidAmount() > 0) - return (float) tank.getFluidAmount() / (float) getCapacity(); - return 0F; - } - - public int getComparatorOutput() { - return tank.getFluidAmount() > 0 ? (int) (1 + ((double) tank.getFluidAmount() / (double) tank.getCapacity()) * 14) : 0; - } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing) { - return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } - - @SuppressWarnings("unchecked") - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) - return (T) tank; - return super.getCapability(capability, facing); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java deleted file mode 100644 index 7685e0fc..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrucible.java +++ /dev/null @@ -1,214 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWillConduit; -import WayofTime.bloodmagic.soul.IDemonWillGem; -import WayofTime.bloodmagic.soul.IDiscreteDemonWill; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ITickable; - -import java.util.HashMap; -import java.util.Map.Entry; - -public class TileDemonCrucible extends TileInventory implements ITickable, IDemonWillConduit, ISidedInventory { - public final int maxWill = 100; - public final double gemDrainRate = 10; - public HashMap willMap = new HashMap<>(); //TODO: Change to DemonWillHolder - public int internalCounter = 0; - - public TileDemonCrucible() { - super(1, "demonCrucible"); - } - - @Override - public void update() { - if (getWorld().isRemote) { - return; - } - - internalCounter++; - - if (getWorld().isBlockPowered(getPos())) { - //TODO: Fill the contained gem if it is there. - ItemStack stack = this.getStackInSlot(0); - if (stack.getItem() instanceof IDemonWillGem) { - IDemonWillGem gemItem = (IDemonWillGem) stack.getItem(); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - if (willMap.containsKey(type)) { - double current = willMap.get(type); - double fillAmount = Math.min(gemDrainRate, current); - if (fillAmount > 0) { - fillAmount = gemItem.fillWill(type, stack, fillAmount, true); - if (willMap.get(type) - fillAmount <= 0) { - willMap.remove(type); - } else { - willMap.put(type, willMap.get(type) - fillAmount); - } - } - } - } - } - } else { - ItemStack stack = this.getStackInSlot(0); - if (!stack.isEmpty()) { - if (stack.getItem() instanceof IDemonWillGem) { - IDemonWillGem gemItem = (IDemonWillGem) stack.getItem(); - for (EnumDemonWillType type : EnumDemonWillType.values()) { - double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); - double drainAmount = Math.min(maxWill - currentAmount, gemDrainRate); - double filled = WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, drainAmount, maxWill, false); - filled = gemItem.drainWill(type, stack, filled, false); - if (filled > 0) { - filled = gemItem.drainWill(type, stack, filled, true); - WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, filled, maxWill, true); - } - } - } else if (stack.getItem() instanceof IDiscreteDemonWill) //TODO: Limit the speed of this process - { - IDiscreteDemonWill willItem = (IDiscreteDemonWill) stack.getItem(); - EnumDemonWillType type = willItem.getType(stack); - double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); - double needed = maxWill - currentAmount; - double discreteAmount = willItem.getDiscretization(stack); - if (needed >= discreteAmount) { - double filled = willItem.drainWill(stack, discreteAmount); - if (filled > 0) { - WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, filled, maxWill, true); - if (stack.getCount() <= 0) { - this.setInventorySlotContents(0, ItemStack.EMPTY); - } - } - } - } - } - } - } - - @Override - public void deserialize(NBTTagCompound tag) { - super.deserialize(tag); - - willMap.clear(); - - for (EnumDemonWillType type : EnumDemonWillType.values()) { - double amount = tag.getDouble("EnumWill" + type.getName()); - if (amount > 0) { - willMap.put(type, amount); - } - } - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - super.serialize(tag); - - for (Entry entry : willMap.entrySet()) { - tag.setDouble("EnumWill" + entry.getKey().getName(), entry.getValue()); - } - return tag; - } - - // IDemonWillConduit - - @Override - public int getWeight() { - return 10; - } - - @Override - public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) { - if (amount <= 0) { - return 0; - } - - if (!canFill(type)) { - return 0; - } - - if (!doFill) { - if (!willMap.containsKey(type)) { - return Math.min(maxWill, amount); - } - - return Math.min(maxWill - willMap.get(type), amount); - } - - if (!willMap.containsKey(type)) { - double max = Math.min(maxWill, amount); - - willMap.put(type, max); - - return max; - } - - double current = willMap.get(type); - double filled = maxWill - current; - - if (amount < filled) { - willMap.put(type, current + amount); - filled = amount; - } else { - willMap.put(type, (double) maxWill); - } - - return filled; - } - - @Override - public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) { - if (!willMap.containsKey(type)) { - return 0; - } - - double drained = amount; - double current = willMap.get(type); - if (current < drained) { - drained = current; - } - - if (doDrain) { - current -= drained; - if (current <= 0) { - willMap.remove(type); - } else { - willMap.put(type, current); - } - } - - return drained; - } - - @Override - public boolean canFill(EnumDemonWillType type) { - return true; - } - - @Override - public boolean canDrain(EnumDemonWillType type) { - return true; - } - - @Override - public double getCurrentWill(EnumDemonWillType type) { - return willMap.containsKey(type) ? willMap.get(type) : 0; - } - - @Override - public int[] getSlotsForFace(EnumFacing side) { - return new int[]{0}; - } - - @Override - public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction) { - return !stack.isEmpty() && (stack.getItem() instanceof IDemonWillGem || stack.getItem() instanceof IDiscreteDemonWill); - } - - @Override - public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) { - return true; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java deleted file mode 100644 index d856cc42..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java +++ /dev/null @@ -1,211 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.block.BlockDemonCrystal; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.tile.base.TileTicking; -import net.minecraft.block.state.IBlockState; -import net.minecraft.inventory.InventoryHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.MathHelper; - -public class TileDemonCrystal extends TileTicking -{ - public static final double sameWillConversionRate = 50; - public static final double defaultWillConversionRate = 100; - public static final double timeDelayForWrongWill = 0.6; - public final int maxWill = 100; - public final double drainRate = 1; - public DemonWillHolder holder = new DemonWillHolder(); - public double progressToNextCrystal = 0; - public int internalCounter = 0; - public int crystalCount = 1; - public EnumFacing placement = EnumFacing.UP; //Side that this crystal is placed on. - - public TileDemonCrystal() - { - this.crystalCount = 1; - } - - @Override - public void onUpdate() - { - if (getWorld().isRemote) - { - if(internalCounter % 20 == 0) - getWorld().markBlockRangeForRenderUpdate(pos, pos); - return; - } - - internalCounter++; - - if (internalCounter % 20 == 0 && crystalCount < 7) - { - EnumDemonWillType type = getType(); - - double value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); - if (type != EnumDemonWillType.DEFAULT) - { - if (value >= 0.5) - { - double nextProgress = getCrystalGrowthPerSecond(value); - progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), type, nextProgress * sameWillConversionRate, true) / sameWillConversionRate; - } else - { - value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, EnumDemonWillType.DEFAULT); - if (value > 0.5) - { - double nextProgress = getCrystalGrowthPerSecond(value) * timeDelayForWrongWill; - progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), EnumDemonWillType.DEFAULT, nextProgress * defaultWillConversionRate, true) / defaultWillConversionRate; - } - } - } else - { - if (value > 0.5) - { - - double nextProgress = getCrystalGrowthPerSecond(value); - progressToNextCrystal += WorldDemonWillHandler.drainWill(getWorld(), getPos(), type, nextProgress * sameWillConversionRate, true) / sameWillConversionRate; - } - } - - checkAndGrowCrystal(); - } - -// if (getWorld().getWorldTime() % 200 == 0) -// { -// crystalCount = Math.min(crystalCount + 1, 7); -// getWorld().markBlockForUpdate(pos); -// } - } - - /** - * Encourages the crystal to grow by a large percentage by telling it to - * drain will from the aura. - * - * @param willDrain - * The amount of drain that is needed for the crystal to grow - * successfully for the desired amount. Can be more than the base - * amount. - * @param progressPercentage - * @return percentage actually grown. - */ - public double growCrystalWithWillAmount(double willDrain, double progressPercentage) - { - if (crystalCount >= 7) - { - return 0; - } - - IBlockState state = getWorld().getBlockState(pos); - int meta = this.getBlockType().getMetaFromState(state); - EnumDemonWillType type = EnumDemonWillType.values()[meta]; - - double value = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); - double percentDrain = willDrain <= 0 ? 1 : Math.min(1, value / willDrain); - if (percentDrain <= 0) - { - return 0; - } - - // Verification that you can actually drain the will from this chunk, for future proofing. - WorldDemonWillHandler.drainWill(getWorld(), pos, type, percentDrain * willDrain, true); - progressToNextCrystal += percentDrain * progressPercentage; - - checkAndGrowCrystal(); - - return percentDrain * progressPercentage; - } - - public EnumDemonWillType getType() - { - return EnumDemonWillType.values()[this.getBlockMetadata()]; - } - - public void checkAndGrowCrystal() - { - if (progressToNextCrystal >= 1 && internalCounter % 100 == 0) - { - progressToNextCrystal--; - crystalCount++; - markDirty(); - notifyUpdate(); - } - } - - public double getMaxWillForCrystal() - { - return 50; - } - - public boolean dropSingleCrystal() - { - if (!getWorld().isRemote && crystalCount > 1) - { - IBlockState state = getWorld().getBlockState(pos); - EnumDemonWillType type = state.getValue(BlockDemonCrystal.TYPE); - ItemStack stack = BlockDemonCrystal.getItemStackDropped(type, 1); - if (!stack.isEmpty()) - { - crystalCount--; - InventoryHelper.spawnItemStack(getWorld(), pos.getX(), pos.getY(), pos.getZ(), stack); - notifyUpdate(); - return true; - } - } - - return false; - } - - public double getCrystalGrowthPerSecond(double will) - { - return 1.0 / 200 * Math.sqrt(will / 200); - } - - public int getCrystalCountForRender() - { - return MathHelper.clamp(crystalCount - 1, 0, 6); - } - - @Override - public void deserialize(NBTTagCompound tag) - { - holder.readFromNBT(tag, "Will"); - crystalCount = tag.getInteger("crystalCount"); - placement = EnumFacing.getFront(tag.getInteger("placement")); - progressToNextCrystal = tag.getDouble("progress"); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) - { - holder.writeToNBT(tag, "Will"); - tag.setInteger("crystalCount", crystalCount); - tag.setInteger("placement", placement.getIndex()); - tag.setDouble("progress", progressToNextCrystal); - return tag; - } - - public int getCrystalCount() - { - return crystalCount; - } - - public void setCrystalCount(int crystalCount) - { - this.crystalCount = crystalCount; - } - - public EnumFacing getPlacement() - { - return placement; - } - - public void setPlacement(EnumFacing placement) - { - this.placement = placement; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystallizer.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystallizer.java deleted file mode 100644 index 0fd56f0c..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystallizer.java +++ /dev/null @@ -1,157 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWillConduit; -import WayofTime.bloodmagic.tile.base.TileTicking; - -public class TileDemonCrystallizer extends TileTicking implements IDemonWillConduit -{ - public static final int maxWill = 100; - public static final double drainRate = 1; - public static final double willToFormCrystal = 99; - public static final double totalFormationTime = 1000; - //The whole purpose of this block is to grow a crystal initially. The acceleration and crystal growing is up to the crystal itself afterwards. - public DemonWillHolder holder = new DemonWillHolder(); - public double internalCounter = 0; - - public TileDemonCrystallizer() - { - - } - - @Override - public void onUpdate() - { - if (getWorld().isRemote) - { - return; - } - - BlockPos offsetPos = pos.offset(EnumFacing.UP); - if (getWorld().isAirBlock(offsetPos)) //Room for a crystal to grow - { - EnumDemonWillType highestType = WorldDemonWillHandler.getHighestDemonWillType(getWorld(), pos); - double amount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, highestType); - if (amount >= willToFormCrystal) - { - internalCounter += getCrystalFormationRate(amount); - if (internalCounter >= totalFormationTime) - { - if (WorldDemonWillHandler.drainWill(getWorld(), getPos(), highestType, willToFormCrystal, false) >= willToFormCrystal) - { - if (formCrystal(highestType, offsetPos)) - { - WorldDemonWillHandler.drainWill(getWorld(), getPos(), highestType, willToFormCrystal, true); - internalCounter = 0; - } - } - } - } - } - } - - public boolean formCrystal(EnumDemonWillType type, BlockPos position) - { - getWorld().setBlockState(position, RegistrarBloodMagicBlocks.DEMON_CRYSTAL.getStateFromMeta(type.ordinal())); - TileEntity tile = getWorld().getTileEntity(position); - if (tile instanceof TileDemonCrystal) - { - ((TileDemonCrystal) tile).setPlacement(EnumFacing.UP); - return true; - } - - return false; - } - - public double getCrystalFormationRate(double currentWill) - { - return 1; - } - - @Override - public void deserialize(NBTTagCompound tag) - { - holder.readFromNBT(tag, "Will"); - internalCounter = tag.getDouble("internalCounter"); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) - { - holder.writeToNBT(tag, "Will"); - tag.setDouble("internalCounter", internalCounter); - return tag; - } - - // IDemonWillConduit - - @Override - public int getWeight() - { - return 10; - } - - @Override - public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) - { - if (amount <= 0) - { - return 0; - } - - if (!canFill(type)) - { - return 0; - } - - if (!doFill) - { - return Math.min(maxWill - holder.getWill(type), amount); - } - - return holder.addWill(type, amount, maxWill); - } - - @Override - public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) - { - double drained = amount; - double current = holder.getWill(type); - if (current < drained) - { - drained = current; - } - - if (doDrain) - { - return holder.drainWill(type, amount); - } - - return drained; - } - - @Override - public boolean canFill(EnumDemonWillType type) - { - return true; - } - - @Override - public boolean canDrain(EnumDemonWillType type) - { - return true; - } - - @Override - public double getCurrentWill(EnumDemonWillType type) - { - return holder.getWill(type); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java deleted file mode 100644 index 80817ce6..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDemonPylon.java +++ /dev/null @@ -1,106 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWillConduit; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.tile.base.TileTicking; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; - -public class TileDemonPylon extends TileTicking implements IDemonWillConduit { - public final int maxWill = 100; - public final double drainRate = 1; - public DemonWillHolder holder = new DemonWillHolder(); - - public TileDemonPylon() { - - } - - @Override - public void onUpdate() { - if (getWorld().isRemote) { - return; - } - - for (EnumDemonWillType type : EnumDemonWillType.values()) { - double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); - - for (EnumFacing side : EnumFacing.HORIZONTALS) { - BlockPos offsetPos = pos.offset(side, 16); - double sideAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), offsetPos, type); - if (sideAmount > currentAmount) { - double drainAmount = Math.min((sideAmount - currentAmount) / 2, drainRate); - double drain = WorldDemonWillHandler.drainWill(getWorld(), offsetPos, type, drainAmount, true); - WorldDemonWillHandler.fillWill(getWorld(), pos, type, drain, true); - } - } - } - } - - @Override - public void deserialize(NBTTagCompound tag) { - holder.readFromNBT(tag, "Will"); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - holder.writeToNBT(tag, "Will"); - return tag; - } - - // IDemonWillConduit - - @Override - public int getWeight() { - return 10; - } - - @Override - public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) { - if (amount <= 0) { - return 0; - } - - if (!canFill(type)) { - return 0; - } - - if (!doFill) { - return Math.min(maxWill - holder.getWill(type), amount); - } - - return holder.addWill(type, amount, maxWill); - } - - @Override - public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) { - double drained = amount; - double current = holder.getWill(type); - if (current < drained) { - drained = current; - } - - if (doDrain) { - return holder.drainWill(type, amount); - } - - return drained; - } - - @Override - public boolean canFill(EnumDemonWillType type) { - return true; - } - - @Override - public boolean canDrain(EnumDemonWillType type) { - return true; - } - - @Override - public double getCurrentWill(EnumDemonWillType type) { - return holder.getWill(type); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDimensionalPortal.java b/src/main/java/WayofTime/bloodmagic/tile/TileDimensionalPortal.java deleted file mode 100644 index c58a02be..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileDimensionalPortal.java +++ /dev/null @@ -1,41 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.ritual.types.RitualPortal; -import WayofTime.bloodmagic.tile.base.TileBase; -import com.google.common.base.Strings; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.math.BlockPos; - -public class TileDimensionalPortal extends TileBase { - public String portalID = ""; - public int masterStoneX; - public int masterStoneY; - public int masterStoneZ; - - public void deserialize(NBTTagCompound tagCompound) { - portalID = tagCompound.getString(RitualPortal.PORTAL_ID_TAG); - - masterStoneX = tagCompound.getInteger("masterStoneX"); - masterStoneY = tagCompound.getInteger("masterStoneY"); - masterStoneZ = tagCompound.getInteger("masterStoneZ"); - } - - public NBTTagCompound serialize(NBTTagCompound tagCompound) { - tagCompound.setString(RitualPortal.PORTAL_ID_TAG, Strings.isNullOrEmpty(portalID) ? "" : portalID); - - tagCompound.setInteger("masterStoneX", masterStoneX); - tagCompound.setInteger("masterStoneY", masterStoneY); - tagCompound.setInteger("masterStoneZ", masterStoneZ); - return tagCompound; - } - - public BlockPos getMasterStonePos() { - return new BlockPos(masterStoneX, masterStoneY, masterStoneZ); - } - - public void setMasterStonePos(BlockPos blockPos) { - this.masterStoneX = blockPos.getX(); - this.masterStoneY = blockPos.getY(); - this.masterStoneZ = blockPos.getZ(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java deleted file mode 100644 index e10d556e..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileImperfectRitualStone.java +++ /dev/null @@ -1,46 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.ritual.imperfect.IImperfectRitualStone; -import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitual; -import WayofTime.bloodmagic.tile.base.TileBase; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -public class TileImperfectRitualStone extends TileBase implements IImperfectRitualStone { - - @Override - public boolean performRitual(World world, BlockPos pos, @Nullable ImperfectRitual imperfectRitual, EntityPlayer player) { - if (imperfectRitual != null && BloodMagic.RITUAL_MANAGER.enabled(BloodMagic.RITUAL_MANAGER.getId(imperfectRitual), true)) { - if (!PlayerHelper.isFakePlayer(player) && !world.isRemote) { - NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, SoulTicket.block(getWorld(), getPos(), imperfectRitual.getActivationCost())); - if (imperfectRitual.onActivate(this, player)) { - if (imperfectRitual.isLightShow()) - getWorld().addWeatherEffect(new EntityLightningBolt(getWorld(), getPos().getX(), getPos().getY() + 2, getPos().getZ(), true)); - return true; - } - } - - return true; - } - - return false; - } - - @Override - public World getRitualWorld() { - return getWorld(); - } - - @Override - public BlockPos getRitualPos() { - return getPos(); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileIncenseAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TileIncenseAltar.java deleted file mode 100644 index f0da8c4a..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileIncenseAltar.java +++ /dev/null @@ -1,160 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.ritual.AreaDescriptor; -import WayofTime.bloodmagic.util.helper.PlayerSacrificeHelper; -import WayofTime.bloodmagic.incense.*; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.ITickable; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldServer; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -public class TileIncenseAltar extends TileInventory implements ITickable { - public static int maxCheckRange = 5; - public AreaDescriptor incenseArea = new AreaDescriptor.Rectangle(new BlockPos(-5, -5, -5), 11); - public Map tranquilityMap = new HashMap<>(); - - public double incenseAddition = 0; //Self-sacrifice is multiplied by 1 plus this value. - public double tranquility = 0; - public int roadDistance = 0; //Number of road blocks laid down - - public TileIncenseAltar() { - super(1, "incenseAltar"); - } - - @Override - public void update() { - AxisAlignedBB aabb = incenseArea.getAABB(getPos()); - List playerList = getWorld().getEntitiesWithinAABB(EntityPlayer.class, aabb); - if (playerList.isEmpty()) { - return; - } - - if (getWorld().getTotalWorldTime() % 100 == 0) { - recheckConstruction(); - } - - boolean hasPerformed = false; - - for (EntityPlayer player : playerList) { - if (PlayerSacrificeHelper.incrementIncense(player, 0, incenseAddition, incenseAddition / 100)) { - hasPerformed = true; - } - } - - if (hasPerformed) { - if (getWorld().rand.nextInt(4) == 0 && getWorld() instanceof WorldServer) { - WorldServer server = (WorldServer) getWorld(); - server.spawnParticle(EnumParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, 1, 0.02, 0.03, 0.02, 0); - } - } - } - - @Override - public void deserialize(NBTTagCompound tag) { - super.deserialize(tag); - tranquility = tag.getDouble("tranquility"); - incenseAddition = tag.getDouble("incenseAddition"); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - super.serialize(tag); - tag.setDouble("tranquility", tranquility); - tag.setDouble("incenseAddition", incenseAddition); - return tag; - } - - public void recheckConstruction() { - //TODO: Check the physical construction of the incense altar to determine the maximum length. - int maxLength = 11; //Max length of the path. The path starts two blocks away from the center block. - int yOffset = 0; - - Map tranquilityMap = new HashMap<>(); - - for (int currentDistance = 2; currentDistance < currentDistance + maxLength; currentDistance++) { - boolean canFormRoad = false; - - for (int i = -maxCheckRange + yOffset; i <= maxCheckRange + yOffset; i++) { - BlockPos verticalPos = pos.add(0, i, 0); - - canFormRoad = true; - level: - for (EnumFacing horizontalFacing : EnumFacing.HORIZONTALS) { - BlockPos facingOffsetPos = verticalPos.offset(horizontalFacing, currentDistance); - for (int j = -1; j <= 1; j++) { - BlockPos offsetPos = facingOffsetPos.offset(horizontalFacing.rotateY(), j); - IBlockState state = getWorld().getBlockState(offsetPos); - Block block = state.getBlock(); - if (!(block instanceof IIncensePath && ((IIncensePath) block).getLevelOfPath(getWorld(), offsetPos, state) >= currentDistance - 2)) { - canFormRoad = false; - break level; - } - } - } - - if (canFormRoad) { - yOffset = i; - break; - } - } - - if (canFormRoad) { - for (int i = -currentDistance; i <= currentDistance; i++) { - for (int j = -currentDistance; j <= currentDistance; j++) { - if (Math.abs(i) != currentDistance && Math.abs(j) != currentDistance) { - continue; //TODO: Can make this just set j to currentDistance to speed it up. - } - - for (int y = yOffset; y <= 2 + yOffset; y++) { - BlockPos offsetPos = pos.add(i, y, j); - IBlockState state = getWorld().getBlockState(offsetPos); - Block block = state.getBlock(); - TranquilityStack stack = IncenseTranquilityRegistry.getTranquilityOfBlock(getWorld(), offsetPos, block, state); - if (stack != null) { - if (!tranquilityMap.containsKey(stack.type)) { - tranquilityMap.put(stack.type, stack.value); - } else { - tranquilityMap.put(stack.type, tranquilityMap.get(stack.type) + stack.value); - } - } - } - } - } - } else { - roadDistance = currentDistance - 2; - break; - } - } - - this.tranquilityMap = tranquilityMap; - - double totalTranquility = 0; - for (Entry entry : tranquilityMap.entrySet()) { - totalTranquility += entry.getValue(); - } - - if (totalTranquility < 0) { - return; - } - - double appliedTranquility = 0; - for (Entry entry : tranquilityMap.entrySet()) { - appliedTranquility += Math.sqrt(entry.getValue()); - } - - double bonus = IncenseAltarHandler.getIncenseBonusFromComponents(getWorld(), pos, appliedTranquility, roadDistance); - incenseAddition = bonus; - this.tranquility = appliedTranquility; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java b/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java deleted file mode 100644 index 11e2edf3..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileInventory.java +++ /dev/null @@ -1,261 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.tile.base.TileBase; -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.inventory.InventoryHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.wrapper.InvWrapper; -import net.minecraftforge.items.wrapper.SidedInvWrapper; - -public class TileInventory extends TileBase implements IInventory { - protected int[] syncedSlots = new int[0]; - protected NonNullList inventory; - IItemHandler handlerDown; - IItemHandler handlerUp; - IItemHandler handlerNorth; - IItemHandler handlerSouth; - IItemHandler handlerWest; - IItemHandler handlerEast; - private int size; - - // IInventory - private String name; - - public TileInventory(int size, String name) { - this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); - this.size = size; - this.name = name; - initializeItemHandlers(); - } - - protected boolean isSyncedSlot(int slot) { - for (int s : this.syncedSlots) { - if (s == slot) { - return true; - } - } - return false; - } - - @Override - public void deserialize(NBTTagCompound tagCompound) { - super.deserialize(tagCompound); - NBTTagList tags = tagCompound.getTagList("Items", 10); - inventory = NonNullList.withSize(size, ItemStack.EMPTY); - - for (int i = 0; i < tags.tagCount(); i++) { - if (!isSyncedSlot(i)) { - NBTTagCompound data = tags.getCompoundTagAt(i); - byte j = data.getByte("Slot"); - - if (j >= 0 && j < inventory.size()) { - inventory.set(j, new ItemStack(data)); // No matter how much an i looks like a j, it is not one. They are drastically different characters and cause drastically different things to happen. Apparently I didn't know this at one point. - TehNut - } - } - } - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tagCompound) { - super.serialize(tagCompound); - NBTTagList tags = new NBTTagList(); - - for (int i = 0; i < inventory.size(); i++) { - if ((!inventory.get(i).isEmpty()) && !isSyncedSlot(i)) { - NBTTagCompound data = new NBTTagCompound(); - data.setByte("Slot", (byte) i); - inventory.get(i).writeToNBT(data); - tags.appendTag(data); - } - } - - tagCompound.setTag("Items", tags); - return tagCompound; - } - - public void dropItems() { - InventoryHelper.dropInventoryItems(getWorld(), getPos(), this); - } - - @Override - public int getSizeInventory() { - return size; - } - - @Override - public ItemStack getStackInSlot(int index) { - return inventory.get(index); - } - - @Override - public ItemStack decrStackSize(int index, int count) { - if (!getStackInSlot(index).isEmpty()) { - if (!getWorld().isRemote) - getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(getPos()), getWorld().getBlockState(getPos()), 3); - - if (getStackInSlot(index).getCount() <= count) { - ItemStack itemStack = inventory.get(index); - inventory.set(index, ItemStack.EMPTY); - markDirty(); - return itemStack; - } - - ItemStack itemStack = inventory.get(index).splitStack(count); - markDirty(); - return itemStack; - } - - return ItemStack.EMPTY; - } - - @Override - public ItemStack removeStackFromSlot(int slot) { - if (!inventory.get(slot).isEmpty()) { - ItemStack itemStack = inventory.get(slot); - setInventorySlotContents(slot, ItemStack.EMPTY); - return itemStack; - } - return ItemStack.EMPTY; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) { - inventory.set(slot, stack); - if (!stack.isEmpty() && stack.getCount() > getInventoryStackLimit()) - stack.setCount(getInventoryStackLimit()); - markDirty(); - if (!getWorld().isRemote) - getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(getPos()), getWorld().getBlockState(getPos()), 3); - } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public void openInventory(EntityPlayer player) { - - } - - @Override - public void closeInventory(EntityPlayer player) { - - } - - @Override - public boolean isItemValidForSlot(int index, ItemStack stack) { - return true; - } - - // IWorldNameable - - @Override - public int getField(int id) { - return 0; - } - - @Override - public void setField(int id, int value) { - - } - - @Override - public int getFieldCount() { - return 0; - } - - @Override - public void clear() { - this.inventory = NonNullList.withSize(size, ItemStack.EMPTY); - } - - @Override - public boolean isEmpty() { - for (ItemStack stack : inventory) - if (!stack.isEmpty()) - return false; - - return true; - } - - @Override - public boolean isUsableByPlayer(EntityPlayer player) { - return true; - } - - @Override - public String getName() { - return TextHelper.localize("tile.bloodmagic." + name + ".name"); - } - - @Override - public boolean hasCustomName() { - return true; - } - - @Override - public ITextComponent getDisplayName() { - return new TextComponentString(getName()); - } - - protected void initializeItemHandlers() { - if (this instanceof ISidedInventory) { - handlerDown = new SidedInvWrapper((ISidedInventory) this, EnumFacing.DOWN); - handlerUp = new SidedInvWrapper((ISidedInventory) this, EnumFacing.UP); - handlerNorth = new SidedInvWrapper((ISidedInventory) this, EnumFacing.NORTH); - handlerSouth = new SidedInvWrapper((ISidedInventory) this, EnumFacing.SOUTH); - handlerWest = new SidedInvWrapper((ISidedInventory) this, EnumFacing.WEST); - handlerEast = new SidedInvWrapper((ISidedInventory) this, EnumFacing.EAST); - } else { - handlerDown = new InvWrapper(this); - handlerUp = handlerDown; - handlerNorth = handlerDown; - handlerSouth = handlerDown; - handlerWest = handlerDown; - handlerEast = handlerDown; - } - } - - @SuppressWarnings("unchecked") - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (facing != null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - switch (facing) { - case DOWN: - return (T) handlerDown; - case EAST: - return (T) handlerEast; - case NORTH: - return (T) handlerNorth; - case SOUTH: - return (T) handlerSouth; - case UP: - return (T) handlerUp; - case WEST: - return (T) handlerWest; - } - } else if (facing == null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) handlerDown; - } - - return super.getCapability(capability, facing); - } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java b/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java deleted file mode 100644 index a947fda7..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java +++ /dev/null @@ -1,532 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.BMLog; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.inversion.InversionPillarHandler; -import WayofTime.bloodmagic.tile.base.TileTicking; -import com.google.common.collect.ImmutableMap; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraftforge.common.animation.Event; -import net.minecraftforge.common.animation.TimeValues.VariableValue; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.model.animation.CapabilityAnimation; -import net.minecraftforge.common.model.animation.IAnimationStateMachine; - -import java.util.Collections; -import java.util.List; -import java.util.Locale; - -public class TileInversionPillar extends TileTicking { - public static final double maxWillForChunk = 1000; - public static double willPerOperation = 0.5; - public static double inversionPerOperation = 4; - public static double addedInversionPerFailedCheck = 1; - public static double inversionToIncreaseRadius = 100; - public static double inversionToAddPillar = 200; - public static double operationThreshold = 20; - public static double inversionToSpreadWill = 200; - public static double willPushRate = 1; - public static double inversionCostPerWillSpread = 4; - public static double minimumWillForChunkWhenSpreading = 100; - private final IAnimationStateMachine asm; - private final VariableValue animationOffset = new VariableValue(0); - private final VariableValue cycleLength = new VariableValue(4); - - public EnumDemonWillType type; - public double currentInversion = 0; - public int consecutiveFailedChecks = 0; //If you fail enough checks, increase the radius. - public int consecutiveFailedAirChecks = 0; - public int currentInfectionRadius = 1; - -// public int dormantCounter = 0; //Time that the pillar will - - public int counter = 0; - - public boolean isRegistered = false; - private float animationOffsetValue = 0; - - public TileInversionPillar() { - this(EnumDemonWillType.DEFAULT); - } - - public TileInversionPillar(EnumDemonWillType type) { - this.type = type; - asm = BloodMagic.proxy.load(new ResourceLocation(BloodMagic.MODID.toLowerCase(), "asms/block/inversion_pillar.json"), ImmutableMap.of("offset", animationOffset, "cycle_length", cycleLength)); - animationOffsetValue = -1; - } - - @Override - public void onUpdate() { - if (animationOffsetValue < 0) { - animationOffsetValue = getWorld().getTotalWorldTime() * getWorld().rand.nextFloat(); - animationOffset.setValue(animationOffsetValue); - } - - if (getWorld().isRemote) { - return; - } - - if (!isRegistered) { - isRegistered = InversionPillarHandler.addPillarToMap(getWorld(), getType(), getPos()); - } - - counter++; - - double currentWill = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); - if (counter % 1 == 0) { - List pillarList = getNearbyPillarsExcludingThis(); -// if (type == EnumDemonWillType.VENGEFUL) -// { -// System.out.println(pillarList.size() + " nearby pillars"); -// } - generateWillForNearbyPillars(currentWill, pillarList); - generateInversionForNearbyPillars(currentWill, pillarList); - int pollute = polluteNearbyBlocks(currentWill); - if (pollute == 1) { - currentInversion += addedInversionPerFailedCheck; - consecutiveFailedChecks++; - } else if (pollute == 3) { - currentInversion += addedInversionPerFailedCheck; - consecutiveFailedAirChecks++; - } else if (pollute == 0) { - //We successfully found a block to replace! - consecutiveFailedChecks = 0; - consecutiveFailedAirChecks = 0; - } - - if (consecutiveFailedAirChecks > 100) { - createObstructionsInAir(); - } - - if (currentInversion >= inversionToSpreadWill) { - spreadWillToSurroundingChunks(); - } - - if (consecutiveFailedChecks > 5 * currentInfectionRadius && currentInversion >= inversionToIncreaseRadius) { - currentInfectionRadius++; - consecutiveFailedChecks = 0; - currentInversion -= inversionToIncreaseRadius; - BMLog.DEBUG.info("Increasing radius!"); - } else if (consecutiveFailedAirChecks > 25 * currentInfectionRadius) //Change this to require a number of "creations" with the orbs in the air. - { - currentInfectionRadius++; - consecutiveFailedChecks = 0; - currentInversion -= inversionToIncreaseRadius; - BMLog.DEBUG.info("Increasing radius due to being in the air!"); - } - - if (currentInfectionRadius >= 8 && currentInversion >= inversionToAddPillar) { - //TODO: Improve algorithm - List allConnectedPos = InversionPillarHandler.getAllConnectedPillars(getWorld(), type, pos); - BlockPos candidatePos = findCandidatePositionForPillar(getWorld(), type, pos, allConnectedPos, 5, 10); - if (!candidatePos.equals(BlockPos.ORIGIN)) { - currentInversion = 0; - IBlockState pillarState = RegistrarBloodMagicBlocks.INVERSION_PILLAR.getStateFromMeta(type.ordinal()); - IBlockState bottomState = RegistrarBloodMagicBlocks.INVERSION_PILLAR_END.getStateFromMeta(type.ordinal() * 2); - IBlockState topState = RegistrarBloodMagicBlocks.INVERSION_PILLAR_END.getStateFromMeta(type.ordinal() * 2 + 1); - getWorld().setBlockState(candidatePos, pillarState); - getWorld().setBlockState(candidatePos.down(), bottomState); - getWorld().setBlockState(candidatePos.up(), topState); - } - } - } - } - -// public static int getDormantTimeForConnectedPillarsOnSpawn() -// { -// return 0; -// } - - public void createObstructionsInAir() { - if (currentInversion > 1000) { - Vec3d vec = new Vec3d(getWorld().rand.nextDouble() * 2 - 1, getWorld().rand.nextDouble() * 2 - 1, getWorld().rand.nextDouble() * 2 - 1).normalize().scale(2 * currentInfectionRadius); - - BlockPos centralPos = pos.add(vec.x, vec.y, vec.z); - - getWorld().setBlockState(centralPos, RegistrarBloodMagicBlocks.DEMON_EXTRAS.getStateFromMeta(0)); - currentInversion -= 1000; - } - } - - public void spreadWillToSurroundingChunks() { - double currentAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); - if (currentAmount <= minimumWillForChunkWhenSpreading) { - return; - } - - for (EnumFacing side : EnumFacing.HORIZONTALS) { - BlockPos offsetPos = pos.offset(side, 16); - double sideAmount = WorldDemonWillHandler.getCurrentWill(getWorld(), offsetPos, type); - if (currentAmount > sideAmount) { - double drainAmount = Math.min((currentAmount - sideAmount) / 2, willPushRate); - if (drainAmount < willPushRate / 2) { - continue; - } - - double drain = WorldDemonWillHandler.drainWill(getWorld(), pos, type, drainAmount, true); - drain = WorldDemonWillHandler.fillWillToMaximum(getWorld(), offsetPos, type, drain, maxWillForChunk, true); - - currentInversion -= drain * inversionCostPerWillSpread; - } - } - } - - public void removePillarFromMap() { - if (!getWorld().isRemote) { - InversionPillarHandler.removePillarFromMap(getWorld(), type, pos); - } - } - - public List getNearbyPillarsExcludingThis() { - return InversionPillarHandler.getNearbyPillars(getWorld(), type, pos); - } - - @Override - public void deserialize(NBTTagCompound tag) { - super.deserialize(tag); - - if (!tag.hasKey(Constants.NBT.WILL_TYPE)) { - type = EnumDemonWillType.DEFAULT; - } - - type = EnumDemonWillType.valueOf(tag.getString(Constants.NBT.WILL_TYPE).toUpperCase(Locale.ENGLISH)); - currentInversion = tag.getDouble("currentInversion"); - currentInfectionRadius = tag.getInteger("currentInfectionRadius"); - consecutiveFailedChecks = tag.getInteger("consecutiveFailedChecks"); - - animationOffsetValue = tag.getFloat("animationOffset"); - animationOffset.setValue(animationOffsetValue); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - super.serialize(tag); - - tag.setString(Constants.NBT.WILL_TYPE, type.toString()); - tag.setDouble("currentInversion", currentInversion); - tag.setInteger("currentInfectionRadius", currentInfectionRadius); - tag.setInteger("consecutiveFailedChecks", consecutiveFailedChecks); - tag.setFloat("animationOffset", animationOffsetValue); - - return tag; - } - - public void generateWillForNearbyPillars(double currentWillInChunk, List offsetPositions) { - double totalGeneratedWill = 0; - double willFactor = currentWillInChunk / 1000; - - for (BlockPos offsetPos : offsetPositions) { - double distanceSquared = offsetPos.distanceSq(pos); - - totalGeneratedWill += willFactor * 343 / (343 + Math.pow(distanceSquared, 3 / 2)); - } - - if (totalGeneratedWill > 0) { - WorldDemonWillHandler.fillWillToMaximum(getWorld(), pos, type, totalGeneratedWill, maxWillForChunk, true); - } - } - - public void generateInversionForNearbyPillars(double currentWillInChunk, List offsetPositions) { - double willFactor = currentWillInChunk / 400; - double totalGeneratedInversion = willFactor; - - for (BlockPos offsetPos : offsetPositions) { - double distanceSquared = offsetPos.distanceSq(pos); - - totalGeneratedInversion += 3125 / (3125 + Math.pow(distanceSquared, 5 / 2)); - } - - currentInversion = Math.max(0, currentInversion + totalGeneratedInversion); - } - - /** - * @param currentWillInChunk - * @return 0 if the block is successfully placed, 1 if the block is not - * placed due to the selected place being invalid, 2 if the block is - * not placed due to there not being enough Will or Inversion, 3 if - * the block is not placed due to the selected block being air. - */ - public int polluteNearbyBlocks(double currentWillInChunk) { -// System.out.println("Hai! :D Current Inversion: " + currentInversion + ", Current Will: " + currentWillInChunk); - if (currentWillInChunk < operationThreshold || currentInversion < inversionPerOperation) { - return 2; //Not enough Will or Inversion available - } - - for (int i = 0; i < currentInfectionRadius; i++) { - double xOff = (getWorld().rand.nextBoolean() ? 1 : -1) * (getWorld().rand.nextGaussian() + 1) * (currentInfectionRadius); - double yOff = (getWorld().rand.nextBoolean() ? 1 : -1) * (getWorld().rand.nextGaussian() + 1) * (currentInfectionRadius); - double zOff = (getWorld().rand.nextBoolean() ? 1 : -1) * (getWorld().rand.nextGaussian() + 1) * (currentInfectionRadius); - double r2 = xOff * xOff + yOff * yOff + zOff * zOff; - int maxInfectionRadius2 = (9 * currentInfectionRadius * currentInfectionRadius); - if (r2 > maxInfectionRadius2) { - double factor = Math.sqrt(maxInfectionRadius2 / r2); - xOff *= factor; - yOff *= factor; - zOff *= factor; - } - - BlockPos offsetPos = pos.add(xOff + 0.5, yOff + 0.5, zOff + 0.5); - if (offsetPos.equals(pos)) { - return 1; //Invalid block (itself!) - } - - IBlockState state = getWorld().getBlockState(offsetPos); - if (!state.getBlock().isAir(state, getWorld(), offsetPos)) { - //Consume Will and set this block - Block block = state.getBlock(); - if (block == Blocks.DIRT || block == Blocks.STONE || block == Blocks.GRASS) { - if (getWorld().setBlockState(offsetPos, RegistrarBloodMagicBlocks.DEMON_EXTRAS.getStateFromMeta(0))) { - WorldDemonWillHandler.drainWill(getWorld(), pos, type, willPerOperation, true); - currentInversion -= inversionPerOperation; - - return 0; //Successfully placed - } - } - - return 1; //Invalid block - } - } - - return 3; //The block was air - } - - public void handleEvents(float time, Iterable pastEvents) { - for (Event event : pastEvents) { - BMLog.DEBUG.info("Event: " + event.event() + " " + event.offset() + " " + getPos() + " " + time); - } - } - - @Override - public boolean hasFastRenderer() { - return true; - } - - @Override - public boolean hasCapability(Capability capability, EnumFacing side) { - if (capability == CapabilityAnimation.ANIMATION_CAPABILITY) { - return true; - } - return super.hasCapability(capability, side); - } - - @Override - public T getCapability(Capability capability, EnumFacing side) { - if (capability == CapabilityAnimation.ANIMATION_CAPABILITY) { - return CapabilityAnimation.ANIMATION_CAPABILITY.cast(asm); - } - return super.getCapability(capability, side); - } - - public IAnimationStateMachine getAsm() { - return asm; - } - - public float getAnimationOffsetValue() { - return animationOffsetValue; - } - - public void setAnimationOffsetValue(float animationOffsetValue) { - this.animationOffsetValue = animationOffsetValue; - } - - public VariableValue getAnimationOffset() { - return animationOffset; - } - - public VariableValue getCycleLength() { - return cycleLength; - } - - public EnumDemonWillType getType() { - return type; - } - - public void setType(EnumDemonWillType type) { - this.type = type; - } - - public double getCurrentInversion() { - return currentInversion; - } - - public void setCurrentInversion(double currentInversion) { - this.currentInversion = currentInversion; - } - - public int getConsecutiveFailedChecks() { - return consecutiveFailedChecks; - } - - public void setConsecutiveFailedChecks(int consecutiveFailedChecks) { - this.consecutiveFailedChecks = consecutiveFailedChecks; - } - - public int getConsecutiveFailedAirChecks() { - return consecutiveFailedAirChecks; - } - - public void setConsecutiveFailedAirChecks(int consecutiveFailedAirChecks) { - this.consecutiveFailedAirChecks = consecutiveFailedAirChecks; - } - - public int getCurrentInfectionRadius() { - return currentInfectionRadius; - } - - public void setCurrentInfectionRadius(int currentInfectionRadius) { - this.currentInfectionRadius = currentInfectionRadius; - } - - public int getCounter() { - return counter; - } - - public void setCounter(int counter) { - this.counter = counter; - } - - public boolean isRegistered() { - return isRegistered; - } - - public void setRegistered(boolean registered) { - isRegistered = registered; - } - - public static BlockPos findCandidatePositionForPillar(World world, EnumDemonWillType type, BlockPos pos, List posList, double tooCloseDistance, double wantedAverageDistance) { - int maxIterations = 100; - int heightCheckRange = 3; - - for (int i = 0; i < maxIterations; i++) { - Collections.shuffle(posList); - BlockPos pillarPos = posList.get(0); - - Vec3d vec = new Vec3d(world.rand.nextDouble() * 2 - 1, world.rand.nextDouble() * 2 - 1, world.rand.nextDouble() * 2 - 1).normalize().scale(wantedAverageDistance); - - BlockPos centralPos = pillarPos.add(vec.x, vec.y, vec.z); - BlockPos testPos = null; - candidateTest: - for (int h = 0; h <= heightCheckRange; h++) { - for (int sig = -1; sig <= 1; sig += (h > 0 ? 2 : 3)) { - BlockPos candidatePos = centralPos.add(0, sig * h, 0); - if (world.isAirBlock(candidatePos) && world.isAirBlock(candidatePos.up()) && world.isAirBlock(candidatePos.down()) && !world.isAirBlock(candidatePos.down(2))) { - testPos = candidatePos; - break candidateTest; - } - } - } - - if (testPos != null) { - boolean isValid = true; - for (BlockPos pillarTestPos : posList) { - if (pillarTestPos.distanceSq(testPos) <= tooCloseDistance * tooCloseDistance) { - isValid = false; - break; - } - } - - if (isValid) { - return testPos; - } - } - } - - return BlockPos.ORIGIN; - } - - public static double getWillPerOperation() { - return willPerOperation; - } - - public static void setWillPerOperation(double willPerOperation) { - TileInversionPillar.willPerOperation = willPerOperation; - } - - public static double getInversionPerOperation() { - return inversionPerOperation; - } - - public static void setInversionPerOperation(double inversionPerOperation) { - TileInversionPillar.inversionPerOperation = inversionPerOperation; - } - - public static double getAddedInversionPerFailedCheck() { - return addedInversionPerFailedCheck; - } - - public static void setAddedInversionPerFailedCheck(double addedInversionPerFailedCheck) { - TileInversionPillar.addedInversionPerFailedCheck = addedInversionPerFailedCheck; - } - - public static double getInversionToIncreaseRadius() { - return inversionToIncreaseRadius; - } - - public static void setInversionToIncreaseRadius(double inversionToIncreaseRadius) { - TileInversionPillar.inversionToIncreaseRadius = inversionToIncreaseRadius; - } - - public static double getInversionToAddPillar() { - return inversionToAddPillar; - } - - public static void setInversionToAddPillar(double inversionToAddPillar) { - TileInversionPillar.inversionToAddPillar = inversionToAddPillar; - } - - public static double getOperationThreshold() { - return operationThreshold; - } - - public static void setOperationThreshold(double operationThreshold) { - TileInversionPillar.operationThreshold = operationThreshold; - } - - public static double getInversionToSpreadWill() { - return inversionToSpreadWill; - } - - public static void setInversionToSpreadWill(double inversionToSpreadWill) { - TileInversionPillar.inversionToSpreadWill = inversionToSpreadWill; - } - - public static double getWillPushRate() { - return willPushRate; - } - - public static void setWillPushRate(double willPushRate) { - TileInversionPillar.willPushRate = willPushRate; - } - - public static double getInversionCostPerWillSpread() { - return inversionCostPerWillSpread; - } - - public static void setInversionCostPerWillSpread(double inversionCostPerWillSpread) { - TileInversionPillar.inversionCostPerWillSpread = inversionCostPerWillSpread; - } - - public static double getMinimumWillForChunkWhenSpreading() { - return minimumWillForChunkWhenSpreading; - } - - public static void setMinimumWillForChunkWhenSpreading(double minimumWillForChunkWhenSpreading) { - TileInversionPillar.minimumWillForChunkWhenSpreading = minimumWillForChunkWhenSpreading; - } - - public static double getMaxWillForChunk() { - return maxWillForChunk; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java b/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java deleted file mode 100644 index 510e8932..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMasterRitualStone.java +++ /dev/null @@ -1,411 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.event.RitualEvent; -import WayofTime.bloodmagic.ritual.IMasterRitualStone; -import WayofTime.bloodmagic.ritual.Ritual; -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.util.helper.*; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.ItemActivationCrystal; -import WayofTime.bloodmagic.tile.base.TileTicking; -import WayofTime.bloodmagic.util.ChatUtil; -import com.google.common.base.Strings; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; - -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -public class TileMasterRitualStone extends TileTicking implements IMasterRitualStone { - private UUID owner; - private SoulNetwork cachedNetwork; - private boolean active; - private boolean redstoned; - private int activeTime; - private int cooldown; - private Ritual currentRitual; - private EnumFacing direction = EnumFacing.NORTH; - private boolean inverted; - private List currentActiveWillConfig = new ArrayList<>(); - - @Override - public void onUpdate() { - if (getWorld().isRemote) - return; - - if (isPowered() && isActive()) { - active = false; - redstoned = true; - stopRitual(Ritual.BreakType.REDSTONE); - return; - } - - if (!isActive() && !isPowered() && isRedstoned() && getCurrentRitual() != null) { - active = true; - ItemStack crystalStack = NBTHelper.checkNBT(new ItemStack(RegistrarBloodMagicItems.ACTIVATION_CRYSTAL, 1, getCurrentRitual().getCrystalLevel())); - BindableHelper.applyBinding(crystalStack, new Binding(owner, PlayerHelper.getUsernameFromUUID(owner))); - activateRitual(crystalStack, null, getCurrentRitual()); - redstoned = false; - } - - if (getCurrentRitual() != null && isActive()) { - if (activeTime % getCurrentRitual().getRefreshTime() == 0) - performRitual(getWorld(), getPos()); - - activeTime++; - } - } - - @Override - public void deserialize(NBTTagCompound tag) { - owner = tag.hasUniqueId("owner") ? tag.getUniqueId("owner") : null; - if (owner != null) - cachedNetwork = NetworkHelper.getSoulNetwork(owner); - currentRitual = BloodMagic.RITUAL_MANAGER.getRitual(tag.getString(Constants.NBT.CURRENT_RITUAL)); - if (currentRitual != null) { - NBTTagCompound ritualTag = tag.getCompoundTag(Constants.NBT.CURRENT_RITUAL_TAG); - if (!ritualTag.hasNoTags()) { - currentRitual.readFromNBT(ritualTag); - } - } - active = tag.getBoolean(Constants.NBT.IS_RUNNING); - activeTime = tag.getInteger(Constants.NBT.RUNTIME); - direction = EnumFacing.VALUES[tag.getInteger(Constants.NBT.DIRECTION)]; - redstoned = tag.getBoolean(Constants.NBT.IS_REDSTONED); - - for (EnumDemonWillType type : EnumDemonWillType.values()) { - if (tag.getBoolean("EnumWill" + type)) { - currentActiveWillConfig.add(type); - } - } - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - String ritualId = BloodMagic.RITUAL_MANAGER.getId(getCurrentRitual()); - if (owner != null) - tag.setUniqueId("owner", owner); - tag.setString(Constants.NBT.CURRENT_RITUAL, Strings.isNullOrEmpty(ritualId) ? "" : ritualId); - if (currentRitual != null) { - NBTTagCompound ritualTag = new NBTTagCompound(); - currentRitual.writeToNBT(ritualTag); - tag.setTag(Constants.NBT.CURRENT_RITUAL_TAG, ritualTag); - } - tag.setBoolean(Constants.NBT.IS_RUNNING, isActive()); - tag.setInteger(Constants.NBT.RUNTIME, getActiveTime()); - tag.setInteger(Constants.NBT.DIRECTION, direction.getIndex()); - tag.setBoolean(Constants.NBT.IS_REDSTONED, redstoned); - - for (EnumDemonWillType type : currentActiveWillConfig) { - tag.setBoolean("EnumWill" + type, true); - } - - return tag; - } - - @Override - public boolean activateRitual(ItemStack activationCrystal, @Nullable EntityPlayer activator, Ritual ritual) { - if (PlayerHelper.isFakePlayer(activator)) - return false; - - Binding binding = ((IBindable) activationCrystal.getItem()).getBinding(activationCrystal); - if (binding != null && ritual != null) { - if (activationCrystal.getItem() instanceof ItemActivationCrystal) { - int crystalLevel = ((ItemActivationCrystal) activationCrystal.getItem()).getCrystalLevel(activationCrystal); - if (RitualHelper.canCrystalActivate(ritual, crystalLevel)) { - if (!getWorld().isRemote) { - SoulNetwork network = NetworkHelper.getSoulNetwork(binding); - - if (!isRedstoned() && network.getCurrentEssence() < ritual.getActivationCost() && (activator != null && !activator.capabilities.isCreativeMode)) { - activator.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.ritual.weak"), true); - return false; - } - - if (currentRitual != null) - currentRitual.stopRitual(this, Ritual.BreakType.ACTIVATE); - - RitualEvent.RitualActivatedEvent event = new RitualEvent.RitualActivatedEvent(this, binding.getOwnerId(), ritual, activator, activationCrystal, crystalLevel); - - if (MinecraftForge.EVENT_BUS.post(event)) { - if (activator != null) - activator.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.ritual.prevent"), true); - return false; - } - - if (ritual.activateRitual(this, activator, binding.getOwnerId())) { - if (!isRedstoned() && (activator != null && !activator.capabilities.isCreativeMode)) - network.syphon(ticket(ritual.getActivationCost())); - - if (activator != null) - activator.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.ritual.activate"), true); - - this.active = true; - this.owner = binding.getOwnerId(); - this.cachedNetwork = network; - this.currentRitual = ritual; - - notifyUpdate(); - return true; - } - } - - notifyUpdate(); - return true; - } - } - } else { - if (activator != null) - activator.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.ritual.notValid"), true); - } - - return false; - } - - @Override - public void performRitual(World world, BlockPos pos) { - if (!world.isRemote && getCurrentRitual() != null && BloodMagic.RITUAL_MANAGER.enabled(BloodMagic.RITUAL_MANAGER.getId(currentRitual), false)) { - if (RitualHelper.checkValidRitual(getWorld(), getPos(), currentRitual, getDirection())) { - RitualEvent.RitualRunEvent event = new RitualEvent.RitualRunEvent(this, getOwner(), getCurrentRitual()); - - if (MinecraftForge.EVENT_BUS.post(event)) - return; - - getCurrentRitual().performRitual(this); - } else { - stopRitual(Ritual.BreakType.BREAK_STONE); - } - } - } - - @Override - public void stopRitual(Ritual.BreakType breakType) { - if (!getWorld().isRemote && getCurrentRitual() != null) { - RitualEvent.RitualStopEvent event = new RitualEvent.RitualStopEvent(this, getOwner(), getCurrentRitual(), breakType); - - if (MinecraftForge.EVENT_BUS.post(event)) - return; - - getCurrentRitual().stopRitual(this, breakType); - if (breakType != Ritual.BreakType.REDSTONE) { - this.currentRitual = null; - this.active = false; - this.activeTime = 0; - } - notifyUpdate(); - } - } - - @Override - public int getCooldown() { - return cooldown; - } - - @Override - public void setCooldown(int cooldown) { - this.cooldown = cooldown; - } - - @Override - public EnumFacing getDirection() { - return direction; - } - - public void setDirection(EnumFacing direction) { - this.direction = direction; - } - - @Override - public boolean areTanksEmpty() { - return false; - } - - @Override - public int getRunningTime() { - return activeTime; - } - - @Override - public UUID getOwner() { - return owner; - } - - public void setOwner(UUID owner) { - this.owner = owner; - } - - @Override - public SoulNetwork getOwnerNetwork() { - return cachedNetwork; - } - - @Override - public World getWorld() { - return super.getWorld(); - } - - @Override - public BlockPos getPos() { - return super.getPos(); - } - - @Override - public World getWorldObj() { - return getWorld(); - } - - @Override - public BlockPos getBlockPos() { - return getPos(); - } - - @Override - public String getNextBlockRange(String range) { - if (this.currentRitual != null) { - return this.currentRitual.getNextBlockRange(range); - } - - return ""; - } - - @Override - public void provideInformationOfRitualToPlayer(EntityPlayer player) { - if (this.currentRitual != null) { - ChatUtil.sendNoSpam(player, this.currentRitual.provideInformationOfRitualToPlayer(player)); - } - } - - @Override - public void provideInformationOfRangeToPlayer(EntityPlayer player, String range) { - if (this.currentRitual != null && this.currentRitual.getListOfRanges().contains(range)) { - ChatUtil.sendNoSpam(player, this.currentRitual.provideInformationOfRangeToPlayer(player, range)); - } - } - - @Override - public void setActiveWillConfig(EntityPlayer player, List typeList) { - this.currentActiveWillConfig = typeList; - } - - @Override - public boolean setBlockRangeByBounds(EntityPlayer player, String range, BlockPos offset1, BlockPos offset2) { - if (this.currentRitual != null) { - boolean allowed = this.currentRitual.setBlockRangeByBounds(range, this, offset1, offset2); - if (player != null && !allowed) { - ChatUtil.sendNoSpam(player, this.currentRitual.getErrorForBlockRangeOnFail(player, range, this, offset1, offset2)); - } else { - ChatUtil.sendNoSpam(player, new TextComponentTranslation("ritual.bloodmagic.blockRange.success")); - } - - return allowed; - } - - if (player != null) { - ChatUtil.sendNoSpam(player, new TextComponentTranslation("ritual.bloodmagic.blockRange.inactive")); - } - - return false; - } - - @Override - public List getActiveWillConfig() { - return new ArrayList<>(currentActiveWillConfig); - } - - @Override - public void provideInformationOfWillConfigToPlayer(EntityPlayer player, List typeList) { - //There is probably an easier way to make expanded chat messages - if (typeList.size() >= 1) { - Object[] translations = new TextComponentTranslation[typeList.size()]; - StringBuilder constructedString = new StringBuilder("%s"); - - for (int i = 1; i < typeList.size(); i++) { - constructedString.append(", %s"); - } - - for (int i = 0; i < typeList.size(); i++) { - translations[i] = new TextComponentTranslation("tooltip.bloodmagic.currentBaseType." + typeList.get(i).name.toLowerCase()); - } - - ChatUtil.sendNoSpam(player, new TextComponentTranslation("ritual.bloodmagic.willConfig.set", new TextComponentTranslation(constructedString.toString(), translations))); - } else { - ChatUtil.sendNoSpam(player, new TextComponentTranslation("ritual.bloodmagic.willConfig.void")); - } - } - - public boolean isPowered() { - if (inverted) - return !getWorld().isBlockPowered(getPos()); - - return getWorld().isBlockPowered(getPos()); - } - - public SoulNetwork getCachedNetwork() { - return cachedNetwork; - } - - public void setCachedNetwork(SoulNetwork cachedNetwork) { - this.cachedNetwork = cachedNetwork; - } - - public boolean isActive() { - return active; - } - - @Override - public void setActive(boolean active) { - this.active = active; - } - - public boolean isRedstoned() { - return redstoned; - } - - public void setRedstoned(boolean redstoned) { - this.redstoned = redstoned; - } - - public int getActiveTime() { - return activeTime; - } - - public void setActiveTime(int activeTime) { - this.activeTime = activeTime; - } - - public Ritual getCurrentRitual() { - return currentRitual; - } - - public void setCurrentRitual(Ritual currentRitual) { - this.currentRitual = currentRitual; - } - - public boolean isInverted() { - return inverted; - } - - public void setInverted(boolean inverted) { - this.inverted = inverted; - } - - public List getCurrentActiveWillConfig() { - return currentActiveWillConfig; - } - - public void setCurrentActiveWillConfig(List currentActiveWillConfig) { - this.currentActiveWillConfig = currentActiveWillConfig; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java b/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java deleted file mode 100644 index 11b80f2e..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java +++ /dev/null @@ -1,369 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.block.BlockMimic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.entity.mob.EntityMimic; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.StateUtil; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityPotion; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryHelper; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.potion.PotionUtils; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.ITickable; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.ReflectionHelper; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.util.List; - -public class TileMimic extends TileInventory implements ITickable { - private static Field _blockMetadata = ReflectionHelper.findField(TileEntity.class, "blockMetadata", "field_145847_g"); - - public boolean dropItemsOnBreak = true; - public NBTTagCompound tileTag = new NBTTagCompound(); - public TileEntity mimicedTile = null; - IBlockState stateOfReplacedBlock = Blocks.AIR.getDefaultState(); - - public int playerCheckRadius = 5; - public int potionSpawnRadius = 5; - public int potionSpawnInterval = 40; - - private int internalCounter = 0; - - public TileMimic() { - super(2, "mimic"); - } - - @Override - public void update() { - if (getWorld().isRemote) { - return; - } - - internalCounter++; - if (internalCounter % potionSpawnInterval == 0 && this.getBlockMetadata() == BlockMimic.sentientMimicMeta) { - ItemStack potionStack = this.getStackInSlot(1); - if (!potionStack.isEmpty()) { - AxisAlignedBB bb = new AxisAlignedBB(this.getPos()).expand(playerCheckRadius, playerCheckRadius, playerCheckRadius); - List playerList = getWorld().getEntitiesWithinAABB(EntityPlayer.class, bb); - - for (EntityPlayer player : playerList) { - if (!player.capabilities.isCreativeMode) { - double posX = this.pos.getX() + 0.5 + (2 * getWorld().rand.nextDouble() - 1) * potionSpawnRadius; - double posY = this.pos.getY() + 0.5 + (2 * getWorld().rand.nextDouble() - 1) * potionSpawnRadius; - double posZ = this.pos.getZ() + 0.5 + (2 * getWorld().rand.nextDouble() - 1) * potionSpawnRadius; - - ItemStack newStack = new ItemStack(potionStack.getItem() == RegistrarBloodMagicItems.POTION_FLASK ? Items.SPLASH_POTION : potionStack.getItem()); - newStack.setTagCompound(potionStack.getTagCompound()); - - EntityPotion potionEntity = new EntityPotion(getWorld(), posX, posY, posZ, newStack); - - getWorld().spawnEntity(potionEntity); - break; - } - } - } - } - - if (this.getBlockMetadata() == BlockMimic.sentientMimicMeta && getWorld().getDifficulty() != EnumDifficulty.PEACEFUL && !(mimicedTile instanceof IInventory)) { - AxisAlignedBB bb = new AxisAlignedBB(this.getPos()).expand(playerCheckRadius, playerCheckRadius, playerCheckRadius); - List playerList = getWorld().getEntitiesWithinAABB(EntityPlayer.class, bb); - - for (EntityPlayer player : playerList) { - if (!player.capabilities.isCreativeMode && Utils.canEntitySeeBlock(getWorld(), player, getPos())) { - spawnMimicEntity(player); - break; - } - } - } - - } - - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side) { - if (!heldItem.isEmpty() && player.capabilities.isCreativeMode) { - List list = PotionUtils.getEffectsFromStack(heldItem); - if (!list.isEmpty()) { - if (!world.isRemote) { - setInventorySlotContents(1, heldItem.copy()); - world.notifyBlockUpdate(pos, state, state, 3); - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.potionSet")); - } - return true; - } else if (heldItem.getItem() == RegistrarBloodMagicItems.POTION_FLASK) { - //The potion flask is empty, therefore we have to reset the stored potion. - if (!world.isRemote) { - setInventorySlotContents(1, ItemStack.EMPTY); - world.notifyBlockUpdate(pos, state, state, 3); - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.potionRemove")); - } - return true; - } - } - - if (performSpecialAbility(player, side)) { - return true; - } - - if (player.isSneaking()) - return false; - - if (!player.getHeldItem(hand).isEmpty() && player.getHeldItem(hand).getItem() == new ItemStack(RegistrarBloodMagicBlocks.MIMIC).getItem()) - return false; - - if (!getStackInSlot(0).isEmpty() && !player.getHeldItem(hand).isEmpty()) - return false; - - if (!dropItemsOnBreak && !player.capabilities.isCreativeMode) - return false; - - Utils.insertItemToTile(this, player, 0); - ItemStack stack = getStackInSlot(0); - if(stateOfReplacedBlock == Blocks.AIR.getDefaultState()) { - if (!stack.isEmpty() && stack.getItem() instanceof ItemBlock) { - Block block = ((ItemBlock) stack.getItem()).getBlock(); - stateOfReplacedBlock = block.getDefaultState(); - } - } - this.refreshTileEntity(); - - if (player.capabilities.isCreativeMode) { - dropItemsOnBreak = getStackInSlot(0).isEmpty(); - } - - world.notifyBlockUpdate(pos, state, state, 3); - return true; - } - - public boolean performSpecialAbility(EntityPlayer player, EnumFacing sideHit) { - switch (this.getBlockMetadata()) { - case BlockMimic.sentientMimicMeta: - if (player.capabilities.isCreativeMode) { - if (player.isSneaking()) { - playerCheckRadius = Math.max(playerCheckRadius - 1, 0); - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.detectRadius.down", playerCheckRadius)); - } else { - playerCheckRadius++; - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.detectRadius.up", playerCheckRadius)); - } - - return false; - } - - return spawnMimicEntity(player); - default: - if (!player.capabilities.isCreativeMode) { - return false; - } - - if (player.getActiveItemStack().isEmpty() && !getStackInSlot(1).isEmpty()) { - switch (sideHit) { - case EAST: //When the block is clicked on the EAST or WEST side, potionSpawnRadius is edited. - case WEST: - if (player.isSneaking()) { - potionSpawnRadius = Math.max(potionSpawnRadius - 1, 0); - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.potionSpawnRadius.down", potionSpawnRadius)); - } else { - potionSpawnRadius++; - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.potionSpawnRadius.up", potionSpawnRadius)); - } - break; - case NORTH: //When the block is clicked on the NORTH or SOUTH side, detectRadius is edited. - case SOUTH: - if (player.isSneaking()) { - playerCheckRadius = Math.max(playerCheckRadius - 1, 0); - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.detectRadius.down", playerCheckRadius)); - } else { - playerCheckRadius++; - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.detectRadius.up", playerCheckRadius)); - } - break; - case UP: //When the block is clicked on the UP or DOWN side, potionSpawnInterval is edited. - case DOWN: - if (player.isSneaking()) { - potionSpawnInterval = Math.max(potionSpawnInterval - 1, 1); - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.potionInterval.down", potionSpawnInterval)); - } else { - potionSpawnInterval++; - ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.bloodmagic.mimic.potionInterval.up", potionSpawnInterval)); - } - break; - default: - break; - - } - - return true; - } - } - return false; - } - - public boolean spawnMimicEntity(EntityPlayer target) { - if (this.getWorld().getDifficulty() == EnumDifficulty.PEACEFUL) { - return false; - } - - if (this.getStackInSlot(0).isEmpty() || getWorld().isRemote) { - return false; - } - - EntityMimic mimicEntity = new EntityMimic(getWorld()); - mimicEntity.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); - - mimicEntity.initializeMimic(getStackInSlot(0), tileTag, dropItemsOnBreak, stateOfReplacedBlock, playerCheckRadius, pos); - tileTag = null; - mimicedTile = null; - this.setInventorySlotContents(0, ItemStack.EMPTY); - - getWorld().spawnEntity(mimicEntity); - if (target != null) { - mimicEntity.setAttackTarget(target); - } - - getWorld().setBlockToAir(pos); - - return true; - } - - public void refreshTileEntity() { - if (mimicedTile != null) { - dropMimicedTileInventory(); - } - mimicedTile = getTileFromStackWithTag(getWorld(), pos, getStackInSlot(0), tileTag, stateOfReplacedBlock); - } - - @Override - public void deserialize(NBTTagCompound tag) { - super.deserialize(tag); - - dropItemsOnBreak = tag.getBoolean("dropItemsOnBreak"); - tileTag = tag.getCompoundTag("tileTag"); - stateOfReplacedBlock = StateUtil.parseState(tag.getString("stateOfReplacedBlock")); - mimicedTile = getTileFromStackWithTag(getWorld(), pos, getStackInSlot(0), tileTag, stateOfReplacedBlock); - playerCheckRadius = tag.getInteger("playerCheckRadius"); - potionSpawnRadius = tag.getInteger("potionSpawnRadius"); - potionSpawnInterval = Math.max(1, tag.getInteger("potionSpawnInterval")); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - super.serialize(tag); - - tag.setBoolean("dropItemsOnBreak", dropItemsOnBreak); - tag.setTag("tileTag", tileTag); - tag.setInteger("playerCheckRadius", playerCheckRadius); - tag.setInteger("potionSpawnRadius", potionSpawnRadius); - tag.setInteger("potionSpawnInterval", potionSpawnInterval); - tag.setString("stateOfReplacedBlock",stateOfReplacedBlock.toString()); - - return tag; - } - - @Override - public void dropItems() { - if (dropItemsOnBreak) { - InventoryHelper.dropInventoryItems(getWorld(), getPos(), this); - } - - dropMimicedTileInventory(); - } - - public void dropMimicedTileInventory() { - if (!getWorld().isRemote && mimicedTile instanceof IInventory) { - InventoryHelper.dropInventoryItems(getWorld(), getPos(), (IInventory) mimicedTile); - } - } - - public IBlockState getReplacedState() { - return stateOfReplacedBlock; - } - - public void setReplacedState(IBlockState state) { - stateOfReplacedBlock = state; - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemstack) { - return slot == 0 && dropItemsOnBreak; - } - - public static void replaceMimicWithBlockActual(TileMimic mimic) { - World world = mimic.getWorld(); - BlockPos pos = mimic.getPos(); - - replaceMimicWithBlockActual(world, pos, mimic.getStackInSlot(0), mimic.tileTag, mimic.stateOfReplacedBlock); - } - - public static boolean replaceMimicWithBlockActual(World world, BlockPos pos, ItemStack stack, NBTTagCompound tileTag, IBlockState replacementState) { - if (!stack.isEmpty() && stack.getItem() instanceof ItemBlock) { - Block block = ((ItemBlock) stack.getItem()).getBlock(); - IBlockState state = replacementState; - if (world.setBlockState(pos, state, 3)) { - TileEntity tile = world.getTileEntity(pos); - if (tile != null) { - tileTag.setInteger("x", pos.getX()); - tileTag.setInteger("y", pos.getY()); - tileTag.setInteger("z", pos.getZ()); - tile.readFromNBT(tileTag); - } - - return true; - } - } - - return false; - } - - @Nullable - public static TileEntity getTileFromStackWithTag(World world, BlockPos pos, ItemStack stack, @Nullable NBTTagCompound tag, IBlockState replacementState) { - if (!stack.isEmpty() && stack.getItem() instanceof ItemBlock) { - Block block = ((ItemBlock) stack.getItem()).getBlock(); - IBlockState state = replacementState; - if (block.hasTileEntity(state)) { - TileEntity tile = block.createTileEntity(world, state); - - if (tile == null) - return null; - - if (tag != null) { - NBTTagCompound copyTag = tag.copy(); - copyTag.setInteger("x", pos.getX()); - copyTag.setInteger("y", pos.getY()); - copyTag.setInteger("z", pos.getZ()); - tile.readFromNBT(copyTag); - } - - tile.setWorld(world); - - try { - _blockMetadata.setInt(tile, block.getMetaFromState(replacementState)); - } catch (IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - } - - return tile; - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TilePhantomBlock.java b/src/main/java/WayofTime/bloodmagic/tile/TilePhantomBlock.java deleted file mode 100644 index cdda27d8..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TilePhantomBlock.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.tile.base.TileTicking; -import net.minecraft.nbt.NBTTagCompound; - -public class TilePhantomBlock extends TileTicking { - private int ticksRemaining = 10; - - public TilePhantomBlock() { - } - - public TilePhantomBlock(int ticksRemaining) { - this.ticksRemaining = ticksRemaining; - } - - @Override - public void deserialize(NBTTagCompound tagCompound) { - this.ticksRemaining = tagCompound.getInteger(Constants.NBT.TICKS_REMAINING); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tagCompound) { - tagCompound.setInteger(Constants.NBT.TICKS_REMAINING, ticksRemaining); - return tagCompound; - } - - @Override - public void onUpdate() { - ticksRemaining--; - - if (ticksRemaining <= 0) { - getWorld().setBlockToAir(getPos()); - getWorld().removeTileEntity(getPos()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TilePurificationAltar.java b/src/main/java/WayofTime/bloodmagic/tile/TilePurificationAltar.java deleted file mode 100644 index fdcab9f4..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TilePurificationAltar.java +++ /dev/null @@ -1,83 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.iface.IPurificationAsh; -import WayofTime.bloodmagic.ritual.AreaDescriptor; -import WayofTime.bloodmagic.util.helper.PurificationHelper; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.ITickable; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldServer; - -import java.util.List; - -public class TilePurificationAltar extends TileInventory implements ITickable { - public AreaDescriptor purityArea = new AreaDescriptor.Rectangle(new BlockPos(-5, -5, -5), 11); - - public double totalPurity = 0; - public double maxPurity = 0; - public double purityRate = 0; - - public TilePurificationAltar() { - super(1, "purificationAltar"); - } - - @Override - public void update() { - if (totalPurity <= 0) { - ItemStack stack = this.getStackInSlot(0); - if (!stack.isEmpty() && stack.getItem() instanceof IPurificationAsh) { - totalPurity = ((IPurificationAsh) stack.getItem()).getTotalPurity(stack); - maxPurity = ((IPurificationAsh) stack.getItem()).getMaxPurity(stack); - purityRate = ((IPurificationAsh) stack.getItem()).getPurityRate(stack); - } - } else { - return; - } - - AxisAlignedBB aabb = purityArea.getAABB(getPos()); - List animalList = getWorld().getEntitiesWithinAABB(EntityAnimal.class, aabb); - if (animalList.isEmpty()) { - return; - } - - boolean hasPerformed = false; - - for (EntityAnimal animal : animalList) { - double added = PurificationHelper.addPurity(animal, Math.min(purityRate, totalPurity), maxPurity); - if (added > 0) { - totalPurity -= purityRate; - hasPerformed = true; - } - } - - if (hasPerformed) { - if (getWorld().rand.nextInt(4) == 0 && getWorld() instanceof WorldServer) { - WorldServer server = (WorldServer) getWorld(); - server.spawnParticle(EnumParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, 1, 0.02, 0.03, 0.02, 0); - } - } - } - - @Override - public void deserialize(NBTTagCompound tag) { - super.deserialize(tag); - totalPurity = tag.getDouble("totalPurity"); - maxPurity = tag.getDouble("maxPurity"); - purityRate = tag.getDouble("purityRate"); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - super.serialize(tag); - - tag.setDouble("totalPurity", totalPurity); - tag.setDouble("maxPurity", maxPurity); - tag.setDouble("purityRate", purityRate); - - return tag; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java b/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java deleted file mode 100644 index 4e737ae9..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileSoulForge.java +++ /dev/null @@ -1,284 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.api.event.BloodMagicCraftedEvent; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.api.impl.recipe.RecipeTartaricForge; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.soul.IDemonWill; -import WayofTime.bloodmagic.soul.IDemonWillConduit; -import WayofTime.bloodmagic.soul.IDemonWillGem; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ITickable; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.items.ItemHandlerHelper; - -import java.util.ArrayList; -import java.util.List; - -public class TileSoulForge extends TileInventory implements ITickable, IDemonWillConduit { - public static final int ticksRequired = 100; - public static final double worldWillTransferRate = 1; - - public static final int soulSlot = 4; - public static final int outputSlot = 5; - - //Input slots are from 0 to 3. - - public int burnTime = 0; - - public TileSoulForge() { - super(6, "soulForge"); - } - - @Override - public void deserialize(NBTTagCompound tag) { - super.deserialize(tag); - - burnTime = tag.getInteger(Constants.NBT.SOUL_FORGE_BURN); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - super.serialize(tag); - - tag.setInteger(Constants.NBT.SOUL_FORGE_BURN, burnTime); - return tag; - } - - @Override - public void update() { - if (!getWorld().isRemote) { - for (EnumDemonWillType type : EnumDemonWillType.values()) { - double willInWorld = WorldDemonWillHandler.getCurrentWill(getWorld(), pos, type); - double filled = Math.min(willInWorld, worldWillTransferRate); - - if (filled > 0) { - filled = this.fillDemonWill(type, filled, false); - filled = WorldDemonWillHandler.drainWill(getWorld(), pos, type, filled, false); - - if (filled > 0) { - this.fillDemonWill(type, filled, true); - WorldDemonWillHandler.drainWill(getWorld(), pos, type, filled, true); - } - } - } - } - - if (!hasSoulGemOrSoul()) { - burnTime = 0; - return; - } - - double soulsInGem = getWill(EnumDemonWillType.DEFAULT); - - List inputList = new ArrayList<>(); - - for (int i = 0; i < 4; i++) - if (!getStackInSlot(i).isEmpty()) - inputList.add(getStackInSlot(i)); - - RecipeTartaricForge recipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getTartaricForge(inputList); - if (recipe != null && (soulsInGem >= recipe.getMinimumSouls() || burnTime > 0)) { - if (canCraft(recipe)) { - burnTime++; - - if (burnTime == ticksRequired) { - if (!getWorld().isRemote) { - double requiredSouls = recipe.getSoulDrain(); - if (requiredSouls > 0) { - if (!getWorld().isRemote && soulsInGem >= recipe.getMinimumSouls()) { - consumeSouls(EnumDemonWillType.DEFAULT, requiredSouls); - } - } - - if (!getWorld().isRemote && soulsInGem >= recipe.getMinimumSouls()) - craftItem(recipe); - } - - burnTime = 0; - } else if (burnTime > ticksRequired + 10) { - burnTime = 0; - } - } else { - burnTime = 0; - } - } else { - burnTime = 0; - } - } - - public double getProgressForGui() { - return ((double) burnTime) / ticksRequired; - } - - private boolean canCraft(RecipeTartaricForge recipe) { - if (recipe == null) - return false; - - ItemStack currentOutputStack = getStackInSlot(outputSlot); - if (recipe.getOutput().isEmpty()) - return false; - if (currentOutputStack.isEmpty()) - return true; - if (!currentOutputStack.isItemEqual(recipe.getOutput())) - return false; - int result = currentOutputStack.getCount() + recipe.getOutput().getCount(); - return result <= getInventoryStackLimit() && result <= currentOutputStack.getMaxStackSize(); - - } - - public void craftItem(RecipeTartaricForge recipe) { - if (this.canCraft(recipe)) { - ItemStack currentOutputStack = getStackInSlot(outputSlot); - - List inputList = new ArrayList<>(); - for (int i = 0; i < 4; i++) - if (!getStackInSlot(i).isEmpty()) - inputList.add(getStackInSlot(i).copy()); - - BloodMagicCraftedEvent.SoulForge event = new BloodMagicCraftedEvent.SoulForge(recipe.getOutput().copy(), inputList.toArray(new ItemStack[0])); - MinecraftForge.EVENT_BUS.post(event); - - if (currentOutputStack.isEmpty()) { - setInventorySlotContents(outputSlot, event.getOutput()); - } else if (ItemHandlerHelper.canItemStacksStack(currentOutputStack, event.getOutput())) { - currentOutputStack.grow(event.getOutput().getCount()); - } - - consumeInventory(); - } - } - - public boolean hasSoulGemOrSoul() { - ItemStack soulStack = getStackInSlot(soulSlot); - - if (!soulStack.isEmpty()) { - if (soulStack.getItem() instanceof IDemonWill || soulStack.getItem() instanceof IDemonWillGem) { - return true; - } - } - - return false; - } - - public double getWill(EnumDemonWillType type) { - ItemStack soulStack = getStackInSlot(soulSlot); - - if (soulStack != null) { - if (soulStack.getItem() instanceof IDemonWill && ((IDemonWill) soulStack.getItem()).getType(soulStack) == type) { - IDemonWill soul = (IDemonWill) soulStack.getItem(); - return soul.getWill(type, soulStack); - } - - if (soulStack.getItem() instanceof IDemonWillGem) { - IDemonWillGem soul = (IDemonWillGem) soulStack.getItem(); - return soul.getWill(type, soulStack); - } - } - - return 0; - } - - public double consumeSouls(EnumDemonWillType type, double requested) { - ItemStack soulStack = getStackInSlot(soulSlot); - - if (soulStack != null) { - if (soulStack.getItem() instanceof IDemonWill && ((IDemonWill) soulStack.getItem()).getType(soulStack) == type) { - IDemonWill soul = (IDemonWill) soulStack.getItem(); - double souls = soul.drainWill(type, soulStack, requested); - if (soul.getWill(type, soulStack) <= 0) { - setInventorySlotContents(soulSlot, ItemStack.EMPTY); - } - return souls; - } - - if (soulStack.getItem() instanceof IDemonWillGem) { - IDemonWillGem soul = (IDemonWillGem) soulStack.getItem(); - return soul.drainWill(type, soulStack, requested, true); - } - } - - return 0; - } - - public void consumeInventory() { - for (int i = 0; i < 4; i++) { - ItemStack inputStack = getStackInSlot(i); - if (!inputStack.isEmpty()) { - if (inputStack.getItem().hasContainerItem(inputStack)) { - setInventorySlotContents(i, inputStack.getItem().getContainerItem(inputStack)); - continue; - } - - inputStack.shrink(1); - if (inputStack.isEmpty()) { - setInventorySlotContents(i, ItemStack.EMPTY); - } - } - } - } - - @Override - public int getWeight() { - return 50; - } - - @Override - public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) { - if (amount <= 0) { - return 0; - } - - if (!canFill(type)) { - return 0; - } - - ItemStack stack = this.getStackInSlot(soulSlot); - if (stack.isEmpty() || !(stack.getItem() instanceof IDemonWillGem)) { - return 0; - } - - IDemonWillGem willGem = (IDemonWillGem) stack.getItem(); - return willGem.fillWill(type, stack, amount, doFill); - } - - @Override - public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) { - ItemStack stack = this.getStackInSlot(soulSlot); - if (stack.isEmpty() || !(stack.getItem() instanceof IDemonWillGem)) { - return 0; - } - - IDemonWillGem willGem = (IDemonWillGem) stack.getItem(); - - double drained = amount; - double current = willGem.getWill(type, stack); - if (current < drained) { - drained = current; - } - - if (doDrain) { - drained = willGem.drainWill(type, stack, drained, true); - } - - return drained; - } - - @Override - public boolean canFill(EnumDemonWillType type) { - return true; - } - - @Override - public boolean canDrain(EnumDemonWillType type) { - return true; - } - - @Override - public double getCurrentWill(EnumDemonWillType type) { - return 0; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileSpectralBlock.java b/src/main/java/WayofTime/bloodmagic/tile/TileSpectralBlock.java deleted file mode 100644 index d2d41e2d..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileSpectralBlock.java +++ /dev/null @@ -1,84 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.tile.base.TileTicking; -import com.google.common.base.Strings; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -public class TileSpectralBlock extends TileTicking { - private int ticksRemaining; - private String containedBlockName; - private int containedBlockMeta; - - public TileSpectralBlock() { - } - - @Override - public void deserialize(NBTTagCompound tagCompound) { - ticksRemaining = tagCompound.getInteger(Constants.NBT.TICKS_REMAINING); - containedBlockName = tagCompound.getString(Constants.NBT.CONTAINED_BLOCK_NAME); - containedBlockMeta = tagCompound.getInteger(Constants.NBT.CONTAINED_BLOCK_META); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tagCompound) { - tagCompound.setInteger(Constants.NBT.TICKS_REMAINING, ticksRemaining); - tagCompound.setString(Constants.NBT.CONTAINED_BLOCK_NAME, Strings.isNullOrEmpty(containedBlockName) ? "" : containedBlockName); - tagCompound.setInteger(Constants.NBT.CONTAINED_BLOCK_META, containedBlockMeta); - return tagCompound; - } - - @Override - public void onUpdate() { - if (getWorld().isRemote) { - return; - } - - ticksRemaining--; - - if (ticksRemaining <= 0) { - returnContainedBlock(); - } - } - - private void setContainedBlockInfo(IBlockState blockState) { - containedBlockName = blockState.getBlock().getRegistryName().toString(); - containedBlockMeta = blockState.getBlock().getMetaFromState(blockState); - } - - private void setDuration(int duration) { - ticksRemaining = duration; - } - - public void resetDuration(int reset) { - if (ticksRemaining < reset) - ticksRemaining = reset; - } - - public void returnContainedBlock() { - Block block = null; - - if (!Strings.isNullOrEmpty(containedBlockName)) - block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(containedBlockName)); - - if (block != null && getWorld().setBlockState(pos, block.getStateFromMeta(containedBlockMeta))) - getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(getPos()), getWorld().getBlockState(getPos()), 3); - } - - public static void createSpectralBlock(World world, BlockPos blockPos, int duration) { - if (world.isAirBlock(blockPos)) - return; - IBlockState cachedState = world.getBlockState(blockPos); - world.setBlockState(blockPos, RegistrarBloodMagicBlocks.SPECTRAL.getDefaultState()); - TileSpectralBlock tile = (TileSpectralBlock) world.getTileEntity(blockPos); - tile.setContainedBlockInfo(cachedState); - tile.setDuration(duration); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java deleted file mode 100644 index aeff21a0..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java +++ /dev/null @@ -1,138 +0,0 @@ -package WayofTime.bloodmagic.tile; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.event.TeleposeEvent; -import WayofTime.bloodmagic.teleport.TeleportQueue; -import WayofTime.bloodmagic.util.helper.NetworkHelper; -import WayofTime.bloodmagic.util.helper.PlayerHelper; -import WayofTime.bloodmagic.block.BlockTeleposer; -import WayofTime.bloodmagic.item.ItemTelepositionFocus; -import WayofTime.bloodmagic.ritual.portal.Teleports; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ITickable; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; - -import java.util.List; -import java.util.UUID; - -public class TileTeleposer extends TileInventory implements ITickable { - //TODO FUTURE: Make AreaDescriptor for Teleposer perhaps? - public static final String TELEPOSER_RANGE = "teleposerRange"; - - private int previousInput; - - public TileTeleposer() { - super(1, "teleposer"); - } - - @Override - public void deserialize(NBTTagCompound tagCompound) { - super.deserialize(tagCompound); - previousInput = tagCompound.getInteger(Constants.NBT.PREVIOUS_INPUT); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tagCompound) { - super.serialize(tagCompound); - tagCompound.setInteger(Constants.NBT.PREVIOUS_INPUT, previousInput); - return tagCompound; - } - - @Override - public void update() { - if (!getWorld().isRemote) { - int currentInput = getWorld().getStrongPower(pos); - - if (previousInput == 0 && currentInput != 0) { - initiateTeleport(); - } - - previousInput = currentInput; - } - } - - public void initiateTeleport() { - if (!getWorld().isRemote && canInitiateTeleport() && getBlockType() instanceof BlockTeleposer) { - ItemStack focusStack = getStackInSlot(0); - ItemTelepositionFocus focus = (ItemTelepositionFocus) focusStack.getItem(); - Binding binding = focus.getBinding(focusStack); - if (binding == null) - return; - BlockPos focusPos = focus.getBlockPos(getStackInSlot(0)); - World focusWorld = focus.getWorld(getStackInSlot(0)); - if (focusWorld == null) - return; - - TileEntity boundTile = focusWorld.getTileEntity(focusPos); - if (boundTile instanceof TileTeleposer && boundTile != this) { - final int focusLevel = (getStackInSlot(0).getItemDamage() + 1); - final int lpToBeDrained = (int) (0.5F * Math.sqrt((pos.getX() - focusPos.getX()) * (pos.getX() - focusPos.getX()) + (pos.getY() - focusPos.getY() + 1) * (pos.getY() - focusPos.getY() + 1) + (pos.getZ() - focusPos.getZ()) * (pos.getZ() - focusPos.getZ()))); - - if (NetworkHelper.getSoulNetwork(binding).syphonAndDamage(PlayerHelper.getPlayerFromUUID(binding.getOwnerId()), SoulTicket.block(world, pos, lpToBeDrained * (focusLevel * 2 - 1) * (focusLevel * 2 - 1) * (focusLevel * 2 - 1))).isSuccess()) { - int blocksTransported = 0; - - for (int i = -(focusLevel - 1); i <= (focusLevel - 1); i++) { - for (int j = 0; j <= (focusLevel * 2 - 2); j++) { - for (int k = -(focusLevel - 1); k <= (focusLevel - 1); k++) { - TeleposeEvent event = new TeleposeEvent(getWorld(), pos.add(i, 1 + j, k), focusWorld, focusPos.add(i, 1 + j, k)); - if (!MinecraftForge.EVENT_BUS.post(event) && Utils.swapLocations(event.initalWorld, event.initialBlockPos, event.finalWorld, event.finalBlockPos)) { - blocksTransported++; - } - } - } - } - - NetworkHelper.syphonFromContainer(focusStack, SoulTicket.item(focusStack, world, pos, lpToBeDrained * blocksTransported)); - - List originalWorldEntities; - List focusWorldEntities; - AxisAlignedBB originalArea = new AxisAlignedBB(pos.getX(), pos.getY() + 1, pos.getZ(), pos.getX() + 1, Math.min(focusWorld.getHeight(), pos.getY() + 2 * focusLevel), pos.getZ() + 1).expand(focusLevel - 1, 0, focusLevel - 1); - originalWorldEntities = getWorld().getEntitiesWithinAABB(Entity.class, originalArea); - AxisAlignedBB focusArea = new AxisAlignedBB(focusPos.getX(), focusPos.getY() + 1, focusPos.getZ(), focusPos.getX() + 1, Math.min(focusWorld.getHeight(), focusPos.getY() + 2 * focusLevel), focusPos.getZ() + 1).expand(focusLevel - 1, 0, focusLevel - 1); - focusWorldEntities = focusWorld.getEntitiesWithinAABB(Entity.class, focusArea); - UUID bindingOwnerID = binding.getOwnerId(); - if (focusWorld.equals(getWorld())) { - if (!originalWorldEntities.isEmpty()) { - for (Entity entity : originalWorldEntities) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, bindingOwnerID, true)); - } - } - - if (!focusWorldEntities.isEmpty()) { - for (Entity entity : focusWorldEntities) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportSameDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, bindingOwnerID, true)); - } - } - - } else { - if (!originalWorldEntities.isEmpty()) { - for (Entity entity : originalWorldEntities) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, bindingOwnerID, getWorld(), focusWorld.provider.getDimension(), true)); - } - } - - if (!focusWorldEntities.isEmpty()) { - for (Entity entity : focusWorldEntities) { - TeleportQueue.getInstance().addITeleport(new Teleports.TeleportToDim(new BlockPos(entity.posX - pos.getX() + focusPos.getX(), entity.posY - pos.getY() + focusPos.getY(), entity.posZ - pos.getZ() + focusPos.getZ()), entity, bindingOwnerID, focusWorld, getWorld().provider.getDimension(), true)); - } - } - } - } - } - } - } - - private boolean canInitiateTeleport() { - ItemStack focusStack = getStackInSlot(0); - return !focusStack.isEmpty() && focusStack.getItem() instanceof ItemTelepositionFocus && ((ItemTelepositionFocus) focusStack.getItem()).getBinding(focusStack) != null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/base/TileTicking.java b/src/main/java/WayofTime/bloodmagic/tile/base/TileTicking.java deleted file mode 100644 index f0a532ad..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/base/TileTicking.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.tile.base; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ITickable; - -/** - * Base class for tiles that tick. Allows disabling the ticking programmatically. - */ -// TODO - Move implementations that depend on existed ticks to new methods from here. -public abstract class TileTicking extends TileBase implements ITickable { - private int ticksExisted; - private boolean shouldTick = true; - - @Override - public final void update() { - if (shouldTick()) { - ticksExisted++; - onUpdate(); - } - } - - @Override - void deserializeBase(NBTTagCompound tagCompound) { - this.ticksExisted = tagCompound.getInteger("ticksExisted"); - this.shouldTick = tagCompound.getBoolean("shouldTick"); - } - - @Override - NBTTagCompound serializeBase(NBTTagCompound tagCompound) { - tagCompound.setInteger("ticksExisted", getTicksExisted()); - tagCompound.setBoolean("shouldTick", shouldTick()); - return tagCompound; - } - - /** - * Called every tick that {@link #shouldTick()} is true. - */ - public abstract void onUpdate(); - - public int getTicksExisted() { - return ticksExisted; - } - - public void resetLifetime() { - ticksExisted = 0; - } - - public boolean shouldTick() { - return shouldTick; - } - - public void setShouldTick(boolean shouldTick) { - this.shouldTick = shouldTick; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerAlchemyTable.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerAlchemyTable.java deleted file mode 100644 index 879a0ed3..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerAlchemyTable.java +++ /dev/null @@ -1,123 +0,0 @@ -package WayofTime.bloodmagic.tile.container; - -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.tile.TileAlchemyTable; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.ClickType; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerAlchemyTable extends Container { - private final IInventory tileTable; - - public ContainerAlchemyTable(InventoryPlayer inventoryPlayer, IInventory tileTable) { - this.tileTable = tileTable; - this.addSlotToContainer(new Slot(tileTable, 0, 62, 15)); - this.addSlotToContainer(new Slot(tileTable, 1, 80, 51)); - this.addSlotToContainer(new Slot(tileTable, 2, 62, 87)); - this.addSlotToContainer(new Slot(tileTable, 3, 26, 87)); - this.addSlotToContainer(new Slot(tileTable, 4, 8, 51)); - this.addSlotToContainer(new Slot(tileTable, 5, 26, 15)); - this.addSlotToContainer(new Slot(tileTable, TileAlchemyTable.toolSlot, 152, 33)); - this.addSlotToContainer(new SlotOrb(tileTable, TileAlchemyTable.orbSlot, 152, 69)); - this.addSlotToContainer(new SlotOutput(tileTable, TileAlchemyTable.outputSlot, 44, 51)); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 9; j++) { - addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 123 + i * 18)); - } - } - - for (int i = 0; i < 9; i++) { - addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 181)); - } - } - - @Override - public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player) { - InventoryPlayer inventoryPlayer = player.inventory; - - if (slotId < 6 && slotId >= 0) { - Slot slot = this.getSlot(slotId); - if (!slot.getHasStack() && inventoryPlayer.getItemStack().isEmpty()) { - ((TileAlchemyTable) tileTable).toggleInputSlotAccessible(slotId); - } - } - - return super.slotClick(slotId, dragType, clickTypeIn, player); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) { - ItemStack itemstack = ItemStack.EMPTY; - Slot slot = this.inventorySlots.get(index); - - if (slot != null && slot.getHasStack()) { - ItemStack itemstack1 = slot.getStack(); - itemstack = itemstack1.copy(); - - if (index == 8) { - if (!this.mergeItemStack(itemstack1, 9, 9 + 36, true)) { - return ItemStack.EMPTY; - } - - slot.onSlotChange(itemstack1, itemstack); - } else if (index > 8) { - if (itemstack1.getItem() instanceof IBloodOrb) { - if (!this.mergeItemStack(itemstack1, 7, 8, false)) //TODO: Add alchemy tools to list - { - return ItemStack.EMPTY; - } - } else if (!this.mergeItemStack(itemstack1, 0, 6, false)) { - return ItemStack.EMPTY; - } - } else if (!this.mergeItemStack(itemstack1, 9, 9 + 36, false)) { - return ItemStack.EMPTY; - } - - if (itemstack1.getCount() == 0) { - slot.putStack(ItemStack.EMPTY); - } else { - slot.onSlotChanged(); - } - - if (itemstack1.getCount() == itemstack.getCount()) { - return ItemStack.EMPTY; - } - - slot.onTake(playerIn, itemstack1); - } - - return itemstack; - } - - @Override - public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileTable.isUsableByPlayer(playerIn); - } - - private class SlotOrb extends Slot { - public SlotOrb(IInventory inventory, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - } - - @Override - public boolean isItemValid(ItemStack itemStack) { - return itemStack.getItem() instanceof IBloodOrb; - } - } - - private class SlotOutput extends Slot { - public SlotOutput(IInventory inventory, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - } - - @Override - public boolean isItemValid(ItemStack stack) { - return false; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java deleted file mode 100644 index fa230b5a..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerItemRoutingNode.java +++ /dev/null @@ -1,235 +0,0 @@ -package WayofTime.bloodmagic.tile.container; - -import WayofTime.bloodmagic.item.inventory.ItemInventory; -import WayofTime.bloodmagic.item.routing.IRoutingFilterProvider; -import WayofTime.bloodmagic.tile.routing.TileFilteredRoutingNode; -import WayofTime.bloodmagic.util.GhostItemHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.ClickType; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -import javax.annotation.Nullable; - -public class ContainerItemRoutingNode extends Container { - private final IInventory tileItemRoutingNode; - private final TileFilteredRoutingNode inventory; - public int lastGhostSlotClicked = -1; - // private final ItemInventory itemInventory; - private int slotsOccupied; - - public ContainerItemRoutingNode(InventoryPlayer inventoryPlayer, IInventory tileItemRoutingNode) { - this.tileItemRoutingNode = tileItemRoutingNode; - inventory = (TileFilteredRoutingNode) tileItemRoutingNode; - - this.addSlotToContainer(new SlotItemFilter(this, tileItemRoutingNode, 0, 8, 33)); - ItemInventory itemInventory = inventory.itemInventory; - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - addSlotToContainer(new SlotGhostItem(itemInventory, j + i * 3, 26 + j * 18, 15 + i * 18)); - } - } - - slotsOccupied = 10; - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 9; j++) { - addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 87 + i * 18)); - } - } - - for (int i = 0; i < 9; i++) { - addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 145)); - } - } - - public void resetItemInventory(ItemStack masterStack) { - inventory.itemInventory.initializeInventory(masterStack); - } - - /** - * Overridden in order to handle ghost item slots. - */ - @Override - public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player) { - InventoryPlayer inventoryPlayer = player.inventory; -// if (!player.worldObj.isRemote) - { - if (slotId >= 0) { - Slot slot = this.inventorySlots.get(slotId); - - if (slot instanceof SlotGhostItem) //TODO: make the slot clicking work! - { - lastGhostSlotClicked = slot.getSlotIndex(); - - if ((dragType == 0 || dragType == 1)) { - ItemStack slotStack = slot.getStack(); - ItemStack heldStack = inventoryPlayer.getItemStack(); - - if (dragType == 0) //Left mouse click-eth - { - { - if (heldStack.isEmpty() && !slotStack.isEmpty()) { - //I clicked on the slot with an empty hand. Selecting! - } else if (!heldStack.isEmpty() && slotStack.isEmpty()) { - if (!((SlotGhostItem) slot).canBeAccessed()) { - return super.slotClick(slotId, dragType, clickTypeIn, player); - } - - ItemStack copyStack = heldStack.copy(); - GhostItemHelper.setItemGhostAmount(copyStack, 0); - copyStack.setCount(1); - slot.putStack(copyStack); - - ItemStack filterStack = this.inventorySlots.get(0).getStack(); - if (filterStack.getItem() instanceof IRoutingFilterProvider) { - ItemStack filterCopy = ((IRoutingFilterProvider) filterStack.getItem()).getContainedStackForItem(filterStack, heldStack); - slot.putStack(filterCopy); - } - } - } - } else - //Right mouse click-eth away - { - slot.putStack(ItemStack.EMPTY); - } - } - } - } - } - - return super.slotClick(slotId, dragType, clickTypeIn, player); - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) { - ItemStack itemstack = ItemStack.EMPTY; - Slot slot = this.inventorySlots.get(index); - - if (slot != null && slot.getHasStack()) { - ItemStack itemstack1 = slot.getStack(); - itemstack = itemstack1.copy(); - - if (index == 0) { - if (!this.mergeItemStack(itemstack1, slotsOccupied, slotsOccupied + 36, true)) { - return null; - } - - slot.onSlotChange(itemstack1, itemstack); - } else if (index > 0) { -// return null; - if (itemstack1.getItem() instanceof IRoutingFilterProvider) // Change to check item is a filter - { - if (!this.mergeItemStack(itemstack1, 0, 1, false)) { - return ItemStack.EMPTY; - } - } - } else if (!this.mergeItemStack(itemstack1, slotsOccupied, 36 + slotsOccupied, false)) { - return ItemStack.EMPTY; - } - - if (itemstack1.isEmpty()) { - slot.putStack(ItemStack.EMPTY); - } else { - slot.onSlotChanged(); - } - - if (itemstack1.getCount() == itemstack.getCount()) { - return ItemStack.EMPTY; - } - - slot.onTake(playerIn, itemstack1); - } - - return itemstack; - } - - @Override - public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileItemRoutingNode.isUsableByPlayer(playerIn); - } - - private class SlotItemFilter extends Slot { - public ContainerItemRoutingNode container; - public TileFilteredRoutingNode inventory; - - public SlotItemFilter(ContainerItemRoutingNode container, IInventory inventory, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - this.container = container; - this.inventory = (TileFilteredRoutingNode) inventory; - } - - @Override - public boolean isItemValid(ItemStack itemStack) { - return itemStack.getItem() instanceof IRoutingFilterProvider; //TODO: Create a new Item that holds the filter. - } - - @Override - public void onSlotChanged() { - super.onSlotChanged(); - container.resetItemInventory(getStack()); - for (int i = 1; i <= 9; i++) { - Slot slot = container.getSlot(i); - slot.onSlotChanged(); - } - } - - @Override - public ItemStack getStack() { - return this.inventory.getStackInSlot(getActiveSlot()); - } - - @Override - public void putStack(@Nullable ItemStack stack) { - this.inventory.setInventorySlotContents(getActiveSlot(), stack); - this.onSlotChanged(); - } - - @Override - public ItemStack decrStackSize(int amount) { - return this.inventory.decrStackSize(getActiveSlot(), amount); - } - - public int getActiveSlot() { - return inventory.currentActiveSlot; - } - } - - private class SlotGhostItem extends Slot { - private ItemInventory itemInv; - - public SlotGhostItem(ItemInventory inventory, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - itemInv = inventory; - } - - @Override - public boolean isItemValid(ItemStack stack) { - return false; - } - - @Override - public boolean canTakeStack(EntityPlayer playerIn) { - return false; - } - -// @Override -// public boolean isHere(IInventory inv, int slotIn) -// { -// return itemInv.canInventoryBeManipulated() && super.isHere(inv, slotIn); -// } - - public boolean canBeAccessed() { - return itemInv.canInventoryBeManipulated(); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerMasterRoutingNode.java deleted file mode 100644 index a9959c27..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerMasterRoutingNode.java +++ /dev/null @@ -1,20 +0,0 @@ -package WayofTime.bloodmagic.tile.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; - -public class ContainerMasterRoutingNode extends Container { - private final IInventory tileMasterRoutingNode; - - public ContainerMasterRoutingNode(InventoryPlayer inventoryPlayer, IInventory tileMasterRoutingNode) { - this.tileMasterRoutingNode = tileMasterRoutingNode; - - } - - @Override - public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileMasterRoutingNode.isUsableByPlayer(playerIn); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerSoulForge.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerSoulForge.java deleted file mode 100644 index a86e82d4..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerSoulForge.java +++ /dev/null @@ -1,105 +0,0 @@ -package WayofTime.bloodmagic.tile.container; - -import WayofTime.bloodmagic.soul.IDemonWill; -import WayofTime.bloodmagic.soul.IDemonWillGem; -import WayofTime.bloodmagic.tile.TileSoulForge; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerSoulForge extends Container { - private final IInventory tileForge; - - public ContainerSoulForge(InventoryPlayer inventoryPlayer, IInventory tileForge) { - this.tileForge = tileForge; - this.addSlotToContainer(new Slot(tileForge, 0, 8, 15)); - this.addSlotToContainer(new Slot(tileForge, 1, 80, 15)); - this.addSlotToContainer(new Slot(tileForge, 2, 8, 87)); - this.addSlotToContainer(new Slot(tileForge, 3, 80, 87)); - this.addSlotToContainer(new SlotSoul(tileForge, TileSoulForge.soulSlot, 152, 51)); - this.addSlotToContainer(new SlotOutput(tileForge, TileSoulForge.outputSlot, 44, 51)); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 9; j++) { - addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 123 + i * 18)); - } - } - - for (int i = 0; i < 9; i++) { - addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 181)); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) { - ItemStack itemstack = ItemStack.EMPTY; - Slot slot = this.inventorySlots.get(index); - - if (slot != null && slot.getHasStack()) { - ItemStack itemstack1 = slot.getStack(); - itemstack = itemstack1.copy(); - - if (index == 5) { - if (!this.mergeItemStack(itemstack1, 6, 6 + 36, true)) { - return ItemStack.EMPTY; - } - - slot.onSlotChange(itemstack1, itemstack); - } else if (index > 5) { - if (itemstack1.getItem() instanceof IDemonWill || itemstack1.getItem() instanceof IDemonWillGem) { - if (!this.mergeItemStack(itemstack1, 4, 5, false)) { - return ItemStack.EMPTY; - } - } else if (!this.mergeItemStack(itemstack1, 0, 4, false)) { - return ItemStack.EMPTY; - } - } else if (!this.mergeItemStack(itemstack1, 6, 42, false)) { - return ItemStack.EMPTY; - } - - if (itemstack1.getCount() == 0) { - slot.putStack(ItemStack.EMPTY); - } else { - slot.onSlotChanged(); - } - - if (itemstack1.getCount() == itemstack.getCount()) { - return ItemStack.EMPTY; - } - - slot.onTake(playerIn, itemstack1); - } - - return itemstack; - } - - @Override - public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileForge.isUsableByPlayer(playerIn); - } - - private class SlotSoul extends Slot { - public SlotSoul(IInventory inventory, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - } - - @Override - public boolean isItemValid(ItemStack itemStack) { - return itemStack.getItem() instanceof IDemonWillGem || itemStack.getItem() instanceof IDemonWill; - } - } - - private class SlotOutput extends Slot { - public SlotOutput(IInventory inventory, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - } - - @Override - public boolean isItemValid(ItemStack stack) { - return false; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerTeleposer.java b/src/main/java/WayofTime/bloodmagic/tile/container/ContainerTeleposer.java deleted file mode 100644 index 82588b45..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/container/ContainerTeleposer.java +++ /dev/null @@ -1,80 +0,0 @@ -package WayofTime.bloodmagic.tile.container; - -import WayofTime.bloodmagic.item.ItemTelepositionFocus; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerTeleposer extends Container { - private final IInventory tileTeleposer; - - public ContainerTeleposer(InventoryPlayer inventoryPlayer, IInventory tileTeleposer) { - this.tileTeleposer = tileTeleposer; - this.addSlotToContainer(new SlotTeleposer(tileTeleposer, 0, 80, 33)); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 9; j++) { - addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 57 + i * 18)); - } - } - - for (int i = 0; i < 9; i++) { - addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 115)); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slot) { - ItemStack stack = ItemStack.EMPTY; - Slot slotObject = inventorySlots.get(slot); - int slots = inventorySlots.size(); - - if (slotObject != null && slotObject.getHasStack()) { - ItemStack stackInSlot = slotObject.getStack(); - stack = stackInSlot.copy(); - - if (stack.getItem() instanceof ItemTelepositionFocus) { - if (slot <= slots) { - if (!this.mergeItemStack(stackInSlot, 0, slots, false)) { - return ItemStack.EMPTY; - } - } else if (!this.mergeItemStack(stackInSlot, slots, 36 + slots, false)) { - return ItemStack.EMPTY; - } - } - - if (stackInSlot.getCount() == 0) { - slotObject.putStack(ItemStack.EMPTY); - } else { - slotObject.onSlotChanged(); - } - - if (stackInSlot.getCount() == stack.getCount()) { - return ItemStack.EMPTY; - } - - slotObject.onTake(player, stackInSlot); - } - - return stack; - } - - @Override - public boolean canInteractWith(EntityPlayer playerIn) { - return this.tileTeleposer.isUsableByPlayer(playerIn); - } - - private class SlotTeleposer extends Slot { - public SlotTeleposer(IInventory inventory, int slotIndex, int x, int y) { - super(inventory, slotIndex, x, y); - } - - @Override - public boolean isItemValid(ItemStack itemStack) { - return itemStack.getItem() instanceof ItemTelepositionFocus; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java deleted file mode 100644 index 7fb17330..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileFilteredRoutingNode.java +++ /dev/null @@ -1,119 +0,0 @@ -package WayofTime.bloodmagic.tile.routing; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.item.inventory.ItemInventory; -import WayofTime.bloodmagic.util.GhostItemHelper; -import net.minecraft.block.state.IBlockState; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; - -public class TileFilteredRoutingNode extends TileRoutingNode implements ISidedInventory { - public int currentActiveSlot = 0; - public int[] priorities = new int[6]; - - public ItemInventory itemInventory = new ItemInventory(ItemStack.EMPTY, 9, ""); - - public TileFilteredRoutingNode(int size, String name) { - super(size, name); - } - - public ItemStack getFilterStack(EnumFacing side) { - int index = side.getIndex(); - - return getStackInSlot(index); - } - - public void setGhostItemAmount(int ghostItemSlot, int amount) { - ItemStack stack = itemInventory.getStackInSlot(ghostItemSlot); - if (!stack.isEmpty()) { - GhostItemHelper.setItemGhostAmount(stack, amount); - } - - this.markDirty(); - } - - @Override - public boolean isInventoryConnectedToSide(EnumFacing side) { - return true; - } - - @Override - public void deserialize(NBTTagCompound tag) { - super.deserialize(tag); - currentActiveSlot = tag.getInteger("currentSlot"); - priorities = tag.getIntArray(Constants.NBT.ROUTING_PRIORITY); - if (priorities.length != 6) { - priorities = new int[6]; - } - - if (!tag.getBoolean("updated")) { - NBTTagList tags = tag.getTagList("Items", 10); - inventory = NonNullList.withSize(getSizeInventory(), ItemStack.EMPTY); - for (int i = 0; i < tags.tagCount(); i++) { - if (!isSyncedSlot(i)) { - NBTTagCompound data = tags.getCompoundTagAt(i); - byte j = data.getByte("Slot"); - - if (j == 0) { - inventory.set(i, new ItemStack(data)); - } else if (j >= 1 && j < inventory.size() + 1) { - inventory.set(j - 1, new ItemStack(data)); - } - } - } - } - - itemInventory = new ItemInventory(getStackInSlot(currentActiveSlot), 9, ""); - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - super.serialize(tag); - tag.setInteger("currentSlot", currentActiveSlot); - tag.setIntArray(Constants.NBT.ROUTING_PRIORITY, priorities); - tag.setBoolean("updated", true); - return tag; - } - - public void swapFilters(int requestedSlot) { - currentActiveSlot = requestedSlot; - itemInventory.initializeInventory(getStackInSlot(currentActiveSlot)); - this.markDirty(); - } - - @Override - public int[] getSlotsForFace(EnumFacing side) { - return new int[0]; - } - - @Override - public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) { - return false; - } - - @Override - public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) { - return false; - } - - @Override - public int getPriority(EnumFacing side) { - return priorities[side.getIndex()]; - } - - public void incrementCurrentPriotiryToMaximum(int max) { - priorities[currentActiveSlot] = Math.min(priorities[currentActiveSlot] + 1, max); - IBlockState state = getWorld().getBlockState(pos); - getWorld().notifyBlockUpdate(pos, state, state, 3); - } - - public void decrementCurrentPriority() { - priorities[currentActiveSlot] = Math.max(priorities[currentActiveSlot] - 1, 0); - IBlockState state = getWorld().getBlockState(pos); - getWorld().notifyBlockUpdate(pos, state, state, 3); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java deleted file mode 100644 index d758f2b5..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileInputRoutingNode.java +++ /dev/null @@ -1,73 +0,0 @@ -package WayofTime.bloodmagic.tile.routing; - -import WayofTime.bloodmagic.item.routing.IFluidFilterProvider; -import WayofTime.bloodmagic.item.routing.IItemFilterProvider; -import WayofTime.bloodmagic.routing.*; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.items.IItemHandler; - -public class TileInputRoutingNode extends TileFilteredRoutingNode implements IInputItemRoutingNode, IInputFluidRoutingNode { - public TileInputRoutingNode() { - super(6, "inputNode"); - } - - @Override - public boolean isInput(EnumFacing side) { - return true; - } - - @Override - public IItemFilter getInputFilterForSide(EnumFacing side) { - TileEntity tile = getWorld().getTileEntity(pos.offset(side)); - if (tile != null) { - IItemHandler handler = Utils.getInventory(tile, side.getOpposite()); - if (handler != null) { - ItemStack filterStack = this.getFilterStack(side); - - if (filterStack.isEmpty()) { - IItemFilter filter = new DefaultItemFilter(); - filter.initializeFilter(null, tile, handler, false); - return filter; - } else if (!(filterStack.getItem() instanceof IItemFilterProvider)) { - return null; - } - - IItemFilterProvider filter = (IItemFilterProvider) filterStack.getItem(); - return filter.getInputItemFilter(filterStack, tile, handler); - } - } - - return null; - } - - @Override - public boolean isFluidInput(EnumFacing side) { - return true; - } - - @Override - public IFluidFilter getInputFluidFilterForSide(EnumFacing side) { - TileEntity tile = getWorld().getTileEntity(pos.offset(side)); - if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { - IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - ItemStack filterStack = this.getFilterStack(side); - if (filterStack == null || !(filterStack.getItem() instanceof IFluidFilterProvider)) { - return null; - } - - return ((IFluidFilterProvider) filterStack.getItem()).getInputFluidFilter(filterStack, tile, handler); - } - - return null; - } - - @Override - public boolean isTankConnectedToSide(EnumFacing side) { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileItemRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileItemRoutingNode.java deleted file mode 100644 index 6c598390..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileItemRoutingNode.java +++ /dev/null @@ -1,7 +0,0 @@ -package WayofTime.bloodmagic.tile.routing; - -public class TileItemRoutingNode extends TileRoutingNode { - public TileItemRoutingNode() { - super(0, "itemNode"); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java deleted file mode 100644 index 51318fdc..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java +++ /dev/null @@ -1,490 +0,0 @@ -package WayofTime.bloodmagic.tile.routing; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.soul.EnumDemonWillType; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.routing.*; -import WayofTime.bloodmagic.tile.TileInventory; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ITickable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.*; -import java.util.Map.Entry; - -public class TileMasterRoutingNode extends TileInventory implements IMasterRoutingNode, ITickable -{ - public static final int tickRate = 20; - private int currentInput; - // A list of connections - private TreeMap> connectionMap = new TreeMap<>(); - private List generalNodeList = new LinkedList<>(); - private List outputNodeList = new LinkedList<>(); - private List inputNodeList = new LinkedList<>(); - - public TileMasterRoutingNode() - { - super(0, "masterRoutingNode"); - } - - @Override - public void update() - { - if (!getWorld().isRemote) - { -// currentInput = getWorld().isBlockIndirectlyGettingPowered(pos); - currentInput = getWorld().getStrongPower(pos); - -// System.out.println(currentInput); - } - - if (getWorld().isRemote || getWorld().getTotalWorldTime() % tickRate != 0) //Temporary tick rate solver - { - return; - } - - Map> outputMap = new TreeMap<>(); - Map> outputFluidMap = new TreeMap<>(); - - for (BlockPos outputPos : outputNodeList) - { - TileEntity outputTile = getWorld().getTileEntity(outputPos); - if (this.isConnected(new LinkedList<>(), outputPos)) - { - if (outputTile instanceof IOutputItemRoutingNode) - { - IOutputItemRoutingNode outputNode = (IOutputItemRoutingNode) outputTile; - - for (EnumFacing facing : EnumFacing.VALUES) - { - if (!outputNode.isInventoryConnectedToSide(facing) || !outputNode.isOutput(facing)) - { - continue; - } - - IItemFilter filter = outputNode.getOutputFilterForSide(facing); - if (filter != null) - { - int priority = outputNode.getPriority(facing); - if (outputMap.containsKey(priority)) - { - outputMap.get(priority).add(filter); - } else - { - List filterList = new LinkedList<>(); - filterList.add(filter); - outputMap.put(priority, filterList); - } - } - } - } - - if (outputTile instanceof IOutputFluidRoutingNode) - { - IOutputFluidRoutingNode outputNode = (IOutputFluidRoutingNode) outputTile; - - for (EnumFacing facing : EnumFacing.VALUES) - { - if (!outputNode.isTankConnectedToSide(facing) || !outputNode.isFluidOutput(facing)) - { - continue; - } - - IFluidFilter filter = outputNode.getOutputFluidFilterForSide(facing); - if (filter != null) - { - int priority = outputNode.getPriority(facing); - if (outputFluidMap.containsKey(priority)) - { - outputFluidMap.get(priority).add(filter); - } else - { - List filterList = new LinkedList<>(); - filterList.add(filter); - outputFluidMap.put(priority, filterList); - } - } - } - } - } - } - - Map> inputMap = new TreeMap<>(); - Map> inputFluidMap = new TreeMap<>(); - - for (BlockPos inputPos : inputNodeList) - { - TileEntity inputTile = getWorld().getTileEntity(inputPos); - if (this.isConnected(new LinkedList<>(), inputPos)) - { - if (inputTile instanceof IInputItemRoutingNode) - { - IInputItemRoutingNode inputNode = (IInputItemRoutingNode) inputTile; - - for (EnumFacing facing : EnumFacing.VALUES) - { - if (!inputNode.isInventoryConnectedToSide(facing) || !inputNode.isInput(facing)) - { - continue; - } - - IItemFilter filter = inputNode.getInputFilterForSide(facing); - if (filter != null) - { - int priority = inputNode.getPriority(facing); - if (inputMap.containsKey(priority)) - { - inputMap.get(priority).add(filter); - } else - { - List filterList = new LinkedList<>(); - filterList.add(filter); - inputMap.put(priority, filterList); - } - } - } - } - - if (inputTile instanceof IInputFluidRoutingNode) - { - IInputFluidRoutingNode inputNode = (IInputFluidRoutingNode) inputTile; - - for (EnumFacing facing : EnumFacing.VALUES) - { - if (!inputNode.isTankConnectedToSide(facing) || !inputNode.isFluidInput(facing)) - { - continue; - } - - IFluidFilter filter = inputNode.getInputFluidFilterForSide(facing); - if (filter != null) - { - int priority = inputNode.getPriority(facing); - if (inputFluidMap.containsKey(priority)) - { - inputFluidMap.get(priority).add(filter); - } else - { - List filterList = new LinkedList<>(); - filterList.add(filter); - inputFluidMap.put(priority, filterList); - } - } - } - } - } - } - - int maxTransfer = this.getMaxTransferForDemonWill(WorldDemonWillHandler.getCurrentWill(getWorld(), pos, EnumDemonWillType.DEFAULT)); - int maxFluidTransfer = 1000; - - for (Entry> outputEntry : outputMap.entrySet()) - { - List outputList = outputEntry.getValue(); - for (IItemFilter outputFilter : outputList) - { - for (Entry> inputEntry : inputMap.entrySet()) - { - List inputList = inputEntry.getValue(); - for (IItemFilter inputFilter : inputList) - { - maxTransfer -= inputFilter.transferThroughInputFilter(outputFilter, maxTransfer); - if (maxTransfer <= 0) - { - return; - } - } - } - } - } - - for (Entry> outputEntry : outputFluidMap.entrySet()) - { - List outputList = outputEntry.getValue(); - for (IFluidFilter outputFilter : outputList) - { - for (Entry> inputEntry : inputFluidMap.entrySet()) - { - List inputList = inputEntry.getValue(); - for (IFluidFilter inputFilter : inputList) - { - maxFluidTransfer -= inputFilter.transferThroughInputFilter(outputFilter, maxFluidTransfer); - if (maxFluidTransfer <= 0) - { - return; - } - } - } - } - } - } - - public int getMaxTransferForDemonWill(double will) - { - return 64; - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) - { - super.serialize(tag); - NBTTagList tags = new NBTTagList(); - for (BlockPos pos : generalNodeList) - { - NBTTagCompound posTag = new NBTTagCompound(); - posTag.setInteger(Constants.NBT.X_COORD, pos.getX()); - posTag.setInteger(Constants.NBT.Y_COORD, pos.getY()); - posTag.setInteger(Constants.NBT.Z_COORD, pos.getZ()); - tags.appendTag(posTag); - } - tag.setTag(Constants.NBT.ROUTING_MASTER_GENERAL, tags); - - tags = new NBTTagList(); - for (BlockPos pos : inputNodeList) - { - NBTTagCompound posTag = new NBTTagCompound(); - posTag.setInteger(Constants.NBT.X_COORD, pos.getX()); - posTag.setInteger(Constants.NBT.Y_COORD, pos.getY()); - posTag.setInteger(Constants.NBT.Z_COORD, pos.getZ()); - tags.appendTag(posTag); - } - tag.setTag(Constants.NBT.ROUTING_MASTER_INPUT, tags); - - tags = new NBTTagList(); - for (BlockPos pos : outputNodeList) - { - NBTTagCompound posTag = new NBTTagCompound(); - posTag.setInteger(Constants.NBT.X_COORD, pos.getX()); - posTag.setInteger(Constants.NBT.Y_COORD, pos.getY()); - posTag.setInteger(Constants.NBT.Z_COORD, pos.getZ()); - tags.appendTag(posTag); - } - tag.setTag(Constants.NBT.ROUTING_MASTER_OUTPUT, tags); - return tag; - } - - @Override - public void deserialize(NBTTagCompound tag) - { - super.deserialize(tag); - - NBTTagList tags = tag.getTagList(Constants.NBT.ROUTING_MASTER_GENERAL, 10); - for (int i = 0; i < tags.tagCount(); i++) - { - NBTTagCompound blockTag = tags.getCompoundTagAt(i); - BlockPos newPos = new BlockPos(blockTag.getInteger(Constants.NBT.X_COORD), blockTag.getInteger(Constants.NBT.Y_COORD), blockTag.getInteger(Constants.NBT.Z_COORD)); - generalNodeList.add(newPos); - } - - tags = tag.getTagList(Constants.NBT.ROUTING_MASTER_INPUT, 10); - for (int i = 0; i < tags.tagCount(); i++) - { - NBTTagCompound blockTag = tags.getCompoundTagAt(i); - BlockPos newPos = new BlockPos(blockTag.getInteger(Constants.NBT.X_COORD), blockTag.getInteger(Constants.NBT.Y_COORD), blockTag.getInteger(Constants.NBT.Z_COORD)); - inputNodeList.add(newPos); - } - - tags = tag.getTagList(Constants.NBT.ROUTING_MASTER_OUTPUT, 10); - for (int i = 0; i < tags.tagCount(); i++) - { - NBTTagCompound blockTag = tags.getCompoundTagAt(i); - BlockPos newPos = new BlockPos(blockTag.getInteger(Constants.NBT.X_COORD), blockTag.getInteger(Constants.NBT.Y_COORD), blockTag.getInteger(Constants.NBT.Z_COORD)); - outputNodeList.add(newPos); - } - } - - @Override - public boolean isConnected(List path, BlockPos nodePos) - { - //TODO: Figure out how to make it so the path is obtained -// if (!connectionMap.containsKey(nodePos)) -// { -// return false; -// } - TileEntity tile = getWorld().getTileEntity(nodePos); - if (!(tile instanceof IRoutingNode)) - { -// connectionMap.remove(nodePos); - return false; - } - - IRoutingNode node = (IRoutingNode) tile; - List connectionList = node.getConnected(); -// List testPath = path.subList(0, path.size()); - path.add(nodePos); - for (BlockPos testPos : connectionList) - { - if (path.contains(testPos)) - { - continue; - } - - if (testPos.equals(this.getPos()) && node.isConnectionEnabled(testPos)) - { -// path.clear(); -// path.addAll(testPath); - return true; - } else if (NodeHelper.isNodeConnectionEnabled(getWorld(), node, testPos)) - { - if (isConnected(path, testPos)) - { -// path.clear(); -// path.addAll(testPath); - return true; - } - } - } - - return false; - } - - @Override - public boolean isConnectionEnabled(BlockPos testPos) - { - return currentInput <= 0; - } - - @Override - public void addNodeToList(IRoutingNode node) - { - BlockPos newPos = node.getBlockPos(); - if (!generalNodeList.contains(newPos)) - { - generalNodeList.add(newPos); - } - if (node instanceof IInputItemRoutingNode && !inputNodeList.contains(newPos)) - { - inputNodeList.add(newPos); - } - if (node instanceof IOutputItemRoutingNode && !outputNodeList.contains(newPos)) - { - outputNodeList.add(newPos); - } - } - - @Override - public void addConnections(BlockPos pos, List connectionList) - { - for (BlockPos testPos : connectionList) - { - addConnection(pos, testPos); - } - } - - @Override - public void addConnection(BlockPos pos1, BlockPos pos2) - { - if (connectionMap.containsKey(pos1) && !connectionMap.get(pos1).contains(pos2)) - { - connectionMap.get(pos1).add(pos2); - } else - { - List list = new LinkedList<>(); - list.add(pos2); - connectionMap.put(pos1, list); - } - - if (connectionMap.containsKey(pos2) && !connectionMap.get(pos2).contains(pos1)) - { - connectionMap.get(pos2).add(pos1); - } else - { - List list = new LinkedList<>(); - list.add(pos1); - connectionMap.put(pos2, list); - } - } - - @Override - public void removeConnection(BlockPos pos1, BlockPos pos2) - { - if (connectionMap.containsKey(pos1)) - { - List posList = connectionMap.get(pos1); - posList.remove(pos2); - if (posList.isEmpty()) - { - connectionMap.remove(pos1); - } - } - - if (connectionMap.containsKey(pos2)) - { - List posList = connectionMap.get(pos2); - posList.remove(pos1); - if (posList.isEmpty()) - { - connectionMap.remove(pos2); - } - } - } - - @Override - public void connectMasterToRemainingNode(World world, List alreadyChecked, IMasterRoutingNode master) - { - return; - } - - @Override - public BlockPos getBlockPos() - { - return this.getPos(); - } - - @Override - public List getConnected() - { - return new LinkedList<>(); - } - - @Override - public BlockPos getMasterPos() - { - return this.getPos(); - } - - @Override - public boolean isMaster(IMasterRoutingNode master) - { - return false; - } - - @Override - public void addConnection(BlockPos pos1) - { - // Empty - } - - @Override - public void removeConnection(BlockPos pos1) - { - generalNodeList.remove(pos1); - inputNodeList.remove(pos1); - outputNodeList.remove(pos1); - } - - @Override - public void removeAllConnections() - { - List list = generalNodeList.subList(0, generalNodeList.size()); - Iterator itr = list.iterator(); - while (itr.hasNext()) - { - BlockPos testPos = itr.next(); - TileEntity tile = getWorld().getTileEntity(testPos); - if (tile instanceof IRoutingNode) - { - ((IRoutingNode) tile).removeConnection(pos); - getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(testPos), getWorld().getBlockState(testPos), 3); - } - - itr.remove(); - inputNodeList.remove(testPos); - outputNodeList.remove(testPos); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java deleted file mode 100644 index 9c57f30c..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileOutputRoutingNode.java +++ /dev/null @@ -1,73 +0,0 @@ -package WayofTime.bloodmagic.tile.routing; - -import WayofTime.bloodmagic.item.routing.IFluidFilterProvider; -import WayofTime.bloodmagic.item.routing.IItemFilterProvider; -import WayofTime.bloodmagic.routing.*; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.items.IItemHandler; - -public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IOutputItemRoutingNode, IOutputFluidRoutingNode { - public TileOutputRoutingNode() { - super(6, "outputNode"); - } - - @Override - public boolean isOutput(EnumFacing side) { - return true; - } - - @Override - public IItemFilter getOutputFilterForSide(EnumFacing side) { - TileEntity tile = getWorld().getTileEntity(pos.offset(side)); - if (tile != null) { - IItemHandler handler = Utils.getInventory(tile, side.getOpposite()); - if (handler != null) { - ItemStack filterStack = this.getFilterStack(side); - - if (filterStack.isEmpty()) { - IItemFilter filter = new DefaultItemFilter(); - filter.initializeFilter(null, tile, handler, true); - return filter; - } else if (!(filterStack.getItem() instanceof IItemFilterProvider)) { - return null; - } - - IItemFilterProvider filter = (IItemFilterProvider) filterStack.getItem(); - return filter.getOutputItemFilter(filterStack, tile, handler); - } - } - - return null; - } - - @Override - public boolean isFluidOutput(EnumFacing side) { - return true; - } - - @Override - public IFluidFilter getOutputFluidFilterForSide(EnumFacing side) { - TileEntity tile = getWorld().getTileEntity(pos.offset(side)); - if (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { - IFluidHandler handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - ItemStack filterStack = this.getFilterStack(side); - if (filterStack == null || !(filterStack.getItem() instanceof IFluidFilterProvider)) { - return null; - } - - return ((IFluidFilterProvider) filterStack.getItem()).getOutputFluidFilter(filterStack, tile, handler); - } - - return null; - } - - @Override - public boolean isTankConnectedToSide(EnumFacing side) { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileRoutingNode.java deleted file mode 100644 index 66c6b4df..00000000 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileRoutingNode.java +++ /dev/null @@ -1,176 +0,0 @@ -package WayofTime.bloodmagic.tile.routing; - -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.routing.IItemRoutingNode; -import WayofTime.bloodmagic.routing.IMasterRoutingNode; -import WayofTime.bloodmagic.routing.IRoutingNode; -import WayofTime.bloodmagic.tile.TileInventory; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ITickable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.LinkedList; -import java.util.List; - -public class TileRoutingNode extends TileInventory implements IRoutingNode, IItemRoutingNode, ITickable { - private int currentInput; - private BlockPos masterPos = BlockPos.ORIGIN; - private List connectionList = new LinkedList<>(); - - public TileRoutingNode(int size, String name) { - super(size, name); - } - - @Override - public void update() { - if (!getWorld().isRemote) { - currentInput = getWorld().isBlockIndirectlyGettingPowered(pos); -// currentInput = getWorld().getStrongPower(pos); - } - } - - @Override - public NBTTagCompound serialize(NBTTagCompound tag) { - super.serialize(tag); - NBTTagCompound masterTag = new NBTTagCompound(); - masterTag.setInteger(Constants.NBT.X_COORD, masterPos.getX()); - masterTag.setInteger(Constants.NBT.Y_COORD, masterPos.getY()); - masterTag.setInteger(Constants.NBT.Z_COORD, masterPos.getZ()); - tag.setTag(Constants.NBT.ROUTING_MASTER, masterTag); - - NBTTagList tags = new NBTTagList(); - for (BlockPos pos : connectionList) { - NBTTagCompound posTag = new NBTTagCompound(); - posTag.setInteger(Constants.NBT.X_COORD, pos.getX()); - posTag.setInteger(Constants.NBT.Y_COORD, pos.getY()); - posTag.setInteger(Constants.NBT.Z_COORD, pos.getZ()); - tags.appendTag(posTag); - } - tag.setTag(Constants.NBT.ROUTING_CONNECTION, tags); - return tag; - } - - @Override - public void deserialize(NBTTagCompound tag) { - super.deserialize(tag); - connectionList.clear(); - NBTTagCompound masterTag = tag.getCompoundTag(Constants.NBT.ROUTING_MASTER); - masterPos = new BlockPos(masterTag.getInteger(Constants.NBT.X_COORD), masterTag.getInteger(Constants.NBT.Y_COORD), masterTag.getInteger(Constants.NBT.Z_COORD)); - - NBTTagList tags = tag.getTagList(Constants.NBT.ROUTING_CONNECTION, 10); - for (int i = 0; i < tags.tagCount(); i++) { - NBTTagCompound blockTag = tags.getCompoundTagAt(i); - BlockPos newPos = new BlockPos(blockTag.getInteger(Constants.NBT.X_COORD), blockTag.getInteger(Constants.NBT.Y_COORD), blockTag.getInteger(Constants.NBT.Z_COORD)); - connectionList.add(newPos); - } - } - - @Override - public void removeAllConnections() { - TileEntity testTile = getWorld().getTileEntity(getMasterPos()); - if (testTile instanceof IMasterRoutingNode) { - ((IMasterRoutingNode) testTile).removeConnection(pos); // Remove this node from the master - } - for (BlockPos testPos : connectionList) { - TileEntity tile = getWorld().getTileEntity(testPos); - if (tile instanceof IRoutingNode) { - ((IRoutingNode) tile).removeConnection(pos); - getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(testPos), getWorld().getBlockState(testPos), 3); - } - } - - connectionList.clear(); - } - - @Override - public void connectMasterToRemainingNode(World world, List alreadyChecked, IMasterRoutingNode master) { - this.masterPos = master.getBlockPos(); - List connectedList = this.getConnected(); - for (BlockPos testPos : connectedList) { - if (alreadyChecked.contains(testPos)) { - continue; - } - alreadyChecked.add(testPos); - TileEntity tile = world.getTileEntity(testPos); - if (!(tile instanceof IRoutingNode)) { - continue; - } - IRoutingNode node = (IRoutingNode) tile; - if (node.getMasterPos().equals(BlockPos.ORIGIN)) //If getMasterPos() returns the origin, the node is not connected to any master. - { - master.addNodeToList(node); - node.connectMasterToRemainingNode(world, alreadyChecked, master); - } - } - - master.addConnections(this.getBlockPos(), connectedList); - } - - @Override - public BlockPos getBlockPos() { - return this.getPos(); - } - - @Override - public List getConnected() { - return connectionList; - } - - @Override - public BlockPos getMasterPos() { - return masterPos; - } - - @Override - public boolean isMaster(IMasterRoutingNode master) { - BlockPos checkPos = master.getBlockPos(); - return checkPos.equals(getMasterPos()); - } - - @Override - public boolean isConnectionEnabled(BlockPos testPos) { - return currentInput <= 0; - } - - @Override - public void addConnection(BlockPos pos1) { - if (!connectionList.contains(pos1)) { - getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(getPos()), getWorld().getBlockState(getPos()), 3); - connectionList.add(pos1); - } - } - - @Override - public void removeConnection(BlockPos pos1) { - if (connectionList.contains(pos1)) { - connectionList.remove(pos1); - getWorld().notifyBlockUpdate(getPos(), getWorld().getBlockState(getPos()), getWorld().getBlockState(getPos()), 3); - } - - if (pos1.equals(masterPos)) { - this.masterPos = BlockPos.ORIGIN; - } - } - - @Override - public boolean isInventoryConnectedToSide(EnumFacing side) { - return false; - } - - @Override - public int getPriority(EnumFacing side) { - return 0; - } - - @Override - @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() { - return 10000; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/BlockStack.java b/src/main/java/WayofTime/bloodmagic/util/BlockStack.java deleted file mode 100644 index 85428c4d..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/BlockStack.java +++ /dev/null @@ -1,68 +0,0 @@ -package WayofTime.bloodmagic.util; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -@Deprecated -public class BlockStack { - private final Block block; - private final int meta; - private final IBlockState state; - - public BlockStack(Block block, int meta) { - this.block = block; - this.meta = meta; - this.state = block.getStateFromMeta(meta); - } - - public BlockStack(Block block) { - this(block, 0); - } - - public ItemStack getItemStack() { - return new ItemStack(block, 1, meta); - } - - public Block getBlock() { - return block; - } - - public int getMeta() { - return meta; - } - - public IBlockState getState() { - return state; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof BlockStack)) return false; - - BlockStack that = (BlockStack) o; - - if (meta != that.meta) return false; - return block != null ? block.equals(that.block) : that.block == null; - } - - @Override - public int hashCode() { - int result = block != null ? block.hashCode() : 0; - result = 31 * result + meta; - return result; - } - - @Override - public String toString() { - return getBlock().getRegistryName() + ":" + getMeta(); - } - - public static BlockStack getStackFromPos(World world, BlockPos pos) { - IBlockState state = world.getBlockState(pos); - return new BlockStack(state.getBlock(), state.getBlock().getMetaFromState(state)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/BooleanResult.java b/src/main/java/WayofTime/bloodmagic/util/BooleanResult.java deleted file mode 100644 index c4cb571f..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/BooleanResult.java +++ /dev/null @@ -1,24 +0,0 @@ -package WayofTime.bloodmagic.util; - -public class BooleanResult { - - private final boolean result; - private final T value; - - private BooleanResult(boolean result, T value) { - this.result = result; - this.value = value; - } - - public boolean isSuccess() { - return result; - } - - public T getValue() { - return value; - } - - public static BooleanResult newResult(boolean success, T value) { - return new BooleanResult<>(success, value); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java b/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java deleted file mode 100644 index b82710f9..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/ChatUtil.java +++ /dev/null @@ -1,227 +0,0 @@ -package WayofTime.bloodmagic.util; - -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.util.helper.TextHelper; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiNewChat; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class ChatUtil { - private static final int DELETION_ID = 2525277; - private static int lastAdded; - - private static void sendNoSpamMessages(ITextComponent[] messages) { - GuiNewChat chat = Minecraft.getMinecraft().ingameGUI.getChatGUI(); - for (int i = DELETION_ID + messages.length - 1; i <= lastAdded; i++) { - chat.deleteChatLine(i); - } - for (int i = 0; i < messages.length; i++) { - chat.printChatMessageWithOptionalDeletion(messages[i], DELETION_ID + i); - } - lastAdded = DELETION_ID + messages.length - 1; - } - - /** - * Returns a standard {@link TextComponentString} for the given - * {@link String} . - * - * @param s The string to wrap. - * @return An {@link ITextComponent} containing the string. - */ - public static ITextComponent wrap(String s) { - return new TextComponentString(s); - } - - /** - * @see #wrap(String) - */ - public static ITextComponent[] wrap(String... s) { - ITextComponent[] ret = new ITextComponent[s.length]; - for (int i = 0; i < ret.length; i++) { - ret[i] = wrap(s[i]); - } - return ret; - } - - /** - * Returns a translatable chat component for the given string and format - * args. - * - * @param s The string to format - * @param args The args to apply to the format - */ - public static ITextComponent wrapFormatted(String s, Object... args) { - return new TextComponentTranslation(s, args); - } - - /** - * Simply sends the passed lines to the player in a chat message. - * - * @param player The player to send the chat to - * @param lines The lines to send - */ - public static void sendChat(EntityPlayer player, String... lines) { - sendChat(player, wrap(lines)); - } - - /** - * Localizes the lines before sending them. - * - * @see #sendChat(EntityPlayer, String...) - */ - public static void sendChatUnloc(EntityPlayer player, String... unlocLines) { - sendChat(player, TextHelper.localizeAll(unlocLines)); - } - - /** - * Sends all passed chat components to the player. - * - * @param player The player to send the chat lines to. - * @param lines The {@link ITextComponent chat components} to send.yes - */ - public static void sendChat(EntityPlayer player, ITextComponent... lines) { - for (ITextComponent c : lines) { - player.sendMessage(c); - } - } - - /** - * Localizes the strings before sending them. - * - * @see #sendNoSpamClient(String...) - */ - public static void sendNoSpamClientUnloc(String... unlocLines) { - sendNoSpamClient(TextHelper.localizeAll(unlocLines)); - } - - /** - * Same as {@link #sendNoSpamClient(ITextComponent...)}, but wraps the - * Strings automatically. - * - * @param lines The chat lines to send - * @see #wrap(String) - */ - public static void sendNoSpamClient(String... lines) { - sendNoSpamClient(wrap(lines)); - } - - /** - * Skips the packet sending, unsafe to call on servers. - * - * @see #sendNoSpam(EntityPlayerMP, ITextComponent...) - */ - public static void sendNoSpamClient(ITextComponent... lines) { - sendNoSpamMessages(lines); - } - - /** - * Localizes the strings before sending them. - * - * @see #sendNoSpam(EntityPlayer, String...) - */ - public static void sendNoSpamUnloc(EntityPlayer player, String... unlocLines) { - sendNoSpam(player, TextHelper.localizeAll(unlocLines)); - } - - /** - * @see #wrap(String) - * @see #sendNoSpam(EntityPlayer, ITextComponent...) - */ - public static void sendNoSpam(EntityPlayer player, String... lines) { - sendNoSpam(player, wrap(lines)); - } - - /** - * First checks if the player is instanceof {@link EntityPlayerMP} before - * casting. - * - * @see #sendNoSpam(EntityPlayerMP, ITextComponent...) - */ - public static void sendNoSpam(EntityPlayer player, ITextComponent... lines) { - if (player instanceof EntityPlayerMP) { - sendNoSpam((EntityPlayerMP) player, lines); - } - } - - /** - * Localizes the strings before sending them. - * - * @see #sendNoSpam(EntityPlayerMP, String...) - */ - public static void sendNoSpamUnloc(EntityPlayerMP player, String... unlocLines) { - sendNoSpam(player, TextHelper.localizeAll(unlocLines)); - } - - /** - * @see #wrap(String) - * @see #sendNoSpam(EntityPlayerMP, ITextComponent...) - */ - public static void sendNoSpam(EntityPlayerMP player, String... lines) { - sendNoSpam(player, wrap(lines)); - } - - /** - * Sends a chat message to the client, deleting past messages also sent via - * this method. - *

- * Credit to RWTema for the idea - * - * @param player The player to send the chat message to - * @param lines The chat lines to send. - */ - public static void sendNoSpam(EntityPlayerMP player, ITextComponent... lines) { - if (lines.length > 0) - BloodMagicPacketHandler.INSTANCE.sendTo(new PacketNoSpamChat(lines), player); - } - - /** - * @author tterrag1098 - *

- * Ripped from EnderCore (and slightly altered) - */ - public static class PacketNoSpamChat implements IMessage { - private ITextComponent[] chatLines; - - public PacketNoSpamChat() { - chatLines = new ITextComponent[0]; - } - - private PacketNoSpamChat(ITextComponent... lines) { - // this is guaranteed to be >1 length by accessing methods - this.chatLines = lines; - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(chatLines.length); - for (ITextComponent c : chatLines) { - ByteBufUtils.writeUTF8String(buf, ITextComponent.Serializer.componentToJson(c)); - } - } - - @Override - public void fromBytes(ByteBuf buf) { - chatLines = new ITextComponent[buf.readInt()]; - for (int i = 0; i < chatLines.length; i++) { - chatLines[i] = ITextComponent.Serializer.jsonToComponent(ByteBufUtils.readUTF8String(buf)); - } - } - - public static class Handler implements IMessageHandler { - @Override - public IMessage onMessage(final PacketNoSpamChat message, MessageContext ctx) { - Minecraft.getMinecraft().addScheduledTask(() -> sendNoSpamMessages(message.chatLines)); - return null; - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/Constants.java b/src/main/java/WayofTime/bloodmagic/util/Constants.java deleted file mode 100644 index b368bf9c..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/Constants.java +++ /dev/null @@ -1,176 +0,0 @@ -package WayofTime.bloodmagic.util; - -import WayofTime.bloodmagic.BloodMagic; -import net.minecraft.item.Item; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -import java.util.Locale; - -public class Constants -{ - public static class NBT - { - public static final String OWNER_UUID = "ownerUUID"; - public static final String OWNER_NAME = "ownerNAME"; - public static final String USES = "uses"; - public static final String ACTIVATED = "activated"; - public static final String UNUSABLE = "unusable"; - public static final String SACRIFICE = "sacrifice"; - public static final String DIMENSION_ID = "dimensionId"; - public static final String X_COORD = "xCoord"; - public static final String Y_COORD = "yCoord"; - public static final String Z_COORD = "zCoord"; - public static final String PORTAL_LOCATION = "portalLocation"; - public static final String ORB_TIER = "orbTier"; - public static final String CURRENT_ESSENCE = "currentEssence"; - public static final String CURRENT_RITUAL = "currentRitual"; - public static final String CURRENT_RITUAL_TAG = "currentRitualTag"; - public static final String IS_RUNNING = "isRunning"; - public static final String IS_REDSTONED = "isStoned"; - public static final String RUNTIME = "runtime"; - public static final String DIRECTION = "direction"; - public static final String REAGENT_TANKS = "reagentTanks"; - public static final String CURRENT_INCENSE = "BM:CurrentIncense"; - public static final String MAX_INCENSE = "BM:MaxIncenseFromLastAltar"; - public static final String HAS_MAX_INCENSE = "BM:CurrentIsMaxIncense"; - public static final String CURRENT_PURITY = "BM:CurrentPurity"; - public static final String EMPTY = "Empty"; - public static final String OUTPUT_AMOUNT = "outputAmount"; - public static final String INPUT_AMOUNT = "inputAmount"; - public static final String STORED_LP = "storedLP"; - public static final String RITUAL_READER = "ritualReaderState"; - public static final String ITEMS = "Items"; - public static final String SLOT = "Slot"; - - public static final String ALTAR = "bloodAltar"; - public static final String ALTAR_TIER = "upgradeLevel"; - public static final String ALTAR_ACTIVE = "isActive"; - public static final String ALTAR_LIQUID_REQ = "liquidRequired"; - public static final String ALTAR_FILLABLE = "fillable"; - public static final String ALTAR_UPGRADED = "isUpgraded"; - public static final String ALTAR_CONSUMPTION_RATE = "consumptionRate"; - public static final String ALTAR_DRAIN_RATE = "drainRate"; - public static final String ALTAR_CONSUMPTION_MULTIPLIER = "consumptionMultiplier"; - public static final String ALTAR_EFFICIENCY_MULTIPLIER = "efficiencyMultiplier"; - public static final String ALTAR_SELF_SACRIFICE_MULTIPLIER = "selfSacrificeMultiplier"; - public static final String ALTAR_SACRIFICE_MULTIPLIER = "sacrificeMultiplier"; - public static final String ALTAR_CAPACITY_MULTIPLIER = "capacityMultiplier"; - public static final String ALTAR_ORB_CAPACITY_MULTIPLIER = "orbCapacityMultiplier"; - public static final String ALTAR_DISLOCATION_MULTIPLIER = "dislocationMultiplier"; - public static final String ALTAR_CAPACITY = "capacity"; - public static final String ALTAR_BUFFER_CAPACITY = "bufferCapacity"; - public static final String ALTAR_PROGRESS = "progress"; - public static final String ALTAR_IS_RESULT_BLOCK = "isResultBlock"; - public static final String ALTAR_LOCKDOWN_DURATION = "lockdownDuration"; - public static final String ALTAR_ACCELERATION_UPGRADES = "accelerationUpgrades"; - public static final String ALTAR_DEMON_BLOOD_DURATION = "demonBloodDuration"; - public static final String ALTAR_COOLDOWN_AFTER_CRAFTING = "cooldownAfterCrafting"; - public static final String ALTAR_TOTAL_CHARGE = "totalCharge"; - public static final String ALTAR_MAX_CHARGE = "maxCharge"; - public static final String ALTAR_CHARGE_RATE = "chargeRate"; - public static final String ALTAR_CHARGE_FREQUENCY = "chargeFrequency"; - public static final String ALTAR_CURRENT_TIER_DISPLAYED = "currentTierDisplayed"; - - public static final String ALTARMAKER_CURRENT_TIER = "currentTier"; - - public static final String PROJECTILE_TICKS_IN_AIR = "projectileTicksInAir"; - public static final String PROJECTILE_MAX_TICKS_IN_AIR = "projectileMaxTicksInAir"; - - public static final String TICKS_REMAINING = "ticksRemaining"; - public static final String CONTAINED_BLOCK_NAME = "containedBlockName"; - public static final String CONTAINED_BLOCK_META = "containedBlockMeta"; - public static final String CONTAINED_TILE_ENTITY = "containedTileEntity"; - - public static final String PREVIOUS_INPUT = "previousInput"; - - public static final String LIVING_ARMOUR = "livingArmour"; - - public static final String CHARGE_TIME = "chargeTime"; - public static final String HELD_DOWN = "heldDown"; - - public static final String UPGRADE_POISON_TIMER = "poisonTimer"; - public static final String UPGRADE_FIRE_TIMER = "fireTimer"; - - public static final String SOULS = "souls"; - public static final String SOUL_SWORD_DAMAGE = "soulSwordDamage"; - public static final String SOUL_SWORD_ACTIVE_DRAIN = "soulSwordActiveDrain"; - public static final String SOUL_SWORD_DROP = "soulSwordDrop"; - public static final String SOUL_SWORD_STATIC_DROP = "soulSwordStaticDrop"; - public static final String SOUL_SWORD_HEALTH = "soulSwordHealth"; - public static final String SOUL_SWORD_ATTACK_SPEED = "soulSwordAttackSpeed"; - public static final String SOUL_SWORD_SPEED = "soulSwordSpeed"; - public static final String SOUL_SWORD_DIG_SPEED = "soulSwordDigSpeed"; - public static final String WILL_TYPE = "demonWillType"; - - public static final String SOUL_FORGE_BURN = "burnTime"; - public static final String SOUL_FORGE_CONSUMED = "consumedSouls"; - - public static final String ROUTING_MASTER = "master"; - public static final String ROUTING_CONNECTION = "connections"; - public static final String ROUTING_PRIORITY = "prioritiesPeople"; - public static final String ROUTING_MASTER_GENERAL = "generalList"; - public static final String ROUTING_MASTER_INPUT = "inputList"; - public static final String ROUTING_MASTER_OUTPUT = "outputList"; - - public static final String GHOST_STACK_SIZE = "stackSize"; - - public static final String ITEM_INVENTORY = "itemInventory"; - - public static final String BLOCKPOS_CONNECTION = "connections"; - - public static final String CURRENT_SIGIL = "currentSigil"; - public static final String MOST_SIG = "mostSig"; - public static final String LEAST_SIG = "leastSig"; - public static final String COLOR = "color"; - - public static final String POTION_AUGMENT_LENGHT = "length:"; - public static final String POTION_AUGMENT_STRENGTH = "strength:"; - public static final String POTION_IMPURITY = "impurity"; - - public static final String TANK = "tank"; - - public static final String BREATH = "breath"; - } - - public static class Mod - { - public static final String DOMAIN = BloodMagic.MODID.toLowerCase(Locale.ENGLISH) + ":"; - } - - public static final class Gui - { - public static final int TELEPOSER_GUI = 0; - public static final int SOUL_FORGE_GUI = 1; - public static final int ROUTING_NODE_GUI = 2; - public static final int MASTER_ROUTING_NODE_GUI = 3; - public static final int ALCHEMY_TABLE_GUI = 4; - public static final int SIGIL_HOLDING_GUI = 5; - } - - public static class Compat - { - public static final String JEI_CATEGORY_ALTAR = BloodMagic.MODID + ":altar"; - public static final String JEI_CATEGORY_BINDING = BloodMagic.MODID + ":binding"; - public static final String JEI_CATEGORY_ALCHEMYARRAY = BloodMagic.MODID + ":alchemyArray"; - public static final String JEI_CATEGORY_SOULFORGE = BloodMagic.MODID + ":soulForge"; - public static final String JEI_CATEGORY_ALCHEMYTABLE = BloodMagic.MODID + ":salchemyTable"; - public static final String JEI_CATEGORY_ARMOURDOWNGRADE = BloodMagic.MODID + ":armourDowngrade"; - - public static final String WAILA_CONFIG_ALTAR = BloodMagic.MODID + ".bloodAltar"; - public static final String WAILA_CONFIG_TELEPOSER = BloodMagic.MODID + ".teleposer"; - public static final String WAILA_CONFIG_RITUAL = BloodMagic.MODID + ".ritualController"; - public static final String WAILA_CONFIG_ARRAY = BloodMagic.MODID + ".array"; - public static final String WAILA_CONFIG_BLOOD_TANK = BloodMagic.MODID + ".bloodTank"; - - public static final Item THAUMCRAFT_GOGGLES = ForgeRegistries.ITEMS.getValue(new ResourceLocation("Thaumcraft", "goggles")); - } - - public static class Misc - { - public static final int POTION_ARRAY_SIZE = 256; - public static final float ALTERED_STEP_HEIGHT = 1.00314159f; - public static final int NIGHT_VISION_CONSTANT_BEGIN = 30020; - public static final int NIGHT_VISION_CONSTANT_END = 30000; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/DamageSourceBloodMagic.java b/src/main/java/WayofTime/bloodmagic/util/DamageSourceBloodMagic.java deleted file mode 100644 index 28a29658..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/DamageSourceBloodMagic.java +++ /dev/null @@ -1,24 +0,0 @@ -package WayofTime.bloodmagic.util; - -import WayofTime.bloodmagic.util.helper.TextHelper; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.DamageSource; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; - -public class DamageSourceBloodMagic extends DamageSource { - - public static final DamageSourceBloodMagic INSTANCE = new DamageSourceBloodMagic(); - - public DamageSourceBloodMagic() { - super("bloodMagic"); - - setDamageBypassesArmor(); - setDamageIsAbsolute(); - } - - @Override - public ITextComponent getDeathMessage(EntityLivingBase livingBase) { - return new TextComponentString(TextHelper.localizeEffect("chat.bloodmagic.damageSource", livingBase.getName())); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/GhostItemHelper.java b/src/main/java/WayofTime/bloodmagic/util/GhostItemHelper.java deleted file mode 100644 index 6c454ba8..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/GhostItemHelper.java +++ /dev/null @@ -1,56 +0,0 @@ -package WayofTime.bloodmagic.util; - -import WayofTime.bloodmagic.util.helper.NBTHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class GhostItemHelper { - public static void setItemGhostAmount(ItemStack stack, int amount) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - tag.setInteger(Constants.NBT.GHOST_STACK_SIZE, amount); - } - - public static int getItemGhostAmount(ItemStack stack) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getInteger(Constants.NBT.GHOST_STACK_SIZE); - } - - public static boolean hasGhostAmount(ItemStack stack) { - if (!stack.hasTagCompound()) { - return false; - } - - NBTTagCompound tag = stack.getTagCompound(); - return tag.hasKey(Constants.NBT.GHOST_STACK_SIZE); - } - - public static void incrementGhostAmout(ItemStack stack, int value) { - int amount = getItemGhostAmount(stack); - amount += value; - setItemGhostAmount(stack, amount); - } - - public static void decrementGhostAmount(ItemStack stack, int value) { - int amount = getItemGhostAmount(stack); - amount -= value; - setItemGhostAmount(stack, amount); - } - - public static ItemStack getStackFromGhost(ItemStack ghostStack) { - ItemStack newStack = ghostStack.copy(); - NBTHelper.checkNBT(newStack); - NBTTagCompound tag = newStack.getTagCompound(); - int amount = getItemGhostAmount(ghostStack); - tag.removeTag(Constants.NBT.GHOST_STACK_SIZE); - if (tag.hasNoTags()) { - newStack.setTagCompound(null); - } - newStack.setCount(amount); - - return newStack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/ItemStackWrapper.java b/src/main/java/WayofTime/bloodmagic/util/ItemStackWrapper.java deleted file mode 100644 index d1d648d0..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/ItemStackWrapper.java +++ /dev/null @@ -1,113 +0,0 @@ -package WayofTime.bloodmagic.util; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.List; - -@Deprecated -public class ItemStackWrapper { - public final Item item; - public final int stackSize; - public final int meta; - public NBTTagCompound nbtTag; - - public ItemStackWrapper(Item item, int stackSize, int meta) { - this.item = item; - this.stackSize = stackSize; - this.meta = meta; - } - - public ItemStackWrapper(Item item, int stackSize) { - this(item, stackSize, 0); - } - - public ItemStackWrapper(Item item) { - this(item, 1, 0); - } - - public ItemStackWrapper(Block block, int stackSize, int meta) { - this(Item.getItemFromBlock(block), stackSize, meta); - } - - public ItemStackWrapper(Block block, int stackSize) { - this(block, stackSize, 0); - } - - public ItemStackWrapper(Block block) { - this(block, 1, 0); - } - - public ItemStackWrapper(BlockStack blockStack) { - this(blockStack.getBlock(), 1, blockStack.getMeta()); - } - - public ItemStack toStack() { - return new ItemStack(item, stackSize, meta); - } - - public String getDisplayName() { - return toStack().getDisplayName(); - } - - @Override - public String toString() { - return stackSize + "x" + item.getUnlocalizedName() + "@" + this.meta; - } - - public ItemStack toStack(int count) { - ItemStack result = new ItemStack(item, count, meta); - result.setTagCompound(nbtTag); - return result; - } - - public Item getItem() { - return item; - } - - public int getStackSize() { - return stackSize; - } - - public int getMeta() { - return meta; - } - - public NBTTagCompound getNbtTag() { - return nbtTag; - } - - public void setNbtTag(NBTTagCompound nbtTag) { - this.nbtTag = nbtTag; - } - - @Nullable - public static ItemStackWrapper getHolder(ItemStack stack) { - if (stack.isEmpty()) - return null; - - ItemStackWrapper wrapper = new ItemStackWrapper(stack.getItem(), stack.getCount(), stack.getItemDamage()); - wrapper.setNbtTag(stack.getTagCompound()); - return wrapper; - } - - public static List toWrapperList(List itemStackList) { - List wrapperList = new ArrayList<>(); - for (ItemStack stack : itemStackList) - wrapperList.add(ItemStackWrapper.getHolder(stack)); - - return wrapperList; - } - - public static List toStackList(List wrapperList) { - List stackList = new ArrayList<>(); - for (ItemStackWrapper wrapper : wrapperList) - stackList.add(wrapper.toStack()); - - return stackList; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/StateUtil.java b/src/main/java/WayofTime/bloodmagic/util/StateUtil.java deleted file mode 100644 index 03dce756..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/StateUtil.java +++ /dev/null @@ -1,37 +0,0 @@ -package WayofTime.bloodmagic.util; - -import net.minecraft.block.Block; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -public class StateUtil -{ - public static IBlockState parseState(String blockInfo) - { - String[] split = blockInfo.split("\\["); - split[1] = split[1].substring(0, split[1].lastIndexOf("]")); // Make sure brackets are removed from state - - Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(split[0])); // Find the block - if (block == Blocks.AIR) - return Blocks.AIR.getDefaultState(); // The block is air, so we're looking at invalid data - - BlockStateContainer blockState = block.getBlockState(); - IBlockState returnState = blockState.getBaseState(); - - // Force our values into the state - String[] stateValues = split[1].split(","); // Splits up each value - for (String value : stateValues) - { - String[] valueSplit = value.split("="); // Separates property and value - IProperty property = blockState.getProperty(valueSplit[0]); - if (property != null) - returnState = returnState.withProperty(property, (Comparable) property.parseValue(valueSplit[1]).get()); // Force the property into the state - } - - return returnState; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/util/Utils.java b/src/main/java/WayofTime/bloodmagic/util/Utils.java deleted file mode 100644 index 3e6fecc0..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/Utils.java +++ /dev/null @@ -1,973 +0,0 @@ -package WayofTime.bloodmagic.util; - -import WayofTime.bloodmagic.altar.ComponentType; -import WayofTime.bloodmagic.iface.IDemonWillViewer; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.network.PlayerVelocityPacketProcessor; -import WayofTime.bloodmagic.tile.TileInventory; -import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; -import net.minecraft.block.Block; -import net.minecraft.block.BlockLiquid; -import net.minecraft.block.BlockPortal; -import net.minecraft.block.state.IBlockState; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.Item; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.*; -import net.minecraft.world.World; -import net.minecraftforge.common.IPlantable; -import net.minecraftforge.common.ISpecialArmor; -import net.minecraftforge.common.ISpecialArmor.ArmorProperties; -import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fml.relauncher.ReflectionHelper; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; -import net.minecraftforge.items.wrapper.InvWrapper; -import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; -import net.minecraftforge.items.wrapper.SidedInvWrapper; - -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.util.*; - -public class Utils { - - public static final EnumMap DYE_COLOR_VALUES = Maps.newEnumMap(EnumDyeColor.class); - - static { - try { - Field colorValue = ReflectionHelper.findField(EnumDyeColor.class, "field_193351_w", "colorValue"); - colorValue.setAccessible(true); - for (EnumDyeColor color : EnumDyeColor.values()) { - DYE_COLOR_VALUES.put(color, (int) colorValue.get(color)); - } - } catch (IllegalAccessException e) { - BMLog.DEFAULT.error("Error grabbing color values: {}", e.getMessage()); - } - } - - public static float addAbsorptionToMaximum(EntityLivingBase entity, float added, int maximum, int duration) { - float currentAmount = entity.getAbsorptionAmount(); - added = Math.min(maximum - currentAmount, added); - - if (added <= 0) { - return 0; - } - - if (duration > 0) { - int potionLevel = (int) ((currentAmount + added) / 4); - entity.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, duration, potionLevel, true, false)); - } - - entity.setAbsorptionAmount(currentAmount + added); - - return added; - } - - public static boolean isImmuneToFireDamage(EntityLivingBase entity) { - return entity.isImmuneToFire() || entity.isPotionActive(MobEffects.FIRE_RESISTANCE); - } - - public static boolean isPlayerBesideSolidBlockFace(EntityPlayer player) { - World world = player.getEntityWorld(); - double minimumDistanceFromAxis = 0.7; - BlockPos centralPos = player.getPosition(); - for (EnumFacing facing : EnumFacing.HORIZONTALS) { - BlockPos offsetPos = centralPos.offset(facing); - double distance = Math.min(offsetPos.getX() + 0.5 - player.posX, offsetPos.getZ() + 0.5 - player.posZ); - if (distance > minimumDistanceFromAxis) { - continue; - } - IBlockState state = world.getBlockState(offsetPos); - if (state.isSideSolid(world, offsetPos, facing.getOpposite())) { - return true; - } - } - - return false; - } - - public static boolean canPlayerSeeDemonWill(EntityPlayer player) { - IItemHandler inventory = new PlayerMainInvWrapper(player.inventory); - - for (int i = 0; i < inventory.getSlots(); i++) { - ItemStack stack = inventory.getStackInSlot(i); - if (stack.isEmpty()) { - continue; - } - - if (stack.getItem() instanceof IDemonWillViewer && ((IDemonWillViewer) stack.getItem()).canSeeDemonWillAura(player.getEntityWorld(), stack, player)) { - return true; - } - } - - return false; - } - - public static boolean canEntitySeeBlock(World world, Entity entity, BlockPos pos) { - Vec3d relativePosition = new Vec3d(entity.posX - pos.getX() - 0.5, entity.posY + (double) entity.getEyeHeight() - pos.getY() - 0.5, entity.posZ - pos.getZ() - 0.5); - EnumFacing dir = EnumFacing.getFacingFromVector((float) relativePosition.x, (float) relativePosition.y, (float) relativePosition.z); - RayTraceResult result = world.rayTraceBlocks(new Vec3d(entity.posX, entity.posY + (double) entity.getEyeHeight(), entity.posZ), new Vec3d(pos.getX() + 0.5 + dir.getFrontOffsetX() * 0.4, pos.getY() + 0.5 + dir.getFrontOffsetY() * 0.4, pos.getZ() + 0.5 + dir.getFrontOffsetZ() * 0.4), false, true, true); - return result == null || pos.equals(result.getBlockPos()); - } - - public static int plantSeedsInArea(World world, AxisAlignedBB aabb, int horizontalRadius, int verticalRadius) { - int placedBlocks = 0; - List itemEntities = world.getEntitiesWithinAABB(EntityItem.class, aabb); - - for (EntityItem itemEntity : itemEntities) { - placedBlocks += plantEntityItem(itemEntity, horizontalRadius, verticalRadius); - } - - return placedBlocks; - } - - public static int plantItemStack(World world, BlockPos centralPos, ItemStack stack, int horizontalRadius, int verticalRadius) { - if (stack.isEmpty()) { - return 0; - } - - Item item = stack.getItem(); - if (!(item instanceof IPlantable)) { - return 0; - } - - int planted = 0; - - for (int hR = 0; hR <= horizontalRadius; hR++) { - for (int vR = 0; vR <= verticalRadius; vR++) { - for (int i = -hR; i <= hR; i++) { - for (int k = -hR; k <= hR; k++) { - for (int j = -vR; j <= vR; j += 2 * vR + (vR > 0 ? 0 : 1)) { - if (!(Math.abs(i) == hR || Math.abs(k) == hR)) { - continue; - } - - BlockPos newPos = centralPos.add(i, j, k); - if (world.isAirBlock(newPos)) { - BlockPos offsetPos = newPos.offset(EnumFacing.DOWN); - IBlockState state = world.getBlockState(offsetPos); - if (state.getBlock().canSustainPlant(state, world, offsetPos, EnumFacing.UP, (IPlantable) item)) { - IBlockState plantState = ((IPlantable) item).getPlant(world, newPos); - world.setBlockState(newPos, plantState, 3); - world.playEvent(2001, newPos, Block.getIdFromBlock(plantState.getBlock()) + (plantState.getBlock().getMetaFromState(plantState) << 12)); - stack.shrink(1); - planted++; - if (stack.isEmpty() || stack.getCount() <= 0) { - return planted; - } - } - } - } - } - } - } - } - - return planted; - } - - public static int plantEntityItem(EntityItem itemEntity, int horizontalRadius, int verticalRadius) { - if (itemEntity == null || itemEntity.isDead) { - return 0; - } - - World world = itemEntity.getEntityWorld(); - BlockPos pos = itemEntity.getPosition(); - ItemStack stack = itemEntity.getItem(); - - int planted = plantItemStack(world, pos, stack, horizontalRadius, verticalRadius); - - if (stack.isEmpty()) { - itemEntity.setDead(); - } - - return planted; - } - - public static int getDemonWillResolution(EntityPlayer player) { - IItemHandler inventory = new PlayerMainInvWrapper(player.inventory); - - for (int i = 0; i < inventory.getSlots(); i++) { - ItemStack stack = inventory.getStackInSlot(i); - if (stack.isEmpty()) { - continue; - } - - if (stack.getItem() instanceof IDemonWillViewer && ((IDemonWillViewer) stack.getItem()).canSeeDemonWillAura(player.getEntityWorld(), stack, player)) { - return ((IDemonWillViewer) stack.getItem()).getDemonWillAuraResolution(player.getEntityWorld(), stack, player); - } - } - - return 1; - } - - public static NBTTagCompound getPersistentDataTag(EntityPlayer player) { - NBTTagCompound forgeData = player.getEntityData().getCompoundTag(EntityPlayer.PERSISTED_NBT_TAG); - NBTTagCompound beaconData = forgeData.getCompoundTag("BloodMagic"); - - //Creates/sets the tags if they don't exist - if (!forgeData.hasKey("BloodMagic")) - forgeData.setTag("BloodMagic", beaconData); - if (!player.getEntityData().hasKey(EntityPlayer.PERSISTED_NBT_TAG)) - player.getEntityData().setTag(EntityPlayer.PERSISTED_NBT_TAG, forgeData); - - return beaconData; - } - - public static void setPlayerSpeedFromServer(EntityPlayer player, double motionX, double motionY, double motionZ) { - if (!player.getEntityWorld().isRemote && player instanceof EntityPlayerMP) { - BloodMagicPacketHandler.sendTo(new PlayerVelocityPacketProcessor(motionX, motionY, motionZ), (EntityPlayerMP) player); - } - } - - public static boolean isInteger(String integer) { - try { - Integer.parseInt(integer); - } catch (NumberFormatException | NullPointerException e) { - return false; - } - // only got here if we didn't return false - return true; - } - - public static String toFancyCasing(String input) { - return String.valueOf(input.charAt(0)).toUpperCase(Locale.ENGLISH) + input.substring(1); - } - - public static String prettifyBlockPosString(BlockPos pos) { - return "[" + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + "]"; - } - - /** - * @param tile - The {@link TileInventory} to input the item to - * @param player - The player to take the item from. - * @return {@code true} if the ItemStack is inserted, {@code false} - * otherwise - * @see #insertItemToTile(TileInventory, EntityPlayer, int) - */ - public static boolean insertItemToTile(TileInventory tile, EntityPlayer player) { - return insertItemToTile(tile, player, 0); - } - - /** - * Used for inserting an ItemStack with a stacksize of 1 to a tile's - * inventory at slot 0 - *

- * EG: Block Altar - * - * @param tile - The {@link TileInventory} to input the item to - * @param player - The player to take the item from. - * @param slot - The slot to attempt to insert to - * @return {@code true} if the ItemStack is inserted, {@code false} - * otherwise - */ - public static boolean insertItemToTile(TileInventory tile, EntityPlayer player, int slot) { - ItemStack slotStack = tile.getStackInSlot(slot); - if (slotStack.isEmpty() && !player.getHeldItemMainhand().isEmpty()) { - ItemStack input = player.getHeldItemMainhand().copy(); - input.setCount(1); - player.getHeldItemMainhand().shrink(1); - tile.setInventorySlotContents(slot, input); - return true; - } else if (!slotStack.isEmpty() && player.getHeldItemMainhand().isEmpty()) { - ItemHandlerHelper.giveItemToPlayer(player, slotStack); - tile.clear(); - return false; - } - - return false; - } - - public static double calculateStandardProgress(Number currentValue, int[] requiredValues, int currentLevel) { - int nextLevel = currentLevel + 1; - if (nextLevel >= requiredValues.length) - return 1.0D; - - int required = requiredValues[nextLevel]; - return Double.parseDouble("" + currentValue) / (double) required; - } - - @Nullable - public static IItemHandler getInventory(TileEntity tile, @Nullable EnumFacing facing) { - if (facing == null) - facing = EnumFacing.DOWN; - - IItemHandler itemHandler = null; - - if (tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing)) - itemHandler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing); - else if (tile instanceof ISidedInventory) - itemHandler = ((ISidedInventory) tile).getSlotsForFace(facing).length != 0 ? new SidedInvWrapper((ISidedInventory) tile, facing) : null; - else if (tile instanceof IInventory) - itemHandler = new InvWrapper((IInventory) tile); - - return itemHandler; - } - - public static ItemStack setUnbreakable(ItemStack stack) { - NBTHelper.checkNBT(stack); - stack.getTagCompound().setBoolean("Unbreakable", true); - return stack; - } - - /** - * Gets a default block for each type of {@link ComponentType} - * - * @param component - The Component to provide a block for. - * @return The default Block for the EnumAltarComponent - */ - public static Block getBlockForComponent(ComponentType component) { - switch (component) { - case GLOWSTONE: - return Blocks.GLOWSTONE; - case BLOODSTONE: - return RegistrarBloodMagicBlocks.DECORATIVE_BRICK; - case BEACON: - return Blocks.BEACON; - case BLOODRUNE: - return RegistrarBloodMagicBlocks.BLOOD_RUNE; - case CRYSTAL: - return RegistrarBloodMagicBlocks.BLOOD_RUNE; - case NOTAIR: - return Blocks.STONEBRICK; - default: - return Blocks.AIR; - } - } - - public static float getModifiedDamage(EntityLivingBase attackedEntity, DamageSource source, float amount) { - if (!attackedEntity.isEntityInvulnerable(source)) { - if (amount <= 0) - return 0; - - amount = applyArmor(attackedEntity, Iterables.toArray(attackedEntity.getEquipmentAndArmor(), ItemStack.class), source, amount); - if (amount <= 0) - return 0; - amount = applyPotionDamageCalculations(attackedEntity, source, amount); - - return amount; - } - - return 0; - } - - public static float applyArmor(EntityLivingBase entity, ItemStack[] inventory, DamageSource source, double damage) { - damage *= 25; - ArrayList dmgVals = new ArrayList<>(); - for (int x = 0; x < inventory.length; x++) { - ItemStack stack = inventory[x]; - if (stack.isEmpty()) { - continue; - } - ArmorProperties prop = null; - if (stack.getItem() instanceof ISpecialArmor) { - ISpecialArmor armor = (ISpecialArmor) stack.getItem(); - prop = armor.getProperties(entity, stack, source, damage / 25D, x).copy(); - } else if (stack.getItem() instanceof ItemArmor && !source.isUnblockable()) { - ItemArmor armor = (ItemArmor) stack.getItem(); - prop = new ArmorProperties(0, armor.damageReduceAmount / 25D, Integer.MAX_VALUE); - } - if (prop != null) { - prop.Slot = x; - dmgVals.add(prop); - } - } - if (dmgVals.size() > 0) { - ArmorProperties[] props = dmgVals.toArray(new ArmorProperties[dmgVals.size()]); - int level = props[0].Priority; - double ratio = 0; - for (ArmorProperties prop : props) { - if (level != prop.Priority) { - damage -= (damage * ratio); - ratio = 0; - level = prop.Priority; - } - ratio += prop.AbsorbRatio; - - } - damage -= (damage * ratio); - } - - return (float) (damage / 25.0F); - } - - public static float applyPotionDamageCalculations(EntityLivingBase attackedEntity, DamageSource source, float damage) { - Potion resistance = MobEffects.RESISTANCE; - - if (source.isDamageAbsolute()) { - return damage; - } else { - if (attackedEntity.isPotionActive(resistance) && source != DamageSource.OUT_OF_WORLD) { - int i = (attackedEntity.getActivePotionEffect(resistance).getAmplifier() + 1) * 5; - int j = 25 - i; - float f = damage * (float) j; - damage = f / 25.0F; - } - - if (damage <= 0.0F) { - return 0.0F; - } else { - int k = EnchantmentHelper.getEnchantmentModifierDamage(attackedEntity.getArmorInventoryList(), source); - - if (k > 20) { - k = 20; - } - - if (k > 0 && k <= 20) { - int l = 25 - k; - float f1 = damage * (float) l; - damage = f1 / 25.0F; - } - - return damage; - } - } - } - - /** - * Used to determine if stack1 can be placed into stack2. If stack2 is is empty - * and stack1 isn't empty, returns true. Ignores stack size - * - * @param stack1 Stack that is placed into a slot - * @param stack2 Slot content that stack1 is placed into - * @return True if they can be combined - * @deprecated use {@link ItemHandlerHelper#canItemStacksStack(ItemStack, ItemStack)} - */ - @Deprecated - public static boolean canCombine(ItemStack stack1, ItemStack stack2) { - return stack1.isEmpty() && !stack2.isEmpty() || ItemHandlerHelper.canItemStacksStack(stack1, stack2); - } - - /** - * @param stack1 Stack that is placed into a slot - * @param stack2 Slot content that stack1 is placed into - * @return Stacks after stacking - */ - public static ItemStack[] combineStacks(ItemStack stack1, ItemStack stack2, int transferMax) { - ItemStack[] returned = new ItemStack[2]; - - if (ItemHandlerHelper.canItemStacksStack(stack1, stack2)) { - int transferedAmount = Math.min(transferMax, stack2.isEmpty() ? stack1.getCount() : Math.min(stack2.getMaxStackSize() - stack2.getCount(), stack1.getCount())); - if (transferedAmount > 0) { - ItemStack copyStack = stack1.splitStack(transferedAmount); - if (stack2.isEmpty()) { - stack2 = copyStack; - } else { - stack2.grow(transferedAmount); - } - } - } - - returned[0] = stack1; - returned[1] = stack2; - - return returned; - } - - /** - * @param stack1 Stack that is placed into a slot - * @param stack2 Slot content that stack1 is placed into - * @return Stacks after stacking - */ - public static ItemStack[] combineStacks(ItemStack stack1, ItemStack stack2) { - ItemStack[] returned = new ItemStack[2]; - - if (ItemHandlerHelper.canItemStacksStack(stack1, stack2)) { - int transferedAmount = stack2.isEmpty() ? stack1.getCount() : Math.min(stack2.getMaxStackSize() - stack2.getCount(), stack1.getCount()); - if (transferedAmount > 0) { - ItemStack copyStack = stack1.splitStack(transferedAmount); - if (stack2.isEmpty()) { - stack2 = copyStack; - } else { - stack2.grow(transferedAmount); - } - } - } - - returned[0] = stack1; - returned[1] = stack2; - - return returned; - } - - public static ItemStack insertStackIntoTile(ItemStack stack, TileEntity tile, EnumFacing dir) { - if (tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir)) { - IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir); - - return insertStackIntoTile(stack, handler); - } else if (tile instanceof IInventory) { - return insertStackIntoInventory(stack, (IInventory) tile, dir); - } - - return stack; - } - - public static int getNumberOfFreeSlots(TileEntity tile, EnumFacing dir) { - int slots = 0; - - if (tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir)) { - IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir); - - for (int i = 0; i < handler.getSlots(); i++) { - if (handler.getStackInSlot(i).isEmpty()) { - slots++; - } - } - } else if (tile instanceof IInventory) { - for (int i = 0; i < ((IInventory) tile).getSizeInventory(); i++) { - if (((IInventory) tile).getStackInSlot(i).isEmpty()) { - slots++; - } - } - } - - return slots; - } - - public static ItemStack insertStackIntoTile(ItemStack stack, IItemHandler handler) { - int numberOfSlots = handler.getSlots(); - - ItemStack copyStack = stack.copy(); - - for (int slot = 0; slot < numberOfSlots; slot++) { - copyStack = handler.insertItem(slot, copyStack, false); - if (copyStack.isEmpty()) { - return ItemStack.EMPTY; - } - } - - return copyStack; - } - - /** - * Inserts the desired stack into the tile up to a limit for the tile. - * Respects capabilities. - * - * @param stack - * @param tile - * @param dir - * @param limit - * @return - */ - public static ItemStack insertStackIntoTile(ItemStack stack, TileEntity tile, EnumFacing dir, int limit) { - if (tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir)) { - IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir); - int numberOfSlots = handler.getSlots(); - - ItemStack copyStack = stack.copy(); - - int numberMatching = 0; - - for (int slot = 0; slot < numberOfSlots; slot++) { - ItemStack invStack = handler.getStackInSlot(slot); - - if (!invStack.isEmpty() && ItemHandlerHelper.canItemStacksStack(stack, invStack)) { - numberMatching += invStack.getCount(); - } - } - - if (numberMatching >= limit) { - return stack; - } - - int newLimit = limit - numberMatching; - - for (int slot = 0; slot < numberOfSlots; slot++) { - ItemStack newCopyStack = copyStack.copy(); - newCopyStack.setCount(Math.min(copyStack.getCount(), newLimit)); - - newCopyStack = handler.insertItem(slot, newCopyStack, false); - - if (newCopyStack.isEmpty()) { - return ItemStack.EMPTY; - } - - newLimit -= (copyStack.getCount() - newCopyStack.getCount()); - - if (newLimit <= 0) { - return ItemStack.EMPTY; //TODO - } - - copyStack.shrink(copyStack.getCount() - newCopyStack.getCount()); - } - - return copyStack; - } else if (tile instanceof IInventory) { - return insertStackIntoInventory(stack, (IInventory) tile, dir, limit); - } - - return stack; - } - - public static ItemStack insertStackIntoInventory(ItemStack stack, IInventory inventory, EnumFacing dir) { - if (stack.isEmpty()) { - return ItemStack.EMPTY; - } - - boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; - - if (inventory instanceof ISidedInventory) { - int[] array = ((ISidedInventory) inventory).getSlotsForFace(dir); - for (int in : array) { - canBeInserted[in] = inventory.isItemValidForSlot(in, stack) && ((ISidedInventory) inventory).canInsertItem(in, stack, dir); - } - } else { - for (int i = 0; i < canBeInserted.length; i++) { - canBeInserted[i] = inventory.isItemValidForSlot(i, stack); - } - } - - for (int i = 0; i < inventory.getSizeInventory(); i++) { - if (!canBeInserted[i]) { - continue; - } - - ItemStack[] combinedStacks = combineStacks(stack, inventory.getStackInSlot(i)); - stack = combinedStacks[0]; - inventory.setInventorySlotContents(i, combinedStacks[1]); - - if (stack.isEmpty()) { - return ItemStack.EMPTY; - } - } - - return stack; - } - - public static boolean canInsertStackFullyIntoInventory(ItemStack stack, IInventory inventory, EnumFacing dir) { - return canInsertStackFullyIntoInventory(stack, inventory, dir, false, 0); - } - - public static boolean canInsertStackFullyIntoInventory(ItemStack stack, IInventory inventory, EnumFacing dir, boolean fillToLimit, int limit) { - if (stack.isEmpty()) { - return true; - } - - int itemsLeft = stack.getCount(); - - boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; - - if (inventory instanceof ISidedInventory) { - int[] array = ((ISidedInventory) inventory).getSlotsForFace(dir); - for (int in : array) { - canBeInserted[in] = inventory.isItemValidForSlot(in, stack) && ((ISidedInventory) inventory).canInsertItem(in, stack, dir); - } - } else { - for (int i = 0; i < canBeInserted.length; i++) { - canBeInserted[i] = inventory.isItemValidForSlot(i, stack); - } - } - - int numberMatching = 0; - - if (fillToLimit) { - for (int i = 0; i < inventory.getSizeInventory(); i++) { - if (!canBeInserted[i]) { - continue; - } - - ItemStack invStack = inventory.getStackInSlot(i); - - if (!invStack.isEmpty() && ItemHandlerHelper.canItemStacksStack(stack, invStack)) { - numberMatching += invStack.getCount(); - } - } - } - - if (fillToLimit && limit < stack.getCount() + numberMatching) { - return false; - } - - for (int i = 0; i < inventory.getSizeInventory(); i++) { - if (!canBeInserted[i]) { - continue; - } - - ItemStack invStack = inventory.getStackInSlot(i); - boolean canCombine = canCombine(stack, invStack); - if (canCombine) { - if (invStack.isEmpty()) { - itemsLeft = 0; - } else { - itemsLeft -= (invStack.getMaxStackSize() - invStack.getCount()); - } - } - - if (itemsLeft <= 0) { - return true; - } - } - - return false; - } - - /** - * Inserts the desired stack into the inventory up to a limit for the - * inventory. - * - * @param stack - * @param inventory - * @param dir - * @param limit - * @return - */ - public static ItemStack insertStackIntoInventory(ItemStack stack, IInventory inventory, EnumFacing dir, int limit) { - if (stack.isEmpty()) { - return ItemStack.EMPTY; - } - - boolean[] canBeInserted = new boolean[inventory.getSizeInventory()]; - - if (inventory instanceof ISidedInventory) { - int[] array = ((ISidedInventory) inventory).getSlotsForFace(dir); - for (int in : array) { - canBeInserted[in] = ((ISidedInventory) inventory).canInsertItem(in, stack, dir); - } - } else { - for (int i = 0; i < canBeInserted.length; i++) { - canBeInserted[i] = true; - } - } - - int numberMatching = 0; - - for (int i = 0; i < inventory.getSizeInventory(); i++) { - if (!canBeInserted[i]) { - continue; - } - - ItemStack invStack = inventory.getStackInSlot(i); - - if (!invStack.isEmpty() && canCombine(stack, invStack)) { - numberMatching += invStack.getCount(); - } - } - - if (numberMatching >= limit) { - return stack; - } - - int newLimit = limit - numberMatching; - - for (int i = 0; i < inventory.getSizeInventory(); i++) { - if (!canBeInserted[i]) { - continue; - } - - int prevStackSize = stack.getCount(); - - ItemStack[] combinedStacks = combineStacks(stack, inventory.getStackInSlot(i), newLimit); - stack = combinedStacks[0]; - inventory.setInventorySlotContents(i, combinedStacks[1]); //TODO - - newLimit -= (prevStackSize - stack.getCount()); - - if (newLimit <= 0 || stack.isEmpty()) { - return stack; - } - } - - return stack; - } - - public static boolean isBlockLiquid(IBlockState state) { - return (state instanceof IFluidBlock || state.getMaterial().isLiquid()); - } - - public static boolean isFlowingLiquid(World world, BlockPos pos, IBlockState state) { - Block block = state.getBlock(); - return ((block instanceof IFluidBlock && Math.abs(((IFluidBlock) block).getFilledPercentage(world, pos)) == 1) || (block instanceof BlockLiquid && block.getMetaFromState(state) != 0)); - } - - public static boolean spawnStackAtBlock(World world, BlockPos pos, @Nullable EnumFacing pushDirection, ItemStack stack) { - EntityItem entityItem = new EntityItem(world); - BlockPos spawnPos = new BlockPos(pos); - double velocity = 0.15D; - if (pushDirection != null) { - spawnPos.offset(pushDirection); - - switch (pushDirection) { - case DOWN: { - entityItem.motionY = -velocity; - entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() - 1.0D, spawnPos.getZ() + 0.5D); - break; - } - case UP: { - entityItem.motionY = velocity; - entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 1.0D, spawnPos.getZ() + 0.5D); - break; - } - case NORTH: { - entityItem.motionZ = -velocity; - entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 0.5D, spawnPos.getZ() - 1.0D); - break; - } - case SOUTH: { - entityItem.motionZ = velocity; - entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 1.0D); - break; - } - case WEST: { - entityItem.motionX = -velocity; - entityItem.setPosition(spawnPos.getX() - 1.0D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 0.5D); - break; - } - case EAST: { - entityItem.motionX = velocity; - entityItem.setPosition(spawnPos.getX() + 1.0D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 0.5D); - break; - } - } - } - - entityItem.setItem(stack); - return world.spawnEntity(entityItem); - } - - public static boolean swapLocations(World initialWorld, BlockPos initialPos, World finalWorld, BlockPos finalPos) { - return swapLocations(initialWorld, initialPos, finalWorld, finalPos, true); - } - - public static boolean swapLocations(World initialWorld, BlockPos initialPos, World finalWorld, BlockPos finalPos, boolean playSound) { - TileEntity initialTile = initialWorld.getTileEntity(initialPos); - TileEntity finalTile = finalWorld.getTileEntity(finalPos); - NBTTagCompound initialTag = new NBTTagCompound(); - NBTTagCompound finalTag = new NBTTagCompound(); - if (initialTile != null) - initialTile.writeToNBT(initialTag); - if (finalTile != null) - finalTile.writeToNBT(finalTag); - - IBlockState initialState = initialWorld.getBlockState(initialPos); - IBlockState finalState = finalWorld.getBlockState(finalPos); - - if ((initialState.getBlock().equals(Blocks.AIR) && finalState.getBlock().equals(Blocks.AIR)) || initialState.getBlock() instanceof BlockPortal || finalState.getBlock() instanceof BlockPortal) - return false; - - if (playSound) { - initialWorld.playSound(initialPos.getX(), initialPos.getY(), initialPos.getZ(), SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); - finalWorld.playSound(finalPos.getX(), finalPos.getY(), finalPos.getZ(), SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.AMBIENT, 1.0F, 1.0F, false); - } - - //Finally, we get to do something! (CLEARING TILES) - if (finalState.getBlock().hasTileEntity(finalState)) - finalWorld.removeTileEntity(finalPos); - if (initialState.getBlock().hasTileEntity(initialState)) - initialWorld.removeTileEntity(initialPos); - - //TILES CLEARED - IBlockState initialBlockState = initialWorld.getBlockState(initialPos); - IBlockState finalBlockState = finalWorld.getBlockState(finalPos); - finalWorld.setBlockState(finalPos, initialBlockState, 3); - - if (initialTile != null) { - TileEntity newTileInitial = TileEntity.create(finalWorld, initialTag); - - - finalWorld.setTileEntity(finalPos, newTileInitial); - newTileInitial.setPos(finalPos); - newTileInitial.setWorld(finalWorld); - } - - initialWorld.setBlockState(initialPos, finalBlockState, 3); - - if (finalTile != null) { - TileEntity newTileFinal = TileEntity.create(initialWorld, finalTag); - - initialWorld.setTileEntity(initialPos, newTileFinal); - newTileFinal.setPos(initialPos); - newTileFinal.setWorld(initialWorld); - } - - initialWorld.notifyNeighborsOfStateChange(initialPos, finalState.getBlock(), true); - finalWorld.notifyNeighborsOfStateChange(finalPos, initialState.getBlock(), true); - - return true; - } - - //Shamelessly ripped off of CoFH Lib - public static ItemStack consumeItem(ItemStack stack) { - Item item = stack.getItem(); - boolean largerStack = stack.getCount() > 1; - if (largerStack) { - stack.shrink(1); - } - if (item.hasContainerItem(stack)) { - ItemStack ret = item.getContainerItem(stack); - if (ret.isEmpty()) { - return ItemStack.EMPTY; - } - if (ret.isItemStackDamageable() && ret.getItemDamage() > ret.getMaxDamage()) { - ret = ItemStack.EMPTY; - } - return ret; - } - return largerStack ? stack : ItemStack.EMPTY; - } - - public static boolean hasUUID(ItemStack stack) { - return stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.MOST_SIG) && stack.getTagCompound().hasKey(Constants.NBT.LEAST_SIG); - } - - public static UUID getUUID(ItemStack stack) { - if (!hasUUID(stack)) { - return null; - } - - return new UUID(stack.getTagCompound().getLong(Constants.NBT.MOST_SIG), stack.getTagCompound().getLong(Constants.NBT.LEAST_SIG)); - } - - public static void setUUID(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - - if (!stack.getTagCompound().hasKey(Constants.NBT.MOST_SIG) && !stack.getTagCompound().hasKey(Constants.NBT.LEAST_SIG)) { - UUID itemUUID = UUID.randomUUID(); - stack.getTagCompound().setLong(Constants.NBT.MOST_SIG, itemUUID.getMostSignificantBits()); - stack.getTagCompound().setLong(Constants.NBT.LEAST_SIG, itemUUID.getLeastSignificantBits()); - } - } - - public static RayTraceResult rayTrace(EntityPlayer player, boolean useLiquids) { - float pitch = player.rotationPitch; - float yaw = player.rotationYaw; - Vec3d eyePosition = new Vec3d(player.posX, player.posY + (double) player.getEyeHeight(), player.posZ); - - float f2 = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI); - float f3 = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI); - float f4 = -MathHelper.cos(-pitch * 0.017453292F); - float f5 = MathHelper.sin(-pitch * 0.017453292F); - float f6 = f3 * f4; - float f7 = f2 * f4; - - double reachDistance = 5.0D; - if (player instanceof EntityPlayerMP) - reachDistance = ((EntityPlayerMP) player).interactionManager.getBlockReachDistance(); - - Vec3d reachPosition = eyePosition.addVector((double) f6 * reachDistance, (double) f5 * reachDistance, (double) f7 * reachDistance); - return player.getEntityWorld().rayTraceBlocks(eyePosition, reachPosition, useLiquids, !useLiquids, false); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java deleted file mode 100644 index 251a0a1b..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/handler/IMCHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package WayofTime.bloodmagic.util.handler; - -import net.minecraftforge.fml.common.event.FMLInterModComms; - -public class IMCHandler { - - public static void handleIMC(FMLInterModComms.IMCEvent event) { - // TODO -// for (FMLInterModComms.IMCMessage message : event.getMessages()) -// { -// if (message.key.equals("teleposerBlacklist") && message.isItemStackMessage()) -// { -// ItemStack stack = message.getItemStackValue(); -// if (stack.getItem() instanceof ItemBlock) -// { -// Block block = Block.getBlockFromItem(stack.getItem()); -// BloodMagicAPI.addToTeleposerBlacklist(block, stack.getItemDamage()); -// } -// } -// -// if (message.key.equals("transpositionBlacklist") && message.isItemStackMessage()) -// { -// ItemStack stack = message.getItemStackValue(); -// if (stack.getItem() instanceof ItemBlock) -// { -// Block block = Block.getBlockFromItem(stack.getItem()); -// BloodMagicAPI.addToTranspositionBlacklist(block, stack.getItemDamage()); -// } -// } -// -// if (message.key.equals("sacrificeValue") && message.isStringMessage()) -// { -// String[] splitInfo = message.getStringValue().split(";"); -// if (splitInfo.length == 2 && Utils.isInteger(splitInfo[1])) -// BloodMagicAPI.setEntitySacrificeValue(splitInfo[0], Integer.parseInt(splitInfo[1])); -// } -// -// if (message.key.equals("greenGroveBlacklist") && message.isStringMessage()) -// { -// String[] splitInfo = message.getStringValue().split(":"); -// if (splitInfo.length == 2) -// { -// Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(splitInfo[0], splitInfo[1])); -// if (block != null) -// BloodMagicAPI.blacklistFromGreenGrove(block); -// } -// } -// -// if (message.key.equals("altarComponent") && message.isStringMessage()) -// { -// String[] splitInfo = message.getStringValue().split(":"); -// if (splitInfo.length == 4) -// { -// Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(splitInfo[0], splitInfo[1])); -// if (block != null) -// BloodMagicAPI.addAltarComponent(block.getStateFromMeta(Integer.parseInt(splitInfo[2])), EnumAltarComponent.valueOf(splitInfo[3])); -// } -// } -// } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java deleted file mode 100644 index 8f29bfab..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java +++ /dev/null @@ -1,398 +0,0 @@ -package WayofTime.bloodmagic.util.handler.event; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.util.BMLog; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.ritual.Ritual; -import WayofTime.bloodmagic.ritual.RitualComponent; -import WayofTime.bloodmagic.client.key.KeyBindings; -import WayofTime.bloodmagic.client.render.block.RenderFakeBlocks; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.item.ItemRitualDiviner; -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.network.SigilHoldingPacketProcessor; -import WayofTime.bloodmagic.tile.TileMasterRitualStone; -import WayofTime.bloodmagic.util.GhostItemHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; -import com.google.common.base.Stopwatch; -import com.google.common.collect.Lists; -import com.google.common.collect.SetMultimap; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.world.World; -import net.minecraftforge.client.event.*; -import net.minecraftforge.client.event.sound.PlaySoundEvent; -import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.event.entity.player.ItemTooltipEvent; -import net.minecraftforge.fml.client.FMLClientHandler; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.InputEvent; -import net.minecraftforge.fml.relauncher.ReflectionHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.opengl.GL11; - -import java.util.*; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID, value = Side.CLIENT) -@SideOnly(Side.CLIENT) -public class ClientHandler { - // Quick toggle for error suppression. Set to false if you wish to hide model errors. - public static final boolean SUPPRESS_ASSET_ERRORS = true; - public static TextureAtlasSprite ritualStoneBlank; - public static TextureAtlasSprite ritualStoneWater; - public static TextureAtlasSprite ritualStoneFire; - public static TextureAtlasSprite ritualStoneEarth; - public static TextureAtlasSprite ritualStoneAir; - public static TextureAtlasSprite ritualStoneDawn; - public static TextureAtlasSprite ritualStoneDusk; - public static TextureAtlasSprite blankBloodRune; - public static TextureAtlasSprite stoneBrick; - public static TextureAtlasSprite glowstone; - public static TextureAtlasSprite bloodStoneBrick; - public static TextureAtlasSprite beacon; - public static TextureAtlasSprite crystalCluster; - public static Minecraft minecraft = Minecraft.getMinecraft(); - private static TileMasterRitualStone mrsHoloTile; - private static Ritual mrsHoloRitual; - private static EnumFacing mrsHoloDirection; - private static boolean mrsHoloDisplay; - - @SubscribeEvent - public static void onTooltipEvent(ItemTooltipEvent event) { - ItemStack stack = event.getItemStack(); - if (stack.isEmpty()) { - return; - } - - if (GhostItemHelper.hasGhostAmount(stack)) { - int amount = GhostItemHelper.getItemGhostAmount(stack); - if (amount == 0) { - event.getToolTip().add(TextHelper.localize("tooltip.bloodmagic.ghost.everything")); - } else { - event.getToolTip().add(TextHelper.localize("tooltip.bloodmagic.ghost.amount", amount)); - } - } - } - - @SubscribeEvent - public static void onSoundEvent(PlaySoundEvent event) { - EntityPlayer player = Minecraft.getMinecraft().player; - if (player != null && player.isPotionActive(RegistrarBloodMagic.DEAFNESS)) { - event.setResultSound(null); - } - } - - @SubscribeEvent - public static void onTextureStitch(TextureStitchEvent.Pre event) { - final String BLOCKS = "blocks"; - - ritualStoneBlank = forName(event.getMap(), "RitualStone", BLOCKS); - ritualStoneWater = forName(event.getMap(), "WaterRitualStone", BLOCKS); - ritualStoneFire = forName(event.getMap(), "FireRitualStone", BLOCKS); - ritualStoneEarth = forName(event.getMap(), "EarthRitualStone", BLOCKS); - ritualStoneAir = forName(event.getMap(), "AirRitualStone", BLOCKS); - ritualStoneDawn = forName(event.getMap(), "LightRitualStone", BLOCKS); - ritualStoneDusk = forName(event.getMap(), "DuskRitualStone", BLOCKS); - - blankBloodRune = forName(event.getMap(), "BlankRune", BLOCKS); - stoneBrick = event.getMap().registerSprite(new ResourceLocation("minecraft:blocks/stonebrick")); - glowstone = event.getMap().registerSprite(new ResourceLocation("minecraft:blocks/glowstone")); - bloodStoneBrick = forName(event.getMap(), "BloodStoneBrick", BLOCKS); - beacon = event.getMap().registerSprite(new ResourceLocation("minecraft:blocks/beacon")); - crystalCluster = forName(event.getMap(), "ShardCluster", BLOCKS); - } - - @SubscribeEvent - public static void render(RenderWorldLastEvent event) { - EntityPlayerSP player = minecraft.player; - World world = player.getEntityWorld(); - - if (mrsHoloTile != null) { - if (world.getTileEntity(mrsHoloTile.getPos()) instanceof TileMasterRitualStone) { - if (mrsHoloDisplay) - renderRitualStones(mrsHoloTile, event.getPartialTicks()); - else - ClientHandler.setRitualHoloToNull(); - } else { - ClientHandler.setRitualHoloToNull(); - } - } - - if (minecraft.objectMouseOver == null || minecraft.objectMouseOver.typeOfHit != RayTraceResult.Type.BLOCK) - return; - - TileEntity tileEntity = world.getTileEntity(minecraft.objectMouseOver.getBlockPos()); - - if (tileEntity instanceof TileMasterRitualStone && !player.getHeldItemMainhand().isEmpty() && player.getHeldItemMainhand().getItem() instanceof ItemRitualDiviner) - renderRitualStones(player, event.getPartialTicks()); - } - - @SubscribeEvent - public static void onMouseEvent(MouseEvent event) { - EntityPlayerSP player = Minecraft.getMinecraft().player; - - if (event.getDwheel() != 0 && player != null && player.isSneaking()) { - ItemStack stack = player.getHeldItemMainhand(); - - if (!stack.isEmpty()) { - Item item = stack.getItem(); - - if (item instanceof ItemSigilHolding) { - cycleSigil(stack, player, event.getDwheel()); - event.setCanceled(true); - } - } - } - } - - @SubscribeEvent - public static void onKey(InputEvent event) { - if (!minecraft.inGameHasFocus) - return; - - for (KeyBindings keyBinding : KeyBindings.values()) - if (keyBinding.getKey().isPressed()) - keyBinding.handleKeybind(); - } - - // Stolen from Chisel - @SubscribeEvent - public static void onModelBake(ModelBakeEvent event) { - if (BloodMagic.IS_DEV && SUPPRESS_ASSET_ERRORS) - return; - - Stopwatch stopwatch = Stopwatch.createStarted(); - Map modelErrors = ReflectionHelper.getPrivateValue(ModelLoader.class, event.getModelLoader(), "loadingExceptions"); - Set missingVariants = ReflectionHelper.getPrivateValue(ModelLoader.class, event.getModelLoader(), "missingVariants"); - - // Collect all Blood Magic model errors - List errored = new ArrayList<>(); - for (ResourceLocation modelError : modelErrors.keySet()) - if (modelError.getResourceDomain().equalsIgnoreCase(BloodMagic.MODID)) - errored.add(modelError); - - // Collect all Blood Magic variant errors - List missing = new ArrayList<>(); - for (ModelResourceLocation missingVariant : missingVariants) - if (missingVariant.getResourceDomain().equalsIgnoreCase(BloodMagic.MODID)) - missing.add(missingVariant); - - // Remove discovered model errors - for (ResourceLocation modelError : errored) - modelErrors.remove(modelError); - - // Remove discovered variant errors - missingVariants.removeAll(missing); - - if (errored.size() > 0) - BMLog.DEBUG.info("Suppressed {} model errors from Blood Magic.", errored.size()); - if (missing.size() > 0) - BMLog.DEBUG.info("Suppressed {} variant errors from Blood Magic.", missing.size()); - BMLog.DEBUG.info("Suppressed discovered model/variant errors in {}", stopwatch.stop()); - } - - // For some reason, we need some bad textures to be listed in the Crystal and Node models. This will hide that from the end user. - @SubscribeEvent - public static void onTextureStitch(TextureStitchEvent.Post event) { - if (BloodMagic.IS_DEV && SUPPRESS_ASSET_ERRORS) - return; - - Stopwatch stopwatch = Stopwatch.createStarted(); - SetMultimap missingTextures = ReflectionHelper.getPrivateValue(FMLClientHandler.class, FMLClientHandler.instance(), "missingTextures"); - Set badTextureDomains = ReflectionHelper.getPrivateValue(FMLClientHandler.class, FMLClientHandler.instance(), "badTextureDomains"); - - String mc = "minecraft"; - String format = "textures/%s.png"; - Set toRemove = new HashSet<>(); - - // Find our missing textures and mark them for removal. Cannot directly remove as it would cause a CME - if (missingTextures.containsKey(mc)) { - Set missingMCTextures = missingTextures.get(mc); - for (ResourceLocation texture : missingMCTextures) - if (texture.getResourcePath().equalsIgnoreCase(String.format(format, "node")) || texture.getResourcePath().equalsIgnoreCase(String.format(format, "crystal"))) - toRemove.add(texture); - } - - // Remove all our found errors - missingTextures.get(mc).removeAll(toRemove); - - // Make sure to only remove the bad MC domain if no other textures are missing - if (missingTextures.get(mc).isEmpty()) { - missingTextures.keySet().remove(mc); - badTextureDomains.remove(mc); - } - BMLog.DEBUG.info("Suppressed required texture errors in {}", stopwatch.stop()); - } - - private static void renderRitualStones(EntityPlayerSP player, float partialTicks) { - World world = player.getEntityWorld(); - ItemRitualDiviner ritualDiviner = (ItemRitualDiviner) player.inventory.getCurrentItem().getItem(); - EnumFacing direction = ritualDiviner.getDirection(player.inventory.getCurrentItem()); - Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(ritualDiviner.getCurrentRitual(player.inventory.getCurrentItem())); - - if (ritual == null) - return; - - GlStateManager.pushMatrix(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GlStateManager.color(1F, 1F, 1F, 0.6125F); - - BlockPos vec3, vX; - vec3 = minecraft.objectMouseOver.getBlockPos(); - double posX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; - double posY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; - double posZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; - - List components = Lists.newArrayList(); - ritual.gatherComponents(components::add); - for (RitualComponent ritualComponent : components) { - vX = vec3.add(ritualComponent.getOffset(direction)); - double minX = vX.getX() - posX; - double minY = vX.getY() - posY; - double minZ = vX.getZ() - posZ; - - if (!world.getBlockState(vX).isOpaqueCube()) { - TextureAtlasSprite texture = null; - - switch (ritualComponent.getRuneType()) { - case BLANK: - texture = ritualStoneBlank; - break; - case WATER: - texture = ritualStoneWater; - break; - case FIRE: - texture = ritualStoneFire; - break; - case EARTH: - texture = ritualStoneEarth; - break; - case AIR: - texture = ritualStoneAir; - break; - case DAWN: - texture = ritualStoneDawn; - break; - case DUSK: - texture = ritualStoneDusk; - break; - } - - RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ); - } - } - - GlStateManager.popMatrix(); - } - - public static void cycleSigil(ItemStack stack, EntityPlayer player, int dWheel) { - int mode = dWheel; - if (!ConfigHandler.client.sigilHoldingSkipsEmptySlots) { - mode = ItemSigilHolding.getCurrentItemOrdinal(stack); - mode = dWheel < 0 ? ItemSigilHolding.next(mode) : ItemSigilHolding.prev(mode); - } - - ItemSigilHolding.cycleToNextSigil(stack, mode); - BloodMagicPacketHandler.INSTANCE.sendToServer(new SigilHoldingPacketProcessor(player.inventory.currentItem, mode)); - ItemStack newStack = ItemSigilHolding.getItemStackInSlot(stack, ItemSigilHolding.getCurrentItemOrdinal(stack)); - player.sendStatusMessage(newStack.isEmpty() ? new TextComponentString("") : newStack.getTextComponent(), true); - } - - private static TextureAtlasSprite forName(TextureMap textureMap, String name, String dir) { - return textureMap.registerSprite(new ResourceLocation(Constants.Mod.DOMAIN + dir + "/" + name)); - } - - public static void renderRitualStones(TileMasterRitualStone masterRitualStone, float partialTicks) { - EntityPlayerSP player = minecraft.player; - World world = player.getEntityWorld(); - EnumFacing direction = mrsHoloDirection; - Ritual ritual = mrsHoloRitual; - - if (ritual == null) - return; - - GlStateManager.pushMatrix(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GlStateManager.color(1F, 1F, 1F, 0.5F); - - BlockPos vec3, vX; - vec3 = masterRitualStone.getPos(); - double posX = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks; - double posY = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks; - double posZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks; - - List components = Lists.newArrayList(); - ritual.gatherComponents(components::add); - for (RitualComponent ritualComponent : components) { - vX = vec3.add(ritualComponent.getOffset(direction)); - double minX = vX.getX() - posX; - double minY = vX.getY() - posY; - double minZ = vX.getZ() - posZ; - - if (!world.getBlockState(vX).isOpaqueCube()) { - TextureAtlasSprite texture = null; - - switch (ritualComponent.getRuneType()) { - case BLANK: - texture = ritualStoneBlank; - break; - case WATER: - texture = ritualStoneWater; - break; - case FIRE: - texture = ritualStoneFire; - break; - case EARTH: - texture = ritualStoneEarth; - break; - case AIR: - texture = ritualStoneAir; - break; - case DAWN: - texture = ritualStoneDawn; - break; - case DUSK: - texture = ritualStoneDusk; - break; - } - - RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ); - } - } - - GlStateManager.popMatrix(); - } - - public static void setRitualHolo(TileMasterRitualStone masterRitualStone, Ritual ritual, EnumFacing direction, boolean displayed) { - mrsHoloDisplay = displayed; - mrsHoloTile = masterRitualStone; - mrsHoloRitual = ritual; - mrsHoloDirection = direction; - } - - public static void setRitualHoloToNull() { - mrsHoloDisplay = false; - mrsHoloTile = null; - mrsHoloRitual = null; - mrsHoloDirection = EnumFacing.NORTH; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/CraftingHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/CraftingHandler.java deleted file mode 100644 index 4d97a8d4..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/CraftingHandler.java +++ /dev/null @@ -1,150 +0,0 @@ -package WayofTime.bloodmagic.util.handler.event; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.item.types.ComponentTypes; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.event.AltarCraftedEvent; -import WayofTime.bloodmagic.iface.IUpgradeTrainer; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.ItemHelper; -import WayofTime.bloodmagic.util.helper.NBTHelper; -import WayofTime.bloodmagic.block.BlockLifeEssence; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.ItemInscriptionTool; -import net.minecraft.init.Items; -import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.ItemBanner; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntityFurnace; -import net.minecraftforge.common.ForgeModContainer; -import net.minecraftforge.event.AnvilUpdateEvent; -import net.minecraftforge.event.furnace.FurnaceFuelBurnTimeEvent; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -import java.util.ArrayList; -import java.util.List; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class CraftingHandler { - - // Sets the uses of crafted Inscription Tools to 10 - @SubscribeEvent - public static void onAltarCrafted(AltarCraftedEvent event) { - if (event.getOutput() == null) { - return; - } - - if (event.getOutput().getItem() instanceof ItemInscriptionTool) { - NBTHelper.checkNBT(event.getOutput()); - event.getOutput().getTagCompound().setInteger(Constants.NBT.USES, 10); - } - - if (event.getOutput().getItem() == ForgeModContainer.getInstance().universalBucket && event.getAltarRecipe().getSyphon() == 1000) { - NBTTagCompound bucketTags = FluidUtil.getFilledBucket(new FluidStack(BlockLifeEssence.getLifeEssence(), Fluid.BUCKET_VOLUME)).getTagCompound(); - event.getOutput().setTagCompound(bucketTags); - } - } - - // Handles crafting of: Revealing Upgrade Tome, Elytra Upgrade Tome, Combining Upgrade Tomes, Setting Upgrade for Trainer - @SubscribeEvent - public static void onAnvil(AnvilUpdateEvent event) { - // TODO - Azanor come back :( -// if (ConfigHandler.thaumcraftGogglesUpgrade) { -// if (event.getLeft().getItem() == RegistrarBloodMagicItems.LIVING_ARMOUR_HELMET && event.getRight().getItem() == Constants.Compat.THAUMCRAFT_GOGGLES && !event.getRight().isItemDamaged()) { -// ItemStack output = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); -// output = NBTHelper.checkNBT(output); -// ItemHelper.LivingUpgrades.setKey(output, BloodMagic.MODID + ".upgrade.revealing"); -// ItemHelper.LivingUpgrades.setLevel(output, 1); -// event.setCost(1); -// -// event.setOutput(output); -// -// return; -// } -// } - - if (event.getLeft().getItem() == RegistrarBloodMagicItems.SIGIL_HOLDING) { - if (event.getRight().getItem() == Items.NAME_TAG) { - ItemStack output = event.getLeft().copy(); - if (!output.hasTagCompound()) - output.setTagCompound(new NBTTagCompound()); - output.getTagCompound().setString(Constants.NBT.COLOR, event.getRight().getDisplayName()); - event.setCost(1); - - event.setOutput(output); - - return; - } - - if (event.getRight().getItem() == Items.DYE) { - EnumDyeColor dyeColor = ItemBanner.getBaseColor(event.getRight()); - ItemStack output = event.getLeft().copy(); - if (!output.hasTagCompound()) - output.setTagCompound(new NBTTagCompound()); - output.getTagCompound().setString(Constants.NBT.COLOR, String.valueOf(Utils.DYE_COLOR_VALUES.getOrDefault(dyeColor, 0))); - event.setCost(1); - - event.setOutput(output); - - return; - } - } - - if (event.getLeft().getItem() == Items.BOOK && event.getRight().getItem() == Items.ELYTRA && !event.getRight().isItemDamaged()) { - ItemStack output = new ItemStack(RegistrarBloodMagicItems.UPGRADE_TOME); - output = NBTHelper.checkNBT(output); - ItemHelper.LivingUpgrades.setKey(output, BloodMagic.MODID + ".upgrade.elytra"); - ItemHelper.LivingUpgrades.setLevel(output, 1); - event.setCost(30); - - event.setOutput(output); - - return; - } - - if (event.getLeft().getItem() == RegistrarBloodMagicItems.UPGRADE_TOME && event.getRight().getItem() == RegistrarBloodMagicItems.UPGRADE_TOME) { - LivingArmourUpgrade leftUpgrade = ItemHelper.LivingUpgrades.getUpgrade(event.getLeft()); - if (leftUpgrade != null && !leftUpgrade.isDowngrade() && ItemHelper.LivingUpgrades.getKey(event.getLeft()).equals(ItemHelper.LivingUpgrades.getKey(event.getRight()))) { - int leftLevel = ItemHelper.LivingUpgrades.getLevel(event.getLeft()); - int rightLevel = ItemHelper.LivingUpgrades.getLevel(event.getRight()); - - if (leftLevel == rightLevel && leftLevel < leftUpgrade.getMaxTier() - 1) { - ItemStack outputStack = event.getLeft().copy(); - ItemHelper.LivingUpgrades.setLevel(outputStack, leftLevel + 1); - event.setCost(leftLevel + 2); - - event.setOutput(outputStack); - - return; - } - } - } - - if (event.getLeft().getItem() instanceof IUpgradeTrainer && event.getRight().getItem() == RegistrarBloodMagicItems.UPGRADE_TOME) { - LivingArmourUpgrade rightUpgrade = ItemHelper.LivingUpgrades.getUpgrade(event.getRight()); - if (rightUpgrade != null) { - String key = ItemHelper.LivingUpgrades.getKey(event.getRight()); - ItemStack outputStack = event.getLeft().copy(); - List keyList = new ArrayList<>(); - keyList.add(key); - if (((IUpgradeTrainer) event.getLeft().getItem()).setTrainedUpgrades(outputStack, keyList)) { - event.setCost(1); - - event.setOutput(outputStack); - } - } - } - } - - @SubscribeEvent - public static void handleFuelLevel(FurnaceFuelBurnTimeEvent event) { - if (ItemStack.areItemsEqual(event.getItemStack(), ComponentTypes.SAND_COAL.getStack())) - event.setBurnTime(TileEntityFurnace.getItemBurnTime(new ItemStack(Items.COAL))); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java deleted file mode 100644 index 0dff68cc..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java +++ /dev/null @@ -1,438 +0,0 @@ -package WayofTime.bloodmagic.util.handler.event; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.event.ItemBindEvent; -import WayofTime.bloodmagic.event.SacrificeKnifeUsedEvent; -import WayofTime.bloodmagic.event.TeleposeEvent; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.iface.ISentientTool; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.soul.DemonWillHolder; -import WayofTime.bloodmagic.block.BlockAltar; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.entity.mob.EntitySentientSpecter; -import WayofTime.bloodmagic.item.ItemAltarMaker; -import WayofTime.bloodmagic.item.ItemExperienceBook; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.item.gear.ItemPackSacrifice; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeBattleHungry; -import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerSelfSacrifice; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeSelfSacrifice; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.network.DemonAuraPacketProcessor; -import WayofTime.bloodmagic.potion.BMPotionUtils; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.util.helper.*; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIAttackMelee; -import net.minecraft.entity.ai.EntityAIBase; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; -import net.minecraft.entity.ai.EntityAITarget; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Enchantments; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumHand; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.item.ItemTossEvent; -import net.minecraftforge.event.entity.living.LivingDropsEvent; -import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; -import net.minecraftforge.event.entity.living.LivingFallEvent; -import net.minecraftforge.event.entity.living.LivingHurtEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.entity.player.PlayerPickupXpEvent; -import net.minecraftforge.event.world.ExplosionEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.common.registry.EntityEntry; -import net.minecraftforge.fml.common.registry.EntityRegistry; - -import java.util.*; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class GenericHandler { - public static Map bounceMap = new HashMap<>(); - public static Map filledHandMap = new HashMap<>(); - private static Map targetTaskMap = new HashMap<>(); - private static Map attackTaskMap = new HashMap<>(); - - @SubscribeEvent - public static void onEntityFall(LivingFallEvent event) { - if (event.getEntityLiving() instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) event.getEntityLiving(); - if (player.isPotionActive(RegistrarBloodMagic.BOUNCE) && !player.isSneaking() && event.getDistance() > 2) { - event.setDamageMultiplier(0); - - if (player.getEntityWorld().isRemote) { - player.motionY *= -0.9; - player.fallDistance = 0; - bounceMap.put(player, player.motionY); - } else { - player.fallDistance = 0; - event.setCanceled(true); - } - } - } - } - - @SubscribeEvent - public static void playerTickPost(TickEvent.PlayerTickEvent event) { - if (event.phase == TickEvent.Phase.END && bounceMap.containsKey(event.player)) { - event.player.motionY = bounceMap.remove(event.player); - } - - if (event.phase == TickEvent.Phase.END) { - if (filledHandMap.containsKey(event.player)) { - int value = filledHandMap.get(event.player) - 1; - if (value <= 0) { - filledHandMap.remove(event.player); - } else { - filledHandMap.put(event.player, value); - } - } - } - } - - @SubscribeEvent - public static void onPlayerClick(PlayerInteractEvent event) { - if (event.isCancelable() && event.getEntityPlayer().isPotionActive(RegistrarBloodMagic.CONSTRICT)) { - EntityPlayer player = event.getEntityPlayer(); - int level = player.getActivePotionEffect(RegistrarBloodMagic.CONSTRICT).getAmplifier(); - if (event.getHand() == EnumHand.OFF_HAND || level > 1) { - event.setCanceled(true); - } - } - } - - @SubscribeEvent - public static void onPlayerDropItem(ItemTossEvent event) { - EntityItem itemEntity = event.getEntityItem(); - if (itemEntity != null) { - ItemStack stack = itemEntity.getItem(); - Item item = stack.getItem(); - if (stack.hasTagCompound() && item instanceof ISentientTool) { - if (((ISentientTool) item).spawnSentientEntityOnDrop(stack, event.getPlayer())) { - event.setCanceled(true); - } - } - } - } - - @SubscribeEvent - public static void onExplosion(ExplosionEvent.Start event) { - World world = event.getWorld(); - Explosion exp = event.getExplosion(); - Vec3d position = exp.getPosition(); - double radius = 3; - - AxisAlignedBB bb = new AxisAlignedBB(position.x - radius, position.y - radius, position.z - radius, position.x + radius, position.y + radius, position.z + radius); - List specterList = world.getEntitiesWithinAABB(EntitySentientSpecter.class, bb); - if (!specterList.isEmpty()) { - for (EntitySentientSpecter specter : specterList) { - if (specter.absorbExplosion(exp)) { - event.setCanceled(true); - return; - } - } - } - } - - @SubscribeEvent - public static void onEntityHurt(LivingHurtEvent event) { - if (event.getEntity().getEntityWorld().isRemote) - return; - - if (event.getSource().getTrueSource() instanceof EntityPlayer && !PlayerHelper.isFakePlayer((EntityPlayer) event.getSource().getTrueSource())) { - EntityPlayer player = (EntityPlayer) event.getSource().getTrueSource(); - - if (!player.getItemStackFromSlot(EntityEquipmentSlot.CHEST).isEmpty() && player.getItemStackFromSlot(EntityEquipmentSlot.CHEST).getItem() instanceof ItemPackSacrifice) { - ItemPackSacrifice pack = (ItemPackSacrifice) player.getItemStackFromSlot(EntityEquipmentSlot.CHEST).getItem(); - - boolean shouldSyphon = pack.getStoredLP(player.getItemStackFromSlot(EntityEquipmentSlot.CHEST)) < pack.CAPACITY; - float damageDone = event.getEntityLiving().getHealth() < event.getAmount() ? event.getAmount() - event.getEntityLiving().getHealth() : event.getAmount(); - int totalLP = Math.round(damageDone * ConfigHandler.values.coatOfArmsConversion); - - if (shouldSyphon) - ItemHelper.LPContainer.addLPToItem(player.getItemStackFromSlot(EntityEquipmentSlot.CHEST), totalLP, pack.CAPACITY); - } - - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.battleHunger", chestStack); - if (upgrade instanceof LivingArmourUpgradeBattleHungry) { - ((LivingArmourUpgradeBattleHungry) upgrade).resetTimer(); - } - } - } - } - } - - // Handles sending the client the Demon Will Aura updates - @SubscribeEvent - public static void onLivingUpdate(LivingUpdateEvent event) { - if (!event.getEntityLiving().getEntityWorld().isRemote) { - EntityLivingBase entity = event.getEntityLiving(); - if (entity instanceof EntityPlayer && entity.ticksExisted % 50 == 0) //TODO: Change to an incremental counter - { - sendPlayerDemonWillAura((EntityPlayer) entity); - } - - if (event.getEntityLiving() instanceof EntityAnimal) { - EntityAnimal animal = (EntityAnimal) event.getEntityLiving(); - if (animal.isPotionActive(RegistrarBloodMagic.SACRIFICIAL_LAMB)) { - if (!targetTaskMap.containsKey(animal)) { - EntityAITarget task = new EntityAINearestAttackableTarget<>(animal, EntityMob.class, false); - EntityAIBase attackTask = new EntityAIAttackMelee(animal, 1.0D, false); - animal.targetTasks.addTask(1, task); - animal.tasks.addTask(1, attackTask); - targetTaskMap.put(animal, task); - attackTaskMap.put(animal, attackTask); - } - - if (animal.getAttackTarget() != null && animal.getDistanceSq(animal.getAttackTarget()) < 4) { - animal.getEntityWorld().createExplosion(null, animal.posX, animal.posY + (double) (animal.height / 16.0F), animal.posZ, 2 + animal.getActivePotionEffect(RegistrarBloodMagic.SACRIFICIAL_LAMB).getAmplifier() * 1.5f, false); - targetTaskMap.remove(animal); - attackTaskMap.remove(animal); - } - } else if (targetTaskMap.containsKey(animal)) { - targetTaskMap.remove(animal); - attackTaskMap.remove(animal); - } - } - } - - EntityLivingBase entity = event.getEntityLiving(); - - if (entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entity; - if (player.isSneaking() && player.isPotionActive(RegistrarBloodMagic.CLING) && Utils.isPlayerBesideSolidBlockFace(player) && !player.onGround) { - if (player.getEntityWorld().isRemote) { - player.motionY = 0; - player.motionX *= 0.8; - player.motionZ *= 0.8; - } else { - player.fallDistance = 0; - } - } - } - - if (entity.isPotionActive(MobEffects.NIGHT_VISION)) { - int duration = entity.getActivePotionEffect(MobEffects.NIGHT_VISION).getDuration(); - if (duration == Constants.Misc.NIGHT_VISION_CONSTANT_END) { - entity.removePotionEffect(MobEffects.NIGHT_VISION); - } - } - - if (entity.isPotionActive(RegistrarBloodMagic.FIRE_FUSE)) { - Random random = entity.getEntityWorld().rand; - entity.getEntityWorld().spawnParticle(EnumParticleTypes.FLAME, entity.posX + random.nextDouble() * 0.3, entity.posY + random.nextDouble() * 0.3, entity.posZ + random.nextDouble() * 0.3, 0, 0.06d, 0); - - int r = entity.getActivePotionEffect(RegistrarBloodMagic.FIRE_FUSE).getAmplifier(); - int radius = r + 1; - - if (entity.getActivePotionEffect(RegistrarBloodMagic.FIRE_FUSE).getDuration() <= 3) { - entity.getEntityWorld().createExplosion(null, entity.posX, entity.posY, entity.posZ, radius, false); - } - } - - if (entity.isPotionActive(RegistrarBloodMagic.PLANT_LEECH)) { - int amplifier = entity.getActivePotionEffect(RegistrarBloodMagic.PLANT_LEECH).getAmplifier(); - int timeRemaining = entity.getActivePotionEffect(RegistrarBloodMagic.PLANT_LEECH).getDuration(); - if (timeRemaining % 10 == 0) { - BMPotionUtils.damageMobAndGrowSurroundingPlants(entity, 2 + amplifier, 1, 0.5 * 3 / (amplifier + 3), 25 * (1 + amplifier)); - } - } - } - - // @SideOnly(Side.SERVER) - public static void sendPlayerDemonWillAura(EntityPlayer player) { - if (player instanceof EntityPlayerMP) { - BlockPos pos = player.getPosition(); - DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(player.getEntityWorld().provider.getDimension(), pos.getX() >> 4, pos.getZ() >> 4); - if (holder != null) { - BloodMagicPacketHandler.sendTo(new DemonAuraPacketProcessor(holder), (EntityPlayerMP) player); - } else { - BloodMagicPacketHandler.sendTo(new DemonAuraPacketProcessor(new DemonWillHolder()), (EntityPlayerMP) player); - } - } - } - - // Handles destroying altar - @SubscribeEvent - public static void harvestEvent(PlayerEvent.HarvestCheck event) { - IBlockState state = event.getTargetBlock(); - Block block = state.getBlock(); - if (block instanceof BlockAltar && event.getEntityPlayer() != null && event.getEntityPlayer() instanceof EntityPlayerMP && !event.getEntityPlayer().getHeldItemMainhand().isEmpty() && event.getEntityPlayer().getHeldItemMainhand().getItem() instanceof ItemAltarMaker) { - ItemAltarMaker altarMaker = (ItemAltarMaker) event.getEntityPlayer().getHeldItemMainhand().getItem(); - event.getEntityPlayer().sendStatusMessage(new TextComponentTranslation("chat.bloodmagic.altarMaker.destroy", altarMaker.destroyAltar(event.getEntityPlayer())), true); - } - } - - // Handle Teleposer block blacklist - @SubscribeEvent - public static void onTelepose(TeleposeEvent event) { - if (BloodMagicAPI.INSTANCE.getBlacklist().getTeleposer().contains(event.initialState) || BloodMagicAPI.INSTANCE.getBlacklist().getTeleposer().contains(event.finalState)) - event.setCanceled(true); - } - - // Handle Teleposer entity blacklist - @SubscribeEvent - public static void onTeleposeEntity(TeleposeEvent.Ent event) { - EntityEntry entry = EntityRegistry.getEntry(event.entity.getClass()); - if (entry != null && BloodMagicAPI.INSTANCE.getBlacklist().getTeleposerEntities().contains(entry.getRegistryName())) - event.setCanceled(true); - } - - // Sets teleport cooldown for Teleposed entities to 5 ticks (1/4 second) instead of 150 (7.5 seconds) - @SubscribeEvent - public static void onTeleposeEntityPost(TeleposeEvent.Ent.Post event) { - event.entity.timeUntilPortal = 5; - } - - // Handles binding of IBindable's as well as setting a player's highest orb tier - @SubscribeEvent - public static void onInteract(PlayerInteractEvent.RightClickItem event) { - if (event.getWorld().isRemote) - return; - - EntityPlayer player = event.getEntityPlayer(); - - if (PlayerHelper.isFakePlayer(player)) - return; - - ItemStack held = event.getItemStack(); - if (!held.isEmpty() && held.getItem() instanceof IBindable) { // Make sure it's bindable - IBindable bindable = (IBindable) held.getItem(); - Binding binding = bindable.getBinding(held); - if (binding == null) { // If the binding is null, let's create one - if (bindable.onBind(player, held)) { - ItemBindEvent toPost = new ItemBindEvent(player, held); - if (MinecraftForge.EVENT_BUS.post(toPost)) // Allow cancellation of binding - return; - - BindableHelper.applyBinding(held, player); // Bind item to the player - } - // If the binding exists, we'll check if the player's name has changed since they last used it and update that if so. - } else if (binding.getOwnerId().equals(player.getGameProfile().getId()) && !binding.getOwnerName().equals(player.getGameProfile().getName())) { - binding.setOwnerName(player.getGameProfile().getName()); - BindableHelper.applyBinding(held, binding); - } - } - - if (!held.isEmpty() && held.getItem() instanceof IBloodOrb) { - IBloodOrb bloodOrb = (IBloodOrb) held.getItem(); - SoulNetwork network = NetworkHelper.getSoulNetwork(player); - - BloodOrb orb = bloodOrb.getOrb(held); - if (orb == null) - return; - - if (orb.getTier() > network.getOrbTier()) - network.setOrbTier(orb.getTier()); - } - } - - @SubscribeEvent - public static void selfSacrificeEvent(SacrificeKnifeUsedEvent event) { - EntityPlayer player = event.player; - - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - StatTrackerSelfSacrifice.incrementCounter(armour, event.healthDrained / 2); - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.selfSacrifice", chestStack); - - if (upgrade instanceof LivingArmourUpgradeSelfSacrifice) { - double modifier = ((LivingArmourUpgradeSelfSacrifice) upgrade).getSacrificeModifier(); - - event.lpAdded = (int) (event.lpAdded * (1 + modifier)); - } - } - } - } - - // Drop Blood Shards - @SubscribeEvent - public static void onLivingDrops(LivingDropsEvent event) { - EntityLivingBase attackedEntity = event.getEntityLiving(); - DamageSource source = event.getSource(); - Entity entity = source.getTrueSource(); - - if (entity != null && entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entity; - ItemStack heldStack = player.getHeldItemMainhand(); - - if (!heldStack.isEmpty() && heldStack.getItem() == RegistrarBloodMagicItems.BOUND_SWORD && !(attackedEntity instanceof EntityAnimal)) - for (int i = 0; i <= EnchantmentHelper.getLootingModifier(player); i++) - if (attackedEntity.getEntityWorld().rand.nextDouble() < 0.2) - event.getDrops().add(new EntityItem(attackedEntity.getEntityWorld(), attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, new ItemStack(RegistrarBloodMagicItems.BLOOD_SHARD, 1, 0))); - } - } - - // Experience Tome - @SubscribeEvent(priority = EventPriority.LOWEST) - public static void onExperiencePickup(PlayerPickupXpEvent event) { - EntityPlayer player = event.getEntityPlayer(); - ItemStack itemstack = EnchantmentHelper.getEnchantedItem(Enchantments.MENDING, player); - - if (!itemstack.isEmpty() && itemstack.isItemDamaged()) { - int i = Math.min(xpToDurability(event.getOrb().xpValue), itemstack.getItemDamage()); - event.getOrb().xpValue -= durabilityToXp(i); - itemstack.setItemDamage(itemstack.getItemDamage() - i); - } - - if (!player.getEntityWorld().isRemote) { - for (ItemStack stack : player.inventory.mainInventory) { - if (stack.getItem() instanceof ItemExperienceBook) { - ItemExperienceBook.addExperience(stack, event.getOrb().xpValue); - event.getOrb().xpValue = 0; - break; - } - } - } - } - - private static int xpToDurability(int xp) { - return xp * 2; - } - - private static int durabilityToXp(int durability) { - return durability / 2; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java deleted file mode 100644 index 456482c3..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/LivingArmourHandler.java +++ /dev/null @@ -1,375 +0,0 @@ -package WayofTime.bloodmagic.util.handler.event; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeCrippledArm; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeQuenched; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeSlowHeal; -import WayofTime.bloodmagic.livingArmour.downgrade.LivingArmourUpgradeStormTrooper; -import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerArrowShot; -import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerGrimReaperSprint; -import WayofTime.bloodmagic.livingArmour.tracker.StatTrackerJump; -import WayofTime.bloodmagic.livingArmour.upgrade.*; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.entity.projectile.EntityThrowable; -import net.minecraft.init.Enchantments; -import net.minecraft.init.Items; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemArrow; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; -import net.minecraft.world.World; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.event.entity.living.LivingDeathEvent; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.living.LivingHealEvent; -import net.minecraftforge.event.entity.player.ArrowLooseEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class LivingArmourHandler -{ - - @SubscribeEvent - public static void onEntityHealed(LivingHealEvent event) - { - if (event.getEntityLiving() instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) event.getEntity(); - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) - { - double modifier = 1; - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.slowHeal", chestStack); - - if (upgrade instanceof LivingArmourUpgradeSlowHeal) - { - modifier *= ((LivingArmourUpgradeSlowHeal) upgrade).getHealingModifier(); - } - - if (modifier != 1) - { - event.setAmount((float) (event.getAmount() * modifier)); - } - } - } - } - } - - @SubscribeEvent - public static void onMiningSpeedCheck(PlayerEvent.BreakSpeed event) - { - EntityPlayer player = event.getEntityPlayer(); - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) - { - double modifier = 1; - for (LivingArmourUpgrade upgrade : armour.upgradeMap.values()) - { - modifier *= upgrade.getMiningSpeedModifier(player); - } - - if (modifier != 1) - { - event.setNewSpeed((float) (event.getOriginalSpeed() * modifier)); - } - } - } - } - - // Applies: Storm Trooper - @SubscribeEvent - public static void onEntityJoinedWorld(EntityJoinWorldEvent event) - { - Entity owner = null; - if (event.getEntity() instanceof EntityArrow) - { - owner = ((EntityArrow) event.getEntity()).shootingEntity; - } else if (event.getEntity() instanceof EntityThrowable) - { - owner = ((EntityThrowable) event.getEntity()).getThrower(); - } - - if (owner instanceof EntityPlayer) - { - Entity projectile = event.getEntity(); - EntityPlayer player = (EntityPlayer) owner; - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) - { - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.stormTrooper", chestStack); - - if (upgrade instanceof LivingArmourUpgradeStormTrooper) - { - float velocityModifier = (float) (((LivingArmourUpgradeStormTrooper) upgrade).getArrowJiggle(player) * Math.sqrt(projectile.motionX * projectile.motionX + projectile.motionY * projectile.motionY + projectile.motionZ * projectile.motionZ)); - - projectile.motionX += 2 * (event.getWorld().rand.nextDouble() - 0.5) * velocityModifier; - projectile.motionY += 2 * (event.getWorld().rand.nextDouble() - 0.5) * velocityModifier; - projectile.motionZ += 2 * (event.getWorld().rand.nextDouble() - 0.5) * velocityModifier; - } - } - } - } - } - - @SubscribeEvent - public static void onPlayerClick(PlayerInteractEvent event) - { - if (event.isCancelable()) - { - EntityPlayer player = event.getEntityPlayer(); - - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) - { - if (event.getHand() == EnumHand.OFF_HAND) - { - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.crippledArm", chestStack); - - if (upgrade instanceof LivingArmourUpgradeCrippledArm) - { - event.setCanceled(true); - } - } - - if (event.getItemStack().getItemUseAction() == EnumAction.DRINK) - { - ItemStack drinkStack = event.getItemStack(); - - //TODO: See if the item is a splash potion? Those should be usable. - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.quenched", chestStack); - - if (upgrade instanceof LivingArmourUpgradeQuenched) - { - event.setCanceled(true); - } - } - } - } - } - } - - // Applies: Grim Reaper - @SubscribeEvent(priority = EventPriority.HIGHEST) - public static void onEntityDeath(LivingDeathEvent event) - { - if (event.getEntityLiving() instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) event.getEntityLiving(); - - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) - { - StatTrackerGrimReaperSprint.incrementCounter(armour); - - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.grimReaper", chestStack); - - if (upgrade instanceof LivingArmourUpgradeGrimReaperSprint && ((LivingArmourUpgradeGrimReaperSprint) upgrade).canSavePlayer(player)) - { - ((LivingArmourUpgradeGrimReaperSprint) upgrade).applyEffectOnRebirth(player); - event.setCanceled(true); - event.setResult(Event.Result.DENY); - } - - armour.writeDirtyToNBT(ItemLivingArmour.getArmourTag(chestStack)); - } - } - } - } - - // Applies: Jump - @SubscribeEvent - public static void onJumpEvent(LivingEvent.LivingJumpEvent event) - { - if (event.getEntityLiving() instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) event.getEntityLiving(); - - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) - { - StatTrackerJump.incrementCounter(armour); - - if (!player.isSneaking()) - { - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgradeFromNBT(BloodMagic.MODID + ".upgrade.jump", chestStack); - - if (upgrade instanceof LivingArmourUpgradeJump) - { - player.motionY += ((LivingArmourUpgradeJump) upgrade).getJumpModifier(); - } - } - } - } - } - } - - // Applies: Step Assist, Speed Boost - @SubscribeEvent(priority = EventPriority.HIGHEST) - public static void onEntityUpdate(LivingEvent.LivingUpdateEvent event) - { - if (event.getEntityLiving() instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) event.getEntityLiving(); - boolean hasAssist = false; - if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.BOOST)) - { - hasAssist = true; - player.stepHeight = Constants.Misc.ALTERED_STEP_HEIGHT; - } else - { - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmourFromStack(chestStack); - if (armour != null) - { - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.stepAssist", chestStack); - - if (upgrade instanceof LivingArmourUpgradeStepAssist) - { - player.stepHeight = ((LivingArmourUpgradeStepAssist) upgrade).getStepAssist(); - hasAssist = true; - } - } - } - } - - if (!hasAssist && player.stepHeight == Constants.Misc.ALTERED_STEP_HEIGHT) - player.stepHeight = 0.6f; - - float percentIncrease = 0; - - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmourFromStack(chestStack); - if (armour != null) - { - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgradeFromNBT(BloodMagic.MODID + ".upgrade.movement", chestStack); - - if (upgrade instanceof LivingArmourUpgradeSpeed) - { - percentIncrease += ((LivingArmourUpgradeSpeed) upgrade).getSpeedModifier(); - } - } - } - - if (event.getEntityLiving().isPotionActive(RegistrarBloodMagic.BOOST)) - { - int i = event.getEntityLiving().getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); - { - percentIncrease += (i + 1) * 0.5f; - } - } - - if (percentIncrease > 0 && (player.onGround || player.capabilities.isFlying) && (Math.abs(player.moveForward) > 0 || Math.abs(player.moveStrafing) > 0)) - { - player.travel(player.moveStrafing * percentIncrease, 0, player.moveForward * percentIncrease); - } - } - } - - // Applies: Arrow Shot - // Tracks: Arrow Shot - @SubscribeEvent - public static void onArrowFire(ArrowLooseEvent event) - { - World world = event.getEntityPlayer().getEntityWorld(); - ItemStack stack = event.getBow(); - EntityPlayer player = event.getEntityPlayer(); - - if (world.isRemote) - return; - - if (LivingArmour.hasFullSet(player)) - { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) - { - StatTrackerArrowShot.incrementCounter(armour); - - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.arrowShot", chestStack); - if (upgrade instanceof LivingArmourUpgradeArrowShot) - { - int charge = event.getCharge(); - float velocity = (float) charge / 20.0F; - velocity = (velocity * velocity + velocity * 2.0F) / 3.0F; - - if ((double) velocity < 0.1D) - return; - - if (velocity > 1.0F) - velocity = 1.0F; - - int extraArrows = ((LivingArmourUpgradeArrowShot) upgrade).getExtraArrows(); - for (int n = 0; n < extraArrows; n++) - { - ItemStack arrowStack = new ItemStack(Items.ARROW); - ItemArrow itemarrow = (ItemArrow) ((stack.getItem() instanceof ItemArrow ? arrowStack.getItem() : Items.ARROW)); - EntityArrow entityarrow = itemarrow.createArrow(world, arrowStack, player); - entityarrow.shoot(player, player.rotationPitch, player.rotationYaw, 0.0F, velocity * 3.0F, 1.0F); - - float velocityModifier = 0.6f * velocity; - - entityarrow.motionX += (event.getWorld().rand.nextDouble() - 0.5) * velocityModifier; - entityarrow.motionY += (event.getWorld().rand.nextDouble() - 0.5) * velocityModifier; - entityarrow.motionZ += (event.getWorld().rand.nextDouble() - 0.5) * velocityModifier; - - if (velocity == 1.0F) - entityarrow.setIsCritical(true); - - int powerLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack); - - if (powerLevel > 0) - entityarrow.setDamage(entityarrow.getDamage() + (double) powerLevel * 0.5D + 0.5D); - - int punchLevel = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack); - - if (punchLevel > 0) - entityarrow.setKnockbackStrength(punchLevel); - - if (EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, stack) > 0) - entityarrow.setFire(100); - - entityarrow.pickupStatus = EntityArrow.PickupStatus.CREATIVE_ONLY; - - world.spawnEntity(entityarrow); - } - } - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java deleted file mode 100644 index a894a655..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/StatTrackerHandler.java +++ /dev/null @@ -1,175 +0,0 @@ -package WayofTime.bloodmagic.util.handler.event; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.item.armour.ItemLivingArmour; -import WayofTime.bloodmagic.item.armour.ItemSentientArmour; -import WayofTime.bloodmagic.livingArmour.LivingArmour; -import WayofTime.bloodmagic.livingArmour.tracker.*; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeDigging; -import WayofTime.bloodmagic.livingArmour.upgrade.LivingArmourUpgradeExperience; -import WayofTime.bloodmagic.util.Utils; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.item.ItemSpade; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.event.entity.living.LivingHealEvent; -import net.minecraftforge.event.entity.living.LivingHurtEvent; -import net.minecraftforge.event.entity.player.AttackEntityEvent; -import net.minecraftforge.event.entity.player.PlayerPickupXpEvent; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class StatTrackerHandler { - - private static float lastPlayerSwingStrength = 0; - - // Tracks: Digging, DigSlowdown - @SubscribeEvent - public static void blockBreakEvent(BlockEvent.BreakEvent event) { - EntityPlayer player = event.getPlayer(); - if (player != null) { - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - if (chestStack.getItem() instanceof ItemLivingArmour) { - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - - if (armour != null) { - StatTrackerDigging.incrementCounter(armour); - LivingArmourUpgradeDigging.hasDug(armour); - } - } - } - } - } - - // Tracks: Health Boost - @SubscribeEvent - public static void onEntityHealed(LivingHealEvent event) { - EntityLivingBase healedEntity = event.getEntityLiving(); - if (!(healedEntity instanceof EntityPlayer)) { - return; - } - - EntityPlayer player = (EntityPlayer) healedEntity; - - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - StatTrackerHealthboost.incrementCounter(armour, event.getAmount()); - if (player.getEntityWorld().canSeeSky(player.getPosition()) && player.getEntityWorld().provider.isDaytime()) { - StatTrackerSolarPowered.incrementCounter(armour, event.getAmount()); - } - } - } - } - - @SubscribeEvent - public static void onLivingAttack(AttackEntityEvent event) { - lastPlayerSwingStrength = event.getEntityPlayer().getCooledAttackStrength(0); - } - - // Tracks: Fall Protect, Arrow Protect, Physical Protect, Grave Digger, Sprint Attack, Critical Strike, Nocturnal Prowess - @SubscribeEvent - public static void entityHurt(LivingHurtEvent event) { - DamageSource source = event.getSource(); - Entity sourceEntity = event.getSource().getTrueSource(); - EntityLivingBase attackedEntity = event.getEntityLiving(); - - if (attackedEntity instanceof EntityPlayer) { - EntityPlayer attackedPlayer = (EntityPlayer) attackedEntity; - - // Living Armor Handling - if (LivingArmour.hasFullSet(attackedPlayer)) { - float amount = Math.min(Utils.getModifiedDamage(attackedPlayer, event.getSource(), event.getAmount()), attackedPlayer.getHealth()); - ItemStack chestStack = attackedPlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - if (sourceEntity != null && !source.isMagicDamage() && !source.isProjectile()) - StatTrackerPhysicalProtect.incrementCounter(armour, amount); - - if (source.equals(DamageSource.FALL)) - StatTrackerFallProtect.incrementCounter(armour, amount); - - if (source.isProjectile()) - StatTrackerArrowProtect.incrementCounter(armour, amount); - } - } else { - ItemStack chestStack = attackedPlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - if (chestStack.getItem() instanceof ItemSentientArmour) { - ItemSentientArmour armour = (ItemSentientArmour) chestStack.getItem(); - armour.onPlayerAttacked(chestStack, source, attackedPlayer); - } - } - } - - if (sourceEntity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) sourceEntity; - - // Living Armor Handling - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - ItemStack mainWeapon = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); - - event.setAmount((float) (event.getAmount() + lastPlayerSwingStrength * armour.getAdditionalDamageOnHit(event.getAmount(), player, attackedEntity, mainWeapon))); - - float amount = Math.min(Utils.getModifiedDamage(attackedEntity, event.getSource(), event.getAmount()), attackedEntity.getHealth()); - - if (!source.isProjectile()) { - StatTrackerMeleeDamage.incrementCounter(armour, amount); - - if (player.getEntityWorld().getLight(player.getPosition()) <= 9) - StatTrackerNightSight.incrementCounter(armour, amount); - - if (mainWeapon.getItem() instanceof ItemSpade) - StatTrackerGraveDigger.incrementCounter(armour, amount); - - if (player.isSprinting()) - StatTrackerSprintAttack.incrementCounter(armour, amount); - - boolean isCritical = lastPlayerSwingStrength > 0.9 && player.fallDistance > 0.0F && !player.onGround && !player.isOnLadder() && !player.isInWater() && !player.isPotionActive(MobEffects.BLINDNESS) && !player.isRiding() && !player.isSprinting(); - if (isCritical) - StatTrackerCriticalStrike.incrementCounter(armour, amount); - - double kb = armour.getKnockbackOnHit(player, attackedEntity, mainWeapon); - if (kb > 0) - attackedEntity.knockBack(player, (float) kb * 0.5F, (double) MathHelper.sin(player.rotationYaw * 0.017453292F), (double) (-MathHelper.cos(player.rotationYaw * 0.017453292F))); - } - } - } - } - } - - // Tracks: Experienced - @SubscribeEvent(priority = EventPriority.LOW) - public static void onExperiencePickup(PlayerPickupXpEvent event) { - EntityPlayer player = event.getEntityPlayer(); - - if (LivingArmour.hasFullSet(player)) { - ItemStack chestStack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - LivingArmour armour = ItemLivingArmour.getLivingArmour(chestStack); - if (armour != null) { - LivingArmourUpgrade upgrade = ItemLivingArmour.getUpgrade(BloodMagic.MODID + ".upgrade.experienced", chestStack); - if (upgrade instanceof LivingArmourUpgradeExperience) { - double modifier = ((LivingArmourUpgradeExperience) upgrade).getExperienceModifier(); - double exp = event.getOrb().xpValue * (1 + modifier); - - event.getOrb().xpValue = (int) Math.floor(exp) + (Math.random() < exp % 1 ? 1 : 0); - } - - StatTrackerExperience.incrementCounter(armour, event.getOrb().xpValue); - } - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java deleted file mode 100644 index 4b735090..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/WillHandler.java +++ /dev/null @@ -1,166 +0,0 @@ -package WayofTime.bloodmagic.util.handler.event; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.soul.*; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.demonAura.PosXY; -import WayofTime.bloodmagic.demonAura.WillChunk; -import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler; -import WayofTime.bloodmagic.entity.projectile.EntitySentientArrow; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSourceIndirect; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.EnumDifficulty; -import net.minecraftforge.event.entity.living.LivingDeathEvent; -import net.minecraftforge.event.entity.living.LivingDropsEvent; -import net.minecraftforge.event.entity.player.EntityItemPickupEvent; -import net.minecraftforge.event.world.ChunkDataEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; - -import java.util.HashMap; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - -@Mod.EventBusSubscriber(modid = BloodMagic.MODID) -public class WillHandler { - - private static final HashMap SERVER_TICKS = new HashMap<>(); - - // Adds Will to player - @SubscribeEvent - public static void onItemPickup(EntityItemPickupEvent event) { - ItemStack stack = event.getItem().getItem(); - if (stack.getItem() instanceof IDemonWill) { - EntityPlayer player = event.getEntityPlayer(); - EnumDemonWillType pickupType = ((IDemonWill) stack.getItem()).getType(stack); - ItemStack remainder = PlayerDemonWillHandler.addDemonWill(player, stack); - - if (remainder == null || ((IDemonWill) stack.getItem()).getWill(pickupType, stack) < 0.0001 || PlayerDemonWillHandler.isDemonWillFull(pickupType, player)) { - stack.setCount(0); - event.setResult(Event.Result.ALLOW); - } - } - } - - @SubscribeEvent - public static void onEntityAttacked(LivingDeathEvent event) { - if (event.getSource() instanceof EntityDamageSourceIndirect) { - Entity sourceEntity = event.getSource().getImmediateSource(); - - if (sourceEntity instanceof EntitySentientArrow) { - ((EntitySentientArrow) sourceEntity).reimbursePlayer(event.getEntityLiving(), event.getEntityLiving().getMaxHealth()); - } - } - } - - // Add/Drop Demon Will for Player - @SubscribeEvent - public static void onLivingDrops(LivingDropsEvent event) { - EntityLivingBase attackedEntity = event.getEntityLiving(); - DamageSource source = event.getSource(); - Entity entity = source.getTrueSource(); - - if (attackedEntity.isPotionActive(RegistrarBloodMagic.SOUL_SNARE) && (attackedEntity instanceof EntityMob || attackedEntity.getEntityWorld().getDifficulty() == EnumDifficulty.PEACEFUL)) { - PotionEffect eff = attackedEntity.getActivePotionEffect(RegistrarBloodMagic.SOUL_SNARE); - int lvl = eff.getAmplifier(); - - double amountOfSouls = attackedEntity.getEntityWorld().rand.nextDouble() * (lvl + 1) * (lvl + 1) * 5; - ItemStack soulStack = ((IDemonWill) RegistrarBloodMagicItems.MONSTER_SOUL).createWill(0, amountOfSouls); - event.getDrops().add(new EntityItem(attackedEntity.getEntityWorld(), attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, soulStack)); - } - - if (entity != null && entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entity; - ItemStack heldStack = player.getHeldItemMainhand(); - if (heldStack.getItem() instanceof IDemonWillWeapon && !player.getEntityWorld().isRemote) { - IDemonWillWeapon demonWillWeapon = (IDemonWillWeapon) heldStack.getItem(); - List droppedSouls = demonWillWeapon.getRandomDemonWillDrop(attackedEntity, player, heldStack, event.getLootingLevel()); - if (!droppedSouls.isEmpty()) { - ItemStack remainder; - for (ItemStack willStack : droppedSouls) { - remainder = PlayerDemonWillHandler.addDemonWill(player, willStack); - - if (!remainder.isEmpty()) { - EnumDemonWillType pickupType = ((IDemonWill) remainder.getItem()).getType(remainder); - if (((IDemonWill) remainder.getItem()).getWill(pickupType, remainder) >= 0.0001) { - event.getDrops().add(new EntityItem(attackedEntity.getEntityWorld(), attackedEntity.posX, attackedEntity.posY, attackedEntity.posZ, remainder)); - } - } - } - player.inventoryContainer.detectAndSendChanges(); - } - } - } - } - - @SubscribeEvent - public static void onServerWorldTick(TickEvent.WorldTickEvent event) { - if (event.world.isRemote) - return; - - int dim = event.world.provider.getDimension(); - if (event.phase == TickEvent.Phase.END) { - if (!SERVER_TICKS.containsKey(dim)) - SERVER_TICKS.put(dim, 0); - - int ticks = (SERVER_TICKS.get(dim)); - - if (ticks % 20 == 0) { - CopyOnWriteArrayList dirtyChunks = WorldDemonWillHandler.dirtyChunks.get(dim); - if ((dirtyChunks != null) && (dirtyChunks.size() > 0)) { - for (PosXY pos : dirtyChunks) - event.world.markChunkDirty(new BlockPos(pos.x * 16, 5, pos.y * 16), null); - - dirtyChunks.clear(); - } - } - - SERVER_TICKS.put(dim, ticks + 1); - } - - } - - @SubscribeEvent - public static void chunkSave(ChunkDataEvent.Save event) { - int dim = event.getWorld().provider.getDimension(); - ChunkPos loc = event.getChunk().getPos(); - - NBTTagCompound nbt = new NBTTagCompound(); - event.getData().setTag("BloodMagic", nbt); - - WillChunk ac = WorldDemonWillHandler.getWillChunk(dim, loc.x, loc.z); - if (ac != null) { - nbt.setShort("base", ac.getBase()); - ac.getCurrentWill().writeToNBT(nbt, "current"); - if (!event.getChunk().isLoaded()) - WorldDemonWillHandler.removeWillChunk(dim, loc.x, loc.z); - } - } - - @SubscribeEvent - public static void chunkLoad(ChunkDataEvent.Load event) { - int dim = event.getWorld().provider.getDimension(); - if (event.getData().getCompoundTag("BloodMagic").hasKey("base")) { - NBTTagCompound nbt = event.getData().getCompoundTag("BloodMagic"); - short base = nbt.getShort("base"); - DemonWillHolder current = new DemonWillHolder(); - current.readFromNBT(nbt, "current"); - WorldDemonWillHandler.addWillChunk(dim, event.getChunk(), base, current); - } else { - WorldDemonWillHandler.generateWill(event.getChunk()); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/BindableHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/BindableHelper.java deleted file mode 100644 index 2606eae9..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/BindableHelper.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.util.Constants; -import WayofTime.bloodmagic.event.ItemBindEvent; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class BindableHelper { - - public static void applyBinding(ItemStack stack, EntityPlayer player) { - Binding binding = new Binding(player.getGameProfile().getId(), player.getGameProfile().getName()); - applyBinding(stack, binding); - } - - public static void applyBinding(ItemStack stack, Binding binding) { - if (!stack.hasTagCompound()) - stack.setTagCompound(new NBTTagCompound()); - - stack.getTagCompound().setTag("binding", binding.serializeNBT()); - } - - /** - * Sets the Owner Name of the item without checking if it is already bound. - * Also bypasses {@link ItemBindEvent}. - * - * @param stack - The ItemStack to bind - * @param ownerName - The username to bind the ItemStack to - */ - public static void setItemOwnerName(ItemStack stack, String ownerName) { - stack = NBTHelper.checkNBT(stack); - - stack.getTagCompound().setString(Constants.NBT.OWNER_NAME, ownerName); - } - - /** - * Sets the Owner UUID of the item without checking if it is already bound. - * Also bypasses {@link ItemBindEvent}. - * - * @param stack - The ItemStack to bind - * @param ownerUUID - The UUID to bind the ItemStack to - */ - public static void setItemOwnerUUID(ItemStack stack, String ownerUUID) { - stack = NBTHelper.checkNBT(stack); - - stack.getTagCompound().setString(Constants.NBT.OWNER_UUID, ownerUUID); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/IncenseHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/IncenseHelper.java deleted file mode 100644 index 559690ee..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/IncenseHelper.java +++ /dev/null @@ -1,45 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.util.Constants; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class IncenseHelper { - - public static double getCurrentIncense(EntityPlayer player) { - NBTTagCompound data = player.getEntityData(); - if (data.hasKey(Constants.NBT.CURRENT_INCENSE)) { - return data.getDouble(Constants.NBT.CURRENT_INCENSE); - } - - return 0; - } - - public static void setCurrentIncense(EntityPlayer player, double amount) { - NBTTagCompound data = player.getEntityData(); - data.setDouble(Constants.NBT.CURRENT_INCENSE, amount); - } - - public static void setMaxIncense(EntityPlayer player, double amount){ - NBTTagCompound data = player.getEntityData(); - data.setDouble(Constants.NBT.MAX_INCENSE, amount); - } - - public static double getMaxIncense(EntityPlayer player) { - NBTTagCompound data = player.getEntityData(); - if (data.hasKey(Constants.NBT.MAX_INCENSE)) { - return data.getDouble(Constants.NBT.MAX_INCENSE); - } - return 0; - } - - public static void setHasMaxIncense(ItemStack stack, EntityPlayer player, boolean isMax) { - stack = NBTHelper.checkNBT(stack); - stack.getTagCompound().setBoolean(Constants.NBT.HAS_MAX_INCENSE, isMax); - } - public static boolean getHasMaxIncense(ItemStack stack) { - stack = NBTHelper.checkNBT(stack); - return stack.getTagCompound().getBoolean(Constants.NBT.HAS_MAX_INCENSE); - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/ItemHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/ItemHelper.java deleted file mode 100644 index 24912b87..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/ItemHelper.java +++ /dev/null @@ -1,131 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.altar.IBloodAltar; -import WayofTime.bloodmagic.iface.IItemLPContainer; -import WayofTime.bloodmagic.iface.IUpgradeTrainer; -import WayofTime.bloodmagic.livingArmour.LivingArmourHandler; -import WayofTime.bloodmagic.livingArmour.LivingArmourUpgrade; -import WayofTime.bloodmagic.item.ItemUpgradeTome; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class ItemHelper { - // IItemLPContainer - public static class LPContainer { - /** - * Attempts to fill an altar with the contained LP - * - * @param altar - The altar in question - * @param itemStack - The {@link IItemLPContainer} ItemStack filling the altar - * @param world - The world - * @param altarPos - The position of the altar - * @return Whether or not the altar was filled (or at least attempted) - */ - public static boolean tryAndFillAltar(IBloodAltar altar, ItemStack itemStack, World world, BlockPos altarPos) { - if (itemStack.getItem() instanceof IItemLPContainer) { - if (!altar.isActive()) { - IItemLPContainer fillable = (IItemLPContainer) itemStack.getItem(); - int amount = fillable.getStoredLP(itemStack); - - if (amount > 0) { - int filledAmount = altar.fillMainTank(amount); - amount -= filledAmount; - fillable.setStoredLP(itemStack, amount); - world.notifyBlockUpdate(altarPos, world.getBlockState(altarPos), world.getBlockState(altarPos), 3); - return true; - } - } - } - - return false; - } - - /** - * Adds the given LP into the {@link IItemLPContainer}'s storage - * - * @param stack - The item in question - * @param toAdd - How much LP should be added to the item - * @param maxCapacity - The item's maximum holding capacity - * @return Whether or not LP was added to the item - */ - public static boolean addLPToItem(ItemStack stack, int toAdd, int maxCapacity) { - if (stack.getItem() instanceof IItemLPContainer) { - IItemLPContainer fillable = (IItemLPContainer) stack.getItem(); - stack = NBTHelper.checkNBT(stack); - - if (toAdd < 0) - toAdd = 0; - - if (toAdd > maxCapacity) - toAdd = maxCapacity; - - fillable.setStoredLP(stack, Math.min(fillable.getStoredLP(stack) + toAdd, maxCapacity)); - return true; - } - - return false; - } - } - - public static class LivingUpgrades { - public static LivingArmourUpgrade getUpgrade(ItemStack stack) { - if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer) { - String key = getKey(stack); - int level = getLevel(stack); - - return LivingArmourHandler.generateUpgradeFromKey(key, level); - } - - return null; - } - - public static void setUpgrade(ItemStack stack, LivingArmourUpgrade upgrade) { - if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer) { - setKey(stack, upgrade.getUniqueIdentifier()); - setLevel(stack, upgrade.getUpgradeLevel()); - } - } - - public static void setKey(ItemStack stack, String key) { - if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - tag.setString("key", key); - } - } - - public static String getKey(ItemStack stack) { - if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getString("key"); - } - - return ""; - } - - public static void setLevel(ItemStack stack, int level) { - if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - tag.setInteger("level", level); - } - } - - public static int getLevel(ItemStack stack) { - if (stack.getItem() instanceof ItemUpgradeTome || stack.getItem() instanceof IUpgradeTrainer) { - NBTHelper.checkNBT(stack); - NBTTagCompound tag = stack.getTagCompound(); - - return tag.getInteger("level"); - } - - return 0; - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/NBTHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/NBTHelper.java deleted file mode 100644 index 59a73f3e..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/NBTHelper.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class NBTHelper { - public static ItemStack checkNBT(ItemStack stack) { - if (stack.getTagCompound() == null) - stack.setTagCompound(new NBTTagCompound()); - - return stack; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/NetworkHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/NetworkHelper.java deleted file mode 100644 index bd79a435..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/NetworkHelper.java +++ /dev/null @@ -1,168 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.core.data.Binding; -import WayofTime.bloodmagic.core.data.SoulTicket; -import WayofTime.bloodmagic.event.SoulNetworkEvent; -import WayofTime.bloodmagic.iface.IBindable; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.core.registry.OrbRegistry; -import WayofTime.bloodmagic.core.data.BMWorldSavedData; -import WayofTime.bloodmagic.core.data.SoulNetwork; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.MinecraftForge; - -import java.util.UUID; - -public class NetworkHelper { - // Get - - /** - * Gets the SoulNetwork for the player. - * - * @param uuid - The UUID of the SoulNetwork owner - this is UUID.toString(). - * @return - The SoulNetwork for the given name. - */ - public static SoulNetwork getSoulNetwork(String uuid) { - World world = DimensionManager.getWorld(0); - if (world == null || world.getMapStorage() == null) //Hack-ish way to fix the lava crystal. - return new BMWorldSavedData().getNetwork(UUID.fromString(uuid)); - - BMWorldSavedData saveData = (BMWorldSavedData) world.getMapStorage().getOrLoadData(BMWorldSavedData.class, BMWorldSavedData.ID); - - if (saveData == null) { - saveData = new BMWorldSavedData(); - world.getMapStorage().setData(BMWorldSavedData.ID, saveData); - } - - return saveData.getNetwork(UUID.fromString(uuid)); - } - - /** - * @param uuid - The Player's Mojang UUID - * @see NetworkHelper#getSoulNetwork(String) - */ - public static SoulNetwork getSoulNetwork(UUID uuid) { - return getSoulNetwork(uuid.toString()); - } - - /** - * @param player - The Player - * @see NetworkHelper#getSoulNetwork(String) - */ - public static SoulNetwork getSoulNetwork(EntityPlayer player) { - return getSoulNetwork(PlayerHelper.getUUIDFromPlayer(player)); - } - - public static SoulNetwork getSoulNetwork(Binding binding) { - return getSoulNetwork(binding.getOwnerId()); - } - - /** - * Gets the current orb tier of the SoulNetwork. - * - * @param soulNetwork - SoulNetwork to get the tier of. - * @return - The Orb tier of the given SoulNetwork - */ - public static int getCurrentMaxOrb(SoulNetwork soulNetwork) { - return soulNetwork.getOrbTier(); - } - - public static int getMaximumForTier(int tier) { - int ret = 0; - - if (tier > OrbRegistry.getTierMap().size() || tier < 0) - return ret; - - for (ItemStack orbStack : OrbRegistry.getOrbsForTier(tier)) { - BloodOrb orb = ((IBloodOrb) orbStack.getItem()).getOrb(orbStack); - if (orb.getCapacity() > ret) - ret = orb.getCapacity(); - } - - return ret; - } - - // Syphon - - /** - * Syphons from the player and damages them if there was not enough stored - * LP. - *

- * Handles null-checking the player for you. - * - * @param soulNetwork - SoulNetwork to syphon from - * @param user - User of the item. - * @param toSyphon - Amount of LP to syphon - * @return - Whether the action should be performed. - * @deprecated Use {@link #getSoulNetwork(EntityPlayer)} and {@link SoulNetwork#syphonAndDamage$(EntityPlayer, SoulTicket)} - */ - @Deprecated - public static boolean syphonAndDamage(SoulNetwork soulNetwork, EntityPlayer user, int toSyphon) { - -// if (soulNetwork.getNewOwner() == null) -// { -// soulNetwork.syphon(toSyphon); -// return true; -// } - - return soulNetwork.syphonAndDamage(user, toSyphon); - } - - /** - * Syphons a player from within a container. - * - * @param stack - ItemStack in the Container. - * @param ticket - SoulTicket to syphon - * @return - If the syphon was successful. - */ - public static boolean syphonFromContainer(ItemStack stack, SoulTicket ticket) - { - if (!(stack.getItem() instanceof IBindable)) - return false; - - Binding binding = ((IBindable) stack.getItem()).getBinding(stack); - if (binding == null) - return false; - - SoulNetwork network = getSoulNetwork(binding); - SoulNetworkEvent.Syphon.Item event = new SoulNetworkEvent.Syphon.Item(network, ticket, stack); - - return !MinecraftForge.EVENT_BUS.post(event) && network.syphon(event.getTicket(),true) >= ticket.getAmount(); - } - - /** - * Checks if the ItemStack has a user to be syphoned from. - * - * @param stack - ItemStack to check - * @param toSyphon - Amount of LP to syphon - * @return - If syphoning is possible - */ - public static boolean canSyphonFromContainer(ItemStack stack, int toSyphon) { - if (!(stack.getItem() instanceof IBindable)) - return false; - - Binding binding = ((IBindable) stack.getItem()).getBinding(stack); - if (binding == null) - return false; - - SoulNetwork network = getSoulNetwork(binding); - return network.getCurrentEssence() >= toSyphon; - } - - // Set - - /** - * Sets the orb tier of the SoulNetwork to the given orb. Will not set if - * the given tier is lower than the current tier. - * - * @param soulNetwork - SoulNetwork to set the orb tier of - * @param maxOrb - Tier of orb to set to - */ - public static void setMaxOrb(SoulNetwork soulNetwork, int maxOrb) { - soulNetwork.setOrbTier(Math.max(maxOrb, soulNetwork.getOrbTier())); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/NumeralHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/NumeralHelper.java deleted file mode 100644 index e98cccfb..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/NumeralHelper.java +++ /dev/null @@ -1,32 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import java.util.TreeMap; - -public class NumeralHelper { - - private static final TreeMap romanNumerals = new TreeMap<>(); - - static { - romanNumerals.put(1000, "M"); - romanNumerals.put(900, "CM"); - romanNumerals.put(500, "D"); - romanNumerals.put(400, "CD"); - romanNumerals.put(100, "C"); - romanNumerals.put(90, "XC"); - romanNumerals.put(50, "L"); - romanNumerals.put(40, "XL"); - romanNumerals.put(10, "X"); - romanNumerals.put(9, "IX"); - romanNumerals.put(5, "V"); - romanNumerals.put(4, "IV"); - romanNumerals.put(1, "I"); - } - - public static String toRoman(int arabic) { - int convert = romanNumerals.floorKey(arabic); - if (arabic == convert) - return romanNumerals.get(convert); - - return romanNumerals.get(convert) + toRoman(arabic - convert); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/PlayerHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/PlayerHelper.java deleted file mode 100644 index 601a9240..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/PlayerHelper.java +++ /dev/null @@ -1,49 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import com.google.common.collect.Lists; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.UsernameCache; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.relauncher.Side; - -import java.util.ArrayList; -import java.util.UUID; - -public class PlayerHelper { - /** - * A list of all known fake players that do not extend FakePlayer. - *

- * Will be added to as needed. - */ - private static final ArrayList knownFakePlayers = Lists.newArrayList(); - - public static EntityPlayer getPlayerFromId(UUID uuid) { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) - return null; - - return FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getPlayerByUUID(uuid); - } - - public static EntityPlayer getPlayerFromUUID(UUID uuid) { - return getPlayerFromId(uuid); - } - - public static UUID getUUIDFromPlayer(EntityPlayer player) { - return player.getGameProfile().getId(); - } - - public static String getUsernameFromUUID(UUID uuid) { - return UsernameCache.getLastKnownUsername(uuid); - } - - /** - * Checks whether or not the given player is an "actual" player - * - * @param player - The player in question - * @return If the player is fake or not - */ - public static boolean isFakePlayer(EntityPlayer player) { - return player instanceof FakePlayer || (player != null && knownFakePlayers.contains(player.getClass().getCanonicalName())); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/PlayerSacrificeHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/PlayerSacrificeHelper.java deleted file mode 100644 index 1fc54b05..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/PlayerSacrificeHelper.java +++ /dev/null @@ -1,138 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.ConfigHandler; -import WayofTime.bloodmagic.altar.IBloodAltar; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import WayofTime.bloodmagic.event.SacrificeKnifeUsedEvent; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; - -public class PlayerSacrificeHelper { - public static float scalingOfSacrifice = 1f; - public static int soulFrayDuration = 400; - public static Potion soulFrayId; - - public static double getPlayerIncense(EntityPlayer player) { - return IncenseHelper.getCurrentIncense(player); - } - - public static void setPlayerIncense(EntityPlayer player, double amount) { - IncenseHelper.setCurrentIncense(player, amount); - } - - public static boolean incrementIncense(EntityPlayer player, double min, double incenseAddition, double increment) { - double amount = getPlayerIncense(player); - if (amount < min || amount >= incenseAddition) { - return false; - } - - amount = amount + Math.min(increment, incenseAddition - amount); - setPlayerIncense(player, amount); - - if(amount == incenseAddition) { - IncenseHelper.setMaxIncense(player, incenseAddition); - } - // System.out.println("Amount of incense: " + amount + ", Increment: " + - // increment); - - return true; - } - - /** - * Sacrifices a player's health while the player is under the influence of - * incense - * - * @param player - The player sacrificing - * @return Whether or not the health sacrificing succeeded - */ - public static boolean sacrificePlayerHealth(EntityPlayer player) { - if (player.isPotionActive(soulFrayId)) { - return false; - } - - double amount = getPlayerIncense(player); - - if (amount >= 0) { - float health = player.getHealth(); - float maxHealth = player.getMaxHealth(); - - if (health > maxHealth / 10.0) { - float sacrificedHealth = health - maxHealth / 10.0f; - int lpAdded = (int) (sacrificedHealth * ConfigHandler.values.sacrificialDaggerConversion * getModifier(amount)); - - SacrificeKnifeUsedEvent evt = new SacrificeKnifeUsedEvent(player, true, true, (int) sacrificedHealth, lpAdded); - if (MinecraftForge.EVENT_BUS.post(evt)) - return false; - - if (findAndFillAltar(player.getEntityWorld(), player, evt.lpAdded, false)) { - player.setHealth(maxHealth / 10.0f); - setPlayerIncense(player, 0); - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.SOUL_FRAY, soulFrayDuration)); - - return true; - } - } - } - - return false; - } - - public static double getModifier(double amount) { - return 1 + amount * scalingOfSacrifice; - } - - /** - * Finds the nearest {@link IBloodAltar} and attempts to fill it - * - * @param world - The world - * @param sacrificingEntity - The entity having the sacrifice done on (can be - * {@link EntityPlayer} for self-sacrifice) - * @param amount - The amount of which the altar should be filled - * @param isSacrifice - Whether this is a Sacrifice or a Self-Sacrifice - * @return Whether the altar is found and (attempted) filled - */ - public static boolean findAndFillAltar(World world, EntityLivingBase sacrificingEntity, int amount, boolean isSacrifice) { - IBloodAltar altarEntity = getAltar(world, sacrificingEntity.getPosition()); - - if (altarEntity == null) - return false; - - altarEntity.sacrificialDaggerCall(amount, isSacrifice); - altarEntity.startCycle(); - - return true; - } - - /** - * Gets the nearest {@link IBloodAltar} - * - * @param world - The world - * @param blockPos - The position of where the check should be in (in a 2 block - * radius from this) - * @return The nearest altar, if no altar is found, then this will return - * null - */ - public static IBloodAltar getAltar(World world, BlockPos blockPos) { - TileEntity tileEntity; - - for (int x = -2; x <= 2; x++) { - for (int y = -2; y <= 1; y++) { - for (int z = -2; z <= 2; z++) { - tileEntity = world.getTileEntity(blockPos.add(x, y, z)); - - if (tileEntity instanceof IBloodAltar) { - return (IBloodAltar) tileEntity; - } - } - } - } - - return null; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/PurificationHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/PurificationHelper.java deleted file mode 100644 index 49057296..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/PurificationHelper.java +++ /dev/null @@ -1,33 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.util.Constants; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.nbt.NBTTagCompound; - -public class PurificationHelper { - public static double getCurrentPurity(EntityAnimal animal) { - NBTTagCompound data = animal.getEntityData(); - if (data.hasKey(Constants.NBT.CURRENT_PURITY)) { - return data.getDouble(Constants.NBT.CURRENT_PURITY); - } - - return 0; - } - - public static void setCurrentPurity(EntityAnimal animal, double amount) { - NBTTagCompound data = animal.getEntityData(); - data.setDouble(Constants.NBT.CURRENT_PURITY, amount); - } - - public static double addPurity(EntityAnimal animal, double added, double max) { - double currentPurity = getCurrentPurity(animal); - double newAmount = Math.min(max, currentPurity + added); - - if (newAmount < max) { - setCurrentPurity(animal, newAmount); - return newAmount - currentPurity; - } - - return 0; - } -} \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java deleted file mode 100644 index 97b4853a..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/RecipeHelper.java +++ /dev/null @@ -1,55 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.recipe.TartaricForgeRecipe; -import WayofTime.bloodmagic.core.registry.AltarRecipeRegistry; -import WayofTime.bloodmagic.core.registry.TartaricForgeRecipeRegistry; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraftforge.fml.common.registry.ForgeRegistries; - -public class RecipeHelper { - public static IRecipe getRecipeForOutput(ItemStack stack) { - for (IRecipe recipe : ForgeRegistries.RECIPES.getValues()) { - if (recipe != null) { - ItemStack resultStack = recipe.getRecipeOutput(); - if (!resultStack.isEmpty()) { - if (resultStack.getItem() == stack.getItem() && resultStack.getItemDamage() == stack.getItemDamage()) { - return recipe; - } - } - } - } - - return null; - } - - public static AltarRecipeRegistry.AltarRecipe getAltarRecipeForOutput(ItemStack stack) { - for (AltarRecipeRegistry.AltarRecipe recipe : AltarRecipeRegistry.getRecipes().values()) { - if (recipe != null && !recipe.isFillable()) { - ItemStack resultStack = recipe.getOutput(); - if (!resultStack.isEmpty()) { - if (resultStack.getItem() == stack.getItem() && resultStack.getItemDamage() == stack.getItemDamage()) { - return recipe; - } - } - } - } - - return null; - } - - public static TartaricForgeRecipe getForgeRecipeForOutput(ItemStack stack) { - for (TartaricForgeRecipe recipe : TartaricForgeRecipeRegistry.getRecipeList()) { - if (recipe != null) { - ItemStack resultStack = recipe.getRecipeOutput(); - if (!resultStack.isEmpty()) { - if (resultStack.getItem() == stack.getItem() && resultStack.getItemDamage() == stack.getItemDamage()) { - return recipe; - } - } - } - } - - return null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/RitualHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/RitualHelper.java deleted file mode 100644 index eedf6f7c..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/RitualHelper.java +++ /dev/null @@ -1,120 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ritual.EnumRuneType; -import WayofTime.bloodmagic.ritual.IRitualStone; -import WayofTime.bloodmagic.ritual.Ritual; -import WayofTime.bloodmagic.ritual.RitualComponent; -import com.google.common.collect.Lists; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityInject; - -import java.util.List; - -public class RitualHelper { - @CapabilityInject(IRitualStone.Tile.class) - static Capability RUNE_CAPABILITY = null; - - public static boolean canCrystalActivate(Ritual ritual, int crystalLevel) { - return ritual.getCrystalLevel() <= crystalLevel && BloodMagic.RITUAL_MANAGER.enabled(BloodMagic.RITUAL_MANAGER.getId(ritual), false); - } - - /** - * Checks the RitualRegistry to see if the configuration of the ritual - * stones in the world is valid for the given EnumFacing. - * - * @param world - The world - * @param pos - Location of the MasterRitualStone - * @return The ID of the valid ritual - */ - public static String getValidRitual(World world, BlockPos pos) { - for (Ritual ritual : BloodMagic.RITUAL_MANAGER.getRituals()) { - for (EnumFacing direction : EnumFacing.HORIZONTALS) { - if (checkValidRitual(world, pos, ritual, direction)) - return BloodMagic.RITUAL_MANAGER.getId(ritual); - } - } - - return ""; - } - - public static EnumFacing getDirectionOfRitual(World world, BlockPos pos, Ritual ritual) { - for (EnumFacing direction : EnumFacing.HORIZONTALS) { - if (checkValidRitual(world, pos, ritual, direction)) - return direction; - } - - return null; - } - - public static boolean checkValidRitual(World world, BlockPos pos, Ritual ritual, EnumFacing direction) { - if (ritual == null) { - return false; - } - - List components = Lists.newArrayList(); - ritual.gatherComponents(components::add); - - for (RitualComponent component : components) { - BlockPos newPos = pos.add(component.getOffset(direction)); - if (!isRuneType(world, newPos, component.getRuneType())) - return false; - } - - return true; - } - - public static boolean isRuneType(World world, BlockPos pos, EnumRuneType type) { - if (world == null) - return false; - Block block = world.getBlockState(pos).getBlock(); - TileEntity tile = world.getTileEntity(pos); - - if (block instanceof IRitualStone) - return ((IRitualStone) block).isRuneType(world, pos, type); - else if (tile instanceof IRitualStone.Tile) - return ((IRitualStone.Tile) tile).isRuneType(type); - else if (tile != null && tile.hasCapability(RUNE_CAPABILITY, null)) - return tile.getCapability(RUNE_CAPABILITY, null).isRuneType(type); - - return false; - } - - public static boolean isRune(World world, BlockPos pos) { - if (world == null) - return false; - Block block = world.getBlockState(pos).getBlock(); - TileEntity tile = world.getTileEntity(pos); - - if (block instanceof IRitualStone) - return true; - else if (tile instanceof IRitualStone.Tile) - return true; - else if (tile != null && tile.hasCapability(RUNE_CAPABILITY, null)) - return true; - - return false; - } - - public static void setRuneType(World world, BlockPos pos, EnumRuneType type) { - if (world == null) - return; - IBlockState state = world.getBlockState(pos); - TileEntity tile = world.getTileEntity(pos); - - if (state.getBlock() instanceof IRitualStone) - ((IRitualStone) state.getBlock()).setRuneType(world, pos, type); - else if (tile instanceof IRitualStone.Tile) - ((IRitualStone.Tile) tile).setRuneType(type); - else if (tile != null && tile.hasCapability(RUNE_CAPABILITY, null)) { - tile.getCapability(RUNE_CAPABILITY, null).setRuneType(type); - world.notifyBlockUpdate(pos, state, state, 3); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/util/helper/TextHelper.java b/src/main/java/WayofTime/bloodmagic/util/helper/TextHelper.java deleted file mode 100644 index 8b9c3e35..00000000 --- a/src/main/java/WayofTime/bloodmagic/util/helper/TextHelper.java +++ /dev/null @@ -1,65 +0,0 @@ -package WayofTime.bloodmagic.util.helper; - -import net.minecraft.util.text.translation.I18n; -import org.apache.commons.lang3.text.WordUtils; - -import java.util.ArrayList; -import java.util.List; - -public class TextHelper { - public static String getFormattedText(String string) { - return string.replaceAll("&", "\u00A7"); - } - - public static String localize(String input, Object... format) { - return I18n.translateToLocalFormatted(input, format); - } - - public static String localizeEffect(String input, Object... format) { - return getFormattedText(localize(input, format)); - } - - public static String[] localizeAll(String[] input) { - String[] ret = new String[input.length]; - for (int i = 0; i < input.length; i++) - ret[i] = localize(input[i]); - - return ret; - } - - public static String[] localizeAllEffect(String[] input) { - String[] ret = new String[input.length]; - for (int i = 0; i < input.length; i++) - ret[i] = localizeEffect(input[i]); - - return ret; - } - - public static ArrayList localizeAll(List input) { - ArrayList ret = new ArrayList<>(input.size()); - for (int i = 0; i < input.size(); i++) - ret.add(i, localize(input.get(i))); - - return ret; - } - - public static ArrayList localizeAllEffect(List input) { - ArrayList ret = new ArrayList<>(input.size()); - for (int i = 0; i < input.size(); i++) - ret.add(i, localizeEffect(input.get(i))); - - return ret; - } - - public static String[] cutLongString(String string, int characters) { - return WordUtils.wrap(string, characters, "/cut", false).split("/cut"); - } - - public static String[] cutLongString(String string) { - return cutLongString(string, 30); - } - - public static boolean canTranslate(String key) { - return I18n.canTranslate(key); - } -} diff --git a/src/main/java/com/wayoftime/bloodmagic/BloodMagic.java b/src/main/java/com/wayoftime/bloodmagic/BloodMagic.java new file mode 100644 index 00000000..b8f3bf50 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/BloodMagic.java @@ -0,0 +1,61 @@ +package com.wayoftime.bloodmagic; + +import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.api.BloodMagicPlugin; +import com.wayoftime.bloodmagic.api.IBloodMagicPlugin; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicBlocks; +import com.wayoftime.bloodmagic.core.util.PluginUtil; +import com.wayoftime.bloodmagic.proxy.IProxy; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.SidedProxy; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import org.apache.commons.lang3.tuple.Pair; + +import java.io.File; +import java.util.List; + +@Mod(modid = BloodMagic.MODID, name = BloodMagic.NAME, version = BloodMagic.VERSION) +public class BloodMagic { + + public static final String MODID = "bloodmagic"; + public static final String NAME = "Blood Magic: Alchemical Wizardry"; + public static final String VERSION = "${VERSION}"; + public static final List> PLUGINS = Lists.newArrayList(); + public static final CreativeTabs TAB_BM = new CreativeTabs(MODID) { + @Override + public ItemStack createIcon() { + return new ItemStack(RegistrarBloodMagicBlocks.BLOOD_ALTAR); + } + }; + + @SidedProxy(clientSide = "com.wayoftime.bloodmagic.proxy.ClientProxy", serverSide = "com.wayoftime.bloodmagic.proxy.ServerProxy") + public static IProxy PROXY; + @Mod.Instance(value = MODID) + public static BloodMagic INSTANCE; + public static File configDir; + + static { + FluidRegistry.enableUniversalBucket(); + } + + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent event) { + configDir = new File(event.getModConfigurationDirectory(), BloodMagic.MODID); + if (!configDir.exists()) + configDir.mkdirs(); + + PLUGINS.addAll(PluginUtil.gatherPlugins(event.getAsmData())); + PluginUtil.injectAPIInstances(PluginUtil.gatherInjections(event.getAsmData())); + + PROXY.preInit(); // TODO - Remove proxy. Switch altar model to json + } + + @Mod.EventHandler + public void init(FMLInitializationEvent event) { + PluginUtil.handlePluginStep(PluginUtil.RegistrationStep.PLUGIN_REGISTER); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicAPI.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java similarity index 90% rename from src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicAPI.java rename to src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java index a779da4b..da12da7a 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicAPI.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java @@ -1,10 +1,10 @@ -package WayofTime.bloodmagic.api.impl; +package com.wayoftime.bloodmagic.api.impl; -import WayofTime.bloodmagic.api.IBloodMagicAPI; -import WayofTime.bloodmagic.altar.ComponentType; -import WayofTime.bloodmagic.util.BMLog; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; +import com.wayoftime.bloodmagic.api.IBloodMagicAPI; +import com.wayoftime.bloodmagic.core.type.ComponentType; +import com.wayoftime.bloodmagic.core.util.BMLog; import net.minecraft.block.state.IBlockState; import javax.annotation.Nonnull; diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicBlacklist.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicBlacklist.java similarity index 95% rename from src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicBlacklist.java rename to src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicBlacklist.java index 18029c71..df9eed71 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicBlacklist.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicBlacklist.java @@ -1,9 +1,9 @@ -package WayofTime.bloodmagic.api.impl; +package com.wayoftime.bloodmagic.api.impl; -import WayofTime.bloodmagic.api.IBloodMagicBlacklist; -import WayofTime.bloodmagic.util.BMLog; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.wayoftime.bloodmagic.api.IBloodMagicBlacklist; +import com.wayoftime.bloodmagic.core.util.BMLog; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java new file mode 100644 index 00000000..ccd6465d --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java @@ -0,0 +1,174 @@ +package com.wayoftime.bloodmagic.api.impl; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.api.BloodMagicPlugin; +import com.wayoftime.bloodmagic.api.IBloodMagicAPI; +import com.wayoftime.bloodmagic.api.IBloodMagicPlugin; +import com.wayoftime.bloodmagic.api.IBloodMagicRecipeRegistrar; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicBlocks; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicRecipes; +import com.wayoftime.bloodmagic.core.type.ComponentType; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.registry.ForgeRegistries; + +@BloodMagicPlugin +public class BloodMagicCorePlugin implements IBloodMagicPlugin { + + @Override + public void register(IBloodMagicAPI apiInterface) { + BloodMagicAPI api = (BloodMagicAPI) apiInterface; + // Add forced blacklistings +// api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE); +// api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.INPUT_ROUTING_NODE); +// api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE); +// api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.OUTPUT_ROUTING_NODE); +// api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE); +// api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.ITEM_ROUTING_NODE); +// api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE); +// api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.MASTER_ROUTING_NODE); +// api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.DEMON_CRYSTAL); +// api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.DEMON_CRYSTAL); +// api.getBlacklist().addTeleposer(RegistrarBloodMagicBlocks.INVERSION_PILLAR); +// api.getBlacklist().addTransposition(RegistrarBloodMagicBlocks.INVERSION_PILLAR); + api.getBlacklist().addWellOfSuffering(new ResourceLocation("armor_stand")); + api.getBlacklist().addWellOfSuffering(new ResourceLocation(BloodMagic.MODID, "sentient_specter")); + + api.getValueManager().setSacrificialValue(new ResourceLocation("armor_stand"), 0); + api.getValueManager().setSacrificialValue(new ResourceLocation(BloodMagic.MODID, "sentient_specter"), 0); + +// api.getValueManager().setTranquility(Blocks.LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D)); +// api.getValueManager().setTranquility(Blocks.FLOWING_LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D)); +// api.getValueManager().setTranquility(Blocks.WATER, new TranquilityStack(EnumTranquilityType.WATER, 1.0D)); +// api.getValueManager().setTranquility(Blocks.FLOWING_WATER, new TranquilityStack(EnumTranquilityType.WATER, 1.0D)); +// api.getValueManager().setTranquility(RegistrarBloodMagicBlocks.LIFE_ESSENCE, new TranquilityStack(EnumTranquilityType.WATER, 1.5D)); +// api.getValueManager().setTranquility(Blocks.NETHERRACK, new TranquilityStack(EnumTranquilityType.FIRE, 0.5D)); +// api.getValueManager().setTranquility(Blocks.DIRT, new TranquilityStack(EnumTranquilityType.EARTHEN, 0.25D)); +// api.getValueManager().setTranquility(Blocks.FARMLAND, new TranquilityStack(EnumTranquilityType.EARTHEN, 1.0D)); +// api.getValueManager().setTranquility(Blocks.POTATOES, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); +// api.getValueManager().setTranquility(Blocks.CARROTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); +// api.getValueManager().setTranquility(Blocks.WHEAT, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); +// api.getValueManager().setTranquility(Blocks.NETHER_WART, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); +// api.getValueManager().setTranquility(Blocks.BEETROOTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + + handleConfigValues(api); + + // Add standard blocks for altar components + api.registerAltarComponent(Blocks.GLOWSTONE.getDefaultState(), ComponentType.GLOWSTONE.name()); + api.registerAltarComponent(Blocks.SEA_LANTERN.getDefaultState(), ComponentType.GLOWSTONE.name()); + api.registerAltarComponent(Blocks.BEACON.getDefaultState(), ComponentType.BEACON.name()); + + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOODSTONE_BRICK.getDefaultState(), ComponentType.BLOODSTONE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOODSTONE_TILE.getDefaultState(), ComponentType.BLOODSTONE.name()); +// api.registerAltarComponent(decorative.getDefaultState().withProperty(decorative.getProperty(), EnumDecorative.CRYSTAL_BRICK), ComponentType.CRYSTAL.name()); +// api.registerAltarComponent(decorative.getDefaultState().withProperty(decorative.getProperty(), EnumDecorative.CRYSTAL_TILE), ComponentType.CRYSTAL.name()); + + + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_BLANK.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_ACCELERATION.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_CAPACITY.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_AUGMENTED_CAPACITY.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_CHARGING.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_DISPLACEMENT.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_EFFICIENCY.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_ORB.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_SACRIFICE.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_SELF_SACRIFICE.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + api.registerAltarComponent(RegistrarBloodMagicBlocks.BLOOD_RUNE_SPEED.getDefaultState(), ComponentType.BLOOD_RUNE.name()); + } + + @Override + public void registerRecipes(IBloodMagicRecipeRegistrar recipeRegistrar) { + RegistrarBloodMagicRecipes.registerAltarRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); +// RegistrarBloodMagicRecipes.registerAlchemyTableRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); +// RegistrarBloodMagicRecipes.registerTartaricForgeRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); +// RegistrarBloodMagicRecipes.registerAlchemyArrayRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); +// RegistrarBloodMagicRecipes.registerSacrificeCraftRecipes((BloodMagicRecipeRegistrar) recipeRegistrar); + } + + private static void handleConfigValues(BloodMagicAPI api) { +// for (String value : ConfigHandler.values.sacrificialValues) +// { +// String[] split = value.split(";"); +// if (split.length != 2) // Not valid format +// continue; +// +// api.getValueManager().setSacrificialValue(new ResourceLocation(split[0]), Integer.parseInt(split[1])); +// } +// +// for (String value : ConfigHandler.blacklist.teleposer) +// { +// EntityEntry entityEntry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(value)); +// if (entityEntry == null) +// { // It's not an entity (or at least not a valid one), so let's try a block. +// String[] blockData = value.split("\\["); +// Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockData[0])); +// if (block == Blocks.AIR || block == null) // Not a valid block either +// continue; +// +// if (blockData.length > 1) +// { // We have properties listed, so let's build a state. +// api.getBlacklist().addTeleposer(parseState(value)); +// continue; +// } +// +// api.getBlacklist().addTeleposer(block); +// continue; +// } +// +// api.getBlacklist().addTeleposer(entityEntry.getRegistryName()); +// } +// +// for (String value : ConfigHandler.blacklist.transposer) +// { +// String[] blockData = value.split("\\["); +// Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockData[0])); +// if (block == Blocks.AIR || block == null) // Not a valid block +// continue; +// +// if (blockData.length > 1) +// { // We have properties listed, so let's build a state. +// api.getBlacklist().addTeleposer(parseState(value)); +// continue; +// } +// +// api.getBlacklist().addTeleposer(block); +// } +// +// for (String value : ConfigHandler.blacklist.wellOfSuffering) +// { +// EntityEntry entityEntry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(value)); +// if (entityEntry == null) // Not a valid entity +// continue; +// +// api.getBlacklist().addWellOfSuffering(entityEntry.getRegistryName()); +// } + } + + private static IBlockState parseState(String blockInfo) { + String[] split = blockInfo.split("\\["); + split[1] = split[1].substring(0, split[1].lastIndexOf("]")); // Make sure brackets are removed from state + + Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(split[0])); // Find the block + if (block == Blocks.AIR) + return Blocks.AIR.getDefaultState(); // The block is air, so we're looking at invalid data + + BlockStateContainer blockState = block.getBlockState(); + IBlockState returnState = blockState.getBaseState(); + + // Force our values into the state + String[] stateValues = split[1].split(","); // Splits up each value + for (String value : stateValues) { + String[] valueSplit = value.split("="); // Separates property and value + IProperty property = blockState.getProperty(valueSplit[0]); + if (property != null) + returnState = returnState.withProperty(property, (Comparable) property.parseValue(valueSplit[1]).get()); // Force the property into the state + } + + return returnState; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java similarity index 82% rename from src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java rename to src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java index 776d762d..a2a20ce6 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicRecipeRegistrar.java @@ -1,34 +1,28 @@ -package WayofTime.bloodmagic.api.impl; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import javax.annotation.Nonnegative; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.crafting.CraftingHelper; -import WayofTime.bloodmagic.api.IBloodMagicRecipeRegistrar; -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyArray; -import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyTable; -import WayofTime.bloodmagic.api.impl.recipe.RecipeBloodAltar; -import WayofTime.bloodmagic.api.impl.recipe.RecipeSacrificeCraft; -import WayofTime.bloodmagic.api.impl.recipe.RecipeTartaricForge; -import WayofTime.bloodmagic.core.recipe.IngredientBloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; +package com.wayoftime.bloodmagic.api.impl; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.wayoftime.bloodmagic.api.IBloodMagicRecipeRegistrar; +import com.wayoftime.bloodmagic.api.impl.recipe.*; +import com.wayoftime.bloodmagic.core.altar.AltarTier; +import com.wayoftime.bloodmagic.core.network.IBloodOrb; +import com.wayoftime.bloodmagic.core.recipe.IngredientBloodOrb; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.crafting.CraftingHelper; -public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar -{ +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar { private final Set altarRecipes; private final Set alchemyRecipes; @@ -36,8 +30,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar private final Set alchemyArrayRecipes; private final Set sacrificeCraftRecipes; - public BloodMagicRecipeRegistrar() - { + public BloodMagicRecipeRegistrar() { this.altarRecipes = Sets.newHashSet(); this.alchemyRecipes = Sets.newHashSet(); this.tartaricForgeRecipes = Sets.newHashSet(); @@ -46,8 +39,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Override - public void addBloodAltar(@Nonnull Ingredient input, @Nonnull ItemStack output, @Nonnegative int minimumTier, @Nonnegative int syphon, @Nonnegative int consumeRate, @Nonnegative int drainRate) - { + public void addBloodAltar(@Nonnull Ingredient input, @Nonnull ItemStack output, @Nonnegative int minimumTier, @Nonnegative int syphon, @Nonnegative int consumeRate, @Nonnegative int drainRate) { Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(minimumTier >= 0, "minimumTier cannot be negative."); @@ -58,17 +50,20 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar altarRecipes.add(new RecipeBloodAltar(input, output, minimumTier, syphon, consumeRate, drainRate)); } + public void addBloodAltar(@Nonnull Ingredient input, @Nonnull ItemStack output, @Nonnull AltarTier tier, @Nonnegative int syphon, @Nonnegative int consumeRate, @Nonnegative int drainRate) { + addBloodAltar(input, output, tier.ordinal(), syphon, consumeRate, drainRate); + } + + @Override - public boolean removeBloodAltar(@Nonnull ItemStack input) - { + public boolean removeBloodAltar(@Nonnull ItemStack input) { Preconditions.checkNotNull(input, "input cannot be null."); return altarRecipes.remove(getBloodAltar(input)); } @Override - public void addAlchemyTable(@Nonnull ItemStack output, @Nonnegative int syphon, @Nonnegative int ticks, @Nonnegative int minimumTier, @Nonnull Ingredient... input) - { + public void addAlchemyTable(@Nonnull ItemStack output, @Nonnegative int syphon, @Nonnegative int ticks, @Nonnegative int minimumTier, @Nonnull Ingredient... input) { Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); Preconditions.checkArgument(ticks >= 0, "ticks cannot be negative."); @@ -79,8 +74,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar alchemyRecipes.add(new RecipeAlchemyTable(inputs, output, syphon, ticks, minimumTier)); } - public void addAlchemyTable(@Nonnull ItemStack output, @Nonnegative int syphon, @Nonnegative int ticks, @Nonnegative int minimumTier, @Nonnull Object... input) - { + public void addAlchemyTable(@Nonnull ItemStack output, @Nonnegative int syphon, @Nonnegative int ticks, @Nonnegative int minimumTier, @Nonnull Object... input) { Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); Preconditions.checkArgument(ticks >= 0, "ticks cannot be negative."); @@ -88,10 +82,8 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar Preconditions.checkNotNull(input, "input cannot be null."); List ingredients = Lists.newArrayList(); - for (Object object : input) - { - if (object instanceof ItemStack && ((ItemStack) object).getItem() instanceof IBloodOrb) - { + for (Object object : input) { + if (object instanceof ItemStack && ((ItemStack) object).getItem() instanceof IBloodOrb) { ingredients.add(new IngredientBloodOrb(((IBloodOrb) ((ItemStack) object).getItem()).getOrb((ItemStack) object))); continue; } @@ -102,14 +94,12 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar addAlchemyTable(output, syphon, ticks, minimumTier, ingredients.toArray(new Ingredient[0])); } - public void addAlchemyTable(RecipeAlchemyTable recipe) - { + public void addAlchemyTable(RecipeAlchemyTable recipe) { alchemyRecipes.add(recipe); } @Override - public boolean removeAlchemyTable(@Nonnull ItemStack... input) - { + public boolean removeAlchemyTable(@Nonnull ItemStack... input) { Preconditions.checkNotNull(input, "inputs cannot be null."); for (ItemStack stack : input) @@ -119,8 +109,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Override - public void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Ingredient... input) - { + public void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Ingredient... input) { Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(minimumSouls >= 0, "minimumSouls cannot be negative."); Preconditions.checkArgument(soulDrain >= 0, "soulDrain cannot be negative."); @@ -131,8 +120,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Override - public boolean removeTartaricForge(@Nonnull ItemStack... input) - { + public boolean removeTartaricForge(@Nonnull ItemStack... input) { Preconditions.checkNotNull(input, "inputs cannot be null."); for (ItemStack stack : input) @@ -141,18 +129,15 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar return tartaricForgeRecipes.remove(getTartaricForge(Lists.newArrayList(input))); } - public void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Object... input) - { + public void addTartaricForge(@Nonnull ItemStack output, @Nonnegative double minimumSouls, @Nonnegative double soulDrain, @Nonnull Object... input) { Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(minimumSouls >= 0, "minimumSouls cannot be negative."); Preconditions.checkArgument(soulDrain >= 0, "soulDrain cannot be negative."); Preconditions.checkNotNull(input, "input cannot be null."); List ingredients = Lists.newArrayList(); - for (Object object : input) - { - if (object instanceof ItemStack && ((ItemStack) object).getItem() instanceof IBloodOrb) - { + for (Object object : input) { + if (object instanceof ItemStack && ((ItemStack) object).getItem() instanceof IBloodOrb) { ingredients.add(new IngredientBloodOrb(((IBloodOrb) ((ItemStack) object).getItem()).getOrb((ItemStack) object))); continue; } @@ -164,8 +149,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Override - public void addAlchemyArray(@Nonnull Ingredient input, @Nonnull Ingredient catalyst, @Nonnull ItemStack output, @Nullable ResourceLocation circleTexture) - { + public void addAlchemyArray(@Nonnull Ingredient input, @Nonnull Ingredient catalyst, @Nonnull ItemStack output, @Nullable ResourceLocation circleTexture) { Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(catalyst, "catalyst cannot be null."); Preconditions.checkNotNull(output, "output cannot be null."); @@ -174,16 +158,14 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Override - public boolean removeAlchemyArray(@Nonnull ItemStack input, @Nonnull ItemStack catalyst) - { + public boolean removeAlchemyArray(@Nonnull ItemStack input, @Nonnull ItemStack catalyst) { Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(catalyst, "catalyst cannot be null."); return alchemyArrayRecipes.remove(getAlchemyArray(input, catalyst)); } - public void addAlchemyArray(@Nonnull ItemStack input, @Nonnull ItemStack catalyst, @Nonnull ItemStack output, @Nullable ResourceLocation circleTexture) - { + public void addAlchemyArray(@Nonnull ItemStack input, @Nonnull ItemStack catalyst, @Nonnull ItemStack output, @Nullable ResourceLocation circleTexture) { Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(catalyst, "catalyst cannot be null."); Preconditions.checkNotNull(output, "output cannot be null."); @@ -191,17 +173,14 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar addAlchemyArray(Ingredient.fromStacks(input), Ingredient.fromStacks(catalyst), output, circleTexture); } - public void addSacrificeCraft(@Nonnull ItemStack output, @Nonnegative double healthRequired, @Nonnull Object... input) - { + public void addSacrificeCraft(@Nonnull ItemStack output, @Nonnegative double healthRequired, @Nonnull Object... input) { Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(healthRequired >= 0, "healthRequired cannot be negative."); Preconditions.checkNotNull(input, "input cannot be null."); List ingredients = Lists.newArrayList(); - for (Object object : input) - { - if (object instanceof ItemStack && ((ItemStack) object).getItem() instanceof IBloodOrb) - { + for (Object object : input) { + if (object instanceof ItemStack && ((ItemStack) object).getItem() instanceof IBloodOrb) { ingredients.add(new IngredientBloodOrb(((IBloodOrb) ((ItemStack) object).getItem()).getOrb((ItemStack) object))); continue; } @@ -213,8 +192,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Override - public boolean removeSacrificeCraft(@Nonnull ItemStack... input) - { + public boolean removeSacrificeCraft(@Nonnull ItemStack... input) { Preconditions.checkNotNull(input, "inputs cannot be null."); for (ItemStack stack : input) @@ -224,8 +202,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Override - public void addSacrificeCraft(@Nonnull ItemStack output, @Nonnegative double healthRequired, @Nonnull Ingredient... input) - { + public void addSacrificeCraft(@Nonnull ItemStack output, @Nonnegative double healthRequired, @Nonnull Ingredient... input) { Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(healthRequired >= 0, "healthRequired cannot be negative."); Preconditions.checkNotNull(input, "input cannot be null."); @@ -235,8 +212,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Nullable - public RecipeBloodAltar getBloodAltar(@Nonnull ItemStack input) - { + public RecipeBloodAltar getBloodAltar(@Nonnull ItemStack input) { Preconditions.checkNotNull(input, "input cannot be null."); if (input.isEmpty()) return null; @@ -249,27 +225,23 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Nullable - public RecipeAlchemyTable getAlchemyTable(@Nonnull List input) - { + public RecipeAlchemyTable getAlchemyTable(@Nonnull List input) { Preconditions.checkNotNull(input, "input cannot be null."); if (input.isEmpty()) return null; - mainLoop: for (RecipeAlchemyTable recipe : alchemyRecipes) - { + mainLoop: + for (RecipeAlchemyTable recipe : alchemyRecipes) { if (recipe.getInput().size() != input.size()) continue; List recipeInput = new ArrayList<>(recipe.getInput()); - for (int i = 0; i < input.size(); i++) - { + for (int i = 0; i < input.size(); i++) { boolean matched = false; - for (int j = 0; j < recipeInput.size(); j++) - { + for (int j = 0; j < recipeInput.size(); j++) { Ingredient ingredient = recipeInput.get(j); - if (ingredient.apply(input.get(i))) - { + if (ingredient.apply(input.get(i))) { matched = true; recipeInput.remove(j); break; @@ -287,27 +259,23 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Nullable - public RecipeTartaricForge getTartaricForge(@Nonnull List input) - { + public RecipeTartaricForge getTartaricForge(@Nonnull List input) { Preconditions.checkNotNull(input, "input cannot be null."); if (input.isEmpty()) return null; - mainLoop: for (RecipeTartaricForge recipe : tartaricForgeRecipes) - { + mainLoop: + for (RecipeTartaricForge recipe : tartaricForgeRecipes) { if (recipe.getInput().size() != input.size()) continue; List recipeInput = new ArrayList<>(recipe.getInput()); - for (int i = 0; i < input.size(); i++) - { + for (int i = 0; i < input.size(); i++) { boolean matched = false; - for (int j = 0; j < recipeInput.size(); j++) - { + for (int j = 0; j < recipeInput.size(); j++) { Ingredient ingredient = recipeInput.get(j); - if (ingredient.apply(input.get(i))) - { + if (ingredient.apply(input.get(i))) { matched = true; recipeInput.remove(j); break; @@ -325,27 +293,23 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Nullable - public RecipeSacrificeCraft getSacrificeCraft(@Nonnull List input) - { + public RecipeSacrificeCraft getSacrificeCraft(@Nonnull List input) { Preconditions.checkNotNull(input, "input cannot be null."); if (input.isEmpty()) return null; - mainLoop: for (RecipeSacrificeCraft recipe : sacrificeCraftRecipes) - { + mainLoop: + for (RecipeSacrificeCraft recipe : sacrificeCraftRecipes) { if (recipe.getInput().size() != input.size()) continue; List recipeInput = new ArrayList<>(recipe.getInput()); - for (int i = 0; i < input.size(); i++) - { + for (int i = 0; i < input.size(); i++) { boolean matched = false; - for (int j = 0; j < recipeInput.size(); j++) - { + for (int j = 0; j < recipeInput.size(); j++) { Ingredient ingredient = recipeInput.get(j); - if (ingredient.apply(input.get(i))) - { + if (ingredient.apply(input.get(i))) { matched = true; recipeInput.remove(j); break; @@ -363,8 +327,7 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar } @Nullable - public RecipeAlchemyArray getAlchemyArray(@Nonnull ItemStack input, @Nonnull ItemStack catalyst) - { + public RecipeAlchemyArray getAlchemyArray(@Nonnull ItemStack input, @Nonnull ItemStack catalyst) { Preconditions.checkNotNull(input, "input cannot be null."); if (input.isEmpty()) return null; @@ -376,23 +339,19 @@ public class BloodMagicRecipeRegistrar implements IBloodMagicRecipeRegistrar return null; } - public Set getAltarRecipes() - { + public Set getAltarRecipes() { return ImmutableSet.copyOf(altarRecipes); } - public Set getAlchemyRecipes() - { + public Set getAlchemyRecipes() { return ImmutableSet.copyOf(alchemyRecipes); } - public Set getTartaricForgeRecipes() - { + public Set getTartaricForgeRecipes() { return ImmutableSet.copyOf(tartaricForgeRecipes); } - public Set getAlchemyArrayRecipes() - { + public Set getAlchemyArrayRecipes() { return ImmutableSet.copyOf(alchemyArrayRecipes); } } diff --git a/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicValueManager.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicValueManager.java new file mode 100644 index 00000000..3bb38ce4 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/BloodMagicValueManager.java @@ -0,0 +1,62 @@ +package com.wayoftime.bloodmagic.api.impl; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.wayoftime.bloodmagic.api.IBloodMagicValueManager; +import com.wayoftime.bloodmagic.core.util.BMLog; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.ResourceLocation; + +import javax.annotation.Nonnull; +import java.util.Map; + +public class BloodMagicValueManager implements IBloodMagicValueManager { + + private final Map sacrificial; +// private final Map tranquility; // TODO - Tranquility + + public BloodMagicValueManager() { + this.sacrificial = Maps.newHashMap(); +// this.tranquility = Maps.newHashMap(); // TODO - Tranquility + } + + @Override + public void setSacrificialValue(@Nonnull ResourceLocation entityId, int value) { + BMLog.API_VERBOSE.info("Value Manager: Set sacrificial value of {} to {}.", entityId, value); + sacrificial.put(entityId, value); + } + + // TODO - Tranquility + @Override + public void setTranquility(@Nonnull IBlockState state, @Nonnull String tranquilityType, double value) { +// EnumTranquilityType tranquility = null; +// for (EnumTranquilityType type : EnumTranquilityType.values()) { +// if (type.name().equalsIgnoreCase(tranquilityType)) { +// tranquility = type; +// break; +// } +// } +// +// if (tranquility != null) { +// BMLog.API_VERBOSE.info("Value Manager: Set tranquility value of {} to {} @ {}", state, tranquilityType, value); +// this.tranquility.put(state, new TranquilityStack(tranquility, value)); +// } else BMLog.API.warn("Invalid tranquility type: {}.", tranquilityType); + } + + // TODO - Tranquility +// public void setTranquility(Block block, TranquilityStack tranquilityStack) { +// for (IBlockState state : block.getBlockState().getValidStates()) { +// BMLog.API_VERBOSE.info("Value Manager: Set tranquility value of {} to {} @ {}", state, tranquilityStack.type, tranquilityStack.value); +// tranquility.put(state, tranquilityStack); +// } +// } + + public Map getSacrificial() { + return ImmutableMap.copyOf(sacrificial); + } + + // TODO - Tranquility +// public Map getTranquility() { +// return ImmutableMap.copyOf(tranquility); +// } +} diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeAlchemyArray.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeAlchemyArray.java similarity index 93% rename from src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeAlchemyArray.java rename to src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeAlchemyArray.java index 02b4f153..ef086fdc 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeAlchemyArray.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeAlchemyArray.java @@ -1,7 +1,7 @@ -package WayofTime.bloodmagic.api.impl.recipe; +package com.wayoftime.bloodmagic.api.impl.recipe; -import WayofTime.bloodmagic.BloodMagic; import com.google.common.base.Preconditions; +import com.wayoftime.bloodmagic.BloodMagic; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeAlchemyTable.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeAlchemyTable.java similarity index 96% rename from src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeAlchemyTable.java rename to src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeAlchemyTable.java index 7fe572b0..f7e5e0d9 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeAlchemyTable.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeAlchemyTable.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api.impl.recipe; +package com.wayoftime.bloodmagic.api.impl.recipe; import com.google.common.base.Preconditions; import net.minecraft.item.ItemStack; diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeBloodAltar.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeBloodAltar.java similarity index 89% rename from src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeBloodAltar.java rename to src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeBloodAltar.java index 5682645e..2fe6fa19 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeBloodAltar.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeBloodAltar.java @@ -1,7 +1,7 @@ -package WayofTime.bloodmagic.api.impl.recipe; +package com.wayoftime.bloodmagic.api.impl.recipe; -import WayofTime.bloodmagic.altar.AltarTier; import com.google.common.base.Preconditions; +import com.wayoftime.bloodmagic.core.altar.AltarTier; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; @@ -27,7 +27,7 @@ public class RecipeBloodAltar { Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(minimumTier >= 0, "minimumTier cannot be negative."); - Preconditions.checkArgument(minimumTier <= AltarTier.MAXTIERS, "minimumTier cannot be higher than max tier"); + Preconditions.checkArgument(minimumTier <= AltarTier.values().length, "minimumTier cannot be higher than max tier"); Preconditions.checkArgument(syphon >= 0, "syphon cannot be negative."); Preconditions.checkArgument(consumeRate >= 0, "consumeRate cannot be negative."); Preconditions.checkArgument(drainRate >= 0, "drain cannot be negative."); diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeSacrificeCraft.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeSacrificeCraft.java similarity index 80% rename from src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeSacrificeCraft.java rename to src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeSacrificeCraft.java index 95bf3354..cefd7802 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeSacrificeCraft.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeSacrificeCraft.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api.impl.recipe; +package com.wayoftime.bloodmagic.api.impl.recipe; import com.google.common.base.Preconditions; import net.minecraft.item.ItemStack; @@ -8,8 +8,7 @@ import net.minecraft.util.NonNullList; import javax.annotation.Nonnegative; import javax.annotation.Nonnull; -public class RecipeSacrificeCraft -{ +public class RecipeSacrificeCraft { @Nonnull private final NonNullList input; @Nonnull @@ -17,8 +16,7 @@ public class RecipeSacrificeCraft @Nonnegative private final double healthRequired; - public RecipeSacrificeCraft(@Nonnull NonNullList input, @Nonnull ItemStack output, @Nonnegative double healthRequired) - { + public RecipeSacrificeCraft(@Nonnull NonNullList input, @Nonnull ItemStack output, @Nonnegative double healthRequired) { Preconditions.checkNotNull(input, "input cannot be null."); Preconditions.checkNotNull(output, "output cannot be null."); Preconditions.checkArgument(healthRequired >= 0, "healthRequired cannot be negative."); @@ -29,20 +27,17 @@ public class RecipeSacrificeCraft } @Nonnull - public final NonNullList getInput() - { + public final NonNullList getInput() { return input; } @Nonnull - public final ItemStack getOutput() - { + public final ItemStack getOutput() { return output; } @Nonnegative - public final double getHealthRequired() - { + public final double getHealthRequired() { return healthRequired; } } diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeTartaricForge.java b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeTartaricForge.java similarity index 96% rename from src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeTartaricForge.java rename to src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeTartaricForge.java index 96021cad..6b2b7bca 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/recipe/RecipeTartaricForge.java +++ b/src/main/java/com/wayoftime/bloodmagic/api/impl/recipe/RecipeTartaricForge.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.api.impl.recipe; +package com.wayoftime.bloodmagic.api.impl.recipe; import com.google.common.base.Preconditions; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodAltar.java b/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodAltar.java new file mode 100644 index 00000000..0e4db770 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodAltar.java @@ -0,0 +1,133 @@ +package com.wayoftime.bloodmagic.block; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.altar.IAltarManipulator; +import com.wayoftime.bloodmagic.core.util.register.IItemProvider; +import com.wayoftime.bloodmagic.tile.TileBloodAltar; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; + +import javax.annotation.Nullable; + +public class BlockBloodAltar extends Block implements IItemProvider { + + public BlockBloodAltar() { + super(Material.ROCK); + + setTranslationKey(BloodMagic.MODID + ":blood_altar"); + setCreativeTab(BloodMagic.TAB_BM); + setHardness(2.0F); + setResistance(5.0F); + setSoundType(SoundType.STONE); + setHarvestLevel("pickaxe", 1); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + TileEntity tile = world.getTileEntity(pos); + if (!(tile instanceof TileBloodAltar) || !tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null)) + return false; + + IItemHandler altarInv = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + if (altarInv == null) + return false; + + if (player.isSneaking()) { + ItemStack extracted = altarInv.extractItem(0, altarInv.getSlotLimit(0), false); + if (extracted.isEmpty()) + return false; + + ItemHandlerHelper.giveItemToPlayer(player, extracted); + tile.markDirty(); + return true; + } else { + ItemStack held = player.getHeldItem(hand); + if (held.isEmpty()) + return false; + + if (held.getItem() instanceof IAltarManipulator && ((IAltarManipulator) held.getItem()).tryManipulate(player, held, world, pos)) + return false; + + if (!altarInv.extractItem(0, 1, true).isEmpty()) + return false; + + ItemStack insert = held.copy(); + insert.setCount(1); + ItemHandlerHelper.insertItem(altarInv, insert, false); + ((TileBloodAltar) tile).resetProgress(); + tile.markDirty(); + if (!player.capabilities.isCreativeMode) + held.shrink(1); + return true; + } + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) { + TileEntity tile = world.getTileEntity(pos); + if (tile == null) + return; + + IItemHandler itemHandler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + if (itemHandler != null) + for (int i = 0; i < itemHandler.getSlots(); i++) + InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), itemHandler.getStackInSlot(i)); + } + + @Override + public boolean isNormalCube(IBlockState state) { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) { + return false; + } + + @Override + public boolean causesSuffocation(IBlockState state) { + return false; + } + + @Override + public boolean isFullBlock(IBlockState state) { + return false; + } + + @Override + public boolean isFullCube(IBlockState state) { + return false; + } + + @Override + public boolean hasTileEntity(IBlockState state) { + return true; + } + + @Nullable + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileBloodAltar(); + } + + @Nullable + @Override + public Item getItem() { + return new ItemBlock(this); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodRune.java b/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodRune.java new file mode 100644 index 00000000..58807ebb --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/block/BlockBloodRune.java @@ -0,0 +1,19 @@ +package com.wayoftime.bloodmagic.block; + +import com.wayoftime.bloodmagic.core.type.BloodRunes; +import net.minecraft.block.material.Material; + +public class BlockBloodRune extends BlockMundane { + + private final BloodRunes rune; + + public BlockBloodRune(BloodRunes rune) { + super(Material.ROCK, "blood_rune_" + rune.getName(), true); + + this.rune = rune; + } + + public BloodRunes getRune() { + return rune; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/block/BlockDemonDecor.java b/src/main/java/com/wayoftime/bloodmagic/block/BlockDemonDecor.java new file mode 100644 index 00000000..7799c9f8 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/block/BlockDemonDecor.java @@ -0,0 +1,33 @@ +package com.wayoftime.bloodmagic.block; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.type.DemonWillType; +import net.minecraft.block.material.Material; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nullable; +import java.util.List; + +public class BlockDemonDecor extends BlockMundane { + + private final DemonWillType type; + + public BlockDemonDecor(Material material, String decorType, DemonWillType type) { + super(material, decorType + "_" + type.getName()); + + setTranslationKey(BloodMagic.MODID + ":" + decorType); + + this.type = type; + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { + tooltip.add(I18n.format("tooltip.bloodmagic:demon_will_" + type.getName())); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/block/BlockMundane.java b/src/main/java/com/wayoftime/bloodmagic/block/BlockMundane.java new file mode 100644 index 00000000..f97583fe --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/block/BlockMundane.java @@ -0,0 +1,37 @@ +package com.wayoftime.bloodmagic.block; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.util.register.IItemProvider; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; + +import javax.annotation.Nullable; + +// QoL default block +public class BlockMundane extends Block implements IItemProvider { + + private final boolean hasItem; + + public BlockMundane(Material material, String name, boolean withItem) { + super(material); + + this.hasItem = withItem; + + setTranslationKey(BloodMagic.MODID + ":" + name); + setCreativeTab(BloodMagic.TAB_BM); + setRegistryName(name); + setDefaultState(getBlockState().getBaseState()); + } + + public BlockMundane(Material material, String name) { + this(material, name, true); + } + + @Nullable + @Override + public Item getItem() { + return hasItem ? new ItemBlock(this) : null; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/block/BlockStairsExtended.java b/src/main/java/com/wayoftime/bloodmagic/block/BlockStairsExtended.java new file mode 100644 index 00000000..ffdb36f6 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/block/BlockStairsExtended.java @@ -0,0 +1,36 @@ +package com.wayoftime.bloodmagic.block; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.util.register.IItemProvider; +import com.wayoftime.bloodmagic.core.util.register.IVariantProvider; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import net.minecraft.block.BlockStairs; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; + +import javax.annotation.Nullable; + +// Because Mojang doesn't want us making our own stairs apparently +public class BlockStairsExtended extends BlockStairs implements IItemProvider, IVariantProvider { + + public BlockStairsExtended(IBlockState modelState) { + super(modelState); + + String name = modelState.getBlock().getRegistryName().getPath() + "_stairs"; + setRegistryName(name); + setTranslationKey(BloodMagic.MODID + ":" + name); + setCreativeTab(BloodMagic.TAB_BM); + } + + @Nullable + @Override + public Item getItem() { + return new ItemBlock(this); + } + + @Override + public void collectVariants(Int2ObjectMap variants) { + variants.put(0, "facing=south,half=bottom,shape=straight"); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/client/Sprite.java b/src/main/java/com/wayoftime/bloodmagic/client/Sprite.java similarity index 93% rename from src/main/java/WayofTime/bloodmagic/client/Sprite.java rename to src/main/java/com/wayoftime/bloodmagic/client/Sprite.java index cb92dcd1..8fd428d6 100644 --- a/src/main/java/WayofTime/bloodmagic/client/Sprite.java +++ b/src/main/java/com/wayoftime/bloodmagic/client/Sprite.java @@ -1,6 +1,5 @@ -package WayofTime.bloodmagic.client; +package com.wayoftime.bloodmagic.client; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; @@ -43,7 +42,6 @@ public class Sprite { } public void draw(int x, int y) { - Minecraft.getMinecraft().renderEngine.bindTexture(textureLocation); float f = 0.00390625F; float f1 = 0.00390625F; Tessellator tessellator = Tessellator.getInstance(); diff --git a/src/main/java/com/wayoftime/bloodmagic/client/render/TESRBloodAltar.java b/src/main/java/com/wayoftime/bloodmagic/client/render/TESRBloodAltar.java new file mode 100644 index 00000000..75dc21a7 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/client/render/TESRBloodAltar.java @@ -0,0 +1,87 @@ +package com.wayoftime.bloodmagic.client.render; + +import com.wayoftime.bloodmagic.core.RegistrarBloodMagic; +import com.wayoftime.bloodmagic.tile.TileBloodAltar; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; + +public class TESRBloodAltar extends TileEntitySpecialRenderer { + + private static final float MIN_HEIGHT = 0.499f; + private static final float MAX_HEIGHT = 0.745f; + private static final float SIZE = 0.8F; + + @Override + public void render(TileBloodAltar te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { + GlStateManager.pushMatrix(); + renderFluid(te, x, y, z); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + renderItem(te, x, y, z); + GlStateManager.popMatrix(); + } + + private void renderFluid(TileBloodAltar te, double x, double y, double z) { + FluidTank fluidTank = (FluidTank) te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + float level = (float) fluidTank.getFluidAmount() / (float) fluidTank.getCapacity(); + if (level <= 0) + return; + + GlStateManager.translate(x, y, z); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder builder = tessellator.getBuffer(); + TextureAtlasSprite stillImage = Minecraft.getMinecraft().getTextureMapBlocks().getTextureExtry(RegistrarBloodMagic.FLUID_LIFE_ESSENCE.getStill().toString()); + if (stillImage == null) + return; + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + setGLColorFromInt(RegistrarBloodMagic.FLUID_LIFE_ESSENCE.getColor()); + GlStateManager.translate(0.5, MIN_HEIGHT + ((MAX_HEIGHT - MIN_HEIGHT) * level), 0.5); + + double uMin = (double) stillImage.getMinU(); + double uMax = (double) stillImage.getMaxU(); + double vMin = (double) stillImage.getMinV(); + double vMax = (double) stillImage.getMaxV(); + + builder.begin(7, DefaultVertexFormats.POSITION_TEX); + builder.pos(SIZE / 2f, 0, SIZE / 2f).tex(uMax, vMax).endVertex(); + builder.pos(SIZE / 2f, 0, -SIZE / 2f).tex(uMax, vMin).endVertex(); + builder.pos(-SIZE / 2f, 0, -SIZE / 2f).tex(uMin, vMin).endVertex(); + builder.pos(-SIZE / 2f, 0, SIZE / 2f).tex(uMin, vMax).endVertex(); + tessellator.draw(); + } + + private void renderItem(TileBloodAltar te, double x, double y, double z) { + ItemStack contained = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).getStackInSlot(0); + if (contained.isEmpty()) + return; + + GlStateManager.translate(x, y, z); + RenderItem itemRenderer = Minecraft.getMinecraft().getRenderItem(); + float rotation = 720.0F * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL; + + GlStateManager.translate(0.5F, 0.9F, 0.5F); + GlStateManager.rotate(rotation, 0.0F, 1.0F, 0.0F); + + RenderHelper.enableStandardItemLighting(); + itemRenderer.renderItem(contained, ItemCameraTransforms.TransformType.GROUND); + RenderHelper.disableStandardItemLighting(); + } + + private static void setGLColorFromInt(int color) { + float red = (color >> 16 & 0xFF) / 255.0F; + float green = (color >> 8 & 0xFF) / 255.0F; + float blue = (color & 0xFF) / 255.0F; + + GlStateManager.color(red, green, blue, 1.0F); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/BloodMagicConfiguration.java b/src/main/java/com/wayoftime/bloodmagic/core/BloodMagicConfiguration.java new file mode 100644 index 00000000..5c9672df --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/BloodMagicConfiguration.java @@ -0,0 +1,19 @@ +package com.wayoftime.bloodmagic.core; + +import com.wayoftime.bloodmagic.BloodMagic; +import net.minecraftforge.common.config.Config; + +@Config(modid = BloodMagic.MODID, name = BloodMagic.MODID + "/" + BloodMagic.MODID, category = "") +public class BloodMagicConfiguration { + + public static LoggingConfig logging = new LoggingConfig(); + + public static class LoggingConfig { + @Config.Comment("Prints information like plugin detection and how long it takes plugins to load their various stages.") + public boolean enableApiLogging = true; + @Config.Comment("Extremely verbose logging for things like recipe addition.") + public boolean enableVerboseApiLogging; + @Config.Comment("Debug printing that may help with debugging certain issues.") + public boolean enableDebugLogging; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagic.java b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagic.java new file mode 100644 index 00000000..9fb6fbf5 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagic.java @@ -0,0 +1,41 @@ +package com.wayoftime.bloodmagic.core; + +import com.google.common.base.Stopwatch; +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.util.BMLog; +import com.wayoftime.bloodmagic.core.util.PluginUtil; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) +public class RegistrarBloodMagic { + + public static final Fluid FLUID_LIFE_ESSENCE = new Fluid(BloodMagic.MODID + ":life_essence", new ResourceLocation(BloodMagic.MODID, "blocks/life_essence_flowing"), new ResourceLocation(BloodMagic.MODID, "blocks/life_essence_still"), 0x8C150C); + + @SubscribeEvent + public static void registerBlocks(RegistryEvent.Register event) { + Stopwatch stopwatch = Stopwatch.createStarted(); + RegistrarBloodMagicBlocks.register(event.getRegistry()); + BMLog.DEBUG.info("Registered blocks in {}.", stopwatch.stop()); + } + + @SubscribeEvent + public static void registerItems(RegistryEvent.Register event) { + Stopwatch stopwatch = Stopwatch.createStarted(); + RegistrarBloodMagicItems.register(event.getRegistry()); + BMLog.DEBUG.info("Registered items in {}.", stopwatch.stop()); + } + + @SubscribeEvent + public static void registerRecipes(RegistryEvent event) { + Stopwatch stopwatch = Stopwatch.createStarted(); + PluginUtil.handlePluginStep(PluginUtil.RegistrationStep.RECIPE_REGISTER); + BMLog.DEBUG.info("Registered recipes in {}.", stopwatch.stop()); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicBlocks.java b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicBlocks.java new file mode 100644 index 00000000..1fd28310 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicBlocks.java @@ -0,0 +1,117 @@ +package com.wayoftime.bloodmagic.core; + +import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.block.BlockBloodAltar; +import com.wayoftime.bloodmagic.block.BlockBloodRune; +import com.wayoftime.bloodmagic.block.BlockMundane; +import com.wayoftime.bloodmagic.client.render.TESRBloodAltar; +import com.wayoftime.bloodmagic.core.type.BloodRunes; +import com.wayoftime.bloodmagic.tile.TileBloodAltar; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.registries.IForgeRegistry; + +import java.util.List; + +@GameRegistry.ObjectHolder(BloodMagic.MODID) +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) +public class RegistrarBloodMagicBlocks { + + public static final Block LIFE_ESSENCE = Blocks.AIR; + public static final Block BLOOD_ALTAR = Blocks.AIR; + public static final Block BLOODSTONE_BRICK= Blocks.AIR; + public static final Block BLOODSTONE_TILE = Blocks.AIR; + + public static final Block BLOOD_RUNE_BLANK = Blocks.AIR; + public static final Block BLOOD_RUNE_SPEED = Blocks.AIR; + public static final Block BLOOD_RUNE_EFFICIENCY = Blocks.AIR; + public static final Block BLOOD_RUNE_SACRIFICE = Blocks.AIR; + public static final Block BLOOD_RUNE_SELF_SACRIFICE = Blocks.AIR; + public static final Block BLOOD_RUNE_DISPLACEMENT = Blocks.AIR; + public static final Block BLOOD_RUNE_CAPACITY = Blocks.AIR; + public static final Block BLOOD_RUNE_AUGMENTED_CAPACITY = Blocks.AIR; + public static final Block BLOOD_RUNE_ORB = Blocks.AIR; + public static final Block BLOOD_RUNE_ACCELERATION = Blocks.AIR; + public static final Block BLOOD_RUNE_CHARGING = Blocks.AIR; + + static List blocks; + + public static void register(IForgeRegistry registry) { + GameRegistry.registerTileEntity(TileBloodAltar.class, new ResourceLocation(BloodMagic.MODID, "blood_altar")); + FluidRegistry.addBucketForFluid(RegistrarBloodMagic.FLUID_LIFE_ESSENCE); + + blocks = Lists.newArrayList( + new BlockFluidClassic(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, Material.WATER).setTranslationKey(BloodMagic.MODID + ".life_essence").setRegistryName("life_essence"), + new BlockBloodAltar().setRegistryName("blood_altar"), + new BlockMundane(Material.ROCK, "bloodstone_brick"), + new BlockMundane(Material.ROCK, "bloodstone_tile") + ); + + for (BloodRunes rune : BloodRunes.values()) + blocks.add(new BlockBloodRune(rune)); + + // TODO - Re-enable whenever I feel like it +// for (DemonWillType type : DemonWillType.VALUES) { +// blocks.add(new BlockDemonDecor(Material.ROCK, "demon_stone", type)); +// blocks.add(new BlockDemonDecor(Material.ROCK, "demon_stone_polished", type)); +// Block brickBlock; +// blocks.add(brickBlock = new BlockDemonDecor(Material.ROCK, "demon_brick", type)); +// blocks.add(new BlockDemonDecor(Material.ROCK, "demon_brick_small", type)); +// blocks.add(new BlockDemonDecor(Material.ROCK, "demon_tile", type)); +// blocks.add(new BlockDemonDecor(Material.ROCK, "demon_tile_special", type)); +// blocks.add(new BlockDemonDecor(Material.IRON, "demon_metal", type)); +// blocks.add(new BlockStairsExtended(brickBlock.getDefaultState()) { +// @SideOnly(Side.CLIENT) +// @Override +// public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { +// tooltip.add(I18n.format("tooltip.bloodmagic:demon_will_" + type.getName())); +// } +// }.setTranslationKey(BloodMagic.MODID + ":demon_stairs")); +// } + + registry.registerAll(blocks.toArray(new Block[0])); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public static void registerModels(ModelRegistryEvent event) { + ClientRegistry.bindTileEntitySpecialRenderer(TileBloodAltar.class, new TESRBloodAltar()); + + ModelLoader.setCustomStateMapper(LIFE_ESSENCE, new StateMapperBase() { + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) { + return new ModelResourceLocation(state.getBlock().getRegistryName(), "fluid"); + } + }); + + for (Block block : blocks) { + Item item = Item.getItemFromBlock(block); + if (item == Items.AIR) + continue; + + boolean flag = RegistrarBloodMagicItems.handleModel(item); + + + if (!flag) // If we haven't registered a model by now, we don't need any special handling so we'll just use the default model. + ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), "normal")); + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicItems.java b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicItems.java new file mode 100644 index 00000000..8fedb858 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicItems.java @@ -0,0 +1,136 @@ +package com.wayoftime.bloodmagic.core; + +import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.network.BloodOrb; +import com.wayoftime.bloodmagic.core.type.DemonWillType; +import com.wayoftime.bloodmagic.core.type.SlateType; +import com.wayoftime.bloodmagic.core.util.register.IItemProvider; +import com.wayoftime.bloodmagic.core.util.register.IVariantProvider; +import com.wayoftime.bloodmagic.item.*; +import com.wayoftime.bloodmagic.item.sigil.ItemSigil; +import com.wayoftime.bloodmagic.item.sigil.SigilAir; +import com.wayoftime.bloodmagic.item.sigil.SigilDivination; +import com.wayoftime.bloodmagic.item.sigil.SigilFastMiner; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.registries.IForgeRegistry; + +import java.util.List; + +@GameRegistry.ObjectHolder(BloodMagic.MODID) +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) +public class RegistrarBloodMagicItems { + + public static final Item BLOOD_ORB_WEAK = Items.AIR; + public static final Item BLOOD_ORB_APPRENTICE = Items.AIR; + public static final Item BLOOD_ORB_MAGICIAN = Items.AIR; + public static final Item BLOOD_ORB_MASTER = Items.AIR; + public static final Item BLOOD_ORB_ARCHMAGE = Items.AIR; + public static final Item BLOOD_ORB_TRANSCENDENT = Items.AIR; + + public static final Item DAGGER_SELF_SACRIFICE = Items.AIR; + public static final Item DAGGER_SELF_SACRIFICE_CREATIVE = Items.AIR; + + public static final Item SLATE_BLANK = Items.AIR; + public static final Item SLATE_REINFORCED = Items.AIR; + public static final Item SLATE_IMBUED = Items.AIR; + public static final Item SLATE_DEMONIC = Items.AIR; + public static final Item SLATE_ETHEREAL = Items.AIR; + + public static final Item SIGIL_DIVINATION = Items.AIR; + public static final Item SIGIL_AIR = Items.AIR; + public static final Item SIGIL_FAST_MINER = Items.AIR; + + public static final Item LIVING_ARMOR_HEAD = Items.AIR; + public static final Item LIVING_ARMOR_CHEST = Items.AIR; + public static final Item LIVING_ARMOR_LEGS = Items.AIR; + public static final Item LIVING_ARMOR_FEET = Items.AIR; + public static final Item LIVING_TOME = Items.AIR; + + public static final Item DEMON_WILL_CRYSTAL_RAW = Items.AIR; + public static final Item DEMON_WILL_CRYSTAL_CORROSIVE = Items.AIR; + public static final Item DEMON_WILL_CRYSTAL_DESTRUCTIVE = Items.AIR; + public static final Item DEMON_WILL_CRYSTAL_VENGEFUL = Items.AIR; + public static final Item DEMON_WILL_CRYSTAL_STEADFAST = Items.AIR; + + static List items = Lists.newArrayList(); + + public static void register(IForgeRegistry registry) { + for (Block block : RegistrarBloodMagicBlocks.blocks) { + if (block instanceof IItemProvider) { + Item item = ((IItemProvider) block).getItem(); + if (item != null) + items.add(item.setRegistryName(block.getRegistryName())); + } + } + + items.addAll(Lists.newArrayList( + new ItemBloodOrb(new BloodOrb(new ResourceLocation(BloodMagic.MODID, "weak"), 1, 5000, 2)), + new ItemBloodOrb(new BloodOrb(new ResourceLocation(BloodMagic.MODID, "apprentice"), 2, 25000, 5)), + new ItemBloodOrb(new BloodOrb(new ResourceLocation(BloodMagic.MODID, "magician"), 3, 150000, 15)), + new ItemBloodOrb(new BloodOrb(new ResourceLocation(BloodMagic.MODID, "master"), 4, 1000000, 25)), + new ItemBloodOrb(new BloodOrb(new ResourceLocation(BloodMagic.MODID, "archmage"), 5, 10000000, 50)), + new ItemBloodOrb(new BloodOrb(new ResourceLocation(BloodMagic.MODID, "transcendent"), 6, 30000000, 50)), + new ItemDaggerSelfSacrifice(ItemDaggerSelfSacrifice.Type.NORMAL), + new ItemDaggerSelfSacrifice(ItemDaggerSelfSacrifice.Type.CREATIVE), + new ItemMundane("slate_" + SlateType.BLANK.getName()), + new ItemMundane("slate_" + SlateType.REINFORCED.getName()), + new ItemMundane("slate_" + SlateType.IMBUED.getName()), + new ItemMundane("slate_" + SlateType.DEMONIC.getName()), + new ItemMundane("slate_" + SlateType.ETHEREAL.getName()), + new ItemSigil(new SigilDivination(), "divination"), + new ItemSigil(new SigilAir(), "air"), + new ItemSigil(new SigilFastMiner(), "fast_miner"), + new ItemLivingArmor(EntityEquipmentSlot.HEAD), + new ItemLivingArmor(EntityEquipmentSlot.CHEST), + new ItemLivingArmor(EntityEquipmentSlot.LEGS), + new ItemLivingArmor(EntityEquipmentSlot.FEET), + new ItemLivingTome(), + new ItemAltarBuilder() + )); + + for (DemonWillType type : DemonWillType.VALUES) + items.add(new ItemMundane("demon_will_crystal_" + type.getName())); + + registry.registerAll(items.toArray(new Item[0])); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public static void registerModels(ModelRegistryEvent event) { + for (Item item : items) { + boolean flag = handleModel(item); + + if (!flag) // If we haven't registered a model by now, we don't need any special handling so we'll just use the default model. + ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), item instanceof ItemBlock ? "normal" : "inventory")); + } + } + + static boolean handleModel(Item item) { + if (item instanceof IVariantProvider) { + Int2ObjectMap variants = new Int2ObjectOpenHashMap<>(); + ((IVariantProvider) item).collectVariants(variants); + for (Int2ObjectMap.Entry entry : variants.int2ObjectEntrySet()) + ModelLoader.setCustomModelResourceLocation(item, entry.getIntKey(), new ModelResourceLocation(item.getRegistryName(), entry.getValue())); + + return true; + } + + return false; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicLivingArmor.java b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicLivingArmor.java new file mode 100644 index 00000000..7959ef67 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicLivingArmor.java @@ -0,0 +1,82 @@ +package com.wayoftime.bloodmagic.core; + +import com.google.common.collect.Maps; +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.living.LivingUpgrade; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.util.Map; + +/* + * TODO - See checklist + * - [-] Upgrades (Names pulled from 2.0 class names) + * - [ ] Arrow Protect + * - [ ] Arrow Shot + * - [ ] Critical Strike + * - [ ] Digging + * - [ ] Elytra + * - This will wait for Forge to add the ability to make them properly. I'm not adding that hacky shit back in. + * - [ ] Experience + * - [ ] Fall Protect + * - [ ] Fire Resist + * - [ ] Grave Digger + * - [ ] Grim Reaper Sprint + * - [ ] Health boost + * - [-] Jump + * - [ ] Knockback Resist + * - [ ] Melee Damage + * - [ ] Night Sight + * - [ ] Physical Protect + * - [ ] Poison Resist + * - [ ] Repairing + * - [ ] Self Sacrifice + * - [ ] Solar Powered + * - [ ] Speed + * - [ ] Sprint Attack + * - [ ] Step Assist + * - [ ] Downgrades (Names pulled from 2.0 class names) + * - [ ] Battle Hungry + * - [ ] Crippled Arm + * - [ ] Dig Slowdown + * - [ ] Disoriented + * - [ ] Melee Decrease + * - [ ] Quenched + * - [ ] Slippery + * - [ ] Slow Heal + * - [ ] Slowness + * - [ ] Storm Trooper + * - [-] Equipment + * - [x] Living Helmet + * - [x] Living Chestplate + * - [x] Living Leggings + * - [x] Living Boots + * - [ ] Tools (Replacements for Bound equipment. Need their own (up|down)grade sets once implemented.) + * - [ ] Living Sword + * - [ ] Living Pickaxe + * - [ ] Living Axe + * - [ ] Living Shovel + */ +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) +public class RegistrarBloodMagicLivingArmor { + + public static final Map UPGRADES = Maps.newHashMap(); + public static final LivingUpgrade JUMP = new LivingUpgrade(new ResourceLocation(BloodMagic.MODID, "jump"), levels -> { + levels.add(new LivingUpgrade.UpgradeLevel(10, 1)); + levels.add(new LivingUpgrade.UpgradeLevel(20, 5)); + levels.add(new LivingUpgrade.UpgradeLevel(30, 25)); + levels.add(new LivingUpgrade.UpgradeLevel(40, 125)); + }); + + @SubscribeEvent + public static void registerUpgrades(RegistryEvent.Register event) { + addUpgrade(JUMP); + } + + private static void addUpgrade(LivingUpgrade upgrade) { + UPGRADES.put(upgrade.getKey(), upgrade); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicRecipes.java b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicRecipes.java new file mode 100644 index 00000000..75f89717 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/RegistrarBloodMagicRecipes.java @@ -0,0 +1,41 @@ +package com.wayoftime.bloodmagic.core; + +import com.wayoftime.bloodmagic.api.impl.BloodMagicRecipeRegistrar; +import com.wayoftime.bloodmagic.core.altar.AltarTier; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.oredict.OreIngredient; + +import static com.wayoftime.bloodmagic.core.RegistrarBloodMagicItems.*; + +public class RegistrarBloodMagicRecipes { + + public static void registerAltarRecipes(BloodMagicRecipeRegistrar registrar) { + // Tier 1 + registrar.addBloodAltar(new OreIngredient("gemDiamond"), new ItemStack(BLOOD_ORB_WEAK), AltarTier.ONE, 2000, 2, 1); + registrar.addBloodAltar(new OreIngredient("stone"), new ItemStack(SLATE_BLANK), AltarTier.ONE, 1000, 5, 5); + registrar.addBloodAltar(Ingredient.fromItem(Items.BUCKET), FluidUtil.getFilledBucket(new FluidStack(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, 1000)), AltarTier.ONE, 1000, 5, 5); + + // Tier 2 + registrar.addBloodAltar(new OreIngredient("blockRedstone"), new ItemStack(BLOOD_ORB_APPRENTICE), AltarTier.TWO, 5000, 5, 5); + registrar.addBloodAltar(Ingredient.fromItem(SLATE_BLANK), new ItemStack(SLATE_REINFORCED), AltarTier.TWO, 2000, 5, 5); + + // Tier 3 + registrar.addBloodAltar(new OreIngredient("blockGold"), new ItemStack(BLOOD_ORB_MAGICIAN), AltarTier.THREE, 25000, 20, 20); + registrar.addBloodAltar(Ingredient.fromItem(SLATE_REINFORCED), new ItemStack(SLATE_IMBUED), AltarTier.THREE, 5000, 15, 10); + + // Tier 4 + registrar.addBloodAltar(new OreIngredient("ingotIron"), new ItemStack(BLOOD_ORB_MASTER), AltarTier.FOUR, 40000, 30, 50); // TODO - Blood Shard input + registrar.addBloodAltar(Ingredient.fromItem(SLATE_IMBUED), new ItemStack(SLATE_DEMONIC), AltarTier.FOUR, 15000, 20, 20); + + // Tier 5 + registrar.addBloodAltar(new OreIngredient("netherStar"), new ItemStack(BLOOD_ORB_ARCHMAGE), AltarTier.FIVE, 80000, 50, 100); + registrar.addBloodAltar(Ingredient.fromItem(SLATE_DEMONIC), new ItemStack(SLATE_ETHEREAL), AltarTier.FIVE, 30000, 40, 100); + + // Tier 6 + registrar.addBloodAltar(new OreIngredient("gemDiamond"), new ItemStack(BLOOD_ORB_TRANSCENDENT), AltarTier.SIX, 200000, 100, 200); // TODO - Whatever this input is supposed to be + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarComponent.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarComponent.java new file mode 100644 index 00000000..3fc574e6 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarComponent.java @@ -0,0 +1,37 @@ +package com.wayoftime.bloodmagic.core.altar; + +import com.wayoftime.bloodmagic.core.type.ComponentType; +import net.minecraft.util.math.BlockPos; + +public class AltarComponent { + + private final BlockPos offset; + private final ComponentType type; + private boolean upgradeSlot; + + public AltarComponent(BlockPos offset, ComponentType type) { + this.offset = offset; + this.type = type; + } + + public AltarComponent(BlockPos offset) { + this(offset, ComponentType.NOT_AIR); + } + + public BlockPos getOffset() { + return offset; + } + + public ComponentType getType() { + return type; + } + + public AltarComponent asUpgradeSlot() { + this.upgradeSlot = true; + return this; + } + + public boolean isUpgradeSlot() { + return upgradeSlot; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/altar/AltarTier.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarTier.java similarity index 62% rename from src/main/java/WayofTime/bloodmagic/altar/AltarTier.java rename to src/main/java/com/wayoftime/bloodmagic/core/altar/AltarTier.java index d940e6ab..004e5eff 100644 --- a/src/main/java/WayofTime/bloodmagic/altar/AltarTier.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarTier.java @@ -1,42 +1,44 @@ -package WayofTime.bloodmagic.altar; +package com.wayoftime.bloodmagic.core.altar; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import net.minecraft.util.math.BlockPos; import java.util.List; import java.util.function.Consumer; +import static com.wayoftime.bloodmagic.core.type.ComponentType.*; + public enum AltarTier { - ONE() { + + ONE { @Override public void buildComponents(Consumer components) { - // Nada - } - }, TWO() { - @Override - public void buildComponents(Consumer components) { - components.accept(new AltarComponent(new BlockPos(-1, -1, -1), ComponentType.BLOODRUNE)); - components.accept(new AltarComponent(new BlockPos(0, -1, -1), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(1, -1, -1), ComponentType.BLOODRUNE)); - components.accept(new AltarComponent(new BlockPos(-1, -1, 0), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(1, -1, 0), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(-1, -1, 1), ComponentType.BLOODRUNE)); - components.accept(new AltarComponent(new BlockPos(0, -1, 1), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(1, -1, 1), ComponentType.BLOODRUNE)); + // No-op } }, - THREE() { + TWO { @Override public void buildComponents(Consumer components) { - // Doesn't pull from tier 2 because upgrades slots are different - components.accept(new AltarComponent(new BlockPos(-1, -1, -1), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(0, -1, -1), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(1, -1, -1), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(-1, -1, 0), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(1, -1, 0), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(-1, -1, 1), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(0, -1, 1), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(1, -1, 1), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-1, -1, -1), BLOOD_RUNE)); + components.accept(new AltarComponent(new BlockPos(0, -1, -1), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, -1), BLOOD_RUNE)); + components.accept(new AltarComponent(new BlockPos(-1, -1, 0), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, 0), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-1, -1, 1), BLOOD_RUNE)); + components.accept(new AltarComponent(new BlockPos(0, -1, 1), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, 1), BLOOD_RUNE)); + } + }, + THREE { + @Override + public void buildComponents(Consumer components) { + // Re-list the tier 2 non-upgrade components. Leaves out the upgradeable components so they aren't double counted + components.accept(new AltarComponent(new BlockPos(-1, -1, -1), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, -1), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-1, -1, 1), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(1, -1, 1), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-3, -1, -3))); components.accept(new AltarComponent(new BlockPos(-3, 0, -3))); components.accept(new AltarComponent(new BlockPos(3, -1, -3))); @@ -45,29 +47,27 @@ public enum AltarTier { components.accept(new AltarComponent(new BlockPos(-3, 0, 3))); components.accept(new AltarComponent(new BlockPos(3, -1, 3))); components.accept(new AltarComponent(new BlockPos(3, 0, 3))); - components.accept(new AltarComponent(new BlockPos(-3, 1, -3), ComponentType.GLOWSTONE)); - components.accept(new AltarComponent(new BlockPos(3, 1, -3), ComponentType.GLOWSTONE)); - components.accept(new AltarComponent(new BlockPos(-3, 1, 3), ComponentType.GLOWSTONE)); - components.accept(new AltarComponent(new BlockPos(3, 1, 3), ComponentType.GLOWSTONE)); + components.accept(new AltarComponent(new BlockPos(-3, 1, -3), GLOWSTONE)); + components.accept(new AltarComponent(new BlockPos(3, 1, -3), GLOWSTONE)); + components.accept(new AltarComponent(new BlockPos(-3, 1, 3), GLOWSTONE)); + components.accept(new AltarComponent(new BlockPos(3, 1, 3), GLOWSTONE)); for (int i = -2; i <= 2; i++) { - components.accept(new AltarComponent(new BlockPos(3, -2, i), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(-3, -2, i), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(i, -2, 3), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(i, -2, -3), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(3, -2, i), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-3, -2, i), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -2, 3), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -2, -3), BLOOD_RUNE).asUpgradeSlot()); } } }, - FOUR() { + FOUR { @Override public void buildComponents(Consumer components) { - THREE.getAltarComponents().forEach(components); - for (int i = -3; i <= 3; i++) { - components.accept(new AltarComponent(new BlockPos(5, -3, i), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(-5, -3, i), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(i, -3, 5), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(i, -3, -5), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(5, -3, i), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-5, -3, i), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -3, 5), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -3, -5), BLOOD_RUNE).asUpgradeSlot()); } for (int i = -2; i <= 1; i++) { @@ -77,34 +77,31 @@ public enum AltarTier { components.accept(new AltarComponent(new BlockPos(-5, i, 5))); } - components.accept(new AltarComponent(new BlockPos(5, 2, 5), ComponentType.BLOODSTONE)); - components.accept(new AltarComponent(new BlockPos(5, 2, -5), ComponentType.BLOODSTONE)); - components.accept(new AltarComponent(new BlockPos(-5, 2, -5), ComponentType.BLOODSTONE)); - components.accept(new AltarComponent(new BlockPos(-5, 2, 5), ComponentType.BLOODSTONE)); + components.accept(new AltarComponent(new BlockPos(5, 2, 5), BLOODSTONE)); + components.accept(new AltarComponent(new BlockPos(5, 2, -5), BLOODSTONE)); + components.accept(new AltarComponent(new BlockPos(-5, 2, -5), BLOODSTONE)); + components.accept(new AltarComponent(new BlockPos(-5, 2, 5), BLOODSTONE)); } }, - FIVE() { + FIVE { @Override public void buildComponents(Consumer components) { - FOUR.getAltarComponents().forEach(components); - components.accept(new AltarComponent(new BlockPos(-8, -3, 8), ComponentType.BEACON)); - components.accept(new AltarComponent(new BlockPos(-8, -3, -8), ComponentType.BEACON)); - components.accept(new AltarComponent(new BlockPos(8, -3, -8), ComponentType.BEACON)); - components.accept(new AltarComponent(new BlockPos(8, -3, 8), ComponentType.BEACON)); + components.accept(new AltarComponent(new BlockPos(-8, -3, 8), BEACON)); + components.accept(new AltarComponent(new BlockPos(-8, -3, -8), BEACON)); + components.accept(new AltarComponent(new BlockPos(8, -3, -8), BEACON)); + components.accept(new AltarComponent(new BlockPos(8, -3, 8), BEACON)); for (int i = -6; i <= 6; i++) { - components.accept(new AltarComponent(new BlockPos(8, -4, i), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(-8, -4, i), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(i, -4, 8), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(i, -4, -8), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(8, -4, i), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-8, -4, i), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -4, 8), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -4, -8), BLOOD_RUNE).asUpgradeSlot()); } } }, - SIX() { + SIX { @Override public void buildComponents(Consumer components) { - FIVE.getAltarComponents().forEach(components); - for (int i = -4; i <= 2; i++) { components.accept(new AltarComponent(new BlockPos(11, i, 11))); components.accept(new AltarComponent(new BlockPos(-11, i, -11))); @@ -112,37 +109,39 @@ public enum AltarTier { components.accept(new AltarComponent(new BlockPos(-11, i, 11))); } - components.accept(new AltarComponent(new BlockPos(11, 3, 11), ComponentType.CRYSTAL)); - components.accept(new AltarComponent(new BlockPos(-11, 3, -11), ComponentType.CRYSTAL)); - components.accept(new AltarComponent(new BlockPos(11, 3, -11), ComponentType.CRYSTAL)); - components.accept(new AltarComponent(new BlockPos(-11, 3, 11), ComponentType.CRYSTAL)); + components.accept(new AltarComponent(new BlockPos(11, 3, 11), CRYSTAL)); + components.accept(new AltarComponent(new BlockPos(-11, 3, -11), CRYSTAL)); + components.accept(new AltarComponent(new BlockPos(11, 3, -11), CRYSTAL)); + components.accept(new AltarComponent(new BlockPos(-11, 3, 11), CRYSTAL)); for (int i = -9; i <= 9; i++) { - components.accept(new AltarComponent(new BlockPos(11, -5, i), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(-11, -5, i), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(i, -5, 11), ComponentType.BLOODRUNE).setUpgradeSlot()); - components.accept(new AltarComponent(new BlockPos(i, -5, -11), ComponentType.BLOODRUNE).setUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(11, -5, i), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(-11, -5, i), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -5, 11), BLOOD_RUNE).asUpgradeSlot()); + components.accept(new AltarComponent(new BlockPos(i, -5, -11), BLOOD_RUNE).asUpgradeSlot()); } } }; - public static final int MAXTIERS = values().length; + public static final AltarTier[] VALUES = values(); - private List altarComponents; + private final List components; + private final int displayInt; AltarTier() { - this.altarComponents = Lists.newArrayList(); - - buildComponents(altarComponents::add); + List list = Lists.newArrayList(); + buildComponents(list::add); + this.components = ImmutableList.copyOf(list); + this.displayInt = ordinal() + 1; } public abstract void buildComponents(Consumer components); - public int toInt() { - return ordinal() + 1; + public List getComponents() { + return components; } - public List getAltarComponents() { - return altarComponents; + public int getDisplayNumber() { + return displayInt; } } diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUpgrades.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUpgrades.java new file mode 100644 index 00000000..1c7fa858 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUpgrades.java @@ -0,0 +1,71 @@ +package com.wayoftime.bloodmagic.core.altar; + +import com.google.common.collect.Maps; +import com.wayoftime.bloodmagic.core.type.BloodRunes; +import net.minecraftforge.fluids.Fluid; + +import java.util.EnumMap; + +import static com.wayoftime.bloodmagic.core.type.BloodRunes.*; + +public class AltarUpgrades { + + private final EnumMap upgrades; + + public AltarUpgrades() { + this.upgrades = Maps.newEnumMap(BloodRunes.class); + } + + public AltarUpgrades upgrade(BloodRunes runeType) { + upgrades.compute(runeType, (k, v) -> v == null ? 1 : v + 1); + return this; + } + + public int getAccelerationCount() { + return getCount(ACCELERATION); + } + + public float getCapacityModifier() { + return (float) ((1 * Math.pow(1.10, getCount(AUGMENTED_CAPACITY))) + 0.20 * getCount(CAPACITY)); + } + + public int getChargingFrequency() { + return Math.max(20 - getCount(ACCELERATION), 1); + } + + public int getChargingRate() { + return (int) (10 * getCount(CHARGING) * (1 + getConsumptionModifier() / 2)); + } + + public float getConsumptionModifier() { + return (float) (0.20 * getCount(SPEED)); + } + + public float getDislocationModifier() { + return (float) (Math.pow(1.2, getCount(DISPLACEMENT))); + } + + public float getEfficiencyModifier() { + return (float) Math.pow(0.85, getCount(EFFICIENCY)); + } + + public int getMaxCharge() { + return (int) (Fluid.BUCKET_VOLUME * Math.max(0.5 * getCapacityModifier(), 1) * getCount(CHARGING)); + } + + public float getOrbCapacityModifier() { + return (float) (1.02 * getCount(ORB)); + } + + public float getSacrificeModifier() { + return (float) (0.10 * getCount(SACRIFICE)); + } + + public float getSelfSacrificeModifier() { + return (float) (0.10 * getCount(SELF_SACRIFICE)); + } + + public int getCount(BloodRunes rune) { + return upgrades.getOrDefault(rune, 0); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUtil.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUtil.java new file mode 100644 index 00000000..9ed310a0 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/AltarUtil.java @@ -0,0 +1,153 @@ +package com.wayoftime.bloodmagic.core.altar; + +import com.google.common.collect.Maps; +import com.wayoftime.bloodmagic.api.impl.BloodMagicAPI; +import com.wayoftime.bloodmagic.block.BlockBloodRune; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagic; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicBlocks; +import com.wayoftime.bloodmagic.core.type.ComponentType; +import com.wayoftime.bloodmagic.core.util.BooleanResult; +import com.wayoftime.bloodmagic.event.SacrificeEvent; +import com.wayoftime.bloodmagic.tile.TileBloodAltar; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fluids.FluidStack; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.EnumMap; +import java.util.List; + +public class AltarUtil { + + private static final EnumMap COMPONENT_DEFAULT_STATES; + static { + COMPONENT_DEFAULT_STATES = Maps.newEnumMap(ComponentType.class); + COMPONENT_DEFAULT_STATES.put(ComponentType.GLOWSTONE, Blocks.GLOWSTONE.getDefaultState()); + COMPONENT_DEFAULT_STATES.put(ComponentType.BLOODSTONE, RegistrarBloodMagicBlocks.BLOODSTONE_BRICK.getDefaultState()); + COMPONENT_DEFAULT_STATES.put(ComponentType.BEACON, Blocks.BEACON.getDefaultState()); + COMPONENT_DEFAULT_STATES.put(ComponentType.BLOOD_RUNE, RegistrarBloodMagicBlocks.BLOOD_RUNE_BLANK.getDefaultState()); + COMPONENT_DEFAULT_STATES.put(ComponentType.CRYSTAL, Blocks.BEDROCK.getDefaultState()); // FIXME - Crystal + COMPONENT_DEFAULT_STATES.put(ComponentType.NOT_AIR, Blocks.STONEBRICK.getDefaultState()); + } + + public static BooleanResult handleSacrifice(EntityLivingBase living, int baseAmount) { + TileBloodAltar altar = findNearestAltar(living.getEntityWorld(), new BlockPos(living), 2); + if (altar == null) + return new BooleanResult<>(0, false); + + boolean isPlayer = living instanceof EntityPlayer; + AltarUpgrades upgrades = altar.getUpgrades(); + int modifiedAmount = (int) (baseAmount * (1 + (isPlayer ? upgrades.getSelfSacrificeModifier() : upgrades.getSacrificeModifier()))); + + SacrificeEvent event = isPlayer ? new SacrificeEvent.SelfSacrifice(living, baseAmount, modifiedAmount) : new SacrificeEvent(living, baseAmount, modifiedAmount); + MinecraftForge.EVENT_BUS.post(event); + modifiedAmount = event.getModifiedAmount(); + + int filled = altar.getTank().fill(new FluidStack(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, modifiedAmount), true); + if (filled != 0) + altar.markDirty(); + + return new BooleanResult<>(filled, true); + } + + public static BooleanResult handleSacrifice(EntityLivingBase living) { + boolean isPlayer = living instanceof EntityPlayer; + int baseAmount = isPlayer ? 200 : BloodMagicAPI.INSTANCE.getValueManager().getSacrificial().getOrDefault(EntityList.getKey(living), 200); + return handleSacrifice(living, baseAmount); + } + + @Nonnull + public static AltarTier getTier(World world, BlockPos pos) { + TileEntity tile = world.getTileEntity(pos); + if (!(tile instanceof TileBloodAltar)) + return AltarTier.ONE; + + AltarTier lastCheck = AltarTier.ONE; + for (AltarTier tier : AltarTier.VALUES) { + for (AltarComponent component : tier.getComponents()) { + List validStates = BloodMagicAPI.INSTANCE.getComponentStates(component.getType()); + IBlockState worldState = world.getBlockState(pos.add(component.getOffset())); + if (component.getType() == ComponentType.NOT_AIR && worldState.getMaterial() != Material.AIR) + continue; + + if (!validStates.contains(worldState)) + return lastCheck; + } + + lastCheck = tier; + } + + return lastCheck; + } + + @Nonnull + public static AltarUpgrades getUpgrades(World world, BlockPos pos, AltarTier currentTier) { + AltarUpgrades upgrades = new AltarUpgrades(); + + for (AltarTier tier : AltarTier.VALUES) { + if (tier.ordinal() > currentTier.ordinal()) + break; + + for (AltarComponent component : tier.getComponents()) { + if (!component.isUpgradeSlot() || component.getType() != ComponentType.BLOOD_RUNE) + continue; + + IBlockState state = world.getBlockState(pos.add(component.getOffset())); + if (state.getBlock() instanceof BlockBloodRune) + upgrades.upgrade(((BlockBloodRune) state.getBlock()).getRune()); + } + } + + return upgrades; + } + + // FIXME - This does not search properly. It may provide an altar that isn't the closest + @Nullable + public static TileBloodAltar findNearestAltar(World world, BlockPos pos, int searchRadius) { + BlockPos.MutableBlockPos offsetPos = new BlockPos.MutableBlockPos(pos); + for (int x = -searchRadius; x < searchRadius; x++) { + for (int y = -searchRadius; y < searchRadius; y++) { + for (int z = -searchRadius; z < searchRadius; z++) { + TileEntity tile = world.getTileEntity(offsetPos.setPos(pos.getX() + x, pos.getY() + y, pos.getZ() + z)); + if (tile instanceof TileBloodAltar) + return (TileBloodAltar) tile; + } + } + } + + return null; + } + + public static void constructAltar(World world, BlockPos altarPos, AltarTier buildTo) { + BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); + for (AltarTier tier : AltarTier.VALUES) { + if (tier.ordinal() > buildTo.ordinal()) + return; + + for (AltarComponent component : tier.getComponents()) { + mutablePos.setPos(altarPos.getX() + component.getOffset().getX(), altarPos.getY() + component.getOffset().getY(), altarPos.getZ() + component.getOffset().getZ()); + world.setBlockState(mutablePos, COMPONENT_DEFAULT_STATES.get(component.getType())); + } + } + } + + public static void destroyAltar(World world, BlockPos altarPos) { + BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); + for (AltarTier tier : AltarTier.VALUES) { + for (AltarComponent component : tier.getComponents()) { + mutablePos.setPos(altarPos.getX() + component.getOffset().getX(), altarPos.getY() + component.getOffset().getY(), altarPos.getZ() + component.getOffset().getZ()); + world.setBlockToAir(mutablePos); + } + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/altar/IAltarManipulator.java b/src/main/java/com/wayoftime/bloodmagic/core/altar/IAltarManipulator.java new file mode 100644 index 00000000..9b92ddeb --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/altar/IAltarManipulator.java @@ -0,0 +1,13 @@ +package com.wayoftime.bloodmagic.core.altar; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface IAltarManipulator { + + default boolean tryManipulate(EntityPlayer player, ItemStack stack, World world, BlockPos pos) { + return true; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/handler/GenericEventHandler.java b/src/main/java/com/wayoftime/bloodmagic/core/handler/GenericEventHandler.java new file mode 100644 index 00000000..65990c64 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/handler/GenericEventHandler.java @@ -0,0 +1,52 @@ +package com.wayoftime.bloodmagic.core.handler; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.network.Binding; +import com.wayoftime.bloodmagic.core.network.BloodOrb; +import com.wayoftime.bloodmagic.core.network.IBloodOrb; +import com.wayoftime.bloodmagic.core.network.SoulNetwork; +import com.wayoftime.bloodmagic.event.BindingEvent; +import com.wayoftime.bloodmagic.item.IBindable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) +public class GenericEventHandler { + + @SubscribeEvent + public static void onItemUse(PlayerInteractEvent.RightClickItem event) { + if (event.getWorld().isRemote) + return; + + EntityPlayer player = event.getEntityPlayer(); + ItemStack clicked = event.getItemStack(); + if (player instanceof FakePlayer) + return; + + if (clicked.getItem() instanceof IBindable) { + IBindable bindable = (IBindable) clicked.getItem(); + Binding binding = bindable.getBinding(clicked); + if (binding == null && bindable.onBind(player, clicked)) { + binding = new Binding(player); + BindingEvent bindingEvent = new BindingEvent(clicked, binding, player); + if (!MinecraftForge.EVENT_BUS.post(bindingEvent)) + IBindable.applyBinding(clicked, binding); + } + } + + if (clicked.getItem() instanceof IBloodOrb) { + BloodOrb orb = ((IBloodOrb) clicked.getItem()).getOrb(clicked); + if (orb == null) + return; + + SoulNetwork network = SoulNetwork.get(player.getGameProfile().getId()); + if (orb.getTier() > network.getTier()) + network.setTier(orb.getTier(), orb.getCapacity()); + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/ILivingContainer.java b/src/main/java/com/wayoftime/bloodmagic/core/living/ILivingContainer.java new file mode 100644 index 00000000..dfaf0419 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/ILivingContainer.java @@ -0,0 +1,54 @@ +package com.wayoftime.bloodmagic.core.living; + +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +public interface ILivingContainer { + + @Nullable + default LivingStats getLivingStats(@Nonnull ItemStack stack) { + if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("livingStats")) + return null; + + return LivingStats.fromNBT(stack.getTagCompound().getCompoundTag("livingStats")); + } + + default void updateLivingStates(@Nonnull ItemStack stack, @Nullable LivingStats stats) { + if (stats == null) { + if (stack.hasTagCompound()) + stack.getTagCompound().removeTag("livingStats"); + return; + } + + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + + stack.getTagCompound().setTag("livingStats", stats.serializeNBT()); + } + + @SideOnly(Side.CLIENT) + static void appendLivingTooltip(LivingStats stats, List tooltip, boolean trainable) { + if (stats != null) { + if (trainable) + tooltip.add(I18n.format("tooltip.bloodmagic:living_points", stats.getUsedPoints(), stats.getMaxPoints())); + + stats.getUpgrades().forEach((k, v) -> { + if (k.getLevel(v) <= 0) + return; + + if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || k.getNextRequirement(v) == 0) + tooltip.add(I18n.format(k.getUnlocalizedName()) + " " + I18n.format("enchantment.level." + k.getLevel(v))); + else + tooltip.add(I18n.format(k.getUnlocalizedName()) + ": " + v + "/" + k.getNextRequirement(v)); + }); + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingEquipmentEvent.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingEquipmentEvent.java new file mode 100644 index 00000000..4d50d354 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingEquipmentEvent.java @@ -0,0 +1,64 @@ +package com.wayoftime.bloodmagic.core.living; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class LivingEquipmentEvent extends Event { + + private final EntityPlayer player; + private final LivingStats stats; + + public LivingEquipmentEvent(EntityPlayer player, LivingStats stats) { + this.player = player; + this.stats = stats; + } + + public EntityPlayer getPlayer() { + return player; + } + + public LivingStats getStats() { + return stats; + } + + @Cancelable + public static class GainExperience extends LivingEquipmentEvent { + + private final LivingUpgrade upgrade; + private int experience; + + public GainExperience(EntityPlayer player, LivingStats stats, LivingUpgrade upgrade, int experience) { + super(player, stats); + this.upgrade = upgrade; + this.experience = experience; + } + + public LivingUpgrade getUpgrade() { + return upgrade; + } + + public int getExperience() { + return experience; + } + + public void setExperience(int experience) { + this.experience = experience; + } + } + + public static class LevelUp extends LivingEquipmentEvent { + + private final LivingUpgrade upgrade; + + public LevelUp(EntityPlayer player, LivingStats stats, LivingUpgrade upgrade) { + super(player, stats); + + this.upgrade = upgrade; + } + + public LivingUpgrade getUpgrade() { + return upgrade; + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStats.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStats.java new file mode 100644 index 00000000..efe16fea --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStats.java @@ -0,0 +1,136 @@ +package com.wayoftime.bloodmagic.core.living; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicLivingArmor; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.INBTSerializable; + +import javax.annotation.Nullable; +import java.util.Map; + +public class LivingStats implements INBTSerializable { + + public static final int DEFAULT_UPGRADE_POINTS = 100; + + private final Map upgrades; + private int maxPoints = DEFAULT_UPGRADE_POINTS; + + public LivingStats(Map upgrades) { + this.upgrades = upgrades; + } + + public LivingStats() { + this(Maps.newHashMap()); + } + + public Map getUpgrades() { + return ImmutableMap.copyOf(upgrades); + } + + public LivingStats addExperience(ResourceLocation key, int experience) { + LivingUpgrade upgrade = RegistrarBloodMagicLivingArmor.UPGRADES.get(key); + int current = upgrades.getOrDefault(upgrade, 0); + if (upgrade.getNextRequirement(current) == 0) + return this; + + upgrades.put(upgrade, current + experience); + return this; + } + + public int getLevel(ResourceLocation key) { + LivingUpgrade upgrade = RegistrarBloodMagicLivingArmor.UPGRADES.get(key); + return upgrade.getLevel(upgrades.getOrDefault(upgrade, 0)); + } + + public int getUsedPoints() { + int total = 0; + for (Map.Entry applied : upgrades.entrySet()) { + int experience = applied.getValue(); + int level = applied.getKey().getLevel(experience); + int cost = applied.getKey().getLevelCost(level); + total += cost; + } + + return total; + } + + public int getMaxPoints() { + return maxPoints; + } + + public LivingStats setMaxPoints(int maxPoints) { + this.maxPoints = maxPoints; + return this; + } + + @Override + public NBTTagCompound serializeNBT() { + NBTTagCompound compound = new NBTTagCompound(); + NBTTagList statList = new NBTTagList(); + upgrades.forEach((k, v) -> { + NBTTagCompound upgrade = new NBTTagCompound(); + upgrade.setString("key", k.getKey().toString()); + upgrade.setInteger("exp", v); + statList.appendTag(upgrade); + }); + compound.setTag("upgrades", statList); + + compound.setInteger("maxPoints", maxPoints); + + return compound; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) { + NBTTagList statList = nbt.getTagList("upgrades", 10); + + for (NBTBase base : statList) { + if (!(base instanceof NBTTagCompound)) + continue; + + LivingUpgrade upgrade = RegistrarBloodMagicLivingArmor.UPGRADES.get(new ResourceLocation(((NBTTagCompound) base).getString("key"))); + if (upgrade == null) + continue; + int experience = ((NBTTagCompound) base).getInteger("exp"); + upgrades.put(upgrade, experience); + } + + maxPoints = nbt.getInteger("maxPoints"); + } + + public static LivingStats fromNBT(NBTTagCompound statTag) { + LivingStats stats = new LivingStats(); + stats.deserializeNBT(statTag); + return stats; + } + + @Nullable + public static LivingStats fromPlayer(EntityPlayer player) { + return fromPlayer(player, false); + } + + @Nullable + public static LivingStats fromPlayer(EntityPlayer player, boolean createNew) { + if (!LivingUtil.hasFullSet(player)) + return null; + + ItemStack chest = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + LivingStats stats = ((ILivingContainer) chest.getItem()).getLivingStats(chest); + return stats == null && createNew ? new LivingStats() : stats; + } + + public static void toPlayer(EntityPlayer player, LivingStats stats) { + if (!LivingUtil.hasFullSet(player)) + return; + + ItemStack chest = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + ((ILivingContainer) chest.getItem()).updateLivingStates(chest, stats); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStatusWatcher.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStatusWatcher.java new file mode 100644 index 00000000..bf564d03 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingStatusWatcher.java @@ -0,0 +1,33 @@ +package com.wayoftime.bloodmagic.core.living; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicLivingArmor; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@Mod.EventBusSubscriber(modid = BloodMagic.MODID) +public class LivingStatusWatcher { + + @SubscribeEvent + public static void onJump(LivingEvent.LivingJumpEvent event) { + if (!(event.getEntity() instanceof EntityPlayer)) + return; + + EntityPlayer player = (EntityPlayer) event.getEntity(); + LivingStats stats = LivingUtil.applyNewExperience(player, RegistrarBloodMagicLivingArmor.JUMP, 1); + if (stats == null) + return; + + int level = stats.getLevel(RegistrarBloodMagicLivingArmor.JUMP.getKey()); + player.motionY += 0.05 * level; + + if (level >= 3) { + Vec3d lookVec = player.getLookVec(); + player.motionX += player.motionX == 0 ? 0 : lookVec.x * 0.07D * level; + player.motionZ += player.motionZ == 0 ? 0 : lookVec.z * 0.07D * level; + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java new file mode 100644 index 00000000..f308109e --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUpgrade.java @@ -0,0 +1,125 @@ +package com.wayoftime.bloodmagic.core.living; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; + +import javax.annotation.Nullable; +import java.util.*; +import java.util.function.Consumer; + +public class LivingUpgrade { + + private final ResourceLocation key; + private final Set incompatible; + private final TreeMap experienceToLevel; + private final Map levelToCost; + private final boolean isNegative; + private String unlocalizedName = null; + private IAttributeProvider attributeProvider; + private IArmorProvider armorProvider; + + public LivingUpgrade(ResourceLocation key, Consumer> experienceMapper /* xp needed -> level */, boolean isNegative) { + this.key = key; + this.incompatible = Sets.newHashSet(); + this.experienceToLevel = Maps.newTreeMap(); + this.levelToCost = Maps.newHashMap(); + this.isNegative = isNegative; + + List levels = Lists.newArrayList(); + experienceMapper.accept(levels); + + for (int i = 0; i < levels.size(); i++) { + UpgradeLevel level = levels.get(i); + experienceToLevel.put(level.experienceNeeded, i + 1); + levelToCost.put(i + 1, level.upgradeCost); + } + } + + public LivingUpgrade(ResourceLocation key, Consumer> experienceMapper /* xp needed -> level */) { + this(key, experienceMapper, false); + } + + public LivingUpgrade withAttributeProvider(IAttributeProvider attributeProvider) { + this.attributeProvider = attributeProvider; + return this; + } + + @Nullable + public IAttributeProvider getAttributeProvider() { + return attributeProvider; + } + + public LivingUpgrade withArmorProvider(IArmorProvider armorProvider) { + this.armorProvider = armorProvider; + return this; + } + + @Nullable + public IArmorProvider getArmorProvider() { + return armorProvider; + } + + public String getUnlocalizedName() { + return unlocalizedName == null ? unlocalizedName = "upgrade." + key.getNamespace() + ":" + key.getPath() + ".name" : unlocalizedName; + } + + public boolean isNegative() { + return isNegative; + } + + public boolean isCompatible(ResourceLocation otherUpgrade) { + return !incompatible.contains(otherUpgrade); + } + + public LivingUpgrade addIncompatibility(ResourceLocation... otherKeys) { + Collections.addAll(incompatible, otherKeys); + return this; + } + + public int getLevel(int experience) { + Map.Entry floor = experienceToLevel.floorEntry(experience); + return floor == null ? 0 : floor.getValue(); + } + + public int getNextRequirement(int experience) { + Integer ret = experienceToLevel.ceilingKey(experience + 1); + return ret == null ? 0 : ret; + } + + public int getLevelCost(int level) { + return levelToCost.getOrDefault(level, 0); + } + + public ResourceLocation getKey() { + return key; + } + + @Override + public String toString() { + return key.toString(); + } + + public interface IAttributeProvider { + void handleAttributes(LivingStats stats, Multimap attributeMap, int level); + } + + public interface IArmorProvider { + double getProtection(EntityPlayer player, DamageSource source, int level); + } + + public static class UpgradeLevel { + private final int experienceNeeded; + private final int upgradeCost; + + public UpgradeLevel(int experienceNeeded, int upgradeCost) { + this.experienceNeeded = experienceNeeded; + this.upgradeCost = upgradeCost; + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUtil.java b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUtil.java new file mode 100644 index 00000000..1780227a --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/living/LivingUtil.java @@ -0,0 +1,62 @@ +package com.wayoftime.bloodmagic.core.living; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.common.MinecraftForge; + +import javax.annotation.Nullable; + +public class LivingUtil { + + @Nullable + public static LivingStats applyNewExperience(EntityPlayer player, LivingUpgrade upgrade, int experience) { + LivingStats stats = LivingStats.fromPlayer(player, true); + if (stats == null) + return null; + + LivingEquipmentEvent.GainExperience event = new LivingEquipmentEvent.GainExperience(player, stats, upgrade, experience); + if (MinecraftForge.EVENT_BUS.post(event)) + return stats; + + experience = event.getExperience(); + + int currentExperience = stats.getUpgrades().getOrDefault(upgrade, 0); + int requiredForLevel = upgrade.getNextRequirement(currentExperience) - currentExperience; + + // If we're going to level up from this, check points + if (requiredForLevel <= experience) { + int currentPoints = stats.getUsedPoints(); + // If we're already capped or somehow over the cap, we don't want to add experience + if (currentPoints >= stats.getMaxPoints()) + return stats; + + int nextPointCost = upgrade.getLevelCost(upgrade.getLevel(currentExperience) + 1); + // If there's no more levels in this upgrade, we don't want to add experience + if (nextPointCost == -1) + return stats; + + // If applying this new level will go over our cap, we don't want to add experience + if (currentPoints + nextPointCost > stats.getMaxPoints()) + return stats; + } + + int newLevel = upgrade.getLevel(currentExperience + experience); + if (upgrade.getLevel(currentExperience) != newLevel) { + MinecraftForge.EVENT_BUS.post(new LivingEquipmentEvent.LevelUp(player, stats, upgrade)); + player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic:living_upgrade_level_increase", new TextComponentTranslation(upgrade.getUnlocalizedName()), newLevel), true); + } + + stats.addExperience(upgrade.getKey(), experience); + LivingStats.toPlayer(player, stats); + return stats; + } + + public static boolean hasFullSet(EntityPlayer player) { + for (ItemStack stack : player.inventory.armorInventory) + if (stack.isEmpty() || !(stack.getItem() instanceof ILivingContainer)) + return false; + + return true; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/core/data/Binding.java b/src/main/java/com/wayoftime/bloodmagic/core/network/Binding.java similarity index 84% rename from src/main/java/WayofTime/bloodmagic/core/data/Binding.java rename to src/main/java/com/wayoftime/bloodmagic/core/network/Binding.java index e8182e9a..61d7ff65 100644 --- a/src/main/java/WayofTime/bloodmagic/core/data/Binding.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/network/Binding.java @@ -1,5 +1,6 @@ -package WayofTime.bloodmagic.core.data; +package com.wayoftime.bloodmagic.core.network; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; @@ -19,6 +20,10 @@ public class Binding implements INBTSerializable { this.name = name; } + public Binding(EntityPlayer player) { + this(player.getGameProfile().getId(), player.getGameProfile().getName()); + } + private Binding() { // No-op } @@ -61,7 +66,7 @@ public class Binding implements INBTSerializable { return null; NBTBase bindingTag = stack.getTagCompound().getTag("binding"); - if (bindingTag == null || bindingTag.getId() != 10 || bindingTag.hasNoTags()) // Make sure it's both a tag compound and that it has actual data. + if (bindingTag == null || bindingTag.getId() != 10 || bindingTag.isEmpty()) // Make sure it's both a tag compound and that it has actual data. return null; Binding binding = new Binding(); diff --git a/src/main/java/com/wayoftime/bloodmagic/core/network/BloodOrb.java b/src/main/java/com/wayoftime/bloodmagic/core/network/BloodOrb.java new file mode 100644 index 00000000..f812e172 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/network/BloodOrb.java @@ -0,0 +1,48 @@ +package com.wayoftime.bloodmagic.core.network; + +import com.wayoftime.bloodmagic.core.util.OrbUtil; +import net.minecraft.util.ResourceLocation; +import org.apache.commons.lang3.builder.ToStringBuilder; + +public class BloodOrb { + + private final ResourceLocation name; + private final int tier; + private final int capacity; + private final int fillRate; + + public BloodOrb(ResourceLocation name, int tier, int capacity, int fillRate) { + this.name = name; + this.tier = tier; + this.capacity = capacity; + this.fillRate = fillRate; + + OrbUtil.addOrb(this); + } + + public ResourceLocation getName() { + return name; + } + + public int getTier() { + return tier; + } + + public int getCapacity() { + return capacity; + } + + public int getFillRate() { + return fillRate; + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("name", name) + .append("tier", tier) + .append("capacity", capacity) + .append("fillRate", fillRate) + .toString(); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/network/IBloodOrb.java b/src/main/java/com/wayoftime/bloodmagic/core/network/IBloodOrb.java new file mode 100644 index 00000000..a2547100 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/network/IBloodOrb.java @@ -0,0 +1,12 @@ +package com.wayoftime.bloodmagic.core.network; + +import net.minecraft.item.ItemStack; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public interface IBloodOrb { + + @Nullable + BloodOrb getOrb(@Nonnull ItemStack stack); +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/network/NetworkInteraction.java b/src/main/java/com/wayoftime/bloodmagic/core/network/NetworkInteraction.java new file mode 100644 index 00000000..1be1a707 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/network/NetworkInteraction.java @@ -0,0 +1,78 @@ +package com.wayoftime.bloodmagic.core.network; + +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +public class NetworkInteraction { + + private static final ITextComponent EMPTY = new TextComponentString(""); + + private final ITextComponent description; + private final int amount; + private boolean syphon; + + public NetworkInteraction(ITextComponent description, int amount) { + this.description = description; + this.amount = amount; + } + + public NetworkInteraction(int amount) { + this(EMPTY, amount); + } + + public boolean isSyphon() { + return syphon || amount < 0; + } + + public ITextComponent getDescription() { + return description; + } + + public int getAmount() { + return amount; + } + + public NetworkInteraction syphon() { + this.syphon = true; + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o instanceof NetworkInteraction) + return ((NetworkInteraction) o).getDescription().equals(description); + + return false; + } + + @Override + public int hashCode() { + return description.hashCode(); + } + + public static NetworkInteraction asBlockInfo(World world, BlockPos pos, int amount) { + return new NetworkInteraction(new TextComponentString("block|" + world.provider.getDimension() + "|" + pos.toLong()), amount); + } + + public static NetworkInteraction asItemInfo(ItemStack itemStack, World world, Entity entity, int amount) { + return new NetworkInteraction(new TextComponentString("item|" + itemStack.getItem().getRegistryName() + "|" + world.provider.getDimension() + "|" + entity.getPersistentID()), amount); + } + + public static NetworkInteraction asItemInfo(ItemStack itemStack, World world, BlockPos pos, int amount) { + return new NetworkInteraction(new TextComponentString("item|" + itemStack.getItem().getRegistryName() + "|" + world.provider.getDimension() + "|" + pos.toLong()), amount); + } + + public static NetworkInteraction asItemInfo(ItemStack itemStack, int amount) { + return new NetworkInteraction(new TextComponentString("item|" + itemStack.getItem().getRegistryName()), amount); + } + + public static NetworkInteraction asCommandInfo(ICommandSender sender, String command, int amount) { + return new NetworkInteraction(new TextComponentString("command|" + command + "|" + sender.getName()), amount); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/network/SNSavedData.java b/src/main/java/com/wayoftime/bloodmagic/core/network/SNSavedData.java new file mode 100644 index 00000000..22ad0111 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/network/SNSavedData.java @@ -0,0 +1,81 @@ +package com.wayoftime.bloodmagic.core.network; + +import com.google.common.collect.Maps; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.World; +import net.minecraft.world.storage.WorldSavedData; +import net.minecraftforge.common.DimensionManager; + +import javax.annotation.Nonnull; +import java.util.Map; +import java.util.UUID; + +public class SNSavedData extends WorldSavedData { + + public static final String ID = "bloodmagic_soul_network_data"; + + private final Map networks = Maps.newHashMap(); + + public SNSavedData(String name) { + super(name); + } + + public SNSavedData() { + this(ID); + } + + public SoulNetwork getNetwork(EntityPlayer player) { + return getNetwork(player.getGameProfile().getId()); + } + + public SoulNetwork getNetwork(UUID uuid) { + SoulNetwork network = networks.get(uuid); + if (network == null) { + networks.put(uuid, network = SoulNetwork.newEmpty(uuid).withParent(this)); + markDirty(); + } + + return network; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + NBTTagList networks = nbt.getTagList("networks", 10); + for (NBTBase tag : networks) { + if (tag.getId() != 10) // Only compounds + continue; + + SoulNetwork network = SoulNetwork.fromNbt((NBTTagCompound) tag); + network.withParent(this); + this.networks.put(network.getOwnerId(), network); + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound compound) { + NBTTagList networks = new NBTTagList(); + for (SoulNetwork network : this.networks.values()) + networks.appendTag(network.serializeNBT()); + + compound.setTag("networks", networks); + return compound; + } + + @Nonnull + public static SoulNetwork getSoulNetwork(UUID uuid) { + World world = DimensionManager.getWorld(0); + if (world == null || world.getMapStorage() == null) + return new SNSavedData().getNetwork(uuid); + + SNSavedData savedData = (SNSavedData) world.getMapStorage().getOrLoadData(SNSavedData.class, ID); + if (savedData == null) { + savedData = new SNSavedData(); + world.getMapStorage().setData(ID, savedData); + } + + return savedData.getNetwork(uuid); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/network/SoulNetwork.java b/src/main/java/com/wayoftime/bloodmagic/core/network/SoulNetwork.java new file mode 100644 index 00000000..141fa54e --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/network/SoulNetwork.java @@ -0,0 +1,140 @@ +package com.wayoftime.bloodmagic.core.network; + +import com.google.common.collect.EvictingQueue; +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.util.BooleanResult; +import com.wayoftime.bloodmagic.event.SoulNetworkEvent; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.INBTSerializable; + +import java.util.Queue; +import java.util.UUID; + +public class SoulNetwork implements INBTSerializable { + + public static final DamageSource WEAK_SOUL = new DamageSource(BloodMagic.MODID + ":weak_soul").setDamageBypassesArmor().setDamageIsAbsolute().setMagicDamage(); + + private final Queue interactionHistory; + private SNSavedData parent; + private UUID ownerId; + private int currentEssence; + private int currentTier; + private int maxForTier; + + private SoulNetwork() { + this.interactionHistory = EvictingQueue.create(16); + } + + @Override + public NBTTagCompound serializeNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("owner", ownerId.toString()); + tag.setInteger("essence", currentEssence); + tag.setInteger("tier", currentTier); + tag.setInteger("maxForTier", maxForTier); + return tag; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) { + this.ownerId = UUID.fromString(nbt.getString("owner")); + this.currentEssence = nbt.getInteger("essence"); + this.currentTier = nbt.getInteger("tier"); + this.maxForTier = nbt.getInteger("maxForTier"); + } + + public SoulNetwork withParent(SNSavedData parent) { + this.parent = parent; + return this; + } + + public SNSavedData getParent() { + return parent; + } + + public UUID getOwnerId() { + return ownerId; + } + + public BooleanResult submitInteraction(NetworkInteraction interaction) { + if (interaction.getAmount() == 0) + return new BooleanResult<>(0, true); + + if (!interaction.isSyphon()) { + SoulNetworkEvent.Fill event = new SoulNetworkEvent.Fill(this, interaction, maxForTier); + if (MinecraftForge.EVENT_BUS.post(event)) + return new BooleanResult<>(0, false); + + if (currentEssence > event.getMaximum()) + return new BooleanResult<>(0, false); + + int oldCurrent = currentEssence; + currentEssence = Math.min(event.getMaximum(), currentEssence + event.getTicket().getAmount()); + markDirty(); + interactionHistory.remove(interaction); // Allows an existing interaction to be moved back up to the top with whatever new amount is changed + interactionHistory.add(interaction); + return new BooleanResult<>(currentEssence - oldCurrent, true); + } else { + SoulNetworkEvent.Syphon event = new SoulNetworkEvent.Syphon(this, interaction); + if (MinecraftForge.EVENT_BUS.post(event)) + return new BooleanResult<>(0, false); + + int newEssence = currentEssence - event.getTicket().getAmount(); + if (newEssence < 0) { + currentEssence = 0; + markDirty(); + return new BooleanResult<>(currentEssence, false); + } + + currentEssence -= event.getTicket().getAmount(); + markDirty(); + interactionHistory.remove(interaction); + interactionHistory.add(interaction); + return new BooleanResult<>(event.getTicket().getAmount(), true); + } + } + + public int getEssence() { + return currentEssence; + } + + public SoulNetwork setEssence(int essence) { + this.currentEssence = Math.min(this.maxForTier, essence); + markDirty(); + return this; + } + + public SoulNetwork setTier(int newTier, int maxForTier) { + this.currentTier = newTier; + this.maxForTier = maxForTier; + markDirty(); + return this; + } + + public int getTier() { + return currentTier; + } + + public void markDirty() { + if (parent != null) + parent.markDirty(); + } + + public static SoulNetwork get(UUID uuid) { + return SNSavedData.getSoulNetwork(uuid); + } + + public static SoulNetwork newEmpty(UUID uuid) { + SoulNetwork network = new SoulNetwork(); + network.ownerId = uuid; + return network; + } + + public static SoulNetwork fromNbt(NBTTagCompound tag) { + SoulNetwork network = new SoulNetwork(); + network.deserializeNBT(tag); + return network; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/core/recipe/IngredientBloodOrb.java b/src/main/java/com/wayoftime/bloodmagic/core/recipe/IngredientBloodOrb.java similarity index 86% rename from src/main/java/WayofTime/bloodmagic/core/recipe/IngredientBloodOrb.java rename to src/main/java/com/wayoftime/bloodmagic/core/recipe/IngredientBloodOrb.java index c61289d9..9aac8114 100644 --- a/src/main/java/WayofTime/bloodmagic/core/recipe/IngredientBloodOrb.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/recipe/IngredientBloodOrb.java @@ -1,8 +1,8 @@ -package WayofTime.bloodmagic.core.recipe; +package com.wayoftime.bloodmagic.core.recipe; -import WayofTime.bloodmagic.orb.BloodOrb; -import WayofTime.bloodmagic.orb.IBloodOrb; -import WayofTime.bloodmagic.core.registry.OrbRegistry; +import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.core.network.BloodOrb; +import com.wayoftime.bloodmagic.core.network.IBloodOrb; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntComparators; import it.unimi.dsi.fastutil.ints.IntList; @@ -29,7 +29,8 @@ public class IngredientBloodOrb extends Ingredient { this.orb = orb; - List orbGet = OrbRegistry.getOrbsDownToTier(orb.getTier()); +// List orbGet = OrbRegistry.getOrbsDownToTier(orb.getTier()); + List orbGet = Lists.newArrayList(); orbs = NonNullList.withSize(orbGet.size(), ItemStack.EMPTY); for (int i = 0; i < orbGet.size(); i++) diff --git a/src/main/java/WayofTime/bloodmagic/core/recipe/IngredientBloodOrbFactory.java b/src/main/java/com/wayoftime/bloodmagic/core/recipe/IngredientBloodOrbFactory.java similarity index 76% rename from src/main/java/WayofTime/bloodmagic/core/recipe/IngredientBloodOrbFactory.java rename to src/main/java/com/wayoftime/bloodmagic/core/recipe/IngredientBloodOrbFactory.java index bd7060ee..cb497394 100644 --- a/src/main/java/WayofTime/bloodmagic/core/recipe/IngredientBloodOrbFactory.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/recipe/IngredientBloodOrbFactory.java @@ -1,6 +1,5 @@ -package WayofTime.bloodmagic.core.recipe; +package com.wayoftime.bloodmagic.core.recipe; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; import com.google.gson.JsonObject; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.JsonUtils; @@ -16,6 +15,7 @@ public class IngredientBloodOrbFactory implements IIngredientFactory { @Override public Ingredient parse(JsonContext context, JsonObject json) { ResourceLocation orb = new ResourceLocation(JsonUtils.getString(json, "orb")); - return new IngredientBloodOrb(RegistrarBloodMagic.BLOOD_ORBS.getValue(orb)); +// return new IngredientBloodOrb(RegistrarBloodMagic.BLOOD_ORBS.getValue(orb)); + return null; } } diff --git a/src/main/java/WayofTime/bloodmagic/block/enums/BloodRuneType.java b/src/main/java/com/wayoftime/bloodmagic/core/type/BloodRunes.java similarity index 53% rename from src/main/java/WayofTime/bloodmagic/block/enums/BloodRuneType.java rename to src/main/java/com/wayoftime/bloodmagic/core/type/BloodRunes.java index 702fe5d9..d24ab6e0 100644 --- a/src/main/java/WayofTime/bloodmagic/block/enums/BloodRuneType.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/type/BloodRunes.java @@ -1,10 +1,11 @@ -package WayofTime.bloodmagic.block.enums; +package com.wayoftime.bloodmagic.core.type; import net.minecraft.util.IStringSerializable; import java.util.Locale; -public enum BloodRuneType implements IStringSerializable { +public enum BloodRunes implements IStringSerializable { + BLANK, SPEED, EFFICIENCY, @@ -15,15 +16,11 @@ public enum BloodRuneType implements IStringSerializable { AUGMENTED_CAPACITY, ORB, ACCELERATION, - CHARGING; - - @Override - public String toString() { - return name().toLowerCase(Locale.ENGLISH); - } + CHARGING, + ; @Override public String getName() { - return this.toString(); + return name().toLowerCase(Locale.ROOT); } } diff --git a/src/main/java/com/wayoftime/bloodmagic/core/type/ComponentType.java b/src/main/java/com/wayoftime/bloodmagic/core/type/ComponentType.java new file mode 100644 index 00000000..b96205a8 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/type/ComponentType.java @@ -0,0 +1,14 @@ +package com.wayoftime.bloodmagic.core.type; + +public enum ComponentType { + + GLOWSTONE, + BLOODSTONE, + BEACON, + BLOOD_RUNE, + CRYSTAL, + NOT_AIR, + ; + + public static final ComponentType[] VALUES = values(); +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/type/DemonWillType.java b/src/main/java/com/wayoftime/bloodmagic/core/type/DemonWillType.java new file mode 100644 index 00000000..e61c6e46 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/type/DemonWillType.java @@ -0,0 +1,22 @@ +package com.wayoftime.bloodmagic.core.type; + +import net.minecraft.util.IStringSerializable; + +import java.util.Locale; + +public enum DemonWillType implements IStringSerializable { + + RAW, + CORROSIVE, + DESTRUCTIVE, + VENGEFUL, + STEADFAST, + ; + + public static final DemonWillType[] VALUES = values(); + + @Override + public String getName() { + return name().toLowerCase(Locale.ROOT); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/type/SlateType.java b/src/main/java/com/wayoftime/bloodmagic/core/type/SlateType.java new file mode 100644 index 00000000..1f3c8ea3 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/type/SlateType.java @@ -0,0 +1,23 @@ +package com.wayoftime.bloodmagic.core.type; + +import java.util.Locale; + +public enum SlateType { + + BLANK, + REINFORCED, + IMBUED, + DEMONIC, + ETHEREAL, + ; + + private final String name; + + SlateType() { + this.name = name().toLowerCase(Locale.ROOT); + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/util/BMLog.java b/src/main/java/com/wayoftime/bloodmagic/core/util/BMLog.java similarity index 68% rename from src/main/java/WayofTime/bloodmagic/util/BMLog.java rename to src/main/java/com/wayoftime/bloodmagic/core/util/BMLog.java index c6e75232..0f8201e6 100644 --- a/src/main/java/WayofTime/bloodmagic/util/BMLog.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/util/BMLog.java @@ -1,14 +1,13 @@ -package WayofTime.bloodmagic.util; +package com.wayoftime.bloodmagic.core.util; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.ConfigHandler; +import com.wayoftime.bloodmagic.core.BloodMagicConfiguration; import org.apache.commons.lang3.text.WordUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public enum BMLog { - DEFAULT(BloodMagic.MODID) { + DEFAULT("Blood Magic") { @Override boolean enabled() { return true; @@ -17,22 +16,21 @@ public enum BMLog { DEBUG() { @Override boolean enabled() { - return ConfigHandler.general.enableDebugLogging; + return BloodMagicConfiguration.logging.enableDebugLogging; } }, API() { @Override boolean enabled() { - return ConfigHandler.general.enableAPILogging; + return BloodMagicConfiguration.logging.enableApiLogging; } }, API_VERBOSE() { @Override boolean enabled() { - return ConfigHandler.general.enableVerboseAPILogging; + return BloodMagicConfiguration.logging.enableVerboseApiLogging; } - }, - ; + }; private final Logger logger; @@ -41,7 +39,7 @@ public enum BMLog { } BMLog() { - logger = LogManager.getLogger(BloodMagic.MODID + "|" + WordUtils.capitalizeFully(name().replace("_", " "))); + logger = LogManager.getLogger("Blood Magic|" + WordUtils.capitalizeFully(name().replace("_", " "))); } abstract boolean enabled(); diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/BooleanResult.java b/src/main/java/com/wayoftime/bloodmagic/core/util/BooleanResult.java new file mode 100644 index 00000000..3bf98bc8 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/util/BooleanResult.java @@ -0,0 +1,20 @@ +package com.wayoftime.bloodmagic.core.util; + +public class BooleanResult { + + private final T value; + private final boolean success; + + public BooleanResult(T value, boolean success) { + this.value = value; + this.success = success; + } + + public T getValue() { + return value; + } + + public boolean isSuccess() { + return success; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/JsonUtil.java b/src/main/java/com/wayoftime/bloodmagic/core/util/JsonUtil.java new file mode 100644 index 00000000..038a430e --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/util/JsonUtil.java @@ -0,0 +1,102 @@ +package com.wayoftime.bloodmagic.core.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import org.apache.commons.io.FileUtils; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; + +/** + * A simple utility for reading and writing JSON files. To handle custom (de)serialization, use + * {@link com.google.gson.annotations.JsonAdapter} on your types. + */ +public class JsonUtil { + + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().serializeNulls().create(); + + /** + * Reads a {@link T} back from the given file. If the file does not exist, a new file will be generated with the + * provided default and the default will be returned. + * + * @param token The token type to use for deserialization. + * @param file The file to read the JSON from. + * @param def The default value to use if the file does not exist. + * @param The object type to give back. + * @return a {@link T} that was read from the given file or {@code def} if the file did not exist. + */ + @Nonnull + public static T fromJson(@Nonnull TypeToken token, @Nonnull File file, @Nonnull T def) { + T ret = fromJson(token, file); + if (ret == null) { + toJson(def, token, file); + ret = def; + } + + return ret; + } + + /** + * Reads a {@link T} back from the given file. If the file does not exist, {@code null} is returned. If an exception + * is thrown during deserialization, {@code null} is also returned. + * + * @param token The token type to use for deserialization. + * @param file - The file to read the JSON from. + * @param The object type to give back. + * @return a {@link T} that was read from the given file, {@code null} if the file does not exist, or {@code null} if + * an exception was thrown. + */ + @Nullable + public static T fromJson(@Nonnull TypeToken token, @Nonnull File file) { + if (!file.exists()) + return null; + + try (FileReader reader = new FileReader(file)) { + return GSON.fromJson(reader, token.getType()); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static T fromJson(@Nonnull TypeToken token, @Nonnull String json) { + return GSON.fromJson(json, token.getType()); + } + + /** + * Converts a {@link T} to JSON and writes it to file. If the file does not exist, a new one is created. If the file + * does exist, the contents are overwritten with the new value. + * + * @param type The object to write to JSON. + * @param token The token type to use for serialization. + * @param file The file to write the JSON to. + * @param The object type to write. + */ + public static void toJson(@Nonnull T type, @Nonnull TypeToken token, @Nonnull File file) { + if (!file.exists()) { + try { + FileUtils.forceMkdirParent(file); + file.createNewFile(); + } catch (Exception e) { + e.printStackTrace(); + return; + } + } + + try (FileWriter writer = new FileWriter(file)) { + writer.write(getJson(type, token)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static String getJson(@Nonnull T type, @Nonnull TypeToken token) { + return GSON.toJson(type, token.getType()); + } +} + diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/OrbUtil.java b/src/main/java/com/wayoftime/bloodmagic/core/util/OrbUtil.java new file mode 100644 index 00000000..a873a7ae --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/util/OrbUtil.java @@ -0,0 +1,24 @@ +package com.wayoftime.bloodmagic.core.util; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.core.network.BloodOrb; + +import java.util.List; + +public class OrbUtil { + + public static final List ORBS = Lists.newArrayList(); + public static final ArrayListMultimap TIERED = ArrayListMultimap.create(); + + public static void addOrb(BloodOrb orb) { + ORBS.add(orb); + + TIERED.put(orb.getTier(), orb); + } + + // TODO :LUL: This needs to be implemented before orb-related recipes can be added. + public static List getOrbsMatching(int tier) { + return Lists.newArrayList(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/util/PluginUtil.java b/src/main/java/com/wayoftime/bloodmagic/core/util/PluginUtil.java similarity index 93% rename from src/main/java/WayofTime/bloodmagic/util/PluginUtil.java rename to src/main/java/com/wayoftime/bloodmagic/core/util/PluginUtil.java index aeed6037..f60d4a26 100644 --- a/src/main/java/WayofTime/bloodmagic/util/PluginUtil.java +++ b/src/main/java/com/wayoftime/bloodmagic/core/util/PluginUtil.java @@ -1,13 +1,13 @@ -package WayofTime.bloodmagic.util; +package com.wayoftime.bloodmagic.core.util; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.BloodMagicPlugin; -import WayofTime.bloodmagic.api.IBloodMagicAPI; -import WayofTime.bloodmagic.api.IBloodMagicPlugin; -import WayofTime.bloodmagic.api.impl.BloodMagicAPI; -import WayofTime.bloodmagic.api.impl.BloodMagicCorePlugin; import com.google.common.base.Stopwatch; import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.api.BloodMagicPlugin; +import com.wayoftime.bloodmagic.api.IBloodMagicAPI; +import com.wayoftime.bloodmagic.api.IBloodMagicPlugin; +import com.wayoftime.bloodmagic.api.impl.BloodMagicAPI; +import com.wayoftime.bloodmagic.api.impl.BloodMagicCorePlugin; import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fml.common.discovery.ASMDataTable; import org.apache.commons.lang3.tuple.Pair; @@ -45,7 +45,7 @@ public class PluginUtil { // Bring core plugin up to top discoveredAnnotations.sort((o1, o2) -> { if (o1.getLeft().getClass() == BloodMagicCorePlugin.class) - return -1; + return -1; return o1.getClass().getCanonicalName().compareToIgnoreCase(o2.getClass().getCanonicalName()); }); diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/RegistryAddCallbackWrapper.java b/src/main/java/com/wayoftime/bloodmagic/core/util/RegistryAddCallbackWrapper.java new file mode 100644 index 00000000..97888e6d --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/util/RegistryAddCallbackWrapper.java @@ -0,0 +1,51 @@ +package com.wayoftime.bloodmagic.core.util; + +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.registries.ForgeRegistry; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.IForgeRegistryEntry; + +import javax.annotation.Nonnull; +import java.lang.reflect.Field; +import java.util.function.BiConsumer; + +public final class RegistryAddCallbackWrapper> { + + private static final Field CALLBACK_FIELD; + + static { + try { + CALLBACK_FIELD = ForgeRegistry.class.getDeclaredField("add"); + CALLBACK_FIELD.setAccessible(true); + } catch (NoSuchFieldException e) { + throw new RuntimeException("Could not find AddCallback field."); + } + } + + private final Class registryType; + private final BiConsumer addCheck; + private final Runnable postCallback; + + public RegistryAddCallbackWrapper(@Nonnull Class registryType, @Nonnull BiConsumer addCheck, @Nonnull Runnable postCallback) { + this.registryType = registryType; + this.addCheck = addCheck; + this.postCallback = postCallback; + } + + public void wrapParent() throws Exception { + ForgeRegistry registry = (ForgeRegistry) GameRegistry.findRegistry(registryType); + //noinspection unchecked + IForgeRegistry.AddCallback oldCallback = (IForgeRegistry.AddCallback) CALLBACK_FIELD.get(registry); + EnumHelper.setFailsafeFieldValue(CALLBACK_FIELD, registry, (IForgeRegistry.AddCallback) (owner, stage, id, obj, oldObj) -> { + oldCallback.onAdd(owner, stage, id, obj, oldObj); + addCheck.accept(obj, oldObj); + }); + BMLog.DEBUG.info("Wrapped add callback for {} registry.", registry.getRegistrySuperType().getSimpleName()); + } + + @Nonnull + public Runnable getPostCallback() { + return postCallback; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/register/IItemProvider.java b/src/main/java/com/wayoftime/bloodmagic/core/util/register/IItemProvider.java new file mode 100644 index 00000000..3e505de5 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/util/register/IItemProvider.java @@ -0,0 +1,13 @@ +package com.wayoftime.bloodmagic.core.util.register; + +import net.minecraft.item.Item; + +import javax.annotation.Nullable; + +public interface IItemProvider { + + @Nullable + default Item getItem() { + return null; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/core/util/register/IVariantProvider.java b/src/main/java/com/wayoftime/bloodmagic/core/util/register/IVariantProvider.java new file mode 100644 index 00000000..0432a016 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/core/util/register/IVariantProvider.java @@ -0,0 +1,15 @@ +package com.wayoftime.bloodmagic.core.util.register; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; + +public interface IVariantProvider { + + /** + * A mapping of meta -> state variant + * + * @param variants A map to populate with all variants + */ + default void collectVariants(Int2ObjectMap variants) { + variants.put(0, "inventory"); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/event/BindingEvent.java b/src/main/java/com/wayoftime/bloodmagic/event/BindingEvent.java new file mode 100644 index 00000000..97f8606c --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/event/BindingEvent.java @@ -0,0 +1,33 @@ +package com.wayoftime.bloodmagic.event; + +import com.wayoftime.bloodmagic.core.network.Binding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; + +@Cancelable +public class BindingEvent extends Event { + + private final ItemStack stack; + private final Binding binding; + private final EntityPlayer player; + + public BindingEvent(ItemStack stack, Binding binding, EntityPlayer player) { + this.stack = stack; + this.binding = binding; + this.player = player; + } + + public ItemStack getStack() { + return stack; + } + + public Binding getBinding() { + return binding; + } + + public EntityPlayer getPlayer() { + return player; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/event/SacrificeEvent.java b/src/main/java/com/wayoftime/bloodmagic/event/SacrificeEvent.java new file mode 100644 index 00000000..e13b92d4 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/event/SacrificeEvent.java @@ -0,0 +1,45 @@ +package com.wayoftime.bloodmagic.event; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class SacrificeEvent extends Event { + + protected final EntityLivingBase sacrificed; + private final int baseAmount; + private int modifiedAmount; + + public SacrificeEvent(EntityLivingBase sacrificed, int baseAmount, int modifiedAmount) { + this.sacrificed = sacrificed; + this.baseAmount = baseAmount; + this.modifiedAmount = modifiedAmount; + } + + public EntityLivingBase getSacrificed() { + return sacrificed; + } + + public int getBaseAmount() { + return baseAmount; + } + + public int getModifiedAmount() { + return modifiedAmount; + } + + public void setModifiedAmount(int modifiedAmount) { + this.modifiedAmount = modifiedAmount; + } + + public static class SelfSacrifice extends SacrificeEvent { + + public SelfSacrifice(EntityLivingBase sacrificed, int baseAmount, int modifiedAmount) { + super(sacrificed, baseAmount, modifiedAmount); + } + + public EntityPlayer getPlayer() { + return (EntityPlayer) sacrificed; + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/event/SoulNetworkEvent.java b/src/main/java/com/wayoftime/bloodmagic/event/SoulNetworkEvent.java similarity index 71% rename from src/main/java/WayofTime/bloodmagic/event/SoulNetworkEvent.java rename to src/main/java/com/wayoftime/bloodmagic/event/SoulNetworkEvent.java index 560b19a5..a0c76954 100644 --- a/src/main/java/WayofTime/bloodmagic/event/SoulNetworkEvent.java +++ b/src/main/java/com/wayoftime/bloodmagic/event/SoulNetworkEvent.java @@ -1,7 +1,7 @@ -package WayofTime.bloodmagic.event; +package com.wayoftime.bloodmagic.event; -import WayofTime.bloodmagic.core.data.SoulNetwork; -import WayofTime.bloodmagic.core.data.SoulTicket; +import com.wayoftime.bloodmagic.core.network.SoulNetwork; +import com.wayoftime.bloodmagic.core.network.NetworkInteraction; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.eventhandler.Cancelable; @@ -10,9 +10,9 @@ import net.minecraftforge.fml.common.eventhandler.Event; public class SoulNetworkEvent extends Event { private final SoulNetwork network; - private SoulTicket ticket; + private NetworkInteraction ticket; - public SoulNetworkEvent(SoulNetwork network, SoulTicket ticket) { + public SoulNetworkEvent(SoulNetwork network, NetworkInteraction ticket) { this.network = network; this.ticket = ticket; } @@ -21,11 +21,11 @@ public class SoulNetworkEvent extends Event { return network; } - public SoulTicket getTicket() { + public NetworkInteraction getTicket() { return ticket; } - public void setTicket(SoulTicket ticket) { + public void setTicket(NetworkInteraction ticket) { this.ticket = ticket; } @@ -34,7 +34,7 @@ public class SoulNetworkEvent extends Event { private boolean shouldDamage; - public Syphon(SoulNetwork network, SoulTicket ticket) { + public Syphon(SoulNetwork network, NetworkInteraction ticket) { super(network, ticket); } @@ -50,7 +50,7 @@ public class SoulNetworkEvent extends Event { private final ItemStack stack; - public Item(SoulNetwork network, SoulTicket ticket, ItemStack stack) { + public Item(SoulNetwork network, NetworkInteraction ticket, ItemStack stack) { super(network, ticket); this.stack = stack; @@ -65,7 +65,7 @@ public class SoulNetworkEvent extends Event { private final EntityPlayer user; - public User(SoulNetwork network, SoulTicket ticket, EntityPlayer user) { + public User(SoulNetwork network, NetworkInteraction ticket, EntityPlayer user) { super(network, ticket); this.user = user; @@ -82,7 +82,7 @@ public class SoulNetworkEvent extends Event { private int maximum; - public Fill(SoulNetwork network, SoulTicket ticket, int maximum) { + public Fill(SoulNetwork network, NetworkInteraction ticket, int maximum) { super(network, ticket); this.maximum = maximum; diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/Category.java b/src/main/java/com/wayoftime/bloodmagic/guide/Category.java new file mode 100644 index 00000000..08f54c4d --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/Category.java @@ -0,0 +1,36 @@ +package com.wayoftime.bloodmagic.guide; + +import com.google.common.collect.Maps; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.Map; +import java.util.function.Consumer; + +public class Category { + + private final Guide owner; + private final String name; + private final Map entries; + + public Category(Guide owner, String name, Consumer $) { + this.owner = owner; + this.name = name; + entries = Maps.newLinkedHashMap(); + + $.accept(this); + } + + @SideOnly(Side.CLIENT) + public void draw(Minecraft minecraft, ScaledResolution resolution, FontRenderer font) { + + } + + public Entry addEntry(Entry entry) { + entries.put(entry.getId(), entry); + return entry; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/Entry.java b/src/main/java/com/wayoftime/bloodmagic/guide/Entry.java new file mode 100644 index 00000000..a87f42e8 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/Entry.java @@ -0,0 +1,29 @@ +package com.wayoftime.bloodmagic.guide; + +import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.guide.page.PageComponent; + +import java.util.List; +import java.util.function.Consumer; + +public class Entry { + + private final String id; + private final List components; + + public Entry(String id, Consumer $) { + this.id = id; + this.components = Lists.newArrayList(); + + $.accept(this); + } + + public PageComponent appendComponent(PageComponent component) { + components.add(component); + return component; + } + + public String getId() { + return id; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/Guide.java b/src/main/java/com/wayoftime/bloodmagic/guide/Guide.java new file mode 100644 index 00000000..09706f6c --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/Guide.java @@ -0,0 +1,34 @@ +package com.wayoftime.bloodmagic.guide; + +import com.google.common.collect.Lists; +import net.minecraft.util.ResourceLocation; + +import java.util.List; +import java.util.function.Consumer; + +public class Guide { + + private final ResourceLocation id; + private final List categories; + + public Guide(ResourceLocation id, Consumer $) { + this.id = id; + this.categories = Lists.newArrayList(); + + $.accept(this); + } + + public Category addCategory(String name, Consumer category) { + Category cat = new Category(this, name, category); + categories.add(cat); + return cat; + } + + public ResourceLocation getId() { + return id; + } + + public List getCategories() { + return categories; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponent.java b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponent.java new file mode 100644 index 00000000..3037b182 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponent.java @@ -0,0 +1,61 @@ +package com.wayoftime.bloodmagic.guide.page; + +import com.wayoftime.bloodmagic.guide.Guide; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nullable; +import java.util.function.Consumer; + +public class PageComponent { + + private final int height; + private IComponentSplitter splitter; + private IViewingRequirement viewingRequirement; + + public PageComponent(int height) { + this.height = height; + } + + @SideOnly(Side.CLIENT) + public void draw(Minecraft minecraft, ScaledResolution resolution, FontRenderer font) { + + } + + public int getHeight() { + return height; + } + + @Nullable + public IComponentSplitter getSplitter() { + return splitter; + } + + public PageComponent withComponentSplitter(IComponentSplitter splitter) { + this.splitter = splitter; + return this; + } + + public IViewingRequirement getViewingRequirement() { + return viewingRequirement; + } + + public PageComponent withViewingRequirement(IViewingRequirement viewingRequirement) { + this.viewingRequirement = viewingRequirement; + return this; + } + + public interface IComponentSplitter { + void split(Consumer components, int currentPosition, int pageHeight); + } + + public interface IViewingRequirement { + boolean canView(EntityPlayer player, World world, ItemStack guideStack, Guide guide); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentFiller.java b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentFiller.java new file mode 100644 index 00000000..60f9679d --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentFiller.java @@ -0,0 +1,8 @@ +package com.wayoftime.bloodmagic.guide.page; + +public class PageComponentFiller extends PageComponent { + + public PageComponentFiller() { + super(-1); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentImage.java b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentImage.java new file mode 100644 index 00000000..6b01f3fa --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentImage.java @@ -0,0 +1,32 @@ +package com.wayoftime.bloodmagic.guide.page; + +import net.minecraft.util.ResourceLocation; + +import javax.vecmath.Point2i; + +public class PageComponentImage extends PageComponent { + + private final Sprite sprite; + + public PageComponentImage(Sprite sprite) { + super(sprite.size.y); + + this.sprite = sprite; + } + + public static class Sprite { + private final ResourceLocation location; + private final Point2i startPosition; + private final Point2i size; + + public Sprite(ResourceLocation location, Point2i startPosition, Point2i size) { + this.location = location; + this.startPosition = startPosition; + this.size = size; + } + + public void draw(int x, int y) { + // TODO + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentItem.java b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentItem.java new file mode 100644 index 00000000..54ccf9ee --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentItem.java @@ -0,0 +1,14 @@ +package com.wayoftime.bloodmagic.guide.page; + +import net.minecraft.item.ItemStack; + +public class PageComponentItem extends PageComponent { + + private final ItemStack item; + + public PageComponentItem(ItemStack item) { + super(18); + + this.item = item; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentRecipe.java b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentRecipe.java new file mode 100644 index 00000000..9de5e908 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentRecipe.java @@ -0,0 +1,19 @@ +package com.wayoftime.bloodmagic.guide.page; + +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.registry.ForgeRegistries; + +import java.util.function.Supplier; + +public class PageComponentRecipe extends PageComponent { + + private final Supplier recipeGetter; + private IRecipe recipe; + + public PageComponentRecipe(ResourceLocation recipe) { + super(60); + + this.recipeGetter = () -> ForgeRegistries.RECIPES.getValue(recipe); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentSmelting.java b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentSmelting.java new file mode 100644 index 00000000..f49154e7 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentSmelting.java @@ -0,0 +1,20 @@ +package com.wayoftime.bloodmagic.guide.page; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; + +import java.util.function.Supplier; + +public class PageComponentSmelting extends PageComponent { + + private final ItemStack output; + private final Supplier inputGetter; + private ItemStack input; + + public PageComponentSmelting(ItemStack output) { + super(20); + + this.output = output; + this.inputGetter = () -> FurnaceRecipes.instance().getSmeltingResult(output); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentText.java b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentText.java new file mode 100644 index 00000000..be8ed262 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/page/PageComponentText.java @@ -0,0 +1,50 @@ +package com.wayoftime.bloodmagic.guide.page; + +import com.google.common.collect.Lists; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; + +import java.util.List; +import java.util.function.Consumer; + +public class PageComponentText extends PageComponent { + + private final ITextComponent textComponent; + + public PageComponentText(ITextComponent text) { + super(-1); + + this.textComponent = text; + withComponentSplitter(new StringSplitter(textComponent)); + } + + private static class StringSplitter implements IComponentSplitter { + + private final ITextComponent component; + + public StringSplitter(ITextComponent component) { + this.component = component; + } + + @Override + public void split(Consumer components, int currentPosition, int pageHeight) { + String fullText = component.getFormattedText(); + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + List lines = fontRenderer.listFormattedStringToWidth(fullText, 300); + int remainingSpace = pageHeight - currentPosition; + for (String line : lines) { + List componentLines = Lists.newArrayList(); + if (remainingSpace >= fontRenderer.FONT_HEIGHT + 3) { + componentLines.add(line); + remainingSpace += fontRenderer.FONT_HEIGHT + 3; + } else { + remainingSpace = pageHeight; + components.accept(new PageComponentText(new TextComponentString(String.join(" ", componentLines)))); + componentLines.clear(); + } + } + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/test/GuideTest.java b/src/main/java/com/wayoftime/bloodmagic/guide/test/GuideTest.java new file mode 100644 index 00000000..9c4679e7 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/test/GuideTest.java @@ -0,0 +1,56 @@ +package com.wayoftime.bloodmagic.guide.test; + +import com.google.common.collect.Lists; +import com.wayoftime.bloodmagic.guide.Entry; +import com.wayoftime.bloodmagic.guide.Guide; +import com.wayoftime.bloodmagic.guide.page.PageComponentFiller; +import com.wayoftime.bloodmagic.guide.page.PageComponentItem; +import com.wayoftime.bloodmagic.guide.page.PageComponentText; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.util.List; + +@Mod(modid = "test_guide") +@Mod.EventBusSubscriber(modid = "test_guide") +public class GuideTest { + + public static final List GUIDES = Lists.newArrayList(); + + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent event) { + GUIDES.add(new Guide(new ResourceLocation("guide_test", "test"), guide -> { + guide.addCategory("test_cat_1", category -> { + category.addEntry(new Entry("test_entry_1", test1 -> { + test1.appendComponent(new PageComponentText(new TextComponentString("doot"))); + })); + }); + + guide.addCategory("test_cat_2", category -> { + category.addEntry(new Entry("test_entry_2", test2 -> { + test2.appendComponent(new PageComponentText(new TextComponentString("what's up bud"))); + test2.appendComponent(new PageComponentItem(new ItemStack(Items.DIAMOND))); + test2.appendComponent(new PageComponentFiller()); + })); + + category.addEntry(new Entry("test_entry_3", test3 -> { + test3.appendComponent(new PageComponentFiller()); + test3.appendComponent(new PageComponentFiller()); + })); + }); + })); + } + + @SubscribeEvent + public static void registerItems(RegistryEvent.Register event) { + for (Guide guide : GUIDES) + event.getRegistry().register(new ItemGuide(guide)); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/test/ItemGuide.java b/src/main/java/com/wayoftime/bloodmagic/guide/test/ItemGuide.java new file mode 100644 index 00000000..1f035c97 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/test/ItemGuide.java @@ -0,0 +1,15 @@ +package com.wayoftime.bloodmagic.guide.test; + +import com.wayoftime.bloodmagic.guide.Guide; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class ItemGuide extends Item { + + public ItemGuide(Guide guide) { + setRegistryName(guide.getId().toString().replace(":", "_")); + setTranslationKey(guide.getId().toString()); + setMaxStackSize(1); + setCreativeTab(CreativeTabs.MISC); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/test/gui/Bookmark.java b/src/main/java/com/wayoftime/bloodmagic/guide/test/gui/Bookmark.java new file mode 100644 index 00000000..3d976cf1 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/test/gui/Bookmark.java @@ -0,0 +1,23 @@ +package com.wayoftime.bloodmagic.guide.test.gui; + +import com.wayoftime.bloodmagic.guide.Category; +import com.wayoftime.bloodmagic.guide.Entry; + +public class Bookmark { + + private Category category; + private Entry entry; + + public Bookmark atPosition(Category category, Entry entry) { + this.category = category; + return this; + } + + public Category getCategory() { + return category; + } + + public Entry getEntry() { + return entry; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/guide/test/gui/GuiGuide.java b/src/main/java/com/wayoftime/bloodmagic/guide/test/gui/GuiGuide.java new file mode 100644 index 00000000..751a3f15 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/guide/test/gui/GuiGuide.java @@ -0,0 +1,35 @@ +package com.wayoftime.bloodmagic.guide.test.gui; + +import com.google.common.collect.Maps; +import com.wayoftime.bloodmagic.guide.Guide; +import net.minecraft.client.gui.GuiScreen; + +import java.util.Map; + +public class GuiGuide extends GuiScreen { + + private static final Map SCREENS = Maps.newHashMap(); + + private final Guide guide; + private final Bookmark bookmark; + + public GuiGuide(Guide guide) { + this.guide = guide; + this.bookmark = new Bookmark(); + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Override + public void onGuiClosed() { + // TODO update bookmark + super.onGuiClosed(); + } + + public static GuiGuide getGui(Guide guide) { + return SCREENS.compute(guide, (k, v) -> v == null ? new GuiGuide(guide) : v); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/iface/IBindable.java b/src/main/java/com/wayoftime/bloodmagic/item/IBindable.java similarity index 54% rename from src/main/java/WayofTime/bloodmagic/iface/IBindable.java rename to src/main/java/com/wayoftime/bloodmagic/item/IBindable.java index cc2dad03..83a34cbf 100644 --- a/src/main/java/WayofTime/bloodmagic/iface/IBindable.java +++ b/src/main/java/com/wayoftime/bloodmagic/item/IBindable.java @@ -1,10 +1,13 @@ -package WayofTime.bloodmagic.iface; +package com.wayoftime.bloodmagic.item; -import WayofTime.bloodmagic.core.data.Binding; +import com.wayoftime.bloodmagic.core.network.Binding; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import javax.annotation.Nullable; +import java.util.List; /** * Implement this interface on any Item that can be bound to a player. @@ -35,4 +38,21 @@ public interface IBindable { default boolean onBind(EntityPlayer player, ItemStack stack) { return true; } -} + + static void applyBinding(ItemStack stack, EntityPlayer player) { + Binding binding = new Binding(player); + applyBinding(stack, binding); + } + + static void applyBinding(ItemStack stack, Binding binding) { + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + + stack.getTagCompound().setTag("binding", binding.serializeNBT()); + } + + static void appendTooltip(Binding binding, List tooltip) { + if (binding != null) + tooltip.add(I18n.format("tooltip.bloodmagic:bound_owner", binding.getOwnerName())); + } +} \ No newline at end of file diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemAltarBuilder.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemAltarBuilder.java new file mode 100644 index 00000000..07d5b66c --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemAltarBuilder.java @@ -0,0 +1,84 @@ +package com.wayoftime.bloodmagic.item; + +import com.wayoftime.bloodmagic.block.BlockBloodAltar; +import com.wayoftime.bloodmagic.core.altar.AltarTier; +import com.wayoftime.bloodmagic.core.altar.AltarUtil; +import com.wayoftime.bloodmagic.core.altar.IAltarManipulator; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.util.List; + +public class ItemAltarBuilder extends ItemMundane implements IAltarManipulator { + + public ItemAltarBuilder() { + super("altar_builder"); + + setMaxStackSize(1); + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { + if (world.isRemote) + return ActionResult.newResult(EnumActionResult.PASS, player.getHeldItem(hand)); + + if (player.isSneaking()) { + ItemStack held = player.getHeldItem(hand); + AltarTier newTier = cycleTier(held); + player.sendStatusMessage(new TextComponentTranslation("chat.bloodmagic:altar_builder_cycled", new TextComponentTranslation("enchantment.level." + newTier.getDisplayNumber())), true); + return ActionResult.newResult(EnumActionResult.SUCCESS, held); + } + + return super.onItemRightClick(world, player, hand); + } + + @Override + public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + IBlockState state = world.getBlockState(pos); + if (state.getBlock() instanceof BlockBloodAltar) { + AltarUtil.constructAltar(world, pos, getCurrentTier(player.getHeldItem(hand))); + return EnumActionResult.SUCCESS; + } + + return super.onItemUse(player, world, pos, hand, facing, hitX, hitY, hitZ); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { + tooltip.add(I18n.format("tooltip.bloodmagic:tier", I18n.format("enchantment.level." + getCurrentTier(stack).getDisplayNumber()))); + } + + private AltarTier getCurrentTier(ItemStack stack) { + if (!stack.hasTagCompound()) + return AltarTier.ONE; + + return AltarTier.VALUES[Math.min(AltarTier.VALUES.length - 1, Math.max(0, stack.getTagCompound().getInteger("altar_tier")))]; + } + + private AltarTier cycleTier(ItemStack stack) { + AltarTier current = getCurrentTier(stack); + int nextOrdinal = current.ordinal() + 1; + if (nextOrdinal >= AltarTier.VALUES.length) + nextOrdinal = 0; + + NBTTagCompound tag = stack.getTagCompound(); + if (tag == null) + stack.setTagCompound(tag = new NBTTagCompound()); + + tag.setInteger("altar_tier", nextOrdinal); + return AltarTier.VALUES[nextOrdinal]; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemBindable.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemBindable.java new file mode 100644 index 00000000..f4f20fde --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemBindable.java @@ -0,0 +1,26 @@ +package com.wayoftime.bloodmagic.item; + +import com.wayoftime.bloodmagic.core.network.Binding; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.util.List; + +public class ItemBindable extends ItemMundane implements IBindable { + + public ItemBindable(String name) { + super(name); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { + Binding binding = getBinding(stack); + if (binding == null) + return; + + tooltip.add(I18n.format("tooltip.bloodmagic:bound_owner", binding.getOwnerName())); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemBloodOrb.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemBloodOrb.java new file mode 100644 index 00000000..b54ff3d9 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemBloodOrb.java @@ -0,0 +1,55 @@ +package com.wayoftime.bloodmagic.item; + +import com.wayoftime.bloodmagic.core.network.*; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +public class ItemBloodOrb extends ItemBindable implements IBloodOrb { + + private final BloodOrb orb; + + public ItemBloodOrb(BloodOrb orb) { + super("blood_orb_" + orb.getName().getPath()); + + this.orb = orb; + + setMaxStackSize(1); + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { + ItemStack held = player.getHeldItem(hand); + Binding binding = getBinding(held); + if (binding != null) { + SoulNetwork network = SoulNetwork.get(binding.getOwnerId()); + if (player.capabilities.isCreativeMode || player.attackEntityFrom(SoulNetwork.WEAK_SOUL, 1.0F)) + network.submitInteraction(NetworkInteraction.asItemInfo(held, world, player, 200)); + } + + return super.onItemRightClick(world, player, hand); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { + super.addInformation(stack, world, tooltip, flag); + + BloodOrb orb = getOrb(stack); + if (orb != null && flag.isAdvanced()) + tooltip.add(I18n.format("tooltip.bloodmagic:object_owner", orb.getName().getNamespace())); + } + + @Nullable + @Override + public BloodOrb getOrb(@Nonnull ItemStack stack) { + return orb; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemDaggerSelfSacrifice.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemDaggerSelfSacrifice.java new file mode 100644 index 00000000..b1aa8299 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemDaggerSelfSacrifice.java @@ -0,0 +1,55 @@ +package com.wayoftime.bloodmagic.item; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagic; +import com.wayoftime.bloodmagic.core.altar.AltarUtil; +import com.wayoftime.bloodmagic.core.network.SoulNetwork; +import com.wayoftime.bloodmagic.core.util.BooleanResult; +import com.wayoftime.bloodmagic.tile.TileBloodAltar; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +public class ItemDaggerSelfSacrifice extends ItemMundane { + + private final Type type; + + public ItemDaggerSelfSacrifice(Type sacrifice) { + super("dagger_self_sacrifice" + (sacrifice == Type.CREATIVE ? "_creative" : "")); + + setMaxStackSize(1); + + this.type = sacrifice; + + if (sacrifice != Type.CREATIVE) + addPropertyOverride(new ResourceLocation(BloodMagic.MODID, "charged"), (stack, worldIn, entityIn) -> stack.hasTagCompound() && stack.getTagCompound().hasKey("charge") ? 1.0F : 0.0F); + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { + player.attackEntityFrom(SoulNetwork.WEAK_SOUL, 2.0F); + BooleanResult fillResult = AltarUtil.handleSacrifice(player, type.amount); + if (!fillResult.isSuccess()) + return ActionResult.newResult(EnumActionResult.PASS, player.getHeldItem(hand)); + + return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)); + } + + public enum Type { + NORMAL(200), + CREATIVE(Integer.MAX_VALUE), + ; + + private final int amount; + + Type(int amount) { + this.amount = amount; + } + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingArmor.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingArmor.java new file mode 100644 index 00000000..a057f5b8 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingArmor.java @@ -0,0 +1,163 @@ +package com.wayoftime.bloodmagic.item; + +import com.google.common.collect.Multimap; +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicItems; +import com.wayoftime.bloodmagic.core.living.ILivingContainer; +import com.wayoftime.bloodmagic.core.living.LivingStats; +import com.wayoftime.bloodmagic.core.living.LivingUpgrade; +import com.wayoftime.bloodmagic.core.living.LivingUtil; +import com.wayoftime.bloodmagic.core.network.Binding; +import com.wayoftime.bloodmagic.core.network.SoulNetwork; +import com.wayoftime.bloodmagic.core.network.NetworkInteraction; +import com.wayoftime.bloodmagic.core.util.BooleanResult; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; +import java.util.Map; + +public class ItemLivingArmor extends ItemArmor implements ILivingContainer, ISpecialArmor, IBindable { + + public static final ArmorMaterial MATERIAL = EnumHelper.addArmorMaterial("living", "living", 100, new int[]{1, 2, 3, 4}, 3, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 2.0F); + + public ItemLivingArmor(EntityEquipmentSlot slot) { + super(MATERIAL, 0, slot); + + setTranslationKey(BloodMagic.MODID + ":living_armor_" + slot.getName()); + setRegistryName("living_armor_" + slot.getName()); + setCreativeTab(BloodMagic.TAB_BM); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { + if (getBinding(stack) == null) + IBindable.applyBinding(stack, player); + + super.onArmorTick(world, player, stack); + } + + @Override + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) { + Multimap modifiers = super.getAttributeModifiers(slot, stack); + if (slot != EntityEquipmentSlot.CHEST) + return modifiers; + + LivingStats stats = getLivingStats(stack); + if (stats == null) + return modifiers; + + stats.getUpgrades().forEach((k, v) -> { + if (k.getAttributeProvider() != null) + k.getAttributeProvider().handleAttributes(stats, modifiers, k.getLevel(v)); + }); + + return modifiers; + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, @Nonnull ItemStack armor, DamageSource source, double damage, int slot) { + if (source == DamageSource.DROWN || source == DamageSource.OUT_OF_WORLD) + return new ArmorProperties(-1, 0D, 0); + + double armorReduction; + double damageAmount = 0.25; + double armorPenetrationReduction = 0; + int maxAbsorption = 100000; + + if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_FEET || armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_HEAD) + damageAmount = 3d / 20d * 0.6; + else if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_LEGS) + damageAmount = 6d / 20d * 0.6; + else if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_CHEST) + damageAmount = 0.64; + + if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_CHEST) { + armorReduction = 0.24 / 0.64; // This values puts it at iron level + + if (!LivingUtil.hasFullSet((EntityPlayer) player)) + return new ArmorProperties(-1, damageAmount * armorReduction, maxAbsorption); + + LivingStats stats = getLivingStats(armor); + double protection = 1.0D; + if (stats != null) + for (Map.Entry entry : stats.getUpgrades().entrySet()) + if (entry.getKey().getArmorProvider() != null) + protection *= 1 - entry.getKey().getArmorProvider().getProtection((EntityPlayer) player, source, entry.getKey().getLevel(entry.getValue())); + + armorReduction += (1 - protection) * (1 - armorReduction); + damageAmount *= armorReduction; + return new ArmorProperties(-1, source.isUnblockable() ? 1 - protection : damageAmount, maxAbsorption); + } else if (source.isUnblockable()) + return new ArmorProperties(-1, damageAmount * armorPenetrationReduction, maxAbsorption); + + return new ArmorProperties(-1, damageAmount, maxAbsorption); + } + + @Override + public int getArmorDisplay(EntityPlayer player, @Nonnull ItemStack armor, int slot) { + if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_HEAD) + return 3; + if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_CHEST) + return 8; + if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_LEGS) + return 6; + if (armor.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_FEET) + return 3; + + return 0; + } + + @Nullable + @Override + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) { + if (this == RegistrarBloodMagicItems.LIVING_ARMOR_CHEST || this == RegistrarBloodMagicItems.LIVING_ARMOR_HEAD || this == RegistrarBloodMagicItems.LIVING_ARMOR_FEET) + return "bloodmagic:textures/models/armor/living_armor_layer_1.png"; + + if (this == RegistrarBloodMagicItems.LIVING_ARMOR_LEGS) + return "bloodmagic:textures/models/armor/living_armor_layer_2.png"; + + return null; + } + + @Override + public void damageArmor(EntityLivingBase entity, @Nonnull ItemStack stack, DamageSource source, int damage, int slot) { + if (stack.getItem() == RegistrarBloodMagicItems.LIVING_ARMOR_CHEST && damage > getMaxDamage(stack) - getDamage(stack)) { + Binding binding = getBinding(stack); + if (binding == null) { + entity.attackEntityFrom(SoulNetwork.WEAK_SOUL, 2.0F); + return; + } + + BooleanResult result = SoulNetwork.get(binding.getOwnerId()).submitInteraction(NetworkInteraction.asItemInfo(stack, entity.getEntityWorld(), entity, damage * 100).syphon()); + if (!result.isSuccess()) + entity.attackEntityFrom(SoulNetwork.WEAK_SOUL, 2.0F); + + return; + } + + stack.damageItem(damage, entity); + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { + ILivingContainer.appendLivingTooltip(getLivingStats(stack), tooltip, true); + IBindable.appendTooltip(getBinding(stack), tooltip); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingTome.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingTome.java new file mode 100644 index 00000000..42ea8c5d --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemLivingTome.java @@ -0,0 +1,63 @@ +package com.wayoftime.bloodmagic.item; + +import com.wayoftime.bloodmagic.core.RegistrarBloodMagicLivingArmor; +import com.wayoftime.bloodmagic.core.living.ILivingContainer; +import com.wayoftime.bloodmagic.core.living.LivingStats; +import com.wayoftime.bloodmagic.core.living.LivingUtil; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.util.List; + +public class ItemLivingTome extends ItemMundane implements ILivingContainer { + + public ItemLivingTome() { + super("living_tome"); + } + + @Override + public ActionResult onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) { + ItemStack held = player.getHeldItem(hand); + + LivingStats armorStats = LivingStats.fromPlayer(player, true); + if (armorStats == null) + return ActionResult.newResult(EnumActionResult.PASS, held); + + LivingStats tomeStats = getLivingStats(held); + if (tomeStats == null) + return ActionResult.newResult(EnumActionResult.PASS, held); + + tomeStats.getUpgrades().forEach((k, v) -> LivingUtil.applyNewExperience(player, k, v)); +// LivingStats.toPlayer(player, armorStats); + held.shrink(1); + return ActionResult.newResult(EnumActionResult.SUCCESS, held); + } + + @Override + public void getSubItems(CreativeTabs tab, NonNullList items) { + if (!isInCreativeTab(tab)) + return; + + RegistrarBloodMagicLivingArmor.UPGRADES.values().forEach(upgrade -> { + int exp = 0; + while ((exp = upgrade.getNextRequirement(exp)) != 0) { + ItemStack tome = new ItemStack(this); + updateLivingStates(tome, new LivingStats().setMaxPoints(upgrade.getLevelCost(exp)).addExperience(upgrade.getKey(), exp)); + items.add(tome); + } + }); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { + ILivingContainer.appendLivingTooltip(getLivingStats(stack), tooltip, false); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/ItemMundane.java b/src/main/java/com/wayoftime/bloodmagic/item/ItemMundane.java new file mode 100644 index 00000000..9433134b --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/ItemMundane.java @@ -0,0 +1,13 @@ +package com.wayoftime.bloodmagic.item; + +import com.wayoftime.bloodmagic.BloodMagic; +import net.minecraft.item.Item; + +public class ItemMundane extends Item { + + public ItemMundane(String name) { + setTranslationKey(BloodMagic.MODID + ":" + name); + setCreativeTab(BloodMagic.TAB_BM); + setRegistryName(name); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/sigil/ISigil.java b/src/main/java/com/wayoftime/bloodmagic/item/sigil/ISigil.java new file mode 100644 index 00000000..31bc6766 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/sigil/ISigil.java @@ -0,0 +1,51 @@ +package com.wayoftime.bloodmagic.item.sigil; + +import com.wayoftime.bloodmagic.core.network.Binding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +public interface ISigil { + + @Nonnull + default EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand, @Nonnull Binding binding) { + return EnumActionResult.PASS; + } + + default EnumActionResult onInteract(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, @Nonnull EnumHand hand, @Nonnull Binding binding) { + return EnumActionResult.PASS; + } + + @Nonnegative + int getCost(); + + interface Toggle extends ISigil { + + default void onToggle(boolean active, @Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand, @Nonnull Binding binding) { + + } + + default void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnegative int itemSlot, boolean isHeld, @Nonnull Binding binding) { + + } + } + + interface Holding extends ISigil { + + int getSize(ItemStack stack); + + int getEquippedSigil(ItemStack stack); + + NonNullList getHeldSigils(ItemStack stack); + + void setHeldSigils(ItemStack stack, NonNullList inventory); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/sigil/ItemSigil.java b/src/main/java/com/wayoftime/bloodmagic/item/sigil/ItemSigil.java new file mode 100644 index 00000000..42a2341f --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/sigil/ItemSigil.java @@ -0,0 +1,176 @@ +package com.wayoftime.bloodmagic.item.sigil; + +import com.wayoftime.bloodmagic.BloodMagic; +import com.wayoftime.bloodmagic.core.network.Binding; +import com.wayoftime.bloodmagic.core.network.SoulNetwork; +import com.wayoftime.bloodmagic.core.network.NetworkInteraction; +import com.wayoftime.bloodmagic.core.util.BooleanResult; +import com.wayoftime.bloodmagic.core.util.register.IVariantProvider; +import com.wayoftime.bloodmagic.item.IBindable; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.IItemPropertyGetter; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nullable; +import java.util.List; + +/* + * TODO - See checklist + * - [-] Sigils + * - [x] Divination + * - [x] Air + * - [x] Fast Miner + * - [-] Haste + * - [ ] Water + * - [ ] Lava + * - [ ] Void + * - [ ] Green Grove + * - [ ] Blood Light + * - [ ] Elemental Affinity + * - [ ] Magnetism + * - [ ] Suppression + * - [ ] Seer + * - Perhaps this could be modified to show network interaction history instead of additional altar data? + * - [ ] Ender Severance + * - [ ] Whirlwind + * - [ ] Phantom Bridge + * - [ ] Compression + * - [ ] Holding + * - [ ] Teleposition + * - [ ] Transposition + * - [ ] Claw + * - [ ] Bounce + * - [ ] Frost + */ +public class ItemSigil extends Item implements IBindable, IVariantProvider { + + private final ISigil sigil; + + public ItemSigil(ISigil sigil, String name) { + this.sigil = sigil; + + setCreativeTab(BloodMagic.TAB_BM); + setTranslationKey(BloodMagic.MODID + ":sigil_" + name); + setRegistryName("sigil_" + name); + setMaxStackSize(1); + + if (sigil instanceof ISigil.Toggle) { + addPropertyOverride(new ResourceLocation(BloodMagic.MODID, "toggled"), new IItemPropertyGetter() { + @SideOnly(Side.CLIENT) + @Override + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) { + return isActive(stack) ? 1.0F : 0.0F; + } + }); + } + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { + if (player instanceof FakePlayer) + return ActionResult.newResult(EnumActionResult.FAIL, player.getHeldItem(hand)); + + ItemStack sigilStack = getSigilStack(player, hand); + Binding binding = getBinding(sigilStack); + if (binding == null || binding.getOwnerId() == null) + return ActionResult.newResult(EnumActionResult.FAIL, player.getHeldItem(hand)); + + if (sigil instanceof ISigil.Toggle && player.isSneaking()) { + boolean newState = toggleState(sigilStack); + ((ISigil.Toggle) sigil).onToggle(newState, sigilStack, player, world, hand, binding); + return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)); + } + + EnumActionResult result = sigil.onRightClick(sigilStack, player, world, hand, binding); + if (result == EnumActionResult.SUCCESS) { + BooleanResult syphonResult = SoulNetwork.get(binding.getOwnerId()).submitInteraction(NetworkInteraction.asItemInfo(sigilStack, world, player, sigil.getCost()).syphon()); + if (!syphonResult.isSuccess()) + player.attackEntityFrom(SoulNetwork.WEAK_SOUL, 2.0F); + } + + return ActionResult.newResult(result, player.getHeldItem(hand)); + } + + @Override + public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + if (player instanceof FakePlayer) + return EnumActionResult.FAIL; + + ItemStack stack = getSigilStack(player, hand); + Binding binding = getBinding(stack); + if (binding == null) + return EnumActionResult.FAIL; + + return sigil.onInteract(stack, player, world, pos, facing, hand, binding); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { + if (!(entity instanceof EntityPlayer) || entity instanceof FakePlayer) + return; + + ItemStack sigilStack = getSigilStack(stack); + if (sigil instanceof ISigil.Toggle) { + Binding binding = getBinding(sigilStack); + if (binding != null && isActive(sigilStack)) { + ((ISigil.Toggle) sigil).onUpdate(sigilStack, (EntityPlayer) entity, world, itemSlot, isSelected, binding); + if (world.getTotalWorldTime() % 100 == 0) { + BooleanResult result = SoulNetwork.get(binding.getOwnerId()).submitInteraction(NetworkInteraction.asItemInfo(sigilStack, world, entity, sigil.getCost()).syphon()); + if (!result.isSuccess()) + entity.attackEntityFrom(SoulNetwork.WEAK_SOUL, 1.0F); + } + } + } + } + + @Override + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { + IBindable.appendTooltip(getBinding(stack), tooltip); + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { + return slotChanged; + } + + public ISigil getSigil() { + return sigil; + } + + public ItemStack getSigilStack(EntityPlayer player, EnumHand hand) { + return getSigilStack(player.getHeldItem(hand)); + } + + public ItemStack getSigilStack(ItemStack sigilStack) { + if (sigil instanceof ISigil.Holding) { + ISigil.Holding holding = (ISigil.Holding) sigil; + int current = holding.getEquippedSigil(sigilStack); + return holding.getHeldSigils(sigilStack).get(current); + } + + return sigilStack; + } + + public boolean toggleState(ItemStack stack) { + if (!stack.hasTagCompound()) + return false; + + boolean newState = !isActive(stack); + stack.getTagCompound().setBoolean("active", newState); + return newState; + } + + public boolean isActive(ItemStack stack) { + return stack.hasTagCompound() && stack.getTagCompound().getBoolean("active"); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilAir.java b/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilAir.java new file mode 100644 index 00000000..1d246d9a --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilAir.java @@ -0,0 +1,46 @@ +package com.wayoftime.bloodmagic.item.sigil; + +import com.wayoftime.bloodmagic.core.network.Binding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilAir implements ISigil { + + @Override + public int getCost() { + return 50; + } + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand, Binding binding) { + if (world.isRemote) { + Vec3d vec = player.getLookVec(); + double wantedVelocity = 1.7; + + // TODO - Revisit after potions +// if (player.isPotionActive(RegistrarBloodMagic.BOOST)) { +// int amplifier = player.getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); +// wantedVelocity += (1 + amplifier) * (0.35); +// } + + player.motionX = vec.x * wantedVelocity; + player.motionY = vec.y * wantedVelocity; + player.motionZ = vec.z * wantedVelocity; + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + } + + if (!world.isRemote) + player.fallDistance = 0; + + return EnumActionResult.SUCCESS; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilDivination.java b/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilDivination.java new file mode 100644 index 00000000..70851889 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilDivination.java @@ -0,0 +1,27 @@ +package com.wayoftime.bloodmagic.item.sigil; + +import com.wayoftime.bloodmagic.core.network.Binding; +import com.wayoftime.bloodmagic.core.network.SoulNetwork; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilDivination implements ISigil { + + @Override + public int getCost() { + return 0; + } + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand, Binding binding) { + player.sendStatusMessage(new TextComponentString("Current Essence: " + SoulNetwork.get(binding.getOwnerId()).getEssence()), true); + return EnumActionResult.PASS; + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilFastMiner.java b/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilFastMiner.java new file mode 100644 index 00000000..535f4cd3 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilFastMiner.java @@ -0,0 +1,23 @@ +package com.wayoftime.bloodmagic.item.sigil; + +import com.wayoftime.bloodmagic.core.network.Binding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilFastMiner implements ISigil.Toggle { + + @Override + public int getCost() { + return 100; + } + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld, @Nonnull Binding binding) { + player.addPotionEffect(new PotionEffect(MobEffects.HASTE, 2, 0, true, false)); + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilHaste.java b/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilHaste.java new file mode 100644 index 00000000..0c401a30 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/item/sigil/SigilHaste.java @@ -0,0 +1,23 @@ +package com.wayoftime.bloodmagic.item.sigil; + +import com.wayoftime.bloodmagic.core.network.Binding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilHaste implements ISigil.Toggle { + + @Override + public int getCost() { + return 250; + } + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld, @Nonnull Binding binding) { + player.addPotionEffect(new PotionEffect(MobEffects.SPEED, 2, 0, true, false)); // TODO - RegistrarBloodMagic.BOOST + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/proxy/ClientProxy.java b/src/main/java/com/wayoftime/bloodmagic/proxy/ClientProxy.java new file mode 100644 index 00000000..39c0539c --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/proxy/ClientProxy.java @@ -0,0 +1,15 @@ +package com.wayoftime.bloodmagic.proxy; + +import com.wayoftime.bloodmagic.BloodMagic; +import net.minecraftforge.client.model.obj.OBJLoader; +import org.lwjgl.opengl.Display; + +public class ClientProxy implements IProxy { + + @Override + public void preInit() { + OBJLoader.INSTANCE.addDomain(BloodMagic.MODID); + + Display.setTitle("Basically 1.13"); // TODO - :BigThink: + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/proxy/IProxy.java b/src/main/java/com/wayoftime/bloodmagic/proxy/IProxy.java new file mode 100644 index 00000000..8f215817 --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/proxy/IProxy.java @@ -0,0 +1,8 @@ +package com.wayoftime.bloodmagic.proxy; + +public interface IProxy { + + default void preInit() { + + } +} diff --git a/src/main/java/com/wayoftime/bloodmagic/proxy/ServerProxy.java b/src/main/java/com/wayoftime/bloodmagic/proxy/ServerProxy.java new file mode 100644 index 00000000..2ca5b44b --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/proxy/ServerProxy.java @@ -0,0 +1,4 @@ +package com.wayoftime.bloodmagic.proxy; + +public class ServerProxy implements IProxy { +} diff --git a/src/main/java/com/wayoftime/bloodmagic/tile/TileBloodAltar.java b/src/main/java/com/wayoftime/bloodmagic/tile/TileBloodAltar.java new file mode 100644 index 00000000..8a2b82cb --- /dev/null +++ b/src/main/java/com/wayoftime/bloodmagic/tile/TileBloodAltar.java @@ -0,0 +1,268 @@ +package com.wayoftime.bloodmagic.tile; + +import com.wayoftime.bloodmagic.api.event.BloodMagicCraftedEvent; +import com.wayoftime.bloodmagic.api.impl.BloodMagicAPI; +import com.wayoftime.bloodmagic.api.impl.recipe.RecipeBloodAltar; +import com.wayoftime.bloodmagic.core.RegistrarBloodMagic; +import com.wayoftime.bloodmagic.core.altar.AltarTier; +import com.wayoftime.bloodmagic.core.altar.AltarUpgrades; +import com.wayoftime.bloodmagic.core.altar.AltarUtil; +import com.wayoftime.bloodmagic.core.network.*; +import com.wayoftime.bloodmagic.item.IBindable; +import com.wayoftime.bloodmagic.tile.base.TileBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ITickable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +import javax.annotation.Nullable; + +/* + * TODO - See checklist + * - [-] Upgrades + * - [x] Self Sacrifice + * - [x] Sacrifice + * - [x] Capacity + * - [x] Augmented Capacity + * - [ ] Speed + * - [ ] Displacement + * - [ ] Orb + * - [ ] Acceleration + * - [ ] Charging + * - [-] Tanks + * - [x] Main tank keeps buffer filled + * - [ ] Buffer fills main tank + */ +public class TileBloodAltar extends TileBase implements ITickable { + + private FluidTank tank = new FluidTank(new FluidStack(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, 0), 10000); + private FluidTank buffer = new FluidTank(new FluidStack(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, 0), 1000); // Buffer has 10% the capacity of the tank + private ItemStackHandler itemHandler = new ItemStackHandler(1); + private AltarTier currentTier = AltarTier.ONE; + private AltarUpgrades upgrades = new AltarUpgrades(); + private float progress; + private RecipeBloodAltar recipe = null; + private int drained; + private long lastCompletionTime; + + public TileBloodAltar() { + tank.setTileEntity(this); + } + + @Override + public void update() { + if (getWorld().getTotalWorldTime() % 20 == 0) { + currentTier = AltarUtil.getTier(getWorld(), getPos()); + upgrades = AltarUtil.getUpgrades(getWorld(), pos, currentTier); + handleTankUpdates(); + } + + if (getWorld().getTotalWorldTime() - lastCompletionTime > 20) + handleRecipe(); + } + + protected void handleTankUpdates() { + tank.setCapacity((int) (Fluid.BUCKET_VOLUME * 10 * upgrades.getCapacityModifier())); + if (tank.getCapacity() < tank.getFluidAmount()) + tank.setFluid(new FluidStack(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, tank.getCapacity())); + + buffer.setCapacity((int) (tank.getCapacity() * 0.1D)); + if (buffer.getCapacity() < buffer.getFluidAmount()) + buffer.setFluid(new FluidStack(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, buffer.getCapacity())); + + if (buffer.getCapacity() > buffer.getFluidAmount() && tank.getFluidAmount() > 0) { + FluidStack drained = tank.drain(100, true); + if (drained != null) + buffer.fill(drained, true); + } + } + + protected void handleRecipe() { + ItemStack inputItem = itemHandler.getStackInSlot(0); + if (inputItem.isEmpty()) + return; + + // Only look for a recipe if the altar currently has blood in it as well as the current recipe is null or the item doesn't match the recipe input + if (tank.getFluidAmount() > 0 && (recipe == null || !recipe.getInput().apply(inputItem))) { + RecipeBloodAltar newRecipe = BloodMagicAPI.INSTANCE.getRecipeRegistrar().getBloodAltar(inputItem); + if (newRecipe != null && newRecipe.getMinimumTier().ordinal() <= currentTier.ordinal()) + recipe = newRecipe; + } + + // Match orbs + if (recipe == null) { + if (inputItem.getItem() instanceof IBloodOrb && inputItem.getItem() instanceof IBindable) { + BloodOrb orb = ((IBloodOrb) inputItem.getItem()).getOrb(inputItem); + Binding binding = ((IBindable) inputItem.getItem()).getBinding(inputItem); + if (orb != null && binding != null) { + if (currentTier.ordinal() < orb.getTier()) + return; + + SoulNetwork network = SoulNetwork.get(binding.getOwnerId()); + if (network.getEssence() < orb.getCapacity()) { + FluidStack drained = tank.drain(new FluidStack(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, orb.getFillRate()), true); + if (drained != null) + network.submitInteraction(NetworkInteraction.asItemInfo(inputItem, world, pos, drained.amount)); + } + } + } + + return; + } + + // Check tier + if (recipe.getMinimumTier().ordinal() > currentTier.ordinal()) + return; + + // Check and handle progress loss + if (tank.getFluidAmount() <= 0) { + progress = Math.max(0, progress - (recipe.getDrainRate() / (recipe.getSyphon() * inputItem.getCount()))); + if (getWorld() instanceof WorldServer) + ((WorldServer) getWorld()).spawnParticle(EnumParticleTypes.SMOKE_NORMAL, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 1, 0.1, 0, 0.1, 0); + return; + } + + FluidStack tankDrain = tank.drain(new FluidStack(RegistrarBloodMagic.FLUID_LIFE_ESSENCE, recipe.getConsumeRate()), true); + if (tankDrain == null) + return; + + if (getWorld() instanceof WorldServer) + ((WorldServer) getWorld()).spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 1, 0.2, 0, 0.2, 0); + + drained += tankDrain.amount; + progress = (float) drained / (Math.max(recipe.getSyphon() * inputItem.getCount(), 1)); + + if (progress >= 1.0F) { + BloodMagicCraftedEvent.Altar event = new BloodMagicCraftedEvent.Altar(recipe.getOutput(), inputItem); + MinecraftForge.EVENT_BUS.post(event); + + if (getWorld() instanceof WorldServer) + ((WorldServer) getWorld()).spawnParticle(EnumParticleTypes.REDSTONE, pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 40, 0.3, 0, 0.3, 0); + + itemHandler.setStackInSlot(0, event.getOutput()); + lastCompletionTime = getWorld().getTotalWorldTime(); + resetProgress(); + } + } + + @Override + public void deserialize(NBTTagCompound tag) { + tank.readFromNBT(tag.getCompoundTag("tank")); + tank.setTileEntity(this); + itemHandler.deserializeNBT(tag.getCompoundTag("inventory")); + progress = tag.getFloat("progress"); + currentTier = AltarTier.VALUES[tag.getInteger("tier")]; + drained = tag.getInteger("drained"); + lastCompletionTime = tag.getLong("lastCompletionTime"); + } + + @Override + public void serialize(NBTTagCompound tag) { + tag.setTag("tank", tank.writeToNBT(new NBTTagCompound())); + tag.setTag("inventory", itemHandler.serializeNBT()); + tag.setFloat("progress", progress); + tag.setInteger("tier", currentTier.ordinal()); + tag.setInteger("drained", drained); + tag.setLong("lastCompletionTime", lastCompletionTime); + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) { + return super.hasCapability(capability, facing) || capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; + } + + @Nullable + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return facing == null ? (T) tank : (T) buffer; + + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + return (T) itemHandler; + + return super.getCapability(capability, facing); + } + + @Override + public NBTTagCompound getUpdateTag() { + NBTTagCompound tag = new NBTTagCompound(); + writeToNBT(tag); + ItemStack contained = itemHandler.getStackInSlot(0); + if (!contained.isEmpty()) { + NBTTagCompound itemTag = new NBTTagCompound(); + itemTag.setString("item", contained.getItem().getRegistryName().toString()); + itemTag.setInteger("count", contained.getCount()); + itemTag.setInteger("data", contained.getMetadata()); + NBTTagCompound shareTag = contained.getItem().getNBTShareTag(contained); + if (shareTag != null) + itemTag.setTag("nbt", shareTag); + + tag.setTag("item", itemTag); + } + + tag.setTag("tank", tank.writeToNBT(new NBTTagCompound())); + tag.setFloat("progress", progress); + return tag; + } + + @Override + public void handleUpdateTag(NBTTagCompound tag) { + readCurrentPos(tag); + if (tag.hasKey("item")) { + Item item = ForgeRegistries.ITEMS.getValue(new ResourceLocation(tag.getString("item"))); + int count = tag.getInteger("count"); + int meta = tag.getInteger("data"); + NBTTagCompound nbt = null; + if (tag.hasKey("nbt")) + nbt = tag.getCompoundTag("nbt"); + + ItemStack stack = new ItemStack(item, count, meta); + if (nbt != null) + stack.deserializeNBT(nbt); + itemHandler.setStackInSlot(0, stack); + } else { + itemHandler.setStackInSlot(0, ItemStack.EMPTY); + } + tank.readFromNBT(tag.getCompoundTag("tank")); + progress = tag.getFloat("progress"); + } + + public void resetProgress() { + recipe = null; + drained = 0; + progress = 0.0F; + } + + public FluidTank getTank() { + return tank; + } + + public boolean isCrafting() { + return recipe != null; + } + + public AltarTier getCurrentTier() { + return currentTier; + } + + public float getProgress() { + return progress; + } + + public AltarUpgrades getUpgrades() { + return upgrades; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/tile/base/TileBase.java b/src/main/java/com/wayoftime/bloodmagic/tile/base/TileBase.java similarity index 64% rename from src/main/java/WayofTime/bloodmagic/tile/base/TileBase.java rename to src/main/java/com/wayoftime/bloodmagic/tile/base/TileBase.java index e39ba05f..2350d953 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/base/TileBase.java +++ b/src/main/java/com/wayoftime/bloodmagic/tile/base/TileBase.java @@ -1,4 +1,4 @@ -package WayofTime.bloodmagic.tile.base; +package com.wayoftime.bloodmagic.tile.base; import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTTagCompound; @@ -7,8 +7,6 @@ import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; /** * Base tile class. @@ -16,18 +14,29 @@ import net.minecraftforge.fml.relauncher.SideOnly; * Handles data syncing and core data writing/reading. */ public class TileBase extends TileEntity { + @Override public final void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); - deserializeBase(compound); - deserialize(compound); + + if (compound.hasKey("baseData")) + deserializeBase(compound.getCompoundTag("baseData")); + + deserialize(compound.getCompoundTag("tileData")); } @Override public final NBTTagCompound writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); - serializeBase(compound); - return serialize(compound); + + NBTTagCompound base = serializeBase(); + if (base != null) + compound.setTag("baseData", base); + + NBTTagCompound tileData = new NBTTagCompound(); + serialize(tileData); + compound.setTag("tileData", tileData); + return compound; } /** @@ -45,7 +54,6 @@ public class TileBase extends TileEntity { * Package private method for reading base data from the tag compound. * * @param tagCompound - The tag compound to read from - * @see TileTicking */ void deserializeBase(NBTTagCompound tagCompound) { @@ -59,25 +67,34 @@ public class TileBase extends TileEntity { * @param tagCompound - The tag compound to write to. * @return the modified tag compound */ - public NBTTagCompound serialize(NBTTagCompound tagCompound) { - return tagCompound; - } + public void serialize(NBTTagCompound tagCompound) { + } /** * Package private method for writing base data to the tag compound. * - * @param tagCompound - The tag compound to write to. * @return the modified tag compound - * @see TileTicking */ - NBTTagCompound serializeBase(NBTTagCompound tagCompound) { - return tagCompound; + NBTTagCompound serializeBase() { + return null; + } + + protected final NBTTagCompound writeCurrentPos(NBTTagCompound compound) { + compound.setString("id", getKey(getClass()).toString()); + compound.setInteger("x", this.pos.getX()); + compound.setInteger("y", this.pos.getY()); + compound.setInteger("z", this.pos.getZ()); + return compound; + } + + protected final void readCurrentPos(NBTTagCompound tag) { + this.pos = new BlockPos(tag.getInteger("x"), tag.getInteger("y"), tag.getInteger("z")); } public void notifyUpdate() { - IBlockState state = getWorld().getBlockState(getPos()); - getWorld().notifyBlockUpdate(getPos(), state, state, 3); + IBlockState state = world.getBlockState(pos); + getWorld().notifyBlockUpdate(pos, state, state, 3); } // Data syncing @@ -93,19 +110,18 @@ public class TileBase extends TileEntity { } @Override - @SideOnly(Side.CLIENT) public final void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { super.onDataPacket(net, pkt); readFromNBT(pkt.getNbtCompound()); } @Override - public final NBTTagCompound getUpdateTag() { + public NBTTagCompound getUpdateTag() { return writeToNBT(new NBTTagCompound()); } @Override - public final void handleUpdateTag(NBTTagCompound tag) { + public void handleUpdateTag(NBTTagCompound tag) { readFromNBT(tag); } } diff --git a/src/main/resources/assets/bloodmagic/armatures/block/pillar_mid.json b/src/main/resources/assets/bloodmagic/armatures/block/pillar_mid.json deleted file mode 100644 index 16d07d04..00000000 --- a/src/main/resources/assets/bloodmagic/armatures/block/pillar_mid.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "joints": { - "ring": { "0": [ 1.0 ], "1": [ 1.0 ], "2": [ 1.0 ], "3": [ 1.0 ], "4": [ 1.0 ], "5": [ 1.0 ], "6": [ 1.0 ], "7": [ 1.0 ], "8": [ 1.0 ], "9": [ 1.0 ], "10": [ 1.0 ], "11": [ 1.0 ], "12": [ 1.0 ], "13": [ 1.0 ], "14": [ 1.0 ], "15": [ 1.0 ], "16": [ 1.0 ], "17": [ 1.0 ], "18": [ 1.0 ], "19": [ 1.0 ], "20": [ 1.0 ], "21": [ 1.0 ], "22": [ 1.0 ] } - }, - "clips": { - "default": { - "loop": false, - "joint_clips": {}, - "events": {} - }, - "moving": { - "loop": true, - "joint_clips": { - "ring": [ - { - "variable": "offset_y", - "type": "uniform", - "interpolation": "linear", - "samples": [ -0.0625, -0.0442, 0, 0.0442, 0.0625, 0.0442, 0, -0.0442 ] - }, - { - "variable": "axis_y", - "type": "uniform", - "interpolation": "nearest", - "samples": [ 1 ] - }, - { - "variable": "angle", - "type": "uniform", - "interpolation": "linear", - "samples": [ - 0, 120, 240 - ] - } - ] - }, - "events": { - - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/asms/block/inversion_pillar.json b/src/main/resources/assets/bloodmagic/asms/block/inversion_pillar.json deleted file mode 100644 index 2ebde5e6..00000000 --- a/src/main/resources/assets/bloodmagic/asms/block/inversion_pillar.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parameters": { - "clip_time": [ "-/", "#offset", "#cycle_length" ] - }, - "clips": { - "moving": [ "apply", "bloodmagic:block/pillar_mid@moving", "#clip_time" ] - }, - "states": [ - "moving" - ], - "transitions": {}, - "start_state": "moving" -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/activation_crystal.json b/src/main/resources/assets/bloodmagic/blockstates/activation_crystal.json deleted file mode 100644 index b5535ec3..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/activation_crystal.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "weak": { - "textures": { - "layer0": "bloodmagic:items/activationCrystalWeak" - } - }, - "awakened": { - "textures": { - "layer0": "bloodmagic:items/activationCrystalAwakened" - } - }, - "creative": { - "textures": { - "layer0": "bloodmagic:items/activationCrystalCreative" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/alchemic_vial.json b/src/main/resources/assets/bloodmagic/blockstates/alchemic_vial.json deleted file mode 100644 index 74f8af30..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/alchemic_vial.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/Alchemic_Liquid", - "layer1": "bloodmagic:items/Alchemic_Vial", - "layer2": "bloodmagic:items/Alchemic_Ribbon" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/alchemy_array.json b/src/main/resources/assets/bloodmagic/blockstates/alchemy_array.json deleted file mode 100644 index 03ba5c90..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/alchemy_array.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "normal": { - "model": "bloodmagic:BlockAlchemyArray", - "textures": { - "all": "bloodmagic:models/AlchemyArrays/StupidArray" - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/alchemy_table.json b/src/main/resources/assets/bloodmagic/blockstates/alchemy_table.json deleted file mode 100644 index d1d44534..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/alchemy_table.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "bloodmagic:ModelAlchemyTable.obj", - "custom": { "flip-v": true }, - "transform" : "forge:default-block", - "uvlock": true - }, - "variants": { - "direction": { - "down": { - }, - "up": { - }, - "north": { - "transform": { - "rotation": {"y": -90} - } - }, - "south": { - "transform": { - "rotation": {"y": 90} - } - }, - "east": { - "transform": { - "rotation": {"y": 180} - } - }, - "west": { - - } - }, - "invisible": { - "true": { - "model": "cube_all", - "textures": { - "all": "bloodmagic:blocks/empty" - } - }, - "false": { - - } - }, - "inventory": [{ - - }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/altar.json b/src/main/resources/assets/bloodmagic/blockstates/altar.json deleted file mode 100644 index 24191a55..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/altar.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "bloodmagic:BlockAltar.obj", - "custom": { "flip-v": true }, - "transform" : "forge:default-block" - }, - "variants": { - "normal": [{ - - }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/altar_maker.json b/src/main/resources/assets/bloodmagic/blockstates/altar_maker.json deleted file mode 100644 index d9853286..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/altar_maker.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "altarmaker": { - "textures": { - "layer0": "bloodmagic:items/AltarMaker" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/arcane_ashes.json b/src/main/resources/assets/bloodmagic/blockstates/arcane_ashes.json deleted file mode 100644 index df9edd3c..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/arcane_ashes.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "arcaneashes": { - "textures": { - "layer0": "bloodmagic:items/ArcaneAshes" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/base_fluid_filter.json b/src/main/resources/assets/bloodmagic/blockstates/base_fluid_filter.json deleted file mode 100644 index 430e8f47..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/base_fluid_filter.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "exact": { - "textures": { - "layer0": "bloodmagic:items/FluidRouterFilterExact" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/base_item_filter.json b/src/main/resources/assets/bloodmagic/blockstates/base_item_filter.json deleted file mode 100644 index afe3e19d..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/base_item_filter.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "exact": { - "textures": { - "layer0": "bloodmagic:items/ItemRouterFilterExact" - } - }, - "ignorenbt": { - "textures": { - "layer0": "bloodmagic:items/ItemRouterFilterIgnoreNBT" - } - }, - "moditems": { - "textures": { - "layer0": "bloodmagic:items/ItemRouterFilterModItems" - } - }, - "oredict": { - "textures": { - "layer0": "bloodmagic:items/ItemRouterFilterOreDict" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_altar.json b/src/main/resources/assets/bloodmagic/blockstates/blood_altar.json new file mode 100644 index 00000000..1a3b5045 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_altar.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "bloodmagic:blood_altar.obj", + "custom": { + "flip-v": true + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + {} + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_light.json b/src/main/resources/assets/bloodmagic/blockstates/blood_light.json deleted file mode 100644 index c67139da..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/blood_light.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "normal": { - "model": "bloodmagic:BlockBloodLight", - "textures": { - "all": "bloodmagic:blocks/BlockBloodLight" - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_orb.json b/src/main/resources/assets/bloodmagic/blockstates/blood_orb.json deleted file mode 100644 index a5c42df5..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/blood_orb.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "weak": { - "textures": { - "layer0": "bloodmagic:items/weakbloodorb" - } - }, - "apprentice": { - "textures": { - "layer0": "bloodmagic:items/apprenticebloodorb" - } - }, - "magician": { - "textures": { - "layer0": "bloodmagic:items/magicianbloodorb" - } - }, - "master": { - "textures": { - "layer0": "bloodmagic:items/masterbloodorb" - } - }, - "archmage": { - "textures": { - "layer0": "bloodmagic:items/archmagebloodorb" - } - }, - "transcendent": { - "textures": { - "layer0": "bloodmagic:items/transcendentbloodorb" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune.json deleted file mode 100644 index 80973833..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/blood_rune.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "blank": { - "textures": { - "all": "bloodmagic:blocks/BlankRune" - } - }, - "speed": { - "textures": { - "all": "bloodmagic:blocks/SpeedRune" - } - }, - "efficiency": { - "textures": { - "all": "bloodmagic:blocks/EfficiencyRune" - } - }, - "sacrifice": { - "textures": { - "all": "bloodmagic:blocks/RuneOfSacrifice" - } - }, - "self_sacrifice": { - "textures": { - "all": "bloodmagic:blocks/RuneOfSelfSacrifice" - } - }, - "displacement": { - "textures": { - "all": "bloodmagic:blocks/DislocationRune" - } - }, - "capacity": { - "textures": { - "all": "bloodmagic:blocks/AltarCapacityRune" - } - }, - "augmented_capacity": { - "textures": { - "all": "bloodmagic:blocks/BetterCapacityRune" - } - }, - "orb": { - "textures": { - "all": "bloodmagic:blocks/OrbCapacityRune" - } - }, - "acceleration": { - "textures": { - "all": "bloodmagic:blocks/AccelerationRune" - } - }, - "charging": { - "textures": { - "all": "bloodmagic:blocks/ChargingRune" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_acceleration.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_acceleration.json new file mode 100644 index 00000000..61a00210 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_acceleration.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_acceleration" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_augmented_capacity.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_augmented_capacity.json new file mode 100644 index 00000000..c00d2f66 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_augmented_capacity.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_augmented_capacity" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_blank.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_blank.json new file mode 100644 index 00000000..8ff6a295 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_blank.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_blank" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_capacity.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_capacity.json new file mode 100644 index 00000000..b40b4ed0 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_capacity.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_capacity" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_charging.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_charging.json new file mode 100644 index 00000000..934fc499 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_charging.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_charging" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_displacement.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_displacement.json new file mode 100644 index 00000000..849bff07 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_displacement.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_displacement" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_efficiency.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_efficiency.json new file mode 100644 index 00000000..3e5a2d65 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_efficiency.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_efficiency" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_orb.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_orb.json new file mode 100644 index 00000000..0d6d1984 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_orb.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_orb" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_sacrifice.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_sacrifice.json new file mode 100644 index 00000000..8cb6f9a9 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_sacrifice.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_sacrifice" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_self_sacrifice.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_self_sacrifice.json new file mode 100644 index 00000000..1287f246 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_self_sacrifice.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_self_sacrifice" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_rune_speed.json b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_speed.json new file mode 100644 index 00000000..6d8a5bea --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/blood_rune_speed.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/blood_rune/blood_rune_speed" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_shard.json b/src/main/resources/assets/bloodmagic/blockstates/blood_shard.json deleted file mode 100644 index 4cf72004..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/blood_shard.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "weak": { - "textures": { - "layer0": "bloodmagic:items/WeakBloodShard" - } - }, - "demonic": { - "textures": { - "layer0": "bloodmagic:items/DemonBloodShard" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/blood_tank.json b/src/main/resources/assets/bloodmagic/blockstates/blood_tank.json deleted file mode 100644 index d71d03f6..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/blood_tank.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { "all": "bloodmagic:blocks/BloodTank" }, - "model": "bloodmagic:BlockBloodTank", - "uvlock": true - }, - "variants": { - "tier": { - "0": {}, - "1": {}, - "2": {}, - "3": {}, - "4": {}, - "5": {}, - "6": {}, - "7": {}, - "8": {}, - "9": {}, - "10": {}, - "11": {}, - "12": {}, - "13": {}, - "14": {}, - "15": {} - }, - "inventory": [{}] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/bloodstone_brick.json b/src/main/resources/assets/bloodmagic/blockstates/bloodstone_brick.json new file mode 100644 index 00000000..666e4b56 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/bloodstone_brick.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/bloodstone_brick" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/bloodstone_tile.json b/src/main/resources/assets/bloodmagic/blockstates/bloodstone_tile.json new file mode 100644 index 00000000..2dc29fcf --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/bloodstone_tile.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/bloodstone_tile" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/bound_axe.json b/src/main/resources/assets/bloodmagic/blockstates/bound_axe.json deleted file mode 100644 index dc27b28a..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/bound_axe.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "active": { - "true": { - "textures": { - "layer0": "bloodmagic:items/BoundAxe_activated" - } - }, - "false": { - "textures": { - "layer0": "bloodmagic:items/Item_deactivated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/bound_pickaxe.json b/src/main/resources/assets/bloodmagic/blockstates/bound_pickaxe.json deleted file mode 100644 index 6acaacca..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/bound_pickaxe.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "active": { - "true": { - "textures": { - "layer0": "bloodmagic:items/BoundPickaxe_activated" - } - }, - "false": { - "textures": { - "layer0": "bloodmagic:items/Item_deactivated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/bound_shovel.json b/src/main/resources/assets/bloodmagic/blockstates/bound_shovel.json deleted file mode 100644 index adba2311..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/bound_shovel.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "active": { - "true": { - "textures": { - "layer0": "bloodmagic:items/BoundShovel_activated" - } - }, - "false": { - "textures": { - "layer0": "bloodmagic:items/Item_deactivated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/bound_sword.json b/src/main/resources/assets/bloodmagic/blockstates/bound_sword.json deleted file mode 100644 index ae592f33..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/bound_sword.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "active": { - "true": { - "textures": { - "layer0": "bloodmagic:items/BoundSword_activated" - } - }, - "false": { - "textures": { - "layer0": "bloodmagic:items/Item_deactivated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/component.json b/src/main/resources/assets/bloodmagic/blockstates/component.json deleted file mode 100644 index 898f699e..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/component.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "frame_part": { - "textures": { - "layer0": "bloodmagic:items/ComponentFrameParts" - } - }, - "sand_iron": { - "textures": { - "layer0": "bloodmagic:items/IronSand" - } - }, - "sand_gold": { - "textures": { - "layer0": "bloodmagic:items/GoldSand" - } - }, - "sand_coal": { - "textures": { - "layer0": "bloodmagic:items/CoalSand" - } - }, - "plant_oil": { - "textures": { - "layer0": "bloodmagic:items/PlantOil" - } - }, - "sulfur": { - "textures": { - "layer0": "bloodmagic:items/Sulfur" - } - }, - "saltpeter": { - "textures": { - "layer0": "bloodmagic:items/Saltpeter" - } - }, - "neuro_toxin": { - "textures": { - "layer0": "bloodmagic:items/NeuroToxin" - } - }, - "antiseptic": { - "textures": { - "layer0": "bloodmagic:items/Antiseptic" - } - }, - "catalyst_length_1": { - "textures": { - "layer0": "bloodmagic:items/MundaneLengtheningCatalyst" - } - }, - "catalyst_power_1": { - "textures": { - "layer0": "bloodmagic:items/MundanePowerCatalyst" - } - }, - "reagent_water": { - "textures": { - "layer0": "bloodmagic:items/ReagentWater" - } - }, - "reagent_lava": { - "textures": { - "layer0": "bloodmagic:items/ReagentLava" - } - }, - "reagent_air": { - "textures": { - "layer0": "bloodmagic:items/ReagentAir" - } - }, - "reagent_fast_miner": { - "textures": { - "layer0": "bloodmagic:items/ReagentFastMiner" - } - }, - "reagent_void": { - "textures": { - "layer0": "bloodmagic:items/ReagentVoid" - } - }, - "reagent_growth": { - "textures": { - "layer0": "bloodmagic:items/ReagentGrowth" - } - }, - "reagent_affinity": { - "textures": { - "layer0": "bloodmagic:items/ReagentAffinity" - } - }, - "reagent_sight": { - "textures": { - "layer0": "bloodmagic:items/ReagentSight" - } - }, - "reagent_binding": { - "textures": { - "layer0": "bloodmagic:items/ReagentBinding" - } - }, - "reagent_suppression": { - "textures": { - "layer0": "bloodmagic:items/ReagentSuppression" - } - }, - "reagent_blood_light": { - "textures": { - "layer0": "bloodmagic:items/ReagentBloodLight" - } - }, - "reagent_magnetism": { - "textures": { - "layer0": "bloodmagic:items/ReagentMagnetism" - } - }, - "reagent_haste": { - "textures": { - "layer0": "bloodmagic:items/ReagentHaste" - } - }, - "reagent_compression": { - "textures": { - "layer0": "bloodmagic:items/ReagentCompression" - } - }, - "reagent_bridge": { - "textures": { - "layer0": "bloodmagic:items/ReagentBridge" - } - }, - "reagent_severance": { - "textures": { - "layer0": "bloodmagic:items/ReagentSeverance" - } - }, - "reagent_teleposition": { - "textures": { - "layer0": "bloodmagic:items/ReagentTeleposition" - } - }, - "reagent_transposition": { - "textures": { - "layer0": "bloodmagic:items/ReagentTransposition" - } - }, - "reagent_holding": { - "textures": { - "layer0": "bloodmagic:items/ReagentHolding" - } - }, - "reagent_claw": { - "textures": { - "layer0": "bloodmagic:items/ReagentClaw" - } - }, - "reagent_bounce": { - "textures": { - "layer0": "bloodmagic:items/ReagentBounce" - } - }, - "reagent_frost": { - "textures": { - "layer0": "bloodmagic:items/ReagentFrost" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/cutting_fluid.json b/src/main/resources/assets/bloodmagic/blockstates/cutting_fluid.json deleted file mode 100644 index 0d733140..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/cutting_fluid.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "basic": { - "textures": { - "layer0": "bloodmagic:items/BasicCuttingFluid" - } - }, - "explosive": { - "textures": { - "layer0": "bloodmagic:items/ExplosivePowder" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/dagger_of_sacrifice.json b/src/main/resources/assets/bloodmagic/blockstates/dagger_of_sacrifice.json deleted file mode 100644 index 5cae9434..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/dagger_of_sacrifice.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/DaggerOfSacrifice" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/decorative_brick.json b/src/main/resources/assets/bloodmagic/blockstates/decorative_brick.json deleted file mode 100644 index 00970ac6..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/decorative_brick.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "bloodstone_tile": { - "textures": { - "all": "bloodmagic:blocks/LargeBloodStoneBrick" - } - }, - "bloodstone_brick": { - "textures": { - "all": "bloodmagic:blocks/BloodStoneBrick" - } - }, - "crystal_tile": { - "textures": { - "all": "bloodmagic:blocks/shardcluster" - } - }, - "crystal_brick": { - "textures": { - "all": "bloodmagic:blocks/shardclusterbrick" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_1.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_1.json deleted file mode 100644 index bff693ef..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_1.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type=brick1_raw": [ - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick1"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick2"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick3"}} - ], - "type=brick1_corrosive": [ - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick1_c"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick2_c"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick3_c"}} - ], - "type=brick1_destructive": [ - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick1_d"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick2_d"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick3_d"}} - ], - "type=brick1_vengeful": [ - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick1_v"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick2_v"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick3_v"}} - ], - "type=brick1_steadfast": [ - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick1_s"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick2_s"}}, - {"textures": {"all": "bloodmagic:blocks/dungeon/dungeon_brick3_s"}} - ] - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_2.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_2.json deleted file mode 100644 index deef552c..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_2.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "smallbrick_raw": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_smallbrick" - } - }, - "smallbrick_corrosive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_smallbrick_c" - } - }, - "smallbrick_destructive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_smallbrick_d" - } - }, - "smallbrick_vengeful": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_smallbrick_v" - } - }, - "smallbrick_steadfast": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_smallbrick_s" - } - }, - "tile_raw": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tile" - } - }, - "tile_corrosive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tile_c" - } - }, - "tile_destructive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tile_d" - } - }, - "tile_vengeful": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tile_v" - } - }, - "tile_steadfast": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tile_s" - } - }, - "tilespecial_raw": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tilespecial" - } - }, - "tilespecial_corrosive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tilespecial_c" - } - }, - "tilespecial_destructive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tilespecial_d" - } - }, - "tilespecial_vengeful": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tilespecial_v" - } - }, - "tilespecial_steadfast": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_tilespecial_s" - } - } - } - } -} - diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_corrosive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_corrosive.json new file mode 100644 index 00000000..8845f9a6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_corrosive.json @@ -0,0 +1,30 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_1_corrosive" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_2_corrosive" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_3_corrosive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_corrosive_stairs.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_corrosive_stairs.json new file mode 100644 index 00000000..48580ae8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_corrosive_stairs.json @@ -0,0 +1,225 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "bloodmagic:blocks/dungeon/demon_brick_1_corrosive", + "top": "bloodmagic:blocks/dungeon/demon_brick_1_corrosive", + "side": "bloodmagic:blocks/dungeon/demon_brick_1_corrosive" + }, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "normal": [ + {} + ], + "inventory": [ + {} + ] + } +} diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_destructive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_destructive.json new file mode 100644 index 00000000..16dd9cd1 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_destructive.json @@ -0,0 +1,30 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_1_destructive" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_2_destructive" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_3_destructive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_destructive_stairs.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_destructive_stairs.json new file mode 100644 index 00000000..29f21f2d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_destructive_stairs.json @@ -0,0 +1,225 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "bloodmagic:blocks/dungeon/demon_brick_1_destructive", + "top": "bloodmagic:blocks/dungeon/demon_brick_1_destructive", + "side": "bloodmagic:blocks/dungeon/demon_brick_1_destructive" + }, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "normal": [ + {} + ], + "inventory": [ + {} + ] + } +} diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_raw.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_raw.json new file mode 100644 index 00000000..02e934dd --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_raw.json @@ -0,0 +1,30 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_1_raw" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_2_raw" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_3_raw" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_raw_stairs.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_raw_stairs.json new file mode 100644 index 00000000..e5923dc3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_raw_stairs.json @@ -0,0 +1,225 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "bloodmagic:blocks/dungeon/demon_brick_1_raw", + "top": "bloodmagic:blocks/dungeon/demon_brick_1_raw", + "side": "bloodmagic:blocks/dungeon/demon_brick_1_raw" + }, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "normal": [ + {} + ], + "inventory": [ + {} + ] + } +} diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_corrosive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_corrosive.json new file mode 100644 index 00000000..d10adb35 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_corrosive.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_small_corrosive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_destructive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_destructive.json new file mode 100644 index 00000000..d8814ea5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_destructive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_small_destructive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_raw.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_raw.json new file mode 100644 index 00000000..80a1f8b5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_raw.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_small_raw" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_steadfast.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_steadfast.json new file mode 100644 index 00000000..0c5c0ec5 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_steadfast.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_small_steadfast" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_vengeful.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_vengeful.json new file mode 100644 index 00000000..d4343a09 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_small_vengeful.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_small_vengeful" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_steadfast.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_steadfast.json new file mode 100644 index 00000000..4a655b98 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_steadfast.json @@ -0,0 +1,30 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_1_steadfast" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_2_steadfast" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_3_steadfast" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_steadfast_stairs.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_steadfast_stairs.json new file mode 100644 index 00000000..2b63b93a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_steadfast_stairs.json @@ -0,0 +1,225 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "bloodmagic:blocks/dungeon/demon_brick_1_steadfast", + "top": "bloodmagic:blocks/dungeon/demon_brick_1_steadfast", + "side": "bloodmagic:blocks/dungeon/demon_brick_1_steadfast" + }, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "normal": [ + {} + ], + "inventory": [ + {} + ] + } +} diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_vengeful.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_vengeful.json new file mode 100644 index 00000000..44f900a7 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_vengeful.json @@ -0,0 +1,30 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_1_vengeful" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_2_vengeful" + } + }, + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_3_vengeful" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_brick_vengeful_stairs.json b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_vengeful_stairs.json new file mode 100644 index 00000000..196922f8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_brick_vengeful_stairs.json @@ -0,0 +1,225 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "bloodmagic:blocks/dungeon/demon_brick_1_vengeful", + "top": "bloodmagic:blocks/dungeon/demon_brick_1_vengeful", + "side": "bloodmagic:blocks/dungeon/demon_brick_1_vengeful" + }, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "facing=east,half=bottom,shape=straight": { + "model": "stairs" + }, + "facing=west,half=bottom,shape=straight": { + "model": "stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=straight": { + "model": "stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=straight": { + "model": "stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "outer_stairs" + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "outer_stairs" + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "outer_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "inner_stairs" + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=east,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 270, + "uvlock": true + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 90, + "uvlock": true + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "inner_stairs" + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "inner_stairs", + "y": 180, + "uvlock": true + }, + "facing=east,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=straight": { + "model": "stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=outer_right": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=outer_left": { + "model": "outer_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=east,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=west,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "facing=south,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=north,half=top,shape=inner_right": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=east,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "uvlock": true + }, + "facing=west,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 180, + "uvlock": true + }, + "facing=south,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 90, + "uvlock": true + }, + "facing=north,half=top,shape=inner_left": { + "model": "inner_stairs", + "x": 180, + "y": 270, + "uvlock": true + }, + "normal": [ + {} + ], + "inventory": [ + {} + ] + } +} diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_crucible.json b/src/main/resources/assets/bloodmagic/blockstates/demon_crucible.json deleted file mode 100644 index 6a1615be..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_crucible.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "bloodmagic:BlockDemonCrucible.obj", - "custom": { "flip-v": true }, - "transform" : "forge:default-block" - }, - "variants": { - "normal": [{ - - }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_crystal.json b/src/main/resources/assets/bloodmagic/blockstates/demon_crystal.json deleted file mode 100644 index 792e272f..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_crystal.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { "#crystal" : "bloodmagic:models/DefaultCrystal" }, - "model": "bloodmagic:crystal/Crystal1.obj", - "custom": { "flip-v": true }, - "transform" : "forge:default-block" - }, - "variants": { - "attached": { - "down": { - "transform": { - "rotation": {"x": 180} - } - }, - "up": { - }, - "north": { - "transform": { - "rotation": {"x": -90} - } - }, - "south": { - "transform": { - "rotation": {"x": 90} - } - }, - "east": { - "transform": { - "rotation": {"z": -90} - } - }, - "west": { - "transform": { - "rotation": {"z": 90} - } - } - }, - "type": { - "default": { - "textures": { - "#crystal" : "bloodmagic:models/DefaultCrystal" - } - }, - "corrosive": { - "textures": { - "#crystal" : "bloodmagic:models/CorrosiveCrystal" - } - }, - "destructive": { - "textures": { - "#crystal" : "bloodmagic:models/DestructiveCrystal" - } - }, - "vengeful": { - "textures": { - "#crystal" : "bloodmagic:models/VengefulCrystal" - } - }, - "steadfast": { - "textures": { - "#crystal" : "bloodmagic:models/SteadfastCrystal" - } - } - }, - "age": { - "0": { - - }, - "1": { - "submodel": "bloodmagic:crystal/Crystal2.obj" - }, - "2": { - "submodel": { - "crystal2": {"model": "bloodmagic:crystal/Crystal2.obj"}, - "crystal3": {"model": "bloodmagic:crystal/Crystal3.obj"} - } - }, - "3": { - "submodel": { - "crystal2": {"model": "bloodmagic:crystal/Crystal2.obj"}, - "crystal3": {"model": "bloodmagic:crystal/Crystal3.obj"}, - "crystal4": {"model": "bloodmagic:crystal/Crystal4.obj"} - } - }, - "4": { - "submodel": { - "crystal2": {"model": "bloodmagic:crystal/Crystal2.obj"}, - "crystal3": {"model": "bloodmagic:crystal/Crystal3.obj"}, - "crystal4": {"model": "bloodmagic:crystal/Crystal4.obj"}, - "crystal5": {"model": "bloodmagic:crystal/Crystal5.obj"} - } - }, - "5": { - "submodel": { - "crystal2": {"model": "bloodmagic:crystal/Crystal2.obj"}, - "crystal3": {"model": "bloodmagic:crystal/Crystal3.obj"}, - "crystal4": {"model": "bloodmagic:crystal/Crystal4.obj"}, - "crystal5": {"model": "bloodmagic:crystal/Crystal5.obj"}, - "crystal6": {"model": "bloodmagic:crystal/Crystal6.obj"} - } - }, - "6": { - "submodel": { - "crystal2": {"model": "bloodmagic:crystal/Crystal2.obj"}, - "crystal3": {"model": "bloodmagic:crystal/Crystal3.obj"}, - "crystal4": {"model": "bloodmagic:crystal/Crystal4.obj"}, - "crystal5": {"model": "bloodmagic:crystal/Crystal5.obj"}, - "crystal6": {"model": "bloodmagic:crystal/Crystal6.obj"}, - "crystal7": {"model": "bloodmagic:crystal/Crystal7.obj"} - } - } - }, - "inventory": [{ - "variants": { - "type": { - "default": { - "textures": { - "#crystal" : "bloodmagic:models/DefaultCrystal" - } - }, - "corrosive": { - "textures": { - "#crystal" : "bloodmagic:models/CorrosiveCrystal" - } - }, - "destructive": { - "textures": { - "#crystal" : "bloodmagic:models/DestructiveCrystal" - } - }, - "vengeful": { - "textures": { - "#crystal" : "bloodmagic:models/VengefulCrystal" - } - }, - "steadfast": { - "textures": { - "#crystal" : "bloodmagic:models/SteadfastCrystal" - } - } - } - } - }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_crystallizer.json b/src/main/resources/assets/bloodmagic/blockstates/demon_crystallizer.json deleted file mode 100644 index ef8d9802..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_crystallizer.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "bloodmagic:BlockDemonCrystallizer.obj", - "custom": { "flip-v": true }, - "transform" : "forge:default-block" - }, - "variants": { - "normal": [{ - - }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_extras.json b/src/main/resources/assets/bloodmagic/blockstates/demon_extras.json deleted file mode 100644 index 4854590c..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_extras.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "stone_raw": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_stone" - } - }, - "stone_corrosive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_stone_c" - } - }, - "stone_destructive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_stone_d" - } - }, - "stone_vengeful": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_stone_v" - } - }, - "stone_steadfast": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_stone_s" - } - }, - "polished_raw": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_polished" - } - }, - "polished_corrosive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_polished_c" - } - }, - "polished_destructive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_polished_d" - } - }, - "polished_vengeful": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_polished_v" - } - }, - "polished_steadfast": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_polished_s" - } - }, - "metal_raw": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_metal" - } - }, - "metal_corrosive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_metal_c" - } - }, - "metal_destructive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_metal_d" - } - }, - "metal_vengeful": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_metal_v" - } - }, - "metal_steadfast": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_metal_s" - } - } - } - } -} - diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_light.json b/src/main/resources/assets/bloodmagic/blockstates/demon_light.json deleted file mode 100644 index 171bdd39..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_light.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "raw": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_eye" - } - }, - "corrosive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_eye_c" - } - }, - "destructive": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_eye_d" - } - }, - "vengeful": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_eye_v" - } - }, - "steadfast": { - "textures": { - "all": "bloodmagic:blocks/dungeon/dungeon_eye_s" - } - } - } - } -} - diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_metal_corrosive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_corrosive.json new file mode 100644 index 00000000..1bba8485 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_corrosive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_metal_corrosive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_metal_destructive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_destructive.json new file mode 100644 index 00000000..b3fbc47d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_destructive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_metal_destructive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_metal_raw.json b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_raw.json new file mode 100644 index 00000000..6205fff4 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_raw.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_metal_raw" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_metal_steadfast.json b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_steadfast.json new file mode 100644 index 00000000..1e261251 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_steadfast.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_metal_steadfast" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_metal_vengeful.json b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_vengeful.json new file mode 100644 index 00000000..b213e41d --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_metal_vengeful.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_metal_vengeful" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_1.json b/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_1.json deleted file mode 100644 index c32dd8ac..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_1.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "minecraft:cube", - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart", - "side": "bloodmagic:blocks/dungeon/dungeon_pillar", - "particle": "#end" - } - }, - "variants": { - "axis": { - "x": { - "model": "bloodmagic:BlockPillarX" - }, - "y": { - "model": "minecraft:cube_bottom_top", - "textures": { - "top": "#end", - "bottom": "#end" - } - }, - "z": { - "model": "bloodmagic:BlockPillarZ" - } - }, - "type": { - "raw": { - - }, - "corrosive": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_c", - "side": "bloodmagic:blocks/dungeon/dungeon_pillar_c" - } - }, - "destructive": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_d", - "side": "bloodmagic:blocks/dungeon/dungeon_pillar_d" - } - }, - "vengeful": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_v", - "side": "bloodmagic:blocks/dungeon/dungeon_pillar_v" - } - }, - "steadfast": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_s", - "side": "bloodmagic:blocks/dungeon/dungeon_pillar_s" - } - } - }, - "inventory": [{ }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_2.json b/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_2.json deleted file mode 100644 index 9285da20..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_2.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "minecraft:cube", - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart", - "side": "bloodmagic:blocks/dungeon/dungeon_pillarspecial", - "particle": "#end" - } - }, - "variants": { - "axis": { - "x": { - "model": "bloodmagic:BlockPillarX" - }, - "y": { - "model": "minecraft:cube_bottom_top", - "textures": { - "top": "#end", - "bottom": "#end" - } - }, - "z": { - "model": "bloodmagic:BlockPillarZ" - } - }, - "type": { - "raw": { - - }, - "corrosive": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_c", - "side": "bloodmagic:blocks/dungeon/dungeon_pillarspecial_c" - } - }, - "destructive": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_d", - "side": "bloodmagic:blocks/dungeon/dungeon_pillarspecial_d" - } - }, - "vengeful": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_v", - "side": "bloodmagic:blocks/dungeon/dungeon_pillarspecial_v" - } - }, - "steadfast": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_s", - "side": "bloodmagic:blocks/dungeon/dungeon_pillarspecial_s" - } - } - }, - "inventory": [{ }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_1.json b/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_1.json deleted file mode 100644 index 01b3ebae..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_1.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "minecraft:cube", - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart", - "sideBottom": "bloodmagic:blocks/dungeon/dungeon_pillarbottom", - "sideTop": "bloodmagic:blocks/dungeon/dungeon_pillartop", - "particle": "#end" - } - }, - "variants": { - "facing": { - "down": { - "model": "minecraft:cube_bottom_top", - "textures": { - "top": "#end", - "bottom": "#end", - "side": "#sideBottom" - } - }, - "up": { - "model": "minecraft:cube_bottom_top", - "textures": { - "top": "#end", - "bottom": "#end", - "side": "#sideTop" - } - }, - "north": { - "model": "bloodmagic:BlockPillarCapNorth" - }, - "south": { - "model": "bloodmagic:BlockPillarCapSouth" - }, - "west": { - "model": "bloodmagic:BlockPillarCapWest" - }, - "east": { - "model": "bloodmagic:BlockPillarCapEast" - } - }, - "type": { - "raw": { - - }, - "corrosive": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_c", - "sideBottom": "bloodmagic:blocks/dungeon/dungeon_pillarbottom_c", - "sideTop": "bloodmagic:blocks/dungeon/dungeon_pillartop_c" - } - } - }, - "inventory": [{ }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_2.json b/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_2.json deleted file mode 100644 index 68d4de9a..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_2.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "minecraft:cube", - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_d", - "sideBottom": "bloodmagic:blocks/dungeon/dungeon_pillarbottom_d", - "sideTop": "bloodmagic:blocks/dungeon/dungeon_pillartop_d", - "particle": "#end" - } - }, - "variants": { - "facing": { - "down": { - "model": "minecraft:cube_bottom_top", - "textures": { - "top": "#end", - "bottom": "#end", - "side": "#sideBottom" - } - }, - "up": { - "model": "minecraft:cube_bottom_top", - "textures": { - "top": "#end", - "bottom": "#end", - "side": "#sideTop" - } - }, - "north": { - "model": "bloodmagic:BlockPillarCapNorth" - }, - "south": { - "model": "bloodmagic:BlockPillarCapSouth" - }, - "west": { - "model": "bloodmagic:BlockPillarCapWest" - }, - "east": { - "model": "bloodmagic:BlockPillarCapEast" - } - }, - "type": { - "destructive": { - - }, - "vengeful": { - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_v", - "sideBottom": "bloodmagic:blocks/dungeon/dungeon_pillarbottom_v", - "sideTop": "bloodmagic:blocks/dungeon/dungeon_pillartop_v" - } - } - }, - "inventory": [{ }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_3.json b/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_3.json deleted file mode 100644 index e373b095..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_pillar_cap_3.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "minecraft:cube", - "textures": { - "end": "bloodmagic:blocks/dungeon/dungeon_pillarheart_s", - "sideBottom": "bloodmagic:blocks/dungeon/dungeon_pillarbottom_s", - "sideTop": "bloodmagic:blocks/dungeon/dungeon_pillartop_s", - "particle": "#end" - } - }, - "variants": { - "facing": { - "down": { - "model": "minecraft:cube_bottom_top", - "textures": { - "top": "#end", - "bottom": "#end", - "side": "#sideBottom" - } - }, - "up": { - "model": "minecraft:cube_bottom_top", - "textures": { - "top": "#end", - "bottom": "#end", - "side": "#sideTop" - } - }, - "north": { - "model": "bloodmagic:BlockPillarCapNorth" - }, - "south": { - "model": "bloodmagic:BlockPillarCapSouth" - }, - "west": { - "model": "bloodmagic:BlockPillarCapWest" - }, - "east": { - "model": "bloodmagic:BlockPillarCapEast" - } - }, - "type": { - "steadfast": { - - } - }, - "inventory": [{ }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_pylon.json b/src/main/resources/assets/bloodmagic/blockstates/demon_pylon.json deleted file mode 100644 index 4a2b009e..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_pylon.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "bloodmagic:BlockDemonPylon.obj", - "custom": { "flip-v": true }, - "transform" : "forge:default-block" - }, - "variants": { - "normal": [{ - - }] - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_1.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_1.json deleted file mode 100644 index 8bb70c0c..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_1.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "texture1": "bloodmagic:blocks/dungeon/dungeon_pillarheart", - "texture2": "bloodmagic:blocks/dungeon/dungeon_pillarheart_c", - "all": "#texture1", - "bottom": "#all", - "top": "#all", - "side": "#all", - "particle": "#all" - }, - "model": "minecraft:stairs", - "transform" : "forge:default-block" - }, - "variants": { - "facing=east,half=bottom,shape=straight,type=raw": { "model": "minecraft:stairs" }, - "facing=west,half=bottom,shape=straight,type=raw": { "model": "minecraft:stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,type=raw": { "model": "minecraft:stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,type=raw": { "model": "minecraft:stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,type=raw": { "model": "minecraft:outer_stairs" }, - "facing=west,half=bottom,shape=outer_right,type=raw": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,type=raw": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,type=raw": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,type=raw": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,type=raw": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,type=raw": { "model": "minecraft:outer_stairs" }, - "facing=north,half=bottom,shape=outer_left,type=raw": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,type=raw": { "model": "minecraft:inner_stairs" }, - "facing=west,half=bottom,shape=inner_right,type=raw": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,type=raw": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,type=raw": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,type=raw": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,type=raw": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,type=raw": { "model": "minecraft:inner_stairs" }, - "facing=north,half=bottom,shape=inner_left,type=raw": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight,type=raw": { "model": "minecraft:stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,type=raw": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,type=raw": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,type=raw": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,type=raw": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,type=raw": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,type=raw": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,type=raw": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,type=raw": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,type=raw": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,type=raw": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,type=raw": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,type=raw": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,type=raw": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,type=raw": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,type=raw": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,type=raw": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,type=raw": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,type=raw": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,type=raw": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, - - "facing=east,half=bottom,shape=straight,type=corrosive": { "model": "minecraft:stairs", "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=straight,type=corrosive": { "model": "minecraft:stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=straight,type=corrosive": { "model": "minecraft:stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=straight,type=corrosive": { "model": "minecraft:stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=bottom,shape=outer_right,type=corrosive": { "model": "minecraft:outer_stairs", "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=outer_right,type=corrosive": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=outer_right,type=corrosive": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=outer_right,type=corrosive": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=bottom,shape=outer_left,type=corrosive": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=outer_left,type=corrosive": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=outer_left,type=corrosive": { "model": "minecraft:outer_stairs", "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=outer_left,type=corrosive": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=bottom,shape=inner_right,type=corrosive": { "model": "minecraft:inner_stairs", "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=inner_right,type=corrosive": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=inner_right,type=corrosive": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=inner_right,type=corrosive": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=bottom,shape=inner_left,type=corrosive": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=inner_left,type=corrosive": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=inner_left,type=corrosive": { "model": "minecraft:inner_stairs", "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=inner_left,type=corrosive": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=straight,type=corrosive": { "model": "minecraft:stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=straight,type=corrosive": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=straight,type=corrosive": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=straight,type=corrosive": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=outer_right,type=corrosive": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=outer_right,type=corrosive": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=outer_right,type=corrosive": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=outer_right,type=corrosive": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=outer_left,type=corrosive": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=outer_left,type=corrosive": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=outer_left,type=corrosive": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=outer_left,type=corrosive": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=inner_right,type=corrosive": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=inner_right,type=corrosive": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=inner_right,type=corrosive": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=inner_right,type=corrosive": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=inner_left,type=corrosive": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=inner_left,type=corrosive": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=inner_left,type=corrosive": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=inner_left,type=corrosive": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "inventory": [{}] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_2.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_2.json deleted file mode 100644 index e3376cc8..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_2.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "texture1": "bloodmagic:blocks/dungeon/dungeon_pillarheart_d", - "texture2": "bloodmagic:blocks/dungeon/dungeon_pillarheart_v", - "all": "#texture1", - "bottom": "#all", - "top": "#all", - "side": "#all", - "particle": "#all" - }, - "model": "minecraft:stairs", - "transform" : "forge:default-block" - }, - "variants": { - "facing=east,half=bottom,shape=straight,type=destructive": { "model": "minecraft:stairs" }, - "facing=west,half=bottom,shape=straight,type=destructive": { "model": "minecraft:stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,type=destructive": { "model": "minecraft:stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,type=destructive": { "model": "minecraft:stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,type=destructive": { "model": "minecraft:outer_stairs" }, - "facing=west,half=bottom,shape=outer_right,type=destructive": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,type=destructive": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,type=destructive": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,type=destructive": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,type=destructive": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,type=destructive": { "model": "minecraft:outer_stairs" }, - "facing=north,half=bottom,shape=outer_left,type=destructive": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,type=destructive": { "model": "minecraft:inner_stairs" }, - "facing=west,half=bottom,shape=inner_right,type=destructive": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,type=destructive": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,type=destructive": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,type=destructive": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,type=destructive": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,type=destructive": { "model": "minecraft:inner_stairs" }, - "facing=north,half=bottom,shape=inner_left,type=destructive": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight,type=destructive": { "model": "minecraft:stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,type=destructive": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,type=destructive": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,type=destructive": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,type=destructive": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,type=destructive": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,type=destructive": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,type=destructive": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,type=destructive": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,type=destructive": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,type=destructive": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,type=destructive": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,type=destructive": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,type=destructive": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,type=destructive": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,type=destructive": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,type=destructive": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,type=destructive": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,type=destructive": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,type=destructive": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, - - "facing=east,half=bottom,shape=straight,type=vengeful": { "model": "minecraft:stairs", "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=straight,type=vengeful": { "model": "minecraft:stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=straight,type=vengeful": { "model": "minecraft:stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=straight,type=vengeful": { "model": "minecraft:stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=bottom,shape=outer_right,type=vengeful": { "model": "minecraft:outer_stairs", "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=outer_right,type=vengeful": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=outer_right,type=vengeful": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=outer_right,type=vengeful": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=bottom,shape=outer_left,type=vengeful": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=outer_left,type=vengeful": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=outer_left,type=vengeful": { "model": "minecraft:outer_stairs", "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=outer_left,type=vengeful": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=bottom,shape=inner_right,type=vengeful": { "model": "minecraft:inner_stairs", "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=inner_right,type=vengeful": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=inner_right,type=vengeful": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=inner_right,type=vengeful": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=bottom,shape=inner_left,type=vengeful": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=bottom,shape=inner_left,type=vengeful": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=bottom,shape=inner_left,type=vengeful": { "model": "minecraft:inner_stairs", "textures": {"all": "#texture2"} }, - "facing=north,half=bottom,shape=inner_left,type=vengeful": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=straight,type=vengeful": { "model": "minecraft:stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=straight,type=vengeful": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=straight,type=vengeful": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=straight,type=vengeful": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=outer_right,type=vengeful": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=outer_right,type=vengeful": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=outer_right,type=vengeful": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=outer_right,type=vengeful": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=outer_left,type=vengeful": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=outer_left,type=vengeful": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=outer_left,type=vengeful": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=outer_left,type=vengeful": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=inner_right,type=vengeful": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=inner_right,type=vengeful": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=inner_right,type=vengeful": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=inner_right,type=vengeful": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=east,half=top,shape=inner_left,type=vengeful": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=west,half=top,shape=inner_left,type=vengeful": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=south,half=top,shape=inner_left,type=vengeful": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true, "textures": {"all": "#texture2"} }, - "facing=north,half=top,shape=inner_left,type=vengeful": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true, "textures": {"all": "#texture2"} }, - "inventory": [{}] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_3.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_3.json deleted file mode 100644 index 51640cbd..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_stairs_3.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "texture1": "bloodmagic:blocks/dungeon/dungeon_pillarheart_s", - "texture2": "bloodmagic:blocks/dungeon/dungeon_pillarheart_c", - "all": "#texture1", - "bottom": "#all", - "top": "#all", - "side": "#all", - "particle": "#all" - }, - "model": "minecraft:stairs", - "transform" : "forge:default-block" - }, - "variants": { - "facing=east,half=bottom,shape=straight,type=steadfast": { "model": "minecraft:stairs" }, - "facing=west,half=bottom,shape=straight,type=steadfast": { "model": "minecraft:stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,type=steadfast": { "model": "minecraft:stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,type=steadfast": { "model": "minecraft:stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,type=steadfast": { "model": "minecraft:outer_stairs" }, - "facing=west,half=bottom,shape=outer_right,type=steadfast": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,type=steadfast": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,type=steadfast": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,type=steadfast": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,type=steadfast": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,type=steadfast": { "model": "minecraft:outer_stairs" }, - "facing=north,half=bottom,shape=outer_left,type=steadfast": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,type=steadfast": { "model": "minecraft:inner_stairs" }, - "facing=west,half=bottom,shape=inner_right,type=steadfast": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,type=steadfast": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,type=steadfast": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,type=steadfast": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,type=steadfast": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,type=steadfast": { "model": "minecraft:inner_stairs" }, - "facing=north,half=bottom,shape=inner_left,type=steadfast": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight,type=steadfast": { "model": "minecraft:stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,type=steadfast": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,type=steadfast": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,type=steadfast": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,type=steadfast": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,type=steadfast": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,type=steadfast": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,type=steadfast": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,type=steadfast": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,type=steadfast": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,type=steadfast": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,type=steadfast": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,type=steadfast": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,type=steadfast": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,type=steadfast": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,type=steadfast": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,type=steadfast": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,type=steadfast": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,type=steadfast": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,type=steadfast": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "inventory": [{}] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_corrosive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_corrosive.json new file mode 100644 index 00000000..d72da25a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_corrosive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_corrosive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_destructive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_destructive.json new file mode 100644 index 00000000..18b394e8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_destructive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_destructive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_corrosive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_corrosive.json new file mode 100644 index 00000000..fc8eecb6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_corrosive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_polished_corrosive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_destructive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_destructive.json new file mode 100644 index 00000000..6ce01f91 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_destructive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_polished_destructive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_raw.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_raw.json new file mode 100644 index 00000000..8007b3c9 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_raw.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_polished_raw" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_steadfast.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_steadfast.json new file mode 100644 index 00000000..9359b4cb --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_steadfast.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_polished_steadfast" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_vengeful.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_vengeful.json new file mode 100644 index 00000000..568fb643 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_polished_vengeful.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_polished_vengeful" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_raw.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_raw.json new file mode 100644 index 00000000..3862ba36 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_raw.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_raw" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_steadfast.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_steadfast.json new file mode 100644 index 00000000..8fe18dba --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_steadfast.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_steadfast" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_stone_vengeful.json b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_vengeful.json new file mode 100644 index 00000000..7676a132 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_stone_vengeful.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_stone_vengeful" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_corrosive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_corrosive.json new file mode 100644 index 00000000..b820ca13 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_corrosive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_corrosive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_destructive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_destructive.json new file mode 100644 index 00000000..90937fe8 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_destructive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_destructive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_raw.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_raw.json new file mode 100644 index 00000000..69295656 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_raw.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_raw" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_corrosive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_corrosive.json new file mode 100644 index 00000000..3d43bcfe --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_corrosive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_special_corrosive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_destructive.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_destructive.json new file mode 100644 index 00000000..fae12190 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_destructive.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_special_destructive" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_raw.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_raw.json new file mode 100644 index 00000000..2fd2698f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_raw.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_special_raw" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_steadfast.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_steadfast.json new file mode 100644 index 00000000..52fbd52f --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_steadfast.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_special_steadfast" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_vengeful.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_vengeful.json new file mode 100644 index 00000000..8e701c37 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_special_vengeful.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_special_vengeful" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_steadfast.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_steadfast.json new file mode 100644 index 00000000..bde86492 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_steadfast.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_steadfast" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_tile_vengeful.json b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_vengeful.json new file mode 100644 index 00000000..e83f6adc --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/demon_tile_vengeful.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": {}, + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [ + { + "textures": { + "all": "bloodmagic:blocks/dungeon/demon_brick_tile_vengeful" + } + } + ], + "inventory": [ + {} + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_wall_1.json b/src/main/resources/assets/bloodmagic/blockstates/demon_wall_1.json deleted file mode 100644 index b7782a56..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_wall_1.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_pillarheart", - "particle": "#wall" - }, - "model": "bloodmagic:BlockBlank", - "transform" : "forge:default-block" - }, - "variants": { - "up": { - "true": {"submodel": "minecraft:wall_post"}, - "false": {} - }, - "north": { - "true": {"submodel": "minecraft:wall_side", "uvlock": true}, - "false": {} - }, - "south": { - "true": {"submodel": "minecraft:wall_side", "uvlock": true, "y": 180}, - "false": {} - }, - "east": { - "true": {"submodel": "minecraft:wall_side", "uvlock": true, "y": 90}, - "false": {} - }, - "west": { - "true": {"submodel": "minecraft:wall_side", "uvlock": true, "y": 270}, - "false": {} - }, - "type": { - "brick_raw": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_brick3" - } - }, - "brick_corrosive": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_brick3_c" - } - }, - "brick_destructive": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_brick3_d" - } - }, - "brick_vengeful": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_brick3_v" - } - }, - "brick_steadfast": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_brick3_s" - } - }, - "smallbrick_raw": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_smallbrick" - } - }, - "smallbrick_corrosive": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_smallbrick_c" - } - }, - "smallbrick_destructive": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_smallbrick_d" - } - }, - "smallbrick_vengeful": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_smallbrick_v" - } - }, - "smallbrick_steadfast": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_smallbrick_s" - } - }, - "large_raw": { - - }, - "large_corrosive": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_pillarheart_c" - } - }, - "large_destructive": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_pillarheart_d" - } - }, - "large_vengeful": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_pillarheart_v" - } - }, - "large_steadfast": { - "textures": { - "wall": "bloodmagic:blocks/dungeon/dungeon_pillarheart_s" - } - } - }, - "inventory": [{}] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/demon_will_gauge.json b/src/main/resources/assets/bloodmagic/blockstates/demon_will_gauge.json deleted file mode 100644 index 33dc70e5..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/demon_will_gauge.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "willgauge": { - "textures": { - "layer0": "bloodmagic:items/DemonWillGauge" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/dimensional_portal.json b/src/main/resources/assets/bloodmagic/blockstates/dimensional_portal.json deleted file mode 100644 index a1ec1631..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/dimensional_portal.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": {}, - "uvlock": true - }, - "variants": { - "meta": { - "0": {"model": "bloodmagic:BlockDimensionalPortalNS"}, - "1": {"model": "bloodmagic:BlockDimensionalPortalEW"}, - "2": {} - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/experience_tome.json b/src/main/resources/assets/bloodmagic/blockstates/experience_tome.json deleted file mode 100644 index 0441a8e1..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/experience_tome.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "experiencetome": { - "textures": { - "layer0": "bloodmagic:items/ExperienceBook" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/icarus_scroll.json b/src/main/resources/assets/bloodmagic/blockstates/icarus_scroll.json deleted file mode 100644 index 748b4003..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/icarus_scroll.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/icarusscroll_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/icarusscroll_activated" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/incense_altar.json b/src/main/resources/assets/bloodmagic/blockstates/incense_altar.json deleted file mode 100644 index f5c0414e..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/incense_altar.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "bloodmagic:BlockIncenseAltar.obj", - "custom": { "flip-v": true }, - "transform" : "forge:default-block" - }, - "variants": { - "normal": [{ - - }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/input_routing_node.json b/src/main/resources/assets/bloodmagic/blockstates/input_routing_node.json deleted file mode 100644 index 01f96406..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/input_routing_node.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { "#node" : "bloodmagic:models/ModelInputRoutingNode" }, - "model": "bloodmagic:routing/ModelRoutingNodeCore.obj", - "transform" : "forge:default-block", - "custom": { "flip-v": true }, - "uvlock": true - }, - "variants": { - "north": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"x": 90} - } - }, - "false": {} - }, - "south": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"x": -90} - } - }, - "false": {} - }, - "east": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": 90} - } - }, - "false": {} - }, - "west": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": -90} - } - }, - "false": {} - }, - "down": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj" - }, - "false": {} - }, - "up": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": -180} - } - }, - "false": {} - }, - "inventory": [{ - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj" - }] - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/inscription_tool.json b/src/main/resources/assets/bloodmagic/blockstates/inscription_tool.json deleted file mode 100644 index 2a14cf73..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/inscription_tool.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "blank": { }, - "water": { - "textures": { - "layer0": "bloodmagic:items/WaterScribeTool" - } - }, - "fire": { - "textures": { - "layer0": "bloodmagic:items/FireScribeTool" - } - }, - "earth": { - "textures": { - "layer0": "bloodmagic:items/EarthScribeTool" - } - }, - "air": { - "textures": { - "layer0": "bloodmagic:items/AirScribeTool" - } - }, - "dusk": { - "textures": { - "layer0": "bloodmagic:items/DuskScribeTool" - } - }, - "dawn": { - "textures": { - "layer0": "bloodmagic:items/DawnScribeTool" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/inversion_pillar.json b/src/main/resources/assets/bloodmagic/blockstates/inversion_pillar.json deleted file mode 100644 index fdf9e93d..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/inversion_pillar.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "texture": "bloodmagic:models/pillar_mid", - "particle": "#texture" - }, - "transform" : "forge:default-block", - "model": "bloodmagic:pillar_mid" - }, - "variants": { - "type": { - "raw": { - "textures": { - - } - }, - "corrosive": { - "textures": { - "texture": "bloodmagic:models/pillar_mid_c" - } - }, - "vengeful": { - "textures": { - "texture": "bloodmagic:models/pillar_mid_v" - } - }, - "destructive": { - "textures": { - "texture": "bloodmagic:models/pillar_mid_d" - } - }, - "steadfast": { - "textures": { - "texture": "bloodmagic:models/pillar_mid_s" - } - } - }, - "static": { - "true": { - "model": "builtin/generated" - }, - "false": { - "model": "bloodmagic:pillar_mid" - } - }, - "inventory": [{}] - } -} - - diff --git a/src/main/resources/assets/bloodmagic/blockstates/inversion_pillar_end.json b/src/main/resources/assets/bloodmagic/blockstates/inversion_pillar_end.json deleted file mode 100644 index 295c172a..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/inversion_pillar_end.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "texture": "bloodmagic:models/pillar_base", - "particle": "#texture" - }, - "transform" : "forge:default-block", - "model": "bloodmagic:pillar_bottom" - }, - "variants": { - "type": { - "raw_bottom": { - "textures": { - - } - }, - "raw_top": { - "textures": { - - }, - "model": "bloodmagic:pillar_top" - }, - "corrosive_bottom": { - "textures": { - "texture": "bloodmagic:models/pillar_base_c" - } - }, - "corrosive_top": { - "textures": { - "texture": "bloodmagic:models/pillar_base_c" - }, - "model": "bloodmagic:pillar_top" - }, - "destructive_bottom": { - "textures": { - "texture": "bloodmagic:models/pillar_base_d" - } - }, - "destructive_top": { - "textures": { - "texture": "bloodmagic:models/pillar_base_d" - }, - "model": "bloodmagic:pillar_top" - }, - "vengeful_bottom": { - "textures": { - "texture": "bloodmagic:models/pillar_base_v" - } - }, - "vengeful_top": { - "textures": { - "texture": "bloodmagic:models/pillar_base_v" - }, - "model": "bloodmagic:pillar_top" - }, - "steadfast_bottom": { - "textures": { - "texture": "bloodmagic:models/pillar_base_s" - } - }, - "steadfast_top": { - "textures": { - "texture": "bloodmagic:models/pillar_base_s" - }, - "model": "bloodmagic:pillar_top" - } - } - } -} - - diff --git a/src/main/resources/assets/bloodmagic/blockstates/item_demon_crystal.json b/src/main/resources/assets/bloodmagic/blockstates/item_demon_crystal.json deleted file mode 100644 index cfa5e17c..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/item_demon_crystal.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "default": { - "textures": { - "layer0": "bloodmagic:items/DefaultCrystal" - } - }, - "corrosive": { - "textures": { - "layer0": "bloodmagic:items/CorrosiveCrystal" - } - }, - "vengeful": { - "textures": { - "layer0": "bloodmagic:items/VengefulCrystal" - } - }, - "destructive": { - "textures": { - "layer0": "bloodmagic:items/DestructiveCrystal" - } - }, - "steadfast": { - "textures": { - "layer0": "bloodmagic:items/SteadfastCrystal" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/item_routing_node.json b/src/main/resources/assets/bloodmagic/blockstates/item_routing_node.json deleted file mode 100644 index 9342eeea..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/item_routing_node.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { "#node" : "bloodmagic:models/modelroutingnode" }, - "model": "bloodmagic:routing/ModelRoutingNodeCore.obj", - "transform" : "forge:default-block", - "custom": { "flip-v": true }, - "uvlock": true - }, - "variants": { - "north": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"x": 90} - } - }, - "false": {} - }, - "south": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"x": -90} - } - }, - "false": {} - }, - "east": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": 90} - } - }, - "false": {} - }, - "west": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": -90} - } - }, - "false": {} - }, - "down": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj" - }, - "false": {} - }, - "up": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": -180} - } - }, - "false": {} - }, - "inventory": [{ - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj" - }] - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/lava_crystal.json b/src/main/resources/assets/bloodmagic/blockstates/lava_crystal.json deleted file mode 100644 index 12890a4d..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/lava_crystal.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/LavaCrystal" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/life_essence.json b/src/main/resources/assets/bloodmagic/blockstates/life_essence.json index 8d673ba3..87b73269 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/life_essence.json +++ b/src/main/resources/assets/bloodmagic/blockstates/life_essence.json @@ -3,7 +3,9 @@ "variants": { "fluid": { "model": "forge:fluid", - "custom": { "fluid": "lifeessence" } + "custom": { + "fluid": "bloodmagic:life_essence" + } } } } \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/living_armour.json b/src/main/resources/assets/bloodmagic/blockstates/living_armour.json deleted file mode 100644 index a20acc7a..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/living_armour.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "armour": { - "head": { - "textures": { - "layer0": "bloodmagic:items/LivingHelmet" - } - }, - "body": { - "textures": { - "layer0": "bloodmagic:items/LivingPlate" - } - }, - "leg": { - "textures": { - "layer0": "bloodmagic:items/LivingLeggings" - } - }, - "feet": { - "textures": { - "layer0": "bloodmagic:items/LivingBoots" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/master_routing_node.json b/src/main/resources/assets/bloodmagic/blockstates/master_routing_node.json deleted file mode 100644 index a10dc2f5..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/master_routing_node.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "bloodmagic:routing/ModelMasterRoutingNodeCore.obj", - "transform" : "forge:default-block", - "custom": { "flip-v": true }, - "uvlock": true - }, - "variants": { - "north": { - "true": { - "submodel": "bloodmagic:routing/ModelMasterRoutingNodeBase.obj", - "transform": { - "rotation": {"x": 90} - } - }, - "false": {} - }, - "south": { - "true": { - "submodel": "bloodmagic:routing/ModelMasterRoutingNodeBase.obj", - "transform": { - "rotation": {"x": -90} - } - }, - "false": {} - }, - "east": { - "true": { - "submodel": "bloodmagic:routing/ModelMasterRoutingNodeBase.obj", - "transform": { - "rotation": {"z": 90} - } - }, - "false": {} - }, - "west": { - "true": { - "submodel": "bloodmagic:routing/ModelMasterRoutingNodeBase.obj", - "transform": { - "rotation": {"z": -90} - } - }, - "false": {} - }, - "down": { - "true": { - "submodel": "bloodmagic:routing/ModelMasterRoutingNodeBase.obj" - }, - "false": {} - }, - "up": { - "true": { - "submodel": "bloodmagic:routing/ModelMasterRoutingNodeBase.obj", - "transform": { - "rotation": {"z": -180} - } - }, - "false": {} - }, - "inventory": [{ - "submodel": "bloodmagic:routing/ModelMasterRoutingNodeBase.obj" - }] - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/mimic.json b/src/main/resources/assets/bloodmagic/blockstates/mimic.json deleted file mode 100644 index ae9c2042..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/mimic.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "nohitbox": { - "textures": { - "all": "bloodmagic:blocks/EtherealOpaqueMimic" - } - }, - "solidopaque": { - "textures": { - "all": "bloodmagic:blocks/SolidOpaqueMimic" - } - }, - "solidclear": { - "textures": { - "all": "bloodmagic:blocks/SolidClearMimic" - } - }, - "solidlight": { - "textures": { - "all": "bloodmagic:blocks/SolidLightMimic" - } - }, - "sentient": { - "textures": { - "all": "bloodmagic:blocks/SentientMimic" - } - } - } - } -} - diff --git a/src/main/resources/assets/bloodmagic/blockstates/monster_soul.json b/src/main/resources/assets/bloodmagic/blockstates/monster_soul.json deleted file mode 100644 index 3212e25c..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/monster_soul.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "raw": { - "textures": { - "layer0": "bloodmagic:items/BaseMonsterSoul" - } - }, - "corrosive": { - "textures": { - "layer0": "bloodmagic:items/BaseMonsterSoul_corrosive" - } - }, - "destructive": { - "textures": { - "layer0": "bloodmagic:items/BaseMonsterSoul_destructive" - } - }, - "vengeful": { - "textures": { - "layer0": "bloodmagic:items/BaseMonsterSoul_vengeful" - } - }, - "steadfast": { - "textures": { - "layer0": "bloodmagic:items/BaseMonsterSoul_steadfast" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/node_router.json b/src/main/resources/assets/bloodmagic/blockstates/node_router.json deleted file mode 100644 index c9a0de99..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/node_router.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/NodeRouter" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/output_routing_node.json b/src/main/resources/assets/bloodmagic/blockstates/output_routing_node.json deleted file mode 100644 index 11d0d9cf..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/output_routing_node.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { "#node" : "bloodmagic:models/ModelOutputRoutingNode" }, - "model": "bloodmagic:routing/ModelRoutingNodeCore.obj", - "transform" : "forge:default-block", - "custom": { "flip-v": true }, - "uvlock": true - }, - "variants": { - "north": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"x": 90} - } - }, - "false": {} - }, - "south": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"x": -90} - } - }, - "false": {} - }, - "east": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": 90} - } - }, - "false": {} - }, - "west": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": -90} - } - }, - "false": {} - }, - "down": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj" - }, - "false": {} - }, - "up": { - "true": { - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj", - "transform": { - "rotation": {"z": -180} - } - }, - "false": {} - }, - "inventory": [{ - "submodel": "bloodmagic:routing/ModelRoutingNodeBase.obj" - }] - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/pack_sacrifice.json b/src/main/resources/assets/bloodmagic/blockstates/pack_sacrifice.json deleted file mode 100644 index 024dc061..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/pack_sacrifice.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/BloodPack" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/pack_self_sacrifice.json b/src/main/resources/assets/bloodmagic/blockstates/pack_self_sacrifice.json deleted file mode 100644 index 024dc061..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/pack_self_sacrifice.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/BloodPack" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/path.json b/src/main/resources/assets/bloodmagic/blockstates/path.json deleted file mode 100644 index 4ebe7070..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/path.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "wood": { - "textures": { - "all": "bloodmagic:blocks/WoodBrickPath" - } - }, - "woodtile": { - "textures": { - "all": "bloodmagic:blocks/WoodTilePath" - } - }, - "stone": { - "textures": { - "all": "bloodmagic:blocks/StoneBrickPath" - } - }, - "stonetile": { - "textures": { - "all": "bloodmagic:blocks/StoneTilePath" - } - }, - "wornstone": { - "textures": { - "all": "bloodmagic:blocks/WornStoneBrickPath" - } - }, - "wornstonetile": { - "textures": { - "all": "bloodmagic:blocks/WornStoneTilePath" - } - }, - "obsidian": { - "textures": { - "all": "bloodmagic:blocks/ObsidianBrickPath" - } - }, - "obsidiantile": { - "textures": { - "all": "bloodmagic:blocks/ObsidianTilePath" - } - } - } - } -} - diff --git a/src/main/resources/assets/bloodmagic/blockstates/phantom.json b/src/main/resources/assets/bloodmagic/blockstates/phantom.json deleted file mode 100644 index 7f83de76..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/phantom.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "bloodmagic:BlockPhantom" } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/points_upgrade.json b/src/main/resources/assets/bloodmagic/blockstates/points_upgrade.json deleted file mode 100644 index 61e07141..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/points_upgrade.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "draft_angelus": { - "textures": { - "layer0": "bloodmagic:items/Coagulant" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/potion_flask.json b/src/main/resources/assets/bloodmagic/blockstates/potion_flask.json deleted file mode 100644 index 3102ac66..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/potion_flask.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "full": { - "true": { - "textures": { - "layer0": "bloodmagic:items/PotionFlask_underlay", - "layer1": "bloodmagic:items/PotionFlask_outline", - "layer2": "bloodmagic:items/PotionFlask_overlay" - } - }, - "false": { - "textures": { - "layer0": "bloodmagic:items/PotionFlask_outline" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/ritual_controller.json b/src/main/resources/assets/bloodmagic/blockstates/ritual_controller.json deleted file mode 100644 index 1b8b489e..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/ritual_controller.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "master": { - "textures": { - "all": "bloodmagic:blocks/MasterRitualStone" - } - }, - "imperfect": { - "textures": { - "all": "bloodmagic:blocks/ImperfectRitualStone" - } - }, - "inverted": { - "textures": { - "all": "bloodmagic:blocks/MasterRitualStone_Inverted" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/ritual_diviner.json b/src/main/resources/assets/bloodmagic/blockstates/ritual_diviner.json deleted file mode 100644 index e60702e6..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/ritual_diviner.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "basic": { - "textures": { - "layer0": "bloodmagic:items/RitualDiviner" - } - }, - "dusk": { - "textures": { - "layer0": "bloodmagic:items/RitualDiviner" - } - }, - "dawn": { - "textures": { - "layer0": "bloodmagic:items/RitualDiviner" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/ritual_reader.json b/src/main/resources/assets/bloodmagic/blockstates/ritual_reader.json deleted file mode 100644 index 6178c0a9..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/ritual_reader.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/RitualTinkerer" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/ritual_stone.json b/src/main/resources/assets/bloodmagic/blockstates/ritual_stone.json deleted file mode 100644 index 9eead647..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/ritual_stone.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "cube_all", - "uvlock": true - }, - "variants": { - "type": { - "blank": { - "textures": { - "all": "bloodmagic:blocks/RitualStone" - } - }, - "water": { - "textures": { - "all": "bloodmagic:blocks/WaterRitualStone" - } - }, - "fire": { - "textures": { - "all": "bloodmagic:blocks/FireRitualStone" - } - }, - "earth": { - "textures": { - "all": "bloodmagic:blocks/EarthRitualStone" - } - }, - "air": { - "textures": { - "all": "bloodmagic:blocks/AirRitualStone" - } - }, - "dusk": { - "textures": { - "all": "bloodmagic:blocks/DuskRitualStone" - } - }, - "dawn": { - "textures": { - "all": "bloodmagic:blocks/LightRitualStone" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/sacrificial_dagger.json b/src/main/resources/assets/bloodmagic/blockstates/sacrificial_dagger.json deleted file mode 100644 index da29bad3..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sacrificial_dagger.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/SacrificialDagger" - } - }, - "creative": { - "textures": { - "layer0": "bloodmagic:items/SacrificialDagger" - } - }, - "ceremonial": { - "textures": { - "layer0": "bloodmagic:items/CeremonialDagger" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sanguine_book.json b/src/main/resources/assets/bloodmagic/blockstates/sanguine_book.json deleted file mode 100644 index 3d241ffb..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sanguine_book.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/SanguineBook" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sentient_armour.json b/src/main/resources/assets/bloodmagic/blockstates/sentient_armour.json deleted file mode 100644 index 92324fbe..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sentient_armour.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "armour": { - "head_default": { - "textures": { - "layer0": "bloodmagic:items/SentientHelmet" - } - }, - "body_default": { - "textures": { - "layer0": "bloodmagic:items/SentientPlate" - } - }, - "leg_default": { - "textures": { - "layer0": "bloodmagic:items/SentientLeggings" - } - }, - "feet_default": { - "textures": { - "layer0": "bloodmagic:items/SentientBoots" - } - }, - "head_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SentientHelmet_corrosive" - } - }, - "body_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SentientPlate_corrosive" - } - }, - "leg_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SentientLeggings_corrosive" - } - }, - "feet_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SentientBoots_corrosive" - } - }, - "head_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SentientHelmet_vengeful" - } - }, - "body_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SentientPlate_vengeful" - } - }, - "leg_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SentientLeggings_vengeful" - } - }, - "feet_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SentientBoots_vengeful" - } - }, - "head_destructive": { - "textures": { - "layer0": "bloodmagic:items/SentientHelmet_destructive" - } - }, - "body_destructive": { - "textures": { - "layer0": "bloodmagic:items/SentientPlate_destructive" - } - }, - "leg_destructive": { - "textures": { - "layer0": "bloodmagic:items/SentientLeggings_destructive" - } - }, - "feet_destructive": { - "textures": { - "layer0": "bloodmagic:items/SentientBoots_destructive" - } - }, - "head_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SentientHelmet_steadfast" - } - }, - "body_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SentientPlate_steadfast" - } - }, - "leg_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SentientLeggings_steadfast" - } - }, - "feet_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SentientBoots_steadfast" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sentient_armour_gem.json b/src/main/resources/assets/bloodmagic/blockstates/sentient_armour_gem.json deleted file mode 100644 index 4a0cabfb..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sentient_armour_gem.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "activated": { - "textures": { - "layer0": "bloodmagic:items/SentientArmourGem_activated" - } - }, - "deactivated": { - "textures": { - "layer0": "bloodmagic:items/SentientArmourGem_deactivated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sentient_axe.json b/src/main/resources/assets/bloodmagic/blockstates/sentient_axe.json deleted file mode 100644 index f93f679a..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sentient_axe.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "type": { - "default": { - "textures": { - "layer0": "bloodmagic:items/SoulAxe" - } - }, - "corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulAxe_corrosive" - } - }, - "destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulAxe_destructive" - } - }, - "vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulAxe_vengeful" - } - }, - "steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulAxe_steadfast" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sentient_bow.json b/src/main/resources/assets/bloodmagic/blockstates/sentient_bow.json deleted file mode 100644 index 4ae06da9..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sentient_bow.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "type": { - "default": { - "model": "bloodmagic:item/ItemSentientBow" - }, - "corrosive": { - "textures": { - "layer0": "bloodmagic:items/SentientBow_corrosive" - } - }, - "destructive": { - "textures": { - "layer0": "bloodmagic:items/SentientBow_destructive" - } - }, - "vengeful": { - "textures": { - "layer0": "bloodmagic:items/SentientBow_vengeful" - } - }, - "steadfast": { - "textures": { - "layer0": "bloodmagic:items/SentientBow_steadfast" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sentient_pickaxe.json b/src/main/resources/assets/bloodmagic/blockstates/sentient_pickaxe.json deleted file mode 100644 index fdf1b224..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sentient_pickaxe.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "type": { - "default": { - "textures": { - "layer0": "bloodmagic:items/SoulPickaxe" - } - }, - "corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulPickaxe_corrosive" - } - }, - "destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulPickaxe_destructive" - } - }, - "vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulPickaxe_vengeful" - } - }, - "steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulPickaxe_steadfast" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sentient_shovel.json b/src/main/resources/assets/bloodmagic/blockstates/sentient_shovel.json deleted file mode 100644 index fe56d96d..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sentient_shovel.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "type": { - "default": { - "textures": { - "layer0": "bloodmagic:items/SoulShovel" - } - }, - "corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulShovel_corrosive" - } - }, - "destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulShovel_destructive" - } - }, - "vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulShovel_vengeful" - } - }, - "steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulShovel_steadfast" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sentient_sword.json b/src/main/resources/assets/bloodmagic/blockstates/sentient_sword.json deleted file mode 100644 index 31620620..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sentient_sword.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-tool" - }, - "variants": { - "type": { - "default": { - "textures": { - "layer0": "bloodmagic:items/SoulSword_activated" - } - }, - "corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulSword_corrosive_activated" - } - }, - "destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulSword_destructive_activated" - } - }, - "vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulSword_vengeful_activated" - } - }, - "steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulSword_steadfast_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_air.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_air.json deleted file mode 100644 index 32f44849..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_air.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/AirSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_blood_light.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_blood_light.json deleted file mode 100644 index dc5b4f19..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_blood_light.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/BloodLightSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_bounce.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_bounce.json deleted file mode 100644 index d4fdbefe..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_bounce.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/BounceSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/BounceSigil_activated" - } - } - } - } -} - diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_claw.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_claw.json deleted file mode 100644 index 54f6aa1b..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_claw.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/ClawSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/ClawSigil_activated" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_compression.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_compression.json deleted file mode 100644 index ad29944e..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_compression.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/CompressionSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/CompressionSigil_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_divination.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_divination.json deleted file mode 100644 index 184354d6..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_divination.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/DivinationSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_elemental_affinity.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_elemental_affinity.json deleted file mode 100644 index 313bbfe2..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_elemental_affinity.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/ElementalSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/ElementalSigil_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_ender_severance.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_ender_severance.json deleted file mode 100644 index 9c73f810..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_ender_severance.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/SigilOfSeverance_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/SigilOfSeverance_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_fast_miner.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_fast_miner.json deleted file mode 100644 index 2c22c801..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_fast_miner.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/MiningSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/MiningSigil_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_frost.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_frost.json deleted file mode 100644 index b7dcb443..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_frost.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/IceSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/IceSigil_activated" - } - } - } - } -} - diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_green_grove.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_green_grove.json deleted file mode 100644 index b1bfb321..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_green_grove.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/GrowthSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/GrowthSigil_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_haste.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_haste.json deleted file mode 100644 index 39b9302a..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_haste.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/HasteSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/HasteSigil_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_holding.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_holding.json deleted file mode 100644 index cfe4b8ec..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_holding.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/SigilOfHolding" - } - }, - "color": { - "textures": { - "layer0": "bloodmagic:items/SigilOfHolding", - "layer1": "bloodmagic:items/SigilOverlay" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_lava.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_lava.json deleted file mode 100644 index fde7dbbc..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_lava.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/LavaSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_magnetism.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_magnetism.json deleted file mode 100644 index 8a3a3967..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_magnetism.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/SigilOfMagnetism_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/SigilOfMagnetism_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_phantom_bridge.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_phantom_bridge.json deleted file mode 100644 index e37bf040..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_phantom_bridge.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/BridgeSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/BridgeSigil_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_seer.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_seer.json deleted file mode 100644 index 26097e59..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_seer.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/SeerSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_suppression.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_suppression.json deleted file mode 100644 index b48d90eb..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_suppression.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/SigilOfSuppression_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/SigilOfSuppression_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_teleposition.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_teleposition.json deleted file mode 100644 index 84d1fe93..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_teleposition.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/TelepositionSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_transposition.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_transposition.json deleted file mode 100644 index bb09cc7d..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_transposition.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/TranspositionSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_void.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_void.json deleted file mode 100644 index 4bc0194f..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_void.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/VoidSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_water.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_water.json deleted file mode 100644 index 9f76d28b..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_water.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "normal": { - "textures": { - "layer0": "bloodmagic:items/WaterSigil" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/sigil_whirlwind.json b/src/main/resources/assets/bloodmagic/blockstates/sigil_whirlwind.json deleted file mode 100644 index 6c9faba0..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/sigil_whirlwind.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "active": { - "false": { - "textures": { - "layer0": "bloodmagic:items/WindSigil_deactivated" - } - }, - "true": { - "textures": { - "layer0": "bloodmagic:items/WindSigil_activated" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/slate.json b/src/main/resources/assets/bloodmagic/blockstates/slate.json deleted file mode 100644 index 7f6f59af..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/slate.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "blank": { - "textures": { - "layer0": "bloodmagic:items/BlankSlate" - } - }, - "reinforced": { - "textures": { - "layer0": "bloodmagic:items/ReinforcedSlate" - } - }, - "imbued": { - "textures": { - "layer0": "bloodmagic:items/InfusedSlate" - } - }, - "demonic": { - "textures": { - "layer0": "bloodmagic:items/DemonSlate" - } - }, - "ethereal": { - "textures": { - "layer0": "bloodmagic:items/EtherealSlate" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/soul_forge.json b/src/main/resources/assets/bloodmagic/blockstates/soul_forge.json deleted file mode 100644 index 5abbb4e2..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/soul_forge.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "bloodmagic:BlockHellfireForge.obj", - "custom": { "flip-v": true }, - "transform" : "forge:default-block" - }, - "variants": { - "normal": [{ - - }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/soul_gem.json b/src/main/resources/assets/bloodmagic/blockstates/soul_gem.json deleted file mode 100644 index 33d9b6e0..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/soul_gem.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "petty_default": { - "textures": { - "layer0": "bloodmagic:items/SoulGemPetty" - } - }, - "lesser_default": { - "textures": { - "layer0": "bloodmagic:items/SoulGemLesser" - } - }, - "common_default": { - "textures": { - "layer0": "bloodmagic:items/SoulGemCommon" - } - }, - "greater_default": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGreater" - } - }, - "grand_default": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGrand" - } - }, - "petty_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemPetty_corrosive" - } - }, - "lesser_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemLesser_corrosive" - } - }, - "common_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemCommon_corrosive" - } - }, - "greater_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGreater_corrosive" - } - }, - "grand_corrosive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGrand_corrosive" - } - }, - "petty_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulGemPetty_vengeful" - } - }, - "lesser_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulGemLesser_vengeful" - } - }, - "common_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulGemCommon_vengeful" - } - }, - "greater_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGreater_vengeful" - } - }, - "grand_vengeful": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGrand_vengeful" - } - }, - "petty_destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemPetty_destructive" - } - }, - "lesser_destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemLesser_destructive" - } - }, - "common_destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemCommon_destructive" - } - }, - "greater_destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGreater_destructive" - } - }, - "grand_destructive": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGrand_destructive" - } - }, - "petty_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulGemPetty_steadfast" - } - }, - "lesser_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulGemLesser_steadfast" - } - }, - "common_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulGemCommon_steadfast" - } - }, - "greater_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGreater_steadfast" - } - }, - "grand_steadfast": { - "textures": { - "layer0": "bloodmagic:items/SoulGemGrand_steadfast" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/soul_snare.json b/src/main/resources/assets/bloodmagic/blockstates/soul_snare.json deleted file mode 100644 index e643b138..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/soul_snare.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "soulsnare": { - "textures": { - "layer0": "bloodmagic:items/SoulSnare" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/spectral.json b/src/main/resources/assets/bloodmagic/blockstates/spectral.json deleted file mode 100644 index 1d43fa6a..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/spectral.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "normal": { - "model": "bloodmagic:BlockSpectral", - "textures": { - "all": "bloodmagic:blocks/SpectralBlock" - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/teleposer.json b/src/main/resources/assets/bloodmagic/blockstates/teleposer.json deleted file mode 100644 index 2a92da6c..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/teleposer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { }, - "model": "orientable" - }, - "variants": { - "normal": [{ - "textures": { - "top": "bloodmagic:blocks/Teleposer_Top", - "side": "bloodmagic:blocks/Teleposer_Side", - "front": "bloodmagic:blocks/Teleposer_Side", - "bottom": "bloodmagic:blocks/Teleposer_Side" - } - }] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/teleposition_focus.json b/src/main/resources/assets/bloodmagic/blockstates/teleposition_focus.json deleted file mode 100644 index 34f21365..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/teleposition_focus.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "weak": { - "textures": { - "layer0": "bloodmagic:items/TeleposerFocus" - } - }, - "enhanced": { - "textures": { - "layer0": "bloodmagic:items/EnhancedTeleposerFocus" - } - }, - "reinforced": { - "textures": { - "layer0": "bloodmagic:items/ReinforcedTeleposerFocus" - } - }, - "demonic": { - "textures": { - "layer0": "bloodmagic:items/DemonicTeleposerFocus" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/test_spell_block.json b/src/main/resources/assets/bloodmagic/blockstates/test_spell_block.json deleted file mode 100644 index 8bdc9a94..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/test_spell_block.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "bloodmagic:sub/BlockSpellModifierCore", - "textures": { - "model": "bloodmagic:models/SpellModifierDefault" - }, - - "uvlock": false - }, - "variants": { - "input": { - "up": {"submodel": "bloodmagic:sub/BlockSpellModifierInput", "x": 90}, - "down": {"submodel": "bloodmagic:sub/BlockSpellModifierInput", "x": -90}, - "east": {"submodel": "bloodmagic:sub/BlockSpellModifierInput", "y": -90}, - "west": {"submodel": "bloodmagic:sub/BlockSpellModifierInput", "y": 90}, - "north": {"submodel": "bloodmagic:sub/BlockSpellModifierInput", "y": 180}, - "south": {"submodel": "bloodmagic:sub/BlockSpellModifierInput"} - }, - "output": { - "up": {"submodel": "bloodmagic:sub/BlockSpellModifierOutput", "transform": {"rotation": {"z": 90}} }, - "down": {"submodel": "bloodmagic:sub/BlockSpellModifierOutput", "transform": {"rotation": {"z": -90}} }, - "west": {"submodel": "bloodmagic:sub/BlockSpellModifierOutput", "y": 180}, - "east": {"submodel": "bloodmagic:sub/BlockSpellModifierOutput"}, - "north": {"submodel": "bloodmagic:sub/BlockSpellModifierOutput", "y": -90}, - "south": {"submodel": "bloodmagic:sub/BlockSpellModifierOutput", "y": 90} - } - } -} diff --git a/src/main/resources/assets/bloodmagic/blockstates/upgrade_tome.json b/src/main/resources/assets/bloodmagic/blockstates/upgrade_tome.json deleted file mode 100644 index 1562c045..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/upgrade_tome.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "upgradetome": { - "textures": { - "layer0": "bloodmagic:items/UpgradeTome" - } - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/upgrade_trainer.json b/src/main/resources/assets/bloodmagic/blockstates/upgrade_trainer.json deleted file mode 100644 index 37735a28..00000000 --- a/src/main/resources/assets/bloodmagic/blockstates/upgrade_trainer.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "builtin/generated", - "transform": "forge:default-item" - }, - "variants": { - "type": { - "upgradetrainer": { - "textures": { - "layer0": "bloodmagic:items/UpgradeTrainer" - } - } - } - } -} diff --git a/src/main/resources/assets/bloodmagic/books/architect.xml b/src/main/resources/assets/bloodmagic/books/architect.xml deleted file mode 100644 index d8bfebc9..00000000 --- a/src/main/resources/assets/bloodmagic/books/architect.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - The Architect - -My name is Tiberius. I was a kid when the demons came for my village during The Wars. They ransacked the houses and turned the shacks into splinters, wielding fire and water to blast the land asunder. I woke up to some travelling merchants that were passing by, equipping the warriors who were futily trying to drive off the demons that still clawed the village. - -I was brought to a village nearby, where a magician named Magus helped tend to my wounds. The magic that he used was something that I had never seen before – it wasn’t Thaumaturgy, nor Alchemy, and it was definitely not Botany. He winked at me once he saw that my eyes were open, holding his finger to his lips. - - - - - Fast-forward several years, and I have learned almost everything from Master Magus, being his third student ever to master his arts. Against his wishes, I have recorded my research and put several wards and spells on this book. So welcome, apprentice. I am known as The Architect, and I am a Blood Mage. - -It took several years of pestering before I managed to convince Magus to teach me. He kept on telling me that, “Magic that uses the life essence of living beings requires patience and preparation in order to master it. One false move, go a little past your natural endurance, and you may find yourself taking a nice vacation in Tartarus.” The thing was, I wanted to go there – I had some unfinished business with the demons. - - - - - The process that Magus originally constructed required powerful artifacts that he constructed himself, but were rather lacking where teaching was concerned. After studying a bit of alchemy and the process of “Equivalent Exchange,” I managed to construct myself an altar that would transmute items inside of its basin into new powerful forms. The only issue was that it needed a worthy catalyst, and so with a prick of the finger I set the Blood Altar alight! - - - - - The Blood Altar - -To start any form of transmutation involving blood, you would need to construct a blood altar and a sacrificial knife, as well as have a solitary diamond in your possession. After placing the blood altar down, Magus advised me to be careful as I filled it slowly with my blood, and said that I would need to be really close to the altar (about a metre) for the knife to work. With about 2 buckets of blood in the altar, which Master Magus reminds me is about 10 hearts worth, I placed the diamond inside of the altar by activating it with the diamond in hand. - -The blood dissipated in a cloud of red swirls as I waited for the atoms of the diamond to shift and reform. There were a few - - - - - moments where the particles turned gray, which meant that the altar was empty and I had to hurry to fill it. After the diamond burst in a shower of red particles, what finally sat in the altar was a Weak Blood Orb. - - - - - - Blood Altar - - bloodAltar - three - - - - - Sacrificial Knife - - sacrificialKnife - three - - - - - The Soul Network - -One thing that I initially didn’t understand was the overarching connection between the blood orb and myself. When I initially met Magus, I could see many sparkling strands branching off of him, flowing throughout his house and linking with intricate stones and runic drawings. I asked Magus about the strands, but he had no clue what I was talking about. It took three years of thorough research to finally find the answer, and when I brought my notes to him he was really impressed with what I have found. - -When you send power into the orb, the energy is transmitted from the strand connecting the orb and into the very soul of the person the orb is bound to. Similarly, and Magus - - - - - - managed to show this effect with several of his rituals, when you use something that drains energy it will drain the energy directly from the soul. The thing is that if you use an item whose owner has no energy left, the item will instead grab the requisite energy from the user of the item. Directly. From his or her life force. As such, the unit of measurement is called “Life Points,” or LP. I experimented with this, and one heart equals 200 LP. - -I have christened this system to be the “Soul Network,” and is used in all branches of Blood Magic indirectly. - - - - - - Sigils - -Magus is a master at rituals. His power in the intricate layering of stones and inks is unmatched. The problem is that these rituals are rather… static in nature. Sure, being able to summon a meteor is all fine and dandy, but won’t exactly protect you when you are on fire. To this end, I decided to link my soul network to powerful items that I have created. To start, I decided to transmute a piece of smooth stone in the Blood Altar with just 1kLP to create a blank slate. - -The first thing I did was to arrange the blank slate with some reflective glass and my weak blood orb. Pouring my power into the configuration created a Divination Sigil, which I could link to my network and see - - - - - - how much power that my soul network holds. What is more, holding the sigil to the Blood Altar flooded my mind with information, giving me the knowledge about its current tier, capacity, and even how much it was holding. - - Happy with the sigil, I brought a fresh unbound one to Master Magus for him to use. When I took the divination sigil back in my hands and tried to use it to view his network, for some reason I could not gleam any information from him. I don’t really see why this is, considering that I used this same method for other people and I saw that they had no power at all, but to gleam actually … nothing from Magus is strange. - - - - - Divination Sigil - - divinationSigil - three - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/gui/bookleft.png b/src/main/resources/assets/bloodmagic/gui/bookleft.png deleted file mode 100644 index 08b462df1c3a95725497df9fb6e36574e26fa4e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11940 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 diff --git a/src/main/resources/assets/bloodmagic/gui/jei/alchemy.png b/src/main/resources/assets/bloodmagic/gui/jei/alchemy.png deleted file mode 100644 index a84a5220c0e23e5dda16abbd80f3004772ffb745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15723 zcmeI3UyKt)9LJ}3AaDlMKp-K;G$jU6x4YYR+wR)-fGc!PtT-&YP zJ=!~iRQwZ-(TI@*HGE`rgA zX>!;3&2PTH-^^#`H{F+gt*86(#ceCw004`-I-|V+I8f687T$%vwq*||(AT0&=YWCy zQ`Vnj7aX_&fcTph?>GBnn*a*(=Ml` zhFx2Q7#GWQz!9x;A`AN_y5q{ks3NMa_DEYOFQEV_Xv)rfDw#HI1ld(h;CjG0s+sXP7lZXSdM3TFT;zH&nI!5v;1*I z+E6Q$RTENgbYnRkvcj$r)67ULo6F_gIj>vK4zs){iY(`0Jst*)V2ts!Dd(BAv8oiL z5+@1`C97pjO;0<~pZFK1ZZ&9RL{s#4Wt#rLTQIWXsuF57Rsicjq7?c zQaWWl6@<=?j^e3uKD1R!t9s5@6Jl{mZNF>LU{p3?1f55L;W@@5#yyFyaldjk;~B;z^Ub(uOIg71$MxpbodDsgl6S0mujZ zi~v=L>fEO=K~5DJSrvQeLK$TE}gt7@g(f&DIB>o!wh;B(>rVm65XswCXSH zsuW=LN~_*jmZn(8lB`&FTST$S10o8udTZ0FD$6phemm!epcLOGZ=NGJ0@I}ODupVJ zY97SU6J}1%!ga&wgv_P#OHpUb@bDql`YlLm|H4KX^3L1ahPhSMKih_eH`IT(4YgCO zjL7L>s7Bbz0j_k+ZRbk+IlHnd)mmSPA?wFULRE}Tlw7PHKE&4b)iRgH_gmGN94n3w ziX8f|y!F25$BYr{f3LzHn#uYtU z9wz&v8oGxK>pt-a{;~-7G*k{WRoXmdWoff)4`#(GEcK$tKJ>)NRv$U*3bcBU-N{C6 zNp~_T7Kek@;X=iVFimHYqMLAIwW}VL-?x#YN_Wc_}Uo2-&2#$b2v_#f1SOn-mwB59Xz~ zFd$@;;v)0Gyc8D(gltk=WImXe;=+KCO^S=m2lG-~7!a~aagq68UWy9?LN+NbG9S!K zabZBnCJ|R#?Ili_MsIHB&?}nzFPu7qUhi}&oxL#tCLRQ!@FD=$Z=vs>0T|-|xHJfW zv>$*K`rA9sYy_a?&#vgYc>cRzet6=|)6QjUzaH8aU-8YMsogjCZaK(|_n)7fzj@=a zT+80Tk#|0Ej862o+zZxPub<8Xc;l5TC%$Ko%{=$}uOD0pemZGfxpsQcarmCh>yt-w z%aabfrcPd1H2L|G(3jhHc^8~t4=yd3KJ(e}8#4FM6Jbn4sfe~lbHvE<^)!oU|hW)6U}Ed@}T zePQ3Z^aF*Z6Bk$S>;15$9D$p@+;Q^an(2dE?(@%o_eg6``}@rE*LUyP+rIniAC9Lh zi>_aGsi*McOJB9Vdf>`qHek>#Q#Lwi~w{pngXG k>yVdE-3`F4TdiQzGn=k$dTRY4R4$-vLwEF}^@Dr<2H$|P@&Et; diff --git a/src/main/resources/assets/bloodmagic/gui/jei/alchemytable.png b/src/main/resources/assets/bloodmagic/gui/jei/alchemytable.png deleted file mode 100644 index b4e27d580be4eb4edd33e14d400faeb733a754d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5m^k>u>ph`Yf~eC0R`DhJbhi+AFwhB3hHT15_Du>V0QL&aSW-r_4bZqUXz1J!$bGO z6Fv5HaPu9~eW0MTuD3;&+im> zUN6qPeQh5LOM-vy?R|g#S@h-0Zx;P6RKUr=!JxpSU&#=yC*(5ySd^p2*&duLgE847?81FHIENr-bNz;MB zFGGS&uwha-gAzk)JW~gQ$UnITjsy3*b}C;m;MuJ9zUQp9q}kmB)&LW2MwSH$VGKK1 zEGF-q&s*_B$6?l=2*x?}pMIa_S7kf!q}_=*;gj=1MuVS;ZTsFAbGu8c8z-N<_`O!= z@6GnYqV$IaHB})q|1IU!V}$#dIt)IV03amIInp4oC$hr8>sjc{?}nYSL6^ O00K`}KbLh*2~7Y?w7}K? diff --git a/src/main/resources/assets/bloodmagic/gui/jei/binding.png b/src/main/resources/assets/bloodmagic/gui/jei/binding.png deleted file mode 100644 index 390049dab957c30005694935c91a5f0d4d4375f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5m^k>u>ph`Yf~eC0R`DhJbhi+A23VuTS_dO+GxhW!1U46#WAGf*4w)WI}aNOI0S0$ zP?3-6;Ma3W^*Mj)s3J=dhuIC6&vBewpCvPIF8OwkJO8sye3`=SZBwsBmA<-@TEudn z{WI5E)AqA#<@y*{7z7v;u1X)+q_bRp@3qpeGg$viG+bwx|Im;-hEY#c(9ZV6A2tQ1 z2^I`W3@4d^3>zThxQ{Y#zRQnpmXtdTIZO%+W(+^JYaf`nu(u=5Yh|1Kr#yzcADrK5 zJDC5O@PjvDKOci6P-npzlS>EOT)yX@oKV2Lf%8BkZ^D10{)b8l!VU6F1=kly1Qf7> zo%7(9IfMI$%>O&}*d4j9<}){GGbk`L0DaEDK_v$DOoF>;)JW=u0E$TlbJR^mJT_lm TvC|ir9~eAc{an^LB{Ts5mDHpS diff --git a/src/main/resources/assets/bloodmagic/gui/jei/soulforge.png b/src/main/resources/assets/bloodmagic/gui/jei/soulforge.png deleted file mode 100644 index d19cf8e7b445394ed0600ac60fcb8d74409a906a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16429 zcmeI3duSX*7{KS6pfOsBDEPp~dPT6%y?xy7-tG2sZOpYM>ZK)(m=vYm+nr06-0hyX zo8C284Js8uP*m`NqWGXy@PSevXl!vI83GXlC!K|j}*x8~8$X{CWN7wKR0 z|00{<*k1soZm~v2z0vG7n&A{WY*wCfk~(_L6#Exg2eFxC&XDn)g(#dd8U3v)7_|* zDw}z2IJ2@I4oSVy3C}BO99OASVwHHzDUWl4s;V3>a-zth5v;q>_Vg-iyNha08h$d+ zHOf}WvmBf8{pvYq%Il3r{XosDzOG`a8OV0)><~q+s+Tw+#&hkAOrvR2nkpB9shI`` z3$O@n&qa1ZTf5SP<2mkxGf&8-dfvb&C)sQ>cH8+Di)}-@-ii$fK^!;X`40f#s7Uf}+J$P4wGMAEA-B4|IM^-P4cBOL%O^k7;Omr(D#%v{lr{ zAy=};Q(UVvG_tv?w0@`Hl+m$ygtkh3{~R+TMO&hFyp z*}bj22Zgt!mtE+WmELHht~4t(8rr;4L3z@2!!Oxs!$0*9rGHj$Yg)LOH8-8dhM?v@ zWIlh4$^^7YRioxA7&X5W*U5Voy$t)t(Rn(Sf>!f7+YEQ#{*)j_!O1LGCy)qN-*94S zki$(s@@>bk+|l9Xq4MNhDCUNUmLEEqWnZT90!11i|!h>*}^S(DX9;r;j0-~+Ek zHzss@9GYpav9di)w)$)IA}^ z&FO3HncDbKzm68Bg7Ha}M;9mf|Ldk}l>l^HKA7nnsqX#h>%O7e`EzFW<&wi^ zf5$AD?y>vs-gVJ|cgG%FFMSd@xM|(4Jx|@&_l@(=rDuF9ZSy`(ePn(0%4f!-aBTDT z$9gZm`;R@pU;4yB^}H*WynpX2#RD&WSm`)|x*kq!0iB=+Ecd^m?gWRntlaYL%a6EA z4{Wk6x$EuIe_#9kv&i$l*s4zL z>JMLk^rl7kERDQwpZe>CZ$5d;d*i9Ix_&)Bu=;81Hf6`!t~Wb+B3(D1#w_SL5(j6^ z?2Pn84(&Y;RwtkPVE?Pkw`cAg0-ZZMlKbojz>f3xZa@0l=1Xq<8Jw}KbK%UsJ06el zM|vc%`I4L0-|)rf{VzEHJT!L| zG(WT^_MGS=x5C$)&y*VPI2~-Z*e=oWAjLBJyh2CE1Etv1U-enOe|%;=Z(L_pQ+qPK z{;bbeZ?XF(jE^VmWceF+Vp-;&zv(LRTO!q%Y=1t|w@(fZooane?mfdc#vOb2mbyyp zdHwozN5_txI}6n>9F}EJU;sLfiGc%y(R2LXy8Aj^i$2S5h|qcT=FOVviD#4LgxD6` zZO}Wl>CM;WJYepF>eAT%Urj6LsY~Cpd8Qc1@M>4z%^b1MKmYWv-?@K(|E_hDa~4&e zaW0R)x2sZIT-@4RUn$9M{_z~M>fo2V>kMZew^8A8a5-}M^5xla-?#g|>jo-5#9(7* z$Cp*`c}9B+BZHbu!`CWVeSQ6A$va>xKH2miK79BfPp;hO51#pqZDEB#g)WQ{>#yJT zl{w@#>$pwHXaD=06-7mx?jGsr`26{EeB9=!wUh3?gV;9jdEoU@8Clt*|Nhm<$jBVY z+WPCQTE5wAmG{~pKiy;8GW*A`UsC7KpBEIg&w26jV_}Zj?3DYbGUYx`FkpDAw(Zv0 z9P=*^A1eNQ1~QQ6zyc;kAX}i^=am&N|d-e(mM1KH*F1HycIVCsHzst<;dr78NmK7PeRg(O&J>-_@%m4VmO&@eg**pwzr9=iu9wzW zyoD;lmI65#I2ycxLE$qYxN)uVkJ29&eynLFbGY6>^cd{CUH@yNxM1Y8RNv50Jw2Z< zdg?UNMiV9 zCALR{D_rcDSi>TXIZv2_xer{uI@S13LX!+PA29pV4G0K+6lK}^++}{?lSq)Ip00i_ I>zopr0PEYb!~g&Q diff --git a/src/main/resources/assets/bloodmagic/gui/teleposer.png b/src/main/resources/assets/bloodmagic/gui/teleposer.png deleted file mode 100644 index 2efcbe9af374b8cd9d5fd027f2e1bf32fa1b86e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1276 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z;_6Q8AUa`8i0cAC7!;n?Dtu@c;xw3OK#lEz`)Y!>EaktaqI0}$GqECA`Tai zD|H(^$vwd>xS+N|@tf6*)Qyw1Tth;bCl_hFkWpCN|DUa-Sn=e!;;#K(2Mkr*FMLz* z)~x$)dBXnI6qf}PupY3K?`|Y0neE;Gzm6d((eSa)u(9w73t(^DxXU(kS zbEk{x#tJYc01H+srBBCdOFN8z5ulqZ=({q8sl* zOkKYF&+^{>4iC+xlZwlB6dcoT2=bC@JD6D@A;(}A;?-&Yo<+pIuJ1$f?z?{;neAfz zF{$`p*p59Y5~hXZlf= zP+T=*^S`nOSMM`zxDF1F4{x_WyK?TMd)7Qg9N`HHk_H9~CIN;AEs(%`lU}SW@C6va z+aa;AC*`x^g0%;peKAPiD>}oRHKCF*>qb?!-&+~}D+gqBbYo>O!!+>)ZEL}y zT5wAjO9F+51uUh8B|uUt>$8F!R%i;E^X}7pGdm@vAg_s_>atWKtb)Ox!5xvXn=6(*>JMn(rJaS)5jq&fyqi8B+1 zTVWf5tug*!KLR35tAoM=C4`AK2-Xf*%Zdt$KoL}`wcWi%_tLFMP4>r{H1EB8&pr1$ z-}jyK<%f~0T&BG?4FFtt5uwol4(QbZoEYdaDsF#_9*o2_t3sg{?n0;PqNy0IIHyI# z?F5+7fd8~vZ>=WKqGLLbALgi??mlyl?~mdw!6>Yd7rK0%xMQGe?T(I!SHEaYh!L#c z<1M|na=pTJU~Z!Coy}WiKP-@WB|G`W9T^EH+QSx&we9EJtW!Z+RL)9LW9)GQG9~s- zF{}R*8l>Iu?D)9CnMBysO$_qzGLrs4Q^3;JeqJ@cILzqYSPorVWWBkUFITFk2xn<3Sn%d8V4h%d(WuW&z9TYvZg;_Y@p0jn&?k&X+lpmkTQX7ePP z>Kqy-V}hKvl1)wzIz@mDHWMz6-E|ZepNel;o5GhAMjO}ZdVMPp+o_0_@XF`3kjljq zL7D*OobGP zP10v_cdxnc0s81HlhM$*%skw4AScHK0Bxof1(*(99W{^c8rKEx4Y!!1lsC27L9=Gg zcvfP`QA75*nd4L7ncTH*M`pUg)r{==2`4w|QePs8!0WkYRd%=36rq^B+b z$YWjoRiJs&Wa$+cJ6J+I$~LvmHYdyJg}DDBU0t9g*$ z7C4}z;eIb|Yv$heKeT({;nG5#+!=8|?tKr2ri; zMQLwWI0X%<;)g_t*k zcKroHz9Y+3pBXN+u%eXpR(-{$oJrkl-J~xs1C=QR{`URyJh|qK#kB*vz1SH3t{B=z ze^y+yMHRJwOXVN*WX3i@q6650sYc4og3>{ea#N($RUTwB{un)Sv t5y2%K`3Ivr(H+Q`k9OjN|C66smQ52JTTyMw- -commands.bloodmagic.bind.success=Gegenstand erfolgreich gebunden! -commands.bloodmagic.bind.failed.noPlayer=Kein Spieler angegeben -commands.bloodmagic.bind.failed.alreadyBound=Gegenstand ist schon gebunden; benutze /unbind um die Bindung zu entfernen -commands.bloodmagic.bind.failed.notBindable=Gegenstand kann nicht gebunden werden -commands.bloodmagic.unbind.usage=/unbind -commands.bloodmagic.unbind.success=Bindung erfolgreich entfernt. -commands.bloodmagic.unbind.failed.notBindable=Bindung kann nicht entfernt werden. -commands.bloodmagic.soulnetwork.usage=/soulnetwork [Menge] -commands.bloodmagic.soulnetwork.add.success=Erfolgreich %dLP zu %ss LP-Netzwerk hinzugefügt! -commands.bloodmagic.soulnetwork.subtract.success=Erfolgreich %dLP von %ss LP-Netzwerk entfernt! -commands.bloodmagic.soulnetwork.fill.success=Erfolgreich %ss LP-Netzwerk gefüllt! -commands.bloodmagic.soulnetwork.empty.success=Erfolgreich %ss LP-Netzwerk geleert! -commands.bloodmagic.soulnetwork.get.success=In %ss LP-Netzwerk sind %dLP! -commands.bloodmagic.soulnetwork.noPlayer=Kein Spieler angegeben -commands.bloodmagic.soulnetwork.noCommand=Kein Befehl angegeben -commands.bloodmagic.soulnetwork.notACommand=Das ist kein gültiger Befehl -commands.bloodmagic.soulnetwork.fillMax.success=%ss LP-Netzwerk erfolgreich zu deren Blutkugel-Maximum befüllt! -commands.bloodmagic.soulnetwork.create.success=%ss LP-Netzwerk erfolgreich erstellt! (Blutkugel-Ausbaustufe: %d) - -# GUI -tile.bloodmagic.inputNode.name=Eingangsknoten -tile.bloodmagic.outputNode.name=Ausgangsknoten - -# Keybinds -bloodmagic.keybind.open_holding=Öffne Siegel der Aufbewahrung -bloodmagic.keybind.cycle_holding_pos=Siegelrotation (+) -bloodmagic.keybind.cycle_holding_neg=Siegelrotation (-) - -# JustEnoughItems -jei.bloodmagic.recipe.altar=Blutaltar -jei.bloodmagic.recipe.binding=Alchemische Anordnung (Bindung) -jei.bloodmagic.recipe.alchemyArrayCrafting=Alchemische Anordnung -jei.bloodmagic.recipe.soulForge=Höllenfeuerschmiede -jei.bloodmagic.recipe.alchemyTable=Alchemietisch -jei.bloodmagic.recipe.armourDowngrade=Sühne (Ritual) -jei.bloodmagic.recipe.requiredLP=LP: %d -jei.bloodmagic.recipe.requiredTier=Ausbaustufe: %d -jei.bloodmagic.recipe.consumptionRate=Verbrauch: %d LP/t -jei.bloodmagic.recipe.drainRate=Ablauf: %d LP/t -jei.bloodmagic.recipe.minimumSouls=Minimum: %1$..2f Wille -jei.bloodmagic.recipe.soulsDrained=Verbraucht: %1$..2f Wille -jei.bloodmagic.recipe.lpDrained=Verbraucht: %.d LP -jei.bloodmagic.recipe.ticksRequired=Zeit: %.d Ticks - -jei.bloodmagic.desc.altarBuilder=Ein Gegenstand zum Testen. Nur im Kreativmodus erhältlich.\n\nShift+Rechtsklick um die Ausbaustufe zu ändern. Rechtsklicke auf einen Altar, um den Bau zu starten.\n\nZerstöre einen Altar mit ihm in der Hand, um alles abzubauen. -jei.bloodmagic.desc.demonicWill=Prägung eines dämonischen Wesens gebunden an eine Kreatur.\n\nKann durch das Töten eines Monsters mit einer empfindsamen Waffe, oder das Werfen einer Falle und Umbringen während as weiße Partikel aussendet, gesammelt werden. - -# WAILA -waila.bloodmagic.sneak=&oSchleiche für Info -waila.bloodmagic.array.reagent=Reagenz: %s -waila.bloodmagic.array.catalyst=Katalysator: %s -option.bloodmagic.bypassSneak=Umgehe Schleichen -option.bloodmagic.bloodAltar=Blutaltar -option.bloodmagic.ritualController=Ritualsteine -option.bloodmagic.teleposer=Teleposer -option.bloodmagic.array=Alchemische Anordnung - -# Thaumcraft -tc.research_category.BLOODMAGIC=Sanguine Arcana - -# Thaumcraft Research -bloodmagic.research_name.BLOODMAGIC=Blood Magic -bloodmagic.research_text.BLOODMAGIC=Sanguine Arcana -bloodmagic.research_page.BLOODMAGIC.1=Das Reich der Blutmagier schien immer schon eine etaws einsamere und... "individuelle" Kunst zu sein... Blutmagier waren immer schon sehr zurückgezogen und manchmal auch etwas verrückt zu sein. Allerdings haben die Mächte der Selbstopferung Nutzen jenseits der Sicht eines normalen Blutmagiers. Tatsächlich ist es ziemlich offensichtlich, dass es schließlich doch einen Nutzen in Thaumaturgie hat! - -# Buttons -button.bloodmagic.tooltip.fill=Fülle Netzwerk diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 5545c19c..e470cfe6 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -1,904 +1,97 @@ -#Creative Tab -itemGroup.bloodmagic.creativeTab=Blood Magic -itemGroup.bloodmagic.creativeTabTome=Blood Magic | Tomes +# Creative Tab -#Items -item.bloodmagic.activation_crystal.weak.name=Weak Activation Crystal -item.bloodmagic.activation_crystal.awakened.name=Awakened Activation Crystal -item.bloodmagic.activation_crystal.creative.name=Creative Activation Crystal - -item.bloodmagic.sacrificial_dagger.normal.name=Sacrificial Dagger -item.bloodmagic.sacrificial_dagger.creative.name=Creative Sacrificial Dagger -item.bloodmagic.pack.selfSacrifice.name=Blood Letter's Pack -item.bloodmagic.pack.sacrifice.name=Coat of Arms -item.bloodmagic.daggerOfSacrifice.name=Dagger of Sacrifice - -item.bloodmagic.lavaCrystal.name=Lava Crystal - -item.bloodmagic.bound.sword.name=Bound Blade -item.bloodmagic.bound.pickaxe.name=Bound Pickaxe -item.bloodmagic.bound.axe.name=Bound Axe -item.bloodmagic.bound.shovel.name=Bound Shovel - -item.bloodmagic.bucket.lifeEssence.name=Bucket of Life - -item.bloodmagic.scribe.water.name=Elemental Inscription Tool: Water -item.bloodmagic.scribe.fire.name=Elemental Inscription Tool: Fire -item.bloodmagic.scribe.earth.name=Elemental Inscription Tool: Earth -item.bloodmagic.scribe.air.name=Elemental Inscription Tool: Air -item.bloodmagic.scribe.dusk.name=Elemental Inscription Tool: Dusk -item.bloodmagic.scribe.dawn.name=Elemental Inscription Tool: Dawn - -item.bloodmagic.focus.weak.name=Teleposition Focus -item.bloodmagic.focus.enhanced.name=Enhanced Teleposition Focus -item.bloodmagic.focus.reinforced.name=Reinforced Teleposition Focus -item.bloodmagic.focus.demonic.name=Demonic Teleposition Focus - -item.bloodmagic.slate.blank.name=Blank Slate -item.bloodmagic.slate.reinforced.name=Reinforced Slate -item.bloodmagic.slate.imbued.name=Imbued Slate -item.bloodmagic.slate.demonic.name=Demonic Slate -item.bloodmagic.slate.ethereal.name=Ethereal Slate - -item.bloodmagic.orb.weak.name=Weak Blood Orb -item.bloodmagic.orb.apprentice.name=Apprentice Blood Orb -item.bloodmagic.orb.magician.name=Magician Blood Orb -item.bloodmagic.orb.master.name=Master Blood Orb -item.bloodmagic.orb.archmage.name=Archmage Blood Orb -item.bloodmagic.orb.transcendent.name=Transcendent Blood Orb - -item.bloodmagic.reagent.incendium.name=Incendium -item.bloodmagic.reagent.magicales.name=Magicales -item.bloodmagic.reagent.sanctus.name=Sanctus -item.bloodmagic.reagent.aether.name=Aether -item.bloodmagic.reagent.crepitous.name=Crepitous -item.bloodmagic.reagent.crystallos.name=Crystallos -item.bloodmagic.reagent.terrae.name=Terrae -item.bloodmagic.reagent.aquasalus.name=Aquasalus -item.bloodmagic.reagent.tennebrae.name=Tennebrae -item.bloodmagic.reagent.offensa.name=Offensa -item.bloodmagic.reagent.praesidium.name=Praesidium -item.bloodmagic.reagent.orbisterrae.name=Orbis Terrae -item.bloodmagic.reagent.virtus.name=Virtus -item.bloodmagic.reagent.reductus.name=Reductus -item.bloodmagic.reagent.potentia.name=Potentia - -item.bloodmagic.blood_shard.weak.name=Weak Blood Shard -item.bloodmagic.blood_shard.demonic.name=Demon Blood Shard - -item.bloodmagic.baseComponent.reagent_water.name=Water Reagent -item.bloodmagic.baseComponent.reagent_lava.name=Lava Reagent -item.bloodmagic.baseComponent.reagent_air.name=Air Reagent -item.bloodmagic.baseComponent.reagent_fast_miner.name=Mining Reagent -item.bloodmagic.baseComponent.reagent_void.name=Void Reagent -item.bloodmagic.baseComponent.reagent_growth.name=Growth Reagent -item.bloodmagic.baseComponent.reagent_affinity.name=Elemental Affinity Reagent -item.bloodmagic.baseComponent.reagent_sight.name=Sight Reagent -item.bloodmagic.baseComponent.reagent_binding.name=Binding Reagent -item.bloodmagic.baseComponent.reagent_suppression.name=Suppression Reagent -item.bloodmagic.baseComponent.reagent_blood_light.name=Blood Lamp Reagent -item.bloodmagic.baseComponent.reagent_magnetism.name=Magnetism Reagent -item.bloodmagic.baseComponent.reagent_haste.name=Haste Reagent -item.bloodmagic.baseComponent.reagent_bridge.name=Phantom Bridge Reagent -item.bloodmagic.baseComponent.reagent_compression.name=Compression Reagent -item.bloodmagic.baseComponent.reagent_severance.name=Severance Reagent -item.bloodmagic.baseComponent.reagent_holding.name=Holding Reagent -item.bloodmagic.baseComponent.reagent_claw.name=Claw Reagent -item.bloodmagic.baseComponent.reagent_bounce.name=Elasticity Reagent -item.bloodmagic.baseComponent.reagent_frost.name=Frost Reagent -item.bloodmagic.baseComponent.reagent_teleposition.name=Teleposition Reagent -item.bloodmagic.baseComponent.reagent_transposition.name=Transposition Reagent - -item.bloodmagic.baseComponent.frame_part.name=Frame Parts -item.bloodmagic.baseComponent.sand_iron.name=Iron Sand -item.bloodmagic.baseComponent.sand_gold.name=Gold Sand -item.bloodmagic.baseComponent.sand_coal.name=Coal Sand -item.bloodmagic.baseComponent.plant_oil.name=Plant Oil -item.bloodmagic.baseComponent.sulfur.name=Sulfur -item.bloodmagic.baseComponent.saltpeter.name=Saltpeter -item.bloodmagic.baseComponent.neuro_toxin.name=Neuro Toxin -item.bloodmagic.baseComponent.antiseptic.name=Antiseptic -item.bloodmagic.baseComponent.catalyst_length_1.name=Simple Lengthening Catalyst -item.bloodmagic.baseComponent.catalyst_power_1.name=Simple Power Catalyst - -item.bloodmagic.cutting_fluid.basic.name=Basic Cutting Fluid -item.bloodmagic.cutting_fluid.explosive.name=Explosive Powder - -item.bloodmagic.demonCrystal.default.name=Demon Will Crystal -item.bloodmagic.demonCrystal.corrosive.name=Corrosive Will Crystal -item.bloodmagic.demonCrystal.destructive.name=Destructive Will Crystal -item.bloodmagic.demonCrystal.vengeful.name=Vengeful Will Crystal -item.bloodmagic.demonCrystal.steadfast.name=Steadfast Will Crystal - -item.bloodmagic.monster_soul.raw.name=Demonic Will -item.bloodmagic.monster_soul.corrosive.name=Corrosive Demonic Will -item.bloodmagic.monster_soul.destructive.name=Destructive Demonic Will -item.bloodmagic.monster_soul.vengeful.name=Vengeful Demonic Will -item.bloodmagic.monster_soul.steadfast.name=Steadfast Demonic Will - -item.bloodmagic.sigil.air.name=Air Sigil -item.bloodmagic.sigil.blood_light.name=Sigil of the Blood Lamp -item.bloodmagic.sigil.compression.name=Sigil of Compression -item.bloodmagic.sigil.divination.name=Divination Sigil -item.bloodmagic.sigil.water.name=Water Sigil -item.bloodmagic.sigil.lava.name=Lava Sigil -item.bloodmagic.sigil.void.name=Void Sigil -item.bloodmagic.sigil.green_grove.name=Sigil of the Green Grove -item.bloodmagic.sigil.elemental_affinity.name=Sigil of Elemental Affinity -item.bloodmagic.sigil.haste.name=Sigil of Haste -item.bloodmagic.sigil.suppression.name=Sigil of Suppression -item.bloodmagic.sigil.magnetism.name=Sigil of Magnetism -item.bloodmagic.sigil.fast_miner.name=Sigil of the Fast Miner -item.bloodmagic.sigil.seer.name=Seer's Sigil -item.bloodmagic.sigil.phantom_bridge.name=Sigil of the Phantom Bridge -item.bloodmagic.sigil.whirlwind.name=Sigil of the Whirlwind -item.bloodmagic.sigil.ender_severance.name=Sigil of Ender Severance -item.bloodmagic.sigil.holding.name=Sigil of Holding -item.bloodmagic.sigil.holding.display=&r%s: &o&n%s -item.bloodmagic.sigil.teleposition.name=Teleposition Sigil -item.bloodmagic.sigil.transposition.name=Transposition Sigil -item.bloodmagic.sigil.claw.name=Sigil of the Claw -item.bloodmagic.sigil.bounce.name=Sigil of Elasticity -item.bloodmagic.sigil.frost.name=Sigil of Winter's Breath - -item.bloodmagic.livingArmour.helmet.name=Living Helmet -item.bloodmagic.livingArmour.chest.name=Living Chestplate -item.bloodmagic.livingArmour.legs.name=Living Leggings -item.bloodmagic.livingArmour.boots.name=Living Boots -item.bloodmagic.sentientArmour.helmet.name=Sentient Helmet -item.bloodmagic.sentientArmour.chest.name=Sentient Chestplate -item.bloodmagic.sentientArmour.legs.name=Sentient Leggings -item.bloodmagic.sentientArmour.boots.name=Sentient Boots - -item.bloodmagic.altarMaker.name=Altar Maker - -item.bloodmagic.ritualDivinernormal.name=Ritual Diviner -item.bloodmagic.ritualDivinerdusk.name=Ritual Diviner [Dusk] -item.bloodmagic.ritualDivinerdawn.name=Ritual Diviner [Dawn] -item.bloodmagic.ritualReader.name=Ritual Tinkerer - -item.bloodmagic.arcaneAshes.name=Arcane Ashes -item.bloodmagic.upgradeTome.name=Living Armour Upgrade Tome -item.bloodmagic.downgradeTome.name=Living Armour Downgrade Tome -item.bloodmagic.upgradeTrainer.name=Living Armour Training Bracelet - -item.bloodmagic.sentientSword.name=Sentient Sword -item.bloodmagic.soulGem.petty.name=Petty Tartaric Gem -item.bloodmagic.soulGem.lesser.name=Lesser Tartaric Gem -item.bloodmagic.soulGem.common.name=Common Tartaric Gem -item.bloodmagic.soulGem.greater.name=Greater Tartaric Gem -item.bloodmagic.soulGem.grand.name=Grand Tartaric Gem -item.bloodmagic.soulSnare.base.name=Rudimentary Snare -item.bloodmagic.sentientBow.name=Sentient Bow -item.bloodmagic.sentientArmourGem.name=Sentient Armour Gem -item.bloodmagic.sentientAxe.name=Sentient Axe -item.bloodmagic.sentientPickaxe.name=Sentient Pickaxe -item.bloodmagic.sentientShovel.name=Sentient Shovel - -item.bloodmagic.nodeRouter.name=Node Router -item.bloodmagic.itemFilter.exact.name=Precise Item Filter -item.bloodmagic.itemFilter.ignoreNBT.name=NBT Item Filter -item.bloodmagic.itemFilter.modItems.name=Mod Item Filter -item.bloodmagic.itemFilter.oreDict.name=Ore Dictionary Item Filter -item.bloodmagic.fluidFilter.exact.name=Fluid Filter - -item.bloodmagic.experienceTome.name=Tome of Peritia -item.bloodmagic.sanguineBook.name=Inspectoris Scandalum - -item.bloodmagic.living_point_upgrade.draft_angelus.name=Draft of Angelus - -item.bloodmagic.willGauge.name=Demon Will Aura Gauge -item.bloodmagic.potionFlask.name=Potion Flask - -item.bloodmagic.icarusScroll.name=Scroll of Icarus +itemGroup.bloodmagic=Blood Magic # Blocks -tile.bloodmagic.fluid.lifeEssence.name=Life Essence -tile.bloodmagic.stone.ritual.master.name=Master Ritual Stone -tile.bloodmagic.stone.ritual.imperfect.name=Imperfect Ritual Stone -tile.bloodmagic.stone.ritual.inverted.name=Inverted Master Ritual Stone +tile.bloodmagic:blood_altar.name=Blood Altar +tile.bloodmagic:bloodstone_brick.name=Bloodstone Brick +tile.bloodmagic:bloodstone_tile.name=Bloodstone Tile +tile.bloodmagic:blood_rune_blank.name=Blank Rune +tile.bloodmagic:blood_rune_speed.name=Rune of Speed +tile.bloodmagic:blood_rune_efficiency.name=Rune of Efficiency +tile.bloodmagic:blood_rune_sacrifice.name=Rune of Sacrifice +tile.bloodmagic:blood_rune_self_sacrifice.name=Rune of Self Sacrifice +tile.bloodmagic:blood_rune_displacement.name=Rune of Displacement +tile.bloodmagic:blood_rune_capacity.name=Rune of Capacity +tile.bloodmagic:blood_rune_augmented_capacity.name=Rune of Augmented Capacity +tile.bloodmagic:blood_rune_orb.name=Rune of the Orb +tile.bloodmagic:blood_rune_acceleration.name=Rune of Acceleration +tile.bloodmagic:blood_rune_charging.name=Rune of Charging +tile.bloodmagic:demon_brick.name=Demon Bricks +tile.bloodmagic:demon_brick_small.name=Small Demon Bricks +tile.bloodmagic:demon_tile.name=Demon Tiles +tile.bloodmagic:demon_tile_special.name=Accented Demon Tiles +tile.bloodmagic:demon_stone.name=Demon Stone +tile.bloodmagic:demon_stone_polished.name=Polished Demon Stone +tile.bloodmagic:demon_metal.name=Demon Alloy +tile.bloodmagic:demon_stairs.name=Demon Stone Stairs -tile.bloodmagic.altar.name=Blood Altar -tile.bloodmagic.alchemyArray.name=&r&fAlchemy Array +# Items -tile.bloodmagic.rune.blank.name=Blank Rune -tile.bloodmagic.rune.speed.name=Speed Rune -tile.bloodmagic.rune.efficiency.name=Efficiency Rune -tile.bloodmagic.rune.sacrifice.name=Rune of Sacrifice -tile.bloodmagic.rune.self_sacrifice.name=Rune of Self Sacrifice -tile.bloodmagic.rune.displacement.name=Displacement Rune -tile.bloodmagic.rune.capacity.name=Rune of Capacity -tile.bloodmagic.rune.augmented_capacity.name=Rune of Augmented Capacity -tile.bloodmagic.rune.orb.name=Rune of the Orb -tile.bloodmagic.rune.acceleration.name=Acceleration Rune -tile.bloodmagic.rune.charging.name=Charging Rune +item.bloodmagic:blood_orb_weak.name=Weak Blood Orb +item.bloodmagic:blood_orb_apprentice.name=Apprentice Blood Orb +item.bloodmagic:blood_orb_magician.name=Magician's Blood Orb +item.bloodmagic:blood_orb_master.name=Master Blood Orb +item.bloodmagic:blood_orb_archmage.name=Archmage Blood Orb +item.bloodmagic:blood_orb_transcendent.name=Transcendent Blood Orb +item.bloodmagic:dagger_self_sacrifice.name=Sacrificial Dagger +item.bloodmagic:dagger_self_sacrifice_creative.name=Creative Sacrificial Dagger +item.bloodmagic:altar_builder.name=Blood Altar Builder +item.bloodmagic:slate_blank.name=Blank Slate +item.bloodmagic:slate_reinforced.name=Reinforced Slate +item.bloodmagic:slate_imbued.name=Imbued Slate +item.bloodmagic:slate_demonic.name=Demonic Slate +item.bloodmagic:slate_ethereal.name=Ethereal Slate +item.bloodmagic:sigil_divination.name=Divination Sigil +item.bloodmagic:sigil_air.name=Air Sigil +item.bloodmagic:sigil_fast_miner.name=Sigil of the Fast Miner +item.bloodmagic:sigil_haste.name=Haste Sigil +item.bloodmagic:living_armor_head.name=Living Helmet +item.bloodmagic:living_armor_chest.name=Living Chestplate +item.bloodmagic:living_armor_legs.name=Living Leggings +item.bloodmagic:living_armor_feet.name=Living Boots +item.bloodmagic:living_tome.name=Living Tome +item.bloodmagic:demon_will_crystal_raw.name=Raw Demon Will Crystal +item.bloodmagic:demon_will_crystal_corrosive.name=Corrosive Demon Will Crystal +item.bloodmagic:demon_will_crystal_destructive.name=Destructive Demon Will Crystal +item.bloodmagic:demon_will_crystal_vengeful.name=Vengeful Demon Will Crystal +item.bloodmagic:demon_will_crystal_steadfast.name=Steadfast Demon Will Crystal -tile.bloodmagic.ritualStone.blank.name=Ritual Stone -tile.bloodmagic.ritualStone.water.name=Ritual Stone of Water -tile.bloodmagic.ritualStone.fire.name=Ritual Stone of Fire -tile.bloodmagic.ritualStone.earth.name=Ritual Stone of Earth -tile.bloodmagic.ritualStone.air.name=Ritual Stone of Air -tile.bloodmagic.ritualStone.dusk.name=Ritual Stone of Dusk -tile.bloodmagic.ritualStone.dawn.name=Ritual Stone of Dawn +# Death -tile.bloodmagic.bloodstone_tile.name=Large Bloodstone Tile -tile.bloodmagic.bloodstone_brick.name=Bloodstone Brick -tile.bloodmagic.crystal_tile.name=Crystal Cluster -tile.bloodmagic.crystal_brick.name=Crystal Cluster Brick -tile.bloodmagic.bloodLight.name=Blood Light -tile.bloodmagic.spectralBlock.name=Spectral Block -tile.bloodmagic.phantom.name=Phantom Block -tile.bloodmagic.incenseAltar.name=Incense Altar - -tile.bloodmagic.teleposer.name=Teleposer -tile.bloodmagic.soulForge.name=Hellfire Forge -tile.bloodmagic.alchemyTable.name=Alchemy Table -tile.bloodmagic.demonCrucible.name=Demon Crucible -tile.bloodmagic.demonPylon.name=Demon Pylon -tile.bloodmagic.demonCrystallizer.name=Demon Crystallizer - -tile.bloodmagic.masterRouting.name=Master Routing Node -tile.bloodmagic.outputRouting.name=Output Routing Node -tile.bloodmagic.inputRouting.name=Input Routing Node -tile.bloodmagic.itemRouting.name=Routing Node - -tile.bloodmagic.path.wood.name=Wooden Path -tile.bloodmagic.path.woodtile.name=Tiled Wooden Path -tile.bloodmagic.path.stone.name=Stone Brick Path -tile.bloodmagic.path.stonetile.name=Tiled Stone Path -tile.bloodmagic.path.wornstone.name=Worn Stone Brick Path -tile.bloodmagic.path.wornstonetile.name=Tiled Worn Stone Path -tile.bloodmagic.path.obsidian.name=Obsidian Brick Path -tile.bloodmagic.path.obsidiantile.name=Tiled Obsidian Path - -tile.bloodmagic.dimensionalPortal.name=Dimensional Portal -tile.bloodmagic.bloodTank.name=Blood Tank - -tile.bloodmagic.demonCrystal.default.name=Demon Will Crystal Cluster -tile.bloodmagic.demonCrystal.corrosive.name=Corrosive Will Crystal Cluster -tile.bloodmagic.demonCrystal.destructive.name=Destructive Will Crystal Cluster -tile.bloodmagic.demonCrystal.vengeful.name=Vengeful Will Crystal Cluster -tile.bloodmagic.demonCrystal.steadfast.name=Steadfast Will Crystal Cluster - -tile.bloodmagic.mimic.nohitbox.name=Ethereal Opaque Mimic Block -tile.bloodmagic.mimic.solidopaque.name=Opaque Mimic Block -tile.bloodmagic.mimic.solidclear.name=Clear Mimic Block -tile.bloodmagic.mimic.solidlight.name=Lighted Mimic Block -tile.bloodmagic.mimic.sentient.name=Sentient Mimic Block - -tile.bloodmagic.bricks1.brick1_raw.name=Raw Stone Bricks -tile.bloodmagic.bricks1.brick1_corrosive.name=Corrosive Stone Bricks -tile.bloodmagic.bricks1.brick1_destructive.name=Destructive Stone Bricks -tile.bloodmagic.bricks1.brick1_vengeful.name=Vengeful Stone Bricks -tile.bloodmagic.bricks1.brick1_steadfast.name=Steadfast Stone Bricks - -tile.bloodmagic.bricks2.smallbrick_raw.name=Small Raw Stone Bricks -tile.bloodmagic.bricks2.smallbrick_corrosive.name=Small Corrosive Stone Bricks -tile.bloodmagic.bricks2.smallbrick_destructive.name=Small Destructive Stone Bricks -tile.bloodmagic.bricks2.smallbrick_vengeful.name=Small Vengeful Stone Bricks -tile.bloodmagic.bricks2.smallbrick_steadfast.name=Small Steadfast Stone Bricks -tile.bloodmagic.bricks2.tile_raw.name=Raw Stone Tiles -tile.bloodmagic.bricks2.tile_corrosive.name=Corrosive Stone Tiles -tile.bloodmagic.bricks2.tile_destructive.name=Destructive Stone Tiles -tile.bloodmagic.bricks2.tile_vengeful.name=Vengeful Stone Tiles -tile.bloodmagic.bricks2.tile_steadfast.name=Steadfast Stone Tiles -tile.bloodmagic.bricks2.tilespecial_raw.name=Accented Raw Stone Tiles -tile.bloodmagic.bricks2.tilespecial_corrosive.name=Accented Corrosive Stone Tiles -tile.bloodmagic.bricks2.tilespecial_destructive.name=Accented Destructive Stone Tiles -tile.bloodmagic.bricks2.tilespecial_vengeful.name=Accented Vengeful Stone Tiles -tile.bloodmagic.bricks2.tilespecial_steadfast.name=Accented Steadfast Stone Tiles - -tile.bloodmagic.inversionpillar.raw.name=Raw Inversion Pillar -tile.bloodmagic.inversionpillar.corrosive.name=Corrosive Inversion Pillar -tile.bloodmagic.inversionpillar.destructive.name=Destructive Inversion Pillar -tile.bloodmagic.inversionpillar.vengeful.name=Vengeful Inversion Pillar -tile.bloodmagic.inversionpillar.steadfast.name=Steadfast Inversion Pillar - -tile.bloodmagic.inversionpillarend.raw_bottom.name=Raw Inversion Pillar Base -tile.bloodmagic.inversionpillarend.corrosive_bottom.name=Corrosive Inversion Pillar Base -tile.bloodmagic.inversionpillarend.destructive_bottom.name=Destructive Inversion Pillar Base -tile.bloodmagic.inversionpillarend.vengeful_bottom.name=Vengeful Inversion Pillar Base -tile.bloodmagic.inversionpillarend.steadfast_bottom.name=Steadfast Inversion Pillar Base -tile.bloodmagic.inversionpillarend.raw_top.name=Raw Inversion Pillar Cap -tile.bloodmagic.inversionpillarend.corrosive_top.name=Corrosive Inversion Pillar Cap -tile.bloodmagic.inversionpillarend.destructive_top.name=Destructive Inversion Pillar Cap -tile.bloodmagic.inversionpillarend.vengeful_top.name=Vengeful Inversion Pillar Cap -tile.bloodmagic.inversionpillarend.steadfast_top.name=Steadfast Inversion Pillar Cap - -tile.bloodmagic.demonlight.raw.name=Raw Demon Eye -tile.bloodmagic.demonlight.corrosive.name=Corrosive Demon Eye -tile.bloodmagic.demonlight.destructive.name=Destructive Demon Eye -tile.bloodmagic.demonlight.vengeful.name=Vengeful Demon Eye -tile.bloodmagic.demonlight.steadfast.name=Steadfast Demon Eye - -tile.bloodmagic.extras.stone_raw.name=Raw Stone -tile.bloodmagic.extras.stone_corrosive.name=Corrosive Stone -tile.bloodmagic.extras.stone_destructive.name=Destructive Stone -tile.bloodmagic.extras.stone_vengeful.name=Vengeful Stone -tile.bloodmagic.extras.stone_steadfast.name=Steadfast Stone - -tile.bloodmagic.extras.polished_raw.name=Polished Raw Stone -tile.bloodmagic.extras.polished_corrosive.name=Polished Corrosive Stone -tile.bloodmagic.extras.polished_destructive.name=Polished Destructive Stone -tile.bloodmagic.extras.polished_vengeful.name=Polished Vengeful Stone -tile.bloodmagic.extras.polished_steadfast.name=Polished Steadfast Stone - -tile.bloodmagic.extras.metal_raw.name=Raw Demon Alloy -tile.bloodmagic.extras.metal_corrosive.name=Corrosive Demon Alloy -tile.bloodmagic.extras.metal_destructive.name=Destructive Demon Alloy -tile.bloodmagic.extras.metal_vengeful.name=Vengeful Demon Alloy -tile.bloodmagic.extras.metal_steadfast.name=Steadfast Demon Alloy - -tile.bloodmagic.pillar1.raw.name=Raw Stone Pillar -tile.bloodmagic.pillar1.corrosive.name=Corrosive Stone Pillar -tile.bloodmagic.pillar1.destructive.name=Destructive Stone Pillar -tile.bloodmagic.pillar1.vengeful.name=Vengeful Stone Pillar -tile.bloodmagic.pillar1.steadfast.name=Steadfast Stone Pillar - -tile.bloodmagic.pillar2.raw.name=Accented Raw Stone Pillar -tile.bloodmagic.pillar2.corrosive.name=Accented Corrosive Stone Pillar -tile.bloodmagic.pillar2.destructive.name=Accented Destructive Stone Pillar -tile.bloodmagic.pillar2.vengeful.name=Accented Vengeful Stone Pillar -tile.bloodmagic.pillar2.steadfast.name=Accented Steadfast Stone Pillar - -tile.bloodmagic.pillarCap1.raw.name=Raw Stone Pillar Cap -tile.bloodmagic.pillarCap1.corrosive.name=Corrosive Stone Pillar Cap -tile.bloodmagic.pillarCap2.destructive.name=Destructive Stone Pillar Cap -tile.bloodmagic.pillarCap2.vengeful.name=Vengeful Stone Pillar Cap -tile.bloodmagic.pillarCap3.steadfast.name=Steadfast Stone Pillar Cap - -tile.bloodmagic.wall1.brick_raw.name=Raw Stone Brick Wall -tile.bloodmagic.wall1.brick_corrosive.name=Corrosive Stone Brick Wall -tile.bloodmagic.wall1.brick_destructive.name=Destructive Stone Brick Wall -tile.bloodmagic.wall1.brick_vengeful.name=Vengeful Stone Brick Wall -tile.bloodmagic.wall1.brick_steadfast.name=Steadfast Stone Brick Wall -tile.bloodmagic.wall1.smallbrick_raw.name=Raw Small Stone Brick Wall -tile.bloodmagic.wall1.smallbrick_corrosive.name=Corrosive Small Stone Brick Wall -tile.bloodmagic.wall1.smallbrick_destructive.name=Destructive Small Stone Brick Wall -tile.bloodmagic.wall1.smallbrick_vengeful.name=Vengeful Small Stone Brick Wall -tile.bloodmagic.wall1.smallbrick_steadfast.name=Steadfast Small Stone Brick Wall -tile.bloodmagic.wall1.large_raw.name=Raw Stone Wall -tile.bloodmagic.wall1.large_corrosive.name=Corrosive Stone Wall -tile.bloodmagic.wall1.large_destructive.name=Destructive Stone Wall -tile.bloodmagic.wall1.large_vengeful.name=Vengeful Stone Wall -tile.bloodmagic.wall1.large_steadfast.name=Steadfast Stone Wall - -tile.bloodmagic.stairs1.raw.name=Raw Stone Stairs -tile.bloodmagic.stairs1.corrosive.name=Corrosive Stone Stairs -tile.bloodmagic.stairs2.destructive.name=Destructive Stone Stairs -tile.bloodmagic.stairs2.vengeful.name=Vengeful Stone Stairs -tile.bloodmagic.stairs3.steadfast.name=Steadfast Stone Stairs +death.attack.bloodmagic:weak_soul=%s's soul was too weak # Fluids -fluid.lifeEssence=Life Essence -# HUD -hud.bloodmagic.inactive=Inactive +fluid.bloodmagic:life_essence=Life Essence -# Tooltips -tooltip.bloodmagic.extraInfo=&9-Hold shift for more info- +# Living Upgrades -tooltip.bloodmagic.orb.desc=Stores raw Life Essence -tooltip.bloodmagic.orb.owner=Added by: %s -tooltip.bloodmagic.currentOwner=Current owner: %s -tooltip.bloodmagic.currentTier=Current tier: %d -tooltip.bloodmagic.config.disabled=Currently disabled in the Config -tooltip.bloodmagic.tier=Tier %d - -tooltip.bloodmagic.activated=Activated -tooltip.bloodmagic.deactivated=Deactivated - -tooltip.bloodmagic.sigil.air.desc=&oI feel lighter already... -tooltip.bloodmagic.sigil.blood_light.desc=&oI see a light! -tooltip.bloodmagic.sigil.compression.desc=&oHands of diamonds -tooltip.bloodmagic.sigil.divination.desc=&oPeer into the soul -tooltip.bloodmagic.sigil.divination.otherNetwork=Peering into the soul of %s -tooltip.bloodmagic.sigil.divination.currentAltarTier=Current Tier: %d -tooltip.bloodmagic.sigil.divination.currentEssence=Current Essence: %d LP -tooltip.bloodmagic.sigil.divination.currentAltarCapacity=Current Capacity: %d LP -tooltip.bloodmagic.sigil.divination.currentTranquility=Current Tranquility: %d -tooltip.bloodmagic.sigil.divination.currentInversion=Current Inversion: %d -tooltip.bloodmagic.sigil.divination.currentBonus=Current Bonus: +%d%% -tooltip.bloodmagic.sigil.water.desc=&oInfinite water, anyone? -tooltip.bloodmagic.sigil.lava.desc=&oHOT! DO NOT EAT -tooltip.bloodmagic.sigil.void.desc=&oBetter than a Swiffer®! -tooltip.bloodmagic.sigil.green_grove.desc=&oEnvironmentally friendly -tooltip.bloodmagic.sigil.magnetism.desc=&oI have a very magnetic personality -tooltip.bloodmagic.sigil.suppression.desc=&oBetter than telekinesis... -tooltip.bloodmagic.sigil.haste.desc=&o42 doses of caffeine later... -tooltip.bloodmagic.sigil.fast_miner.desc=&oKeep mining, and mining... -tooltip.bloodmagic.sigil.elementalAffinity.desc=&oFalling fire fishes! -tooltip.bloodmagic.sigil.seer.desc=&oWhen seeing all is not enough -tooltip.bloodmagic.sigil.seer.currentAltarProgress=Current Progress: %d LP/ %s LP -tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent=Current Progress: %s -tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate=Consumption Rate: %d LP -tooltip.bloodmagic.sigil.seer.currentAltarTier=Current Tier: %d -tooltip.bloodmagic.sigil.seer.currentEssence=Current Essence: %d LP -tooltip.bloodmagic.sigil.seer.currentAltarCapacity=Current Capacity: %d LP -tooltip.bloodmagic.sigil.seer.currentCharge=Current Charge: %d -tooltip.bloodmagic.sigil.seer.currentTranquility=Current Tranquility: %d -tooltip.bloodmagic.sigil.seer.currentBonus=Current Bonus: +%d%% -tooltip.bloodmagic.sigil.phantom_bridge.desc=&oWalking on thin air... -tooltip.bloodmagic.sigil.whirlwind.desc=&oBest not to wear a skirt -tooltip.bloodmagic.sigil.ender_severance.desc=&oPutting Endermen in Dire situations! -tooltip.bloodmagic.sigil.teleposition.desc=I am very close to being moved by this. -tooltip.bloodmagic.sigil.transposition.desc=Feel the power of the Force, my young apprentice. -tooltip.bloodmagic.sigil.holding.press=Press &o%s&r&7 to modify -tooltip.bloodmagic.sigil.holding.desc=Sigil-ception -tooltip.bloodmagic.sigil.holding.sigilInSlot=Slot %d: %s - -tooltip.bloodmagic.livingArmourPointsUpgrade.desc=Increases the max points of Living Armour to %d. - -tooltip.bloodmagic.bound.sword.desc=&oCulling the weak -tooltip.bloodmagic.bound.pickaxe.desc=&oDestroying stone without mercy -tooltip.bloodmagic.bound.axe.desc=&oDemonic deforestation -tooltip.bloodmagic.bound.shovel.desc=&oScrubs floors clean of dirt - -tooltip.bloodmagic.sacrificialDagger.desc=Just a prick of the finger will suffice... -tooltip.bloodmagic.sacrificialDagger.creative=Right click an altar while sneaking to fill it -tooltip.bloodmagic.slate.desc=Infused stone inside of a Blood Altar -tooltip.bloodmagic.inscriber.desc=The writing is on the wall... - -tooltip.bloodmagic.pack.selfSacrifice.desc=This pack really chafes... -tooltip.bloodmagic.pack.sacrifice.desc=Description -tooltip.bloodmagic.pack.stored=Stored: %d LP - -tooltip.bloodmagic.activation_crystal.weak=Activates low-level rituals -tooltip.bloodmagic.activation_crystal.awakened=Activates more powerful rituals -tooltip.bloodmagic.activation_crystal.creative=Creative Only - Activates any ritual - -tooltip.bloodmagic.diviner.currentRitual=Current Ritual: %s -tooltip.bloodmagic.diviner.blankRune=Blank Runes: %d -tooltip.bloodmagic.diviner.waterRune=Water Runes: %d -tooltip.bloodmagic.diviner.airRune=Air Runes: %d -tooltip.bloodmagic.diviner.fireRune=Fire Runes: %d -tooltip.bloodmagic.diviner.earthRune=Earth Runes: %d -tooltip.bloodmagic.diviner.duskRune=Dusk Runes: %d -tooltip.bloodmagic.diviner.dawnRune=Dawn Runes: %d -tooltip.bloodmagic.diviner.totalRune=Total Runes: %d -tooltip.bloodmagic.diviner.extraInfo=&9-Hold shift for rune info- -tooltip.bloodmagic.diviner.extraExtraInfo=&9-Hold shift + M for augmentation info- -tooltip.bloodmagic.diviner.currentDirection=Current Direction: %s - -tooltip.bloodmagic.ritualReader.currentState=Current mode: %s -tooltip.bloodmagic.ritualReader.set_area=Define Area -tooltip.bloodmagic.ritualReader.information=Information -tooltip.bloodmagic.ritualReader.set_will_types=Set Will Consumed -tooltip.bloodmagic.ritualReader.desc.set_area=Right click on an active Master Ritual stone to cycle what area of the ritual you want to modify. Then click on the two corners of the new range you want to set the range. -tooltip.bloodmagic.ritualReader.desc.information=Right click on an active Master Ritual Stone to gather basic information about the ritual. -tooltip.bloodmagic.ritualReader.desc.set_will_types=Set the types of demon will that the ritual will consume from the aura by right clicking on the MRS with the same types of crystals on your hotbar. - -tooltip.bloodmagic.arcaneAshes=Ashes used to draw an alchemy circle - -tooltip.bloodmagic.telepositionFocus.coords=Current coordinates: (%d, %d, %d) -tooltip.bloodmagic.telepositionFocus.dimension=Dimension ID: %d -tooltip.bloodmagic.telepositionFocus.bound=Bound: %s at %d, %d, %d -tooltip.bloodmagic.telepositionFocus.weak=Used to move blocks in the world -tooltip.bloodmagic.telepositionFocus.enhanced=Used to move blocks in the world -tooltip.bloodmagic.telepositionFocus.reinforced=Used to move blocks in the world -tooltip.bloodmagic.telepositionFocus.demonic=Used to move blocks in the world - -tooltip.bloodmagic.livingArmour.upgrade.speed=Quick Feet -tooltip.bloodmagic.livingArmour.upgrade.digging=Dwarven Might -tooltip.bloodmagic.livingArmour.upgrade.poisonResist=Poison Resistance -tooltip.bloodmagic.livingArmour.upgrade.fireResist=Gift of Ignis -tooltip.bloodmagic.livingArmour.upgrade.selfSacrifice=Tough Palms -tooltip.bloodmagic.livingArmour.upgrade.knockback=Body Builder -tooltip.bloodmagic.livingArmour.upgrade.physicalProtect=Tough Skin -tooltip.bloodmagic.livingArmour.upgrade.health=Healthy -tooltip.bloodmagic.livingArmour.upgrade.meleeDamage=Fierce Strike -tooltip.bloodmagic.livingArmour.upgrade.arrowShot=Trick Shot -tooltip.bloodmagic.livingArmour.upgrade.stepAssist=Step Assist -tooltip.bloodmagic.livingArmour.upgrade.grimReaper=Grim Reaper's Sprint -tooltip.bloodmagic.livingArmour.upgrade.solarPowered=Solar Powered -tooltip.bloodmagic.livingArmour.upgrade.thaumRunicShielding=Runic Shielding -tooltip.bloodmagic.livingArmour.upgrade.revealing=Revealing -tooltip.bloodmagic.livingArmour.upgrade.experienced=Experienced -tooltip.bloodmagic.livingArmour.upgrade.jump=Strong Legs -tooltip.bloodmagic.livingArmour.upgrade.fallProtect=Soft Fall -tooltip.bloodmagic.livingArmour.upgrade.graveDigger=Grave Digger -tooltip.bloodmagic.livingArmour.upgrade.sprintAttack=Charging Strike -tooltip.bloodmagic.livingArmour.upgrade.criticalStrike=True Strike -tooltip.bloodmagic.livingArmour.upgrade.elytra=Elytra -tooltip.bloodmagic.livingArmour.upgrade.nightSight=Nocturnal Prowess -tooltip.bloodmagic.livingArmour.upgrade.repair=Repairing - - -tooltip.bloodmagic.livingArmour.upgrade.slowness=Limp Leg -tooltip.bloodmagic.livingArmour.upgrade.crippledArm=Crippled Arm -tooltip.bloodmagic.livingArmour.upgrade.slippery=Loose Traction -tooltip.bloodmagic.livingArmour.upgrade.battleHunger=Battle Hungry -tooltip.bloodmagic.livingArmour.upgrade.quenched=Quenched -tooltip.bloodmagic.livingArmour.upgrade.meleeDecrease=Dulled Blade -tooltip.bloodmagic.livingArmour.upgrade.digSlowdown=Weakened Pick -tooltip.bloodmagic.livingArmour.upgrade.stormTrooper=Storm Trooper -tooltip.bloodmagic.livingArmour.upgrade.slowHeal=Diseased -tooltip.bloodmagic.livingArmour.upgrade.disoriented=Disoriented - -tooltip.bloodmagic.livingArmour.upgrade.level=%s (Level %d) -tooltip.bloodmagic.livingArmour.upgrade.progress=%s (%d/100) -tooltip.bloodmagic.livingArmour.upgrade.points=&6Upgrade points: %s / %s - -tooltip.bloodmagic.livingArmour.extraExtraInfo=&9-Hold shift + M for progress info- - -tooltip.bloodmagic.will=Will Quality: %1$,.2f -tooltip.bloodmagic.sentientSword.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.sentientAxe.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.sentientPickaxe.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.sentientShovel.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.soulGem.petty=A gem used to contain a little will -tooltip.bloodmagic.soulGem.lesser=A gem used to contain some will -tooltip.bloodmagic.soulGem.common=A gem used to contain more will -tooltip.bloodmagic.soulGem.greater=A gem used to contain a greater amount of will -tooltip.bloodmagic.soulGem.grand=A gem used to contain a large amount of will -tooltip.bloodmagic.soulSnare.desc=Throw at a monster and then kill them to obtain their demonic will - -tooltip.bloodmagic.itemFilter.exact=Will make sure the items match precisely -tooltip.bloodmagic.itemFilter.ignoreNBT=Ignores the NBT of the filter -tooltip.bloodmagic.itemFilter.modItems=Matches all items from the same mod -tooltip.bloodmagic.itemFilter.oreDict=Used to filter through the Ore Dictionary - -tooltip.bloodmagic.fluidFilter.exact=Filters the fluid input/output - -tooltip.bloodmagic.fluid.type=Fluid Contained: %s -tooltip.bloodmagic.fluid.amount=Amount: %d / %d mB -tooltip.bloodmagic.fluid.capacity=Capacity: %d mB - -tooltip.bloodmagic.ghost.everything=Everything -tooltip.bloodmagic.ghost.amount=Ghost item amount: %d - -tooltip.bloodmagic.currentType.default=Contains: Raw Will -tooltip.bloodmagic.currentType.corrosive=Contains: Corrosive Will -tooltip.bloodmagic.currentType.destructive=Contains: Destructive Will -tooltip.bloodmagic.currentType.vengeful=Contains: Vengeful Will -tooltip.bloodmagic.currentType.steadfast=Contains: Steadfast Will - -tooltip.bloodmagic.currentBaseType.default=Raw -tooltip.bloodmagic.currentBaseType.corrosive=Corrosive -tooltip.bloodmagic.currentBaseType.destructive=Destructive -tooltip.bloodmagic.currentBaseType.vengeful=Vengeful -tooltip.bloodmagic.currentBaseType.steadfast=Steadfast - -tooltip.bloodmagic.experienceTome=A book used to store experience -tooltip.bloodmagic.experienceTome.exp=Exp: %0.3f -tooltip.bloodmagic.experienceTome.expLevel=Level: %d - -tooltip.bloodmagic.decoration.safe=Safe for decoration -tooltip.bloodmagic.decoration.notSafe=Dangerous for decoration - -tooltip.bloodmagic.cuttingFluidRatio=%d/%d uses remaining - -tooltip.bloodmagic.potion.uses=%d uses remaining - -tooltip.bloodmagic.book.shifting=These symbols seem to be... &oshifting... - -tooltip.bloodmagic.willGauge=A strange device that can measure the Demon Will in the Aura. - -# Ritual -ritual.bloodmagic.blockRange.tooBig=The block range given is too big! Needs to be at most %s blocks. -ritual.bloodmagic.blockRange.tooFar=The block range given is too far! Needs to be within a vertical range of %s blocks and a horizontal range of %s blocks. -ritual.bloodmagic.blockRange.inactive=The ritual stone is currently inactive, and cannot have its range modified. -ritual.bloodmagic.blockRange.noRange=The range was not properly chosen. -ritual.bloodmagic.blockRange.firstBlock=First block for new range stored. -ritual.bloodmagic.blockRange.success=New range successfully set! -ritual.bloodmagic.willConfig.set=The ritual will use these Demon Will types: %s -ritual.bloodmagic.willConfig.void=The ritual no longer uses Demon Will - -ritual.bloodmagic.testRitual=Test Ritual -ritual.bloodmagic.waterRitual=Ritual of the Full Spring -ritual.bloodmagic.lavaRitual=Serenade of the Nether -ritual.bloodmagic.greenGroveRitual=Ritual of the Green Grove -ritual.bloodmagic.jumpRitual=Ritual of the High Jump -ritual.bloodmagic.wellOfSufferingRitual=Well of Suffering -ritual.bloodmagic.featheredKnifeRitual=Ritual of the Feathered Knife -ritual.bloodmagic.regenerationRitual=Ritual of Regeneration -ritual.bloodmagic.harvestRitual=Reap of the Harvest Moon -ritual.bloodmagic.magneticRitual=Ritual of Magnetism -ritual.bloodmagic.crushingRitual=Ritual of the Crusher -ritual.bloodmagic.fullStomachRitual=Ritual of the Satiated Stomach -ritual.bloodmagic.interdictionRitual=Ritual of Interdiction -ritual.bloodmagic.containmentRitual=Ritual of Containment -ritual.bloodmagic.speedRitual=Ritual of Speed -ritual.bloodmagic.suppressionRitual=Ritual of Suppression -ritual.bloodmagic.expulsionRitual=Aura of Expulsion -ritual.bloodmagic.zephyrRitual=Call of the Zephyr -ritual.bloodmagic.upgradeRemoveRitual=Sound of the Cleansing Soul -ritual.bloodmagic.armourEvolveRitual=Ritual of Living Evolution -ritual.bloodmagic.animalGrowthRitual=Ritual of the Shepherd -ritual.bloodmagic.forsakenSoulRitual=Gathering of the Forsaken Souls -ritual.bloodmagic.crystalHarvestRitual=Crack of the Fractured Crystal -ritual.bloodmagic.meteorRitual=Mark of the Falling Tower -ritual.bloodmagic.ellipseRitual=Focus of the Ellipsoid -ritual.bloodmagic.cobblestoneRitual=Le Vulcanos Frigius -ritual.bloodmagic.placerRitual=Laying of the Filler -ritual.bloodmagic.fellingRitual=Crash of the Timberman -ritual.bloodmagic.pumpRitual=Hymn of Syphoning -ritual.bloodmagic.altarBuilderRitual=The Assembly of the High Altar -ritual.bloodmagic.portalRitual=The Gate of the Fold -ritual.bloodmagic.downgradeRitual=Penance of the Leadened Soul -ritual.bloodmagic.crystalSplitRitual=Resonance of the Faceted Crystal - -ritual.bloodmagic.waterRitual.info=Generates a source of water from the master ritual stone. -ritual.bloodmagic.lavaRitual.info=Generates a source of lava from the master ritual stone. -ritual.bloodmagic.lavaRitual.default.info=(Raw) Decreases the LP cost of placing lava and allows lava to be placed insided of a linked container. -ritual.bloodmagic.lavaRitual.corrosive.info=(Corrosive) Entities within range that are immune to fire are damaged severely. -ritual.bloodmagic.lavaRitual.destructive.info=(Destructive) Lava placement range is increased based on total Will. -ritual.bloodmagic.lavaRitual.vengeful.info=(Vengeful) Entities within range have Fire Fuse applied to them. -ritual.bloodmagic.lavaRitual.steadfast.info=(Steadfast) Players within a designated range have Fire Resistance applied to them. - -ritual.bloodmagic.greenGroveRitual.info=Grows crops within its area. -ritual.bloodmagic.jumpRitual.info=Causes entities to leap up into the air. -ritual.bloodmagic.wellOfSufferingRitual.info=Attacks mobs within its damage zone and puts the LP into a nearby blood altar. -ritual.bloodmagic.featheredKnifeRitual.info=Drains health from players in its area and puts the LP into a nearby blood altar. -ritual.bloodmagic.regenerationRitual.info=Casts regeneration on entities within its range if they are missing health. -ritual.bloodmagic.regenerationRitual.default.info=(Raw) -ritual.bloodmagic.regenerationRitual.corrosive.info=(Corrosive) Steals health from non-players inside of its Vampirism range and directly heals players. -ritual.bloodmagic.regenerationRitual.destructive.info=(Destructive) -ritual.bloodmagic.regenerationRitual.vengeful.info=(Vengeful) -ritual.bloodmagic.regenerationRitual.steadfast.info=(Steadfast) -ritual.bloodmagic.harvestRitual.info=Harvests plants within its range, dropping the results on the ground. -ritual.bloodmagic.magneticRitual.info=Pulls up ores from the ground and puts them into its placement range. -ritual.bloodmagic.crushingRitual.info=Breaks blocks within its crushing range and places the items into the linked chest. -ritual.bloodmagic.crushingRitual.destructive.info=(Destructive) Blocks are broken down forcefully: all blocks broken are affected by Fortune III. -ritual.bloodmagic.crushingRitual.steadfast.info=(Steadfast) Causes all blocks that are broken to be picked up with silk touch. Overrides Fortune where applicable. -ritual.bloodmagic.crushingRitual.corrosive.info=(Corrosive) All blocks are broken to be processed with a form of cutting fluid. Overrides Silk Touch where applicable. -ritual.bloodmagic.crushingRitual.vengeful.info=(Vengeful) Compresses the inventory on successful operation. Currently only does one compression per operation. -ritual.bloodmagic.crushingRitual.default.info=(Raw) Increases the speed of the ritual based on total Will. -ritual.bloodmagic.greenGroveRitual.corrosive.info=(Corrosive) Entities within range are attacked by nearby plants, leeching away their life. -ritual.bloodmagic.greenGroveRitual.default.info=(Raw) Increases the speed of all of the ritual operations depending on the total Will in the Aura. -ritual.bloodmagic.greenGroveRitual.vengeful.info=(Vengeful) Increases the rate that a growth tick is successful. -ritual.bloodmagic.greenGroveRitual.steadfast.info=(Steadfast) Seeds are replanted and blocks are hydrated within the Hydration range. -ritual.bloodmagic.greenGroveRitual.destructive.info=(Destructive) Growing range is increased based on total Will. -ritual.bloodmagic.featheredKnifeRitual.default.info=(Raw) Increases the speed of the ritual based on the total Will in the Aura. -ritual.bloodmagic.featheredKnifeRitual.destructive.info=(Destructive) Increases the yield of the ritual based on total Will. -ritual.bloodmagic.featheredKnifeRitual.vengeful.info=(Vengeful) Sets the minimum health for sacrificing to 10%%. Overridden by Steadfast for the Owner if active. -ritual.bloodmagic.featheredKnifeRitual.corrosive.info=(Corrosive) Uses the player's Incense to increase the yield. -ritual.bloodmagic.featheredKnifeRitual.steadfast.info=(Steadfast) Sets the minimum health for sacrificing from 30%% to 70%%. -ritual.bloodmagic.speedRitual.default.info=(Raw) Increases the velocity caused by the ritual based on total Will. -ritual.bloodmagic.speedRitual.vengeful.info=(Vengeful) Prevents adult mobs and players from being transported. Players are transported if paired with Destructive. -ritual.bloodmagic.speedRitual.destructive.info=(Destructive) Prevents child mobs and players from being transported. Players are transported if paired with Vengeful. -ritual.bloodmagic.animalGrowthRitual.vengeful.info=(Vengeful) Decreases the time it takes for adults to breed again. -ritual.bloodmagic.animalGrowthRitual.steadfast.info=(Steadfast) Automatically breeds adults within its area using items in the connected chest. -ritual.bloodmagic.animalGrowthRitual.default.info=(Raw) Increases the speed of the ritual based on the total Will in the Aura. -ritual.bloodmagic.animalGrowthRitual.destructive.info=(Destructive) Causes adults that have not bred lately to run at mobs and explode. -ritual.bloodmagic.animalGrowthRitual.corrosive.info=(Corrosive) Unimplemented. - -ritual.bloodmagic.crystalSplitRitual.info=Splits apart a well-grown Raw crystal cluster into seperal aspected crystal clusters. -ritual.bloodmagic.fullStomachRitual.info=Takes food from the linked chest and fills the player's saturation with it. -ritual.bloodmagic.interdictionRitual.info=Pushes all mobs within its area away from the master ritual stone. -ritual.bloodmagic.containmentRitual.info=Pulls all mobs within its area towards the master ritual stone. -ritual.bloodmagic.speedRitual.info=Launches players within its range in the direction of the ritual. -ritual.bloodmagic.suppressionRitual.info=Suppresses fluids within its range - deactivating the ritual returns the fluids back to the world. -ritual.bloodmagic.expulsionRitual.info=Expels players from its range that are neither the owner nor have a bound blood orb in the chest on top of the master ritual stone. -ritual.bloodmagic.zephyrRitual.info=Picks up items within its range and places them into the linked chest. -ritual.bloodmagic.upgradeRemoveRitual.info=Removes all upgrades (and downgrades) from your Living Armor and gives you the corresponding Upgrade (and Downgrade) Tomes. These Tomes can be used to be applied to your Living Armor again. -ritual.bloodmagic.armourEvolveRitual.info=Increases the amount of maximum Upgrade Points on your Living Armor to 300. -ritual.bloodmagic.animalGrowthRitual.info=Increases the maturity rate of baby animals within its range. -ritual.bloodmagic.forsakenSoulRitual.info=Damages mobs within its damage range and when the mob dies a demon crystal within its crystal range will be grown. -ritual.bloodmagic.crystalHarvestRitual.info=Breaks Demon Will crystal clusters within its range, dropping the results on top of the crystals. -ritual.bloodmagic.placerRitual.info=Grabs blocks that are inside of the connected inventory and places them into the world. -ritual.bloodmagic.fellingRitual.info=A standard tree-cutting machine, this ritual will cut down all trees and leaves within its area and collect the drops. -ritual.bloodmagic.pumpRitual.info=Looks around the world and grabs fluids from the defined area. Will only remove and put the fluid into the connected tank if the tank has at least a bucket's worth of the same fluid. -ritual.bloodmagic.altarBuilderRitual.info=Builds an altar out of the components inside of the connected inventory. -ritual.bloodmagic.portalRitual.info=Creates a portal network based on the activator and the immediately surrounding blocks. Blocks can be changed after activation without changing the network of portals, and portals with the same "key" will link together. -ritual.bloodmagic.meteorRitual.info=Consumes an item inside of its item range to summon a meteor full of resources from the sky, aimed directly at the ritual. - -ritual.bloodmagic.waterRitual.waterRange.info=(Water) The area that the ritual will place water source blocks. -ritual.bloodmagic.waterRitual.waterTank.info=(Raw) The tank that the ritual will place water into. -ritual.bloodmagic.lavaRitual.lavaRange.info=(Lava) The area that the ritual will place lava source blocks. -ritual.bloodmagic.lavaRitual.lavaTank.info=(Raw) The tank that the ritual will place lava into. -ritual.bloodmagic.lavaRitual.fireFuse.info=(Vengeful) Entities in this range are afflicted by Fire Fuse. -ritual.bloodmagic.lavaRitual.fireResist.info=(Steadfast) Players in this range have Fire Resist applied. -ritual.bloodmagic.lavaRitual.fireDamage.info=(Corrosive) Entities within this range that are immune to fire damage are hurt proportional to the Will. -ritual.bloodmagic.greenGroveRitual.growing.info=(Growth) The area that the ritual will grow plants in. -ritual.bloodmagic.greenGroveRitual.leech.info=(Corrosive) Entities in this area have their life drained to grow nearby crops. -ritual.bloodmagic.greenGroveRitual.hydrate.info=(Steadfast) Blocks within this range are rehydrated into farmland, and seeds within the area are planted nearby. -ritual.bloodmagic.jumpRitual.jumpRange.info=(Jumping) Entities in this range will be launched in the air. -ritual.bloodmagic.wellOfSufferingRitual.altar.info=(Altar) This range defines the area that the ritual searches for the blood altar. Changing this will either expand or limit the range to a certain region. -ritual.bloodmagic.wellOfSufferingRitual.damage.info=(Damage) This defines where the ritual will damage a mob. All mobs inside of this range (except for players) will receive damage over time. -ritual.bloodmagic.featheredKnifeRitual.altar.info=(Altar) This range defines the area that the ritual searches for the blood altar. Changing this will either expand or limit the range to a certain region. -ritual.bloodmagic.featheredKnifeRitual.damage.info=(Damage) This defines where the ritual will damage a player. Players inside of this range will receive damage over time up to the specified limit. -ritual.bloodmagic.regenerationRitual.heal.info=(Healing) Entities within this range will receive a regeneration buff. -ritual.bloodmagic.regenerationRitual.vampire.info=(Vampirism) Mobs within this range have their health syphoned to heal players in the Healing range. -ritual.bloodmagic.harvestRitual.harvestRange.info=(Harvesting) Plants within this range will be harvested. -ritual.bloodmagic.magneticRitual.placementRange.info=(Placement) The range that the ritual will place the grabbed ores into. -ritual.bloodmagic.crushingRitual.crushingRange.info=(Crushing) The blocks that the ritual will break. -ritual.bloodmagic.crushingRitual.chest.info=(Chest) The location of the inventory that the ritual will place the broken blocks into. -ritual.bloodmagic.fullStomachRitual.fillRange.info=(Feeding) The range that the ritual will look at to feed players. -ritual.bloodmagic.fullStomachRitual.chest.info=(Chest) The location of the inventory that the ritual will grab food from to feed players in range. -ritual.bloodmagic.interdictionRitual.interdictionRange.info=(Push) The area of the ritual where mobs will be pushed. All mobs are pushed away from the master ritual stone, regardless of where this area is. -ritual.bloodmagic.containmentRitual.containmentRange.info=(Containment) The area of the ritual where mobs will be pulled. All mobs are pulled towards the master ritual stone, regardless of where this area is. -ritual.bloodmagic.speedRitual.sanicRange.info=(Speed) All entities within this area are launched in the direction of the arrow formed by the ritual. -ritual.bloodmagic.suppressionRitual.suppressionRange.info=(Suppress) All liquids within the range are suppressed. -ritual.bloodmagic.expulsionRitual.expulsionRange.info=(Expulsion) The area from which players that are not owner or have an orb in the chest will be teleported away from. -ritual.bloodmagic.zephyrRitual.zephyrRange.info=(Suction) Items within this range will be sucked into the linked chest. -ritual.bloodmagic.zephyrRitual.chest.info=(Chest) The location of the inventory that the ritual will place the picked up items into. -ritual.bloodmagic.animalGrowthRitual.growing.info=(Growth) Animals within this range will grow much faster. -ritual.bloodmagic.animalGrowthRitual.chest.info=(Chest) Chest for breeding items if properly augmented. -ritual.bloodmagic.forsakenSoulRitual.crystal.info=(Crystal) Demon Crystals in this range receive an increase in growth speed when a mob is killed by the ritual. -ritual.bloodmagic.forsakenSoulRitual.damage.info=(Damage) Mobs within this range will be slowly damaged, and when killed will grow the crystals. -ritual.bloodmagic.crystalHarvestRitual.crystal.info=(Crystal) All Demon Will crystal clusters have a single crystal broken off, spawning the crystal into the world. If there is only one crystal on the cluster, it will not break it. - -ritual.bloodmagic.ellipseRitual.info=Creates a hollow spheroid around the ritual using the blocks in the attached chest. -ritual.bloodmagic.ellipseRitual.spheroidRange.info=(Placement) The range that the ritual will place its blocks in. Spheroid is centered on the ritual - if one side is shorter than the side opposite the spheroid is truncated. -ritual.bloodmagic.ellipseRitual.chest.info=(Chest) The location of the inventory that the ritual will grab blocks from to place in the world. - -ritual.bloodmagic.placerRitual.placerRange.info=(Placement) The range that the ritual will place its blocks in. -ritual.bloodmagic.placerRitual.chest.info=(Chest) The location of the inventory that the ritual will grab blocks from to place in the world. -ritual.bloodmagic.fellingRitual.fellingRange.info=(Cutting) The range that the ritual will search out logs and leaves in order to cut down. -ritual.bloodmagic.fellingRitual.chest.info=(Chest) The location of the inventory that the ritual will place the results into. -ritual.bloodmagic.pumpRitual.pumpRange.info=(Pump) The region that the ritual will look for fluids to grab from the world. - -ritual.bloodmagic.downgradeRitual.dialogue.bow.1=So, mortal, you want to gain more power...? -ritual.bloodmagic.downgradeRitual.dialogue.bow.100=Of course you must know that everything has a cost... I cannot simply grant you more power without you paying something in return... -ritual.bloodmagic.downgradeRitual.dialogue.bow.300=If you lay an offering before me, you will forsake your perception, preventing you from using long-ranged projectiles with any form of accuracy. Arrows will no longer be your key to victory. -ritual.bloodmagic.downgradeRitual.dialogue.bow.500=But in return, I will unlock your armour so that it may grow even further... All you have to do is kneel before this altar with the correct offering... -ritual.bloodmagic.downgradeRitual.dialogue.quenched.1=Fufufu... Greetings. I see that you wish to become more powerful. -ritual.bloodmagic.downgradeRitual.dialogue.quenched.100=You must be fully aware that when one's cup becomes full, it invariably has to empty once more to be filled again. -ritual.bloodmagic.downgradeRitual.dialogue.quenched.300=As such, I offer you a deal: by forsaking one's ability to drink, I shall grant you a vast increase to your potential. Whether this is a deal you think is worth taking is another matter entirely... -ritual.bloodmagic.downgradeRitual.dialogue.quenched.500=So kneel, mortal, and drink from this cup that I offer to you, for it may be your last drink. -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.1=Hmmm... What is it that you truly desire? -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.100=If it is strength beyond mortal men, then I cannot provide that - instead, I can offer you a different deal... -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.300=I can expand the capabilities of your armour, allowing you to achieve greater heights. However, I will need something from you in return: your strength in physical combat. -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.500=By agreeing to this, you will no longer be able to swing a weapon with as much certainty, only able to do a fraction of the damage you could before. -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.700=So, the choice is yours: will you kneel at this altar, or will you still take up your sword? -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.1=Beware, mortal, for you are on shaky ground. -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.100=Unlike my comrades, I offer one of the most grim deals that you could possibly hope for as a magician that deals in your own health. -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.300=Although your wounds may heal, they will do so slowly if you accept my "offering," and the stings of battle will plague you even more. -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.500=So think carefully before you rush into something that you may regret, since even though your cup may be empty it will be almost impossible to fill once more... +upgrade.bloodmagic:jump.name=Jump Boost # Chat -chat.bloodmagic.altarMaker.setTier=Set Tier to: %d -chat.bloodmagic.altarMaker.building=Building a Tier %d Altar -chat.bloodmagic.altarMaker.destroy=Destroyed a Tier %d Altar -chat.bloodmagic.altarMaker.creativeOnly=This is a creative only item. -chat.bloodmagic.damageSource=%s's soul became too weak +chat.bloodmagic:living_upgrade_level_increase=%s has leveled up to %d +chat.bloodmagic:altar_builder_cycled=Set tier to %s -chat.bloodmagic.ritual.weak=You feel a push, but are too weak to perform this ritual. -chat.bloodmagic.ritual.prevent=The ritual is actively resisting you! -chat.bloodmagic.ritual.activate=A rush of energy flows through the ritual! -chat.bloodmagic.ritual.notValid=You feel that these runes are not configured correctly... +# Tooltips -chat.bloodmagic.livingArmour.upgrade.poisonRemove=You are starting to feel better already! -chat.bloodmagic.livingArmour.upgrade.fireRemove=&6A cool feeling envelopes you as the burning subsides. -chat.bloodmagic.livingArmour.upgrade.grimReaper=&6A shadowy force pulls you from the brink of death! -chat.bloodmagic.livingArmour.newUpgrade=&4Upgrade acquired! +tooltip.bloodmagic:bound_owner=Bound to: %s +tooltip.bloodmagic:object_owner=Added by: %s +tooltip.bloodmagic:living_points=%d / %d points used +tooltip.bloodmagic:tier=Tier: %s +tooltip.bloodmagic:progress=Progress: %s +tooltip.bloodmagic:demon_will_raw=Raw Will +tooltip.bloodmagic:demon_will_corrosive=Corrosive Will +tooltip.bloodmagic:demon_will_destructive=Destructive Will +tooltip.bloodmagic:demon_will_vengeful=Vengeful Will +tooltip.bloodmagic:demon_will_steadfast=Steadfast Will -chat.bloodmagic.routing.remove=Removing contained location -chat.bloodmagic.routing.set=Setting node location -chat.bloodmagic.routing.link.master=Linked node to master! -chat.bloodmagic.routing.link=Linked nodes together +# JEI -chat.bloodmagic.altar.comp.glowstone=a block of glowstone -chat.bloodmagic.altar.comp.bloodstone=a large bloodstone brick -chat.bloodmagic.altar.comp.beacon=a beacon -chat.bloodmagic.altar.comp.bloodrune=a blood rune -chat.bloodmagic.altar.comp.crystal=an unimplemented item -chat.bloodmagic.altar.comp.notair=a solid block - -chat.bloodmagic.altar.nextTier=The next tier of blood altar is missing %s at %s. - -chat.bloodmagic.mimic.potionSet=Potion trap has been set. -chat.bloodmagic.mimic.potionRemove=Potion trap has been disabled. -chat.bloodmagic.mimic.potionInterval.up=Potion Interval has been increased to: %d ticks. -chat.bloodmagic.mimic.potionInterval.down=Potion Interval has been decreased to: %d ticks. -chat.bloodmagic.mimic.detectRadius.up=Player detection radius has been increased to: %d blocks. -chat.bloodmagic.mimic.detectRadius.down=Player detection radius has been decreased to: %d blocks. -chat.bloodmagic.mimic.potionSpawnRadius.up=Potion spawning radius has been increased to: %d blocks. -chat.bloodmagic.mimic.potionSpawnRadius.down=Potion spawning radius has been decreased to: %d blocks. - -# entity -entity.bloodmagic.SentientSpecter.name=Sentient Specter -entity.bloodmagic.Mimic.name=Mimic - -# Commands -commands.bloodmagic.error.arg.invalid=Invalid arguments -commands.bloodmagic.error.arg.missing=Not enough arguments -commands.bloodmagic.error.arg.player.missing=You must specify which player you wish to perform this action on. -commands.bloodmagic.error.404=Command not found! -commands.bloodmagic.error.unknown=Unknown command! -commands.bloodmagic.error.perm=You do not have permission to use this command. - -commands.bloodmagic.success=Executed successfully - -commands.bloodmagic.format.help=%s - %s -commands.bloodmagic.format.error=%s - %s - -commands.bloodmagic.help.usage=/bloodmagic help -commands.bloodmagic.help.help=Displays the help information for the "/bloodmagic" command. - -commands.bloodmagic.network.usage=/bloodmagic network [syphon|add|get|fill|cap] player [amount] -commands.bloodmagic.network.help=LP network utilities -commands.bloodmagic.network.syphon.help=Removes the given amount of LP from the given player's LP network. -commands.bloodmagic.network.syphon.success=Successfully syphoned %d LP from %s. -commands.bloodmagic.network.add.help=Adds the given amount of LP to the given player's LP network. Follows standard LP gain rules. -commands.bloodmagic.network.add.success=Successfully added %d LP to %s's LP network. -commands.bloodmagic.network.set.help=Sets the given player's LP to the given amount. -commands.bloodmagic.network.set.success=Successfully set %s's LP network to %d LP. -commands.bloodmagic.network.get.help=Returns the amount of LP in the given player's LP network. -commands.bloodmagic.network.fill.help=Fills the given player's LP network to %d. -commands.bloodmagic.network.fill.success=Successfully filled %s's LP network. -commands.bloodmagic.network.cap.help=Fills the given player's LP network to the max that their highest Blood Orb can store. -commands.bloodmagic.network.cap.success=Successfully capped off %s's LP network. - -commands.bloodmagic.bind.usage=/bloodmagic bind [true|false] [player] -commands.bloodmagic.bind.help=Attempts to (un)bind the currently held item. -commands.bloodmagic.bind.success=Binding successful -commands.bloodmagic.bind.remove.success=Unbinding successful - -commands.bloodmagic.orb.usage=/bloodmagic orb [set|get] player [tier] -commands.bloodmagic.orb.help=Used to set or get the Player's max Blood Orb tier. - -commands.bloodmagic.bind.failed.noPlayer=There is no player specified -commands.bloodmagic.bind.failed.alreadyBound=Item is already bound; use /unbind to unbind it -commands.bloodmagic.bind.failed.notBindable=Item cannot be bound -commands.bloodmagic.unbind.usage=/unbind -commands.bloodmagic.unbind.success=Item successfully unbound! -commands.bloodmagic.unbind.failed.notBindable=Item cannot be unbound -commands.bloodmagic.soulnetwork.usage=/soulnetwork [amount] -commands.bloodmagic.soulnetwork.add.success=Successfully added %dLP to %s's Soul Network! -commands.bloodmagic.soulnetwork.subtract.success=Successfully subtracted %dLP from %s's Soul Network! -commands.bloodmagic.soulnetwork.fill.success=Successfully filled %s's Soul Network! -commands.bloodmagic.soulnetwork.empty.success=Successfully emptied %s's Soul Network! -commands.bloodmagic.soulnetwork.get.success=There is %dLP in %s's Soul Network! -commands.bloodmagic.soulnetwork.noPlayer=There is no player specified -commands.bloodmagic.soulnetwork.noCommand=There is no command specified -commands.bloodmagic.soulnetwork.notACommand=That is not a valid command -commands.bloodmagic.soulnetwork.fillMax.success=Successfully filled %s's Soul Network to their orb max! -commands.bloodmagic.soulnetwork.create.success=Successfully created %s's Soul Network (Orb tier: %d) - -# GUI -tile.bloodmagic.inputNode.name=Input Node -tile.bloodmagic.outputNode.name=Output Node -gui.bloodmagic.save=Save -gui.bloodmagic.cancel=Cancel -gui.bloodmagic.default=Default -gui.bloodmagic.toggle=Toggle -config.bloodmagic.edit_hud=Edit HUD Elements - -# Keybinds -bloodmagic.keybind.open_holding=Open Sigil of Holding -bloodmagic.keybind.cycle_holding_pos=Cycle Sigil (+) -bloodmagic.keybind.cycle_holding_neg=Cycle Sigil (-) - -# JustEnoughItems -jei.bloodmagic.recipe.altar=Blood Altar -jei.bloodmagic.recipe.binding=Alchemy Array (Binding) -jei.bloodmagic.recipe.alchemyArrayCrafting=Alchemy Array -jei.bloodmagic.recipe.soulForge=Hellfire Forge -jei.bloodmagic.recipe.alchemyTable=Alchemy Table -jei.bloodmagic.recipe.armourDowngrade=Penance (Ritual) -jei.bloodmagic.recipe.requiredLP=LP: %d -jei.bloodmagic.recipe.requiredTier=Tier: %d -jei.bloodmagic.recipe.consumptionRate=Consumption: %d LP/t -jei.bloodmagic.recipe.drainRate=Drain: %d LP/t -jei.bloodmagic.recipe.minimumSouls=Minimum: %1$,.2f Will -jei.bloodmagic.recipe.soulsDrained=Drained: %1$,.2f Will -jei.bloodmagic.recipe.lpDrained=Drained: %,d LP -jei.bloodmagic.recipe.ticksRequired=Time: %,d Ticks - -jei.bloodmagic.desc.altarBuilder=A creative-only item for use in debugging and testing.\n\nShift + Right click to change the tier to build. Right click an Altar to initiate the build.\n\nBreak an Altar while holding to dismantle it. -jei.bloodmagic.desc.demonicWill=An imprint of a demonic entity attached to a creature.\n\nCan be obtained by killing a mob with a sentient weapon or by throwing a snare at a mob and killing it while it has white particles. - -# WAILA -waila.bloodmagic.sneak=&oSneak for Information -waila.bloodmagic.array.reagent=Reagent: %s -waila.bloodmagic.array.catalyst=Catalyst: %s -option.bloodmagic.bypassSneak=Bypass Sneak -option.bloodmagic.bloodAltar=Blood Altar -option.bloodmagic.ritualController=Ritual Stones -option.bloodmagic.teleposer=Teleposer -option.bloodmagic.array=Alchemy Array - -# Thaumcraft -tc.research_category.BLOODMAGIC=Sanguine Arcana - -# Thaumcraft Research -bloodmagic.research_name.BLOODMAGIC=Blood Magic -bloodmagic.research_text.BLOODMAGIC=Sanguine Arcana -bloodmagic.research_page.BLOODMAGIC.1=The realm of the Blood Magics has always appeared to be a more solitary and "individual" art with blood mages being notoriously reclusive and a bit insane at times. However, the powers of self-sacrifice and life essence have uses even beyond a normal blood mage's sight, in fact, it is quite apparent that it may have some uses in thaumaturgy after all! - -# Buttons -button.bloodmagic.tooltip.fill=Fill network +jei.bloodmagic:blood_altar=Blood Altar +jei.bloodmagic:drain_rate=Drain Rate: %d +jei.bloodmagic:consumption_rate=Consumption Rate: %d +jei.bloodmagic:required_tier=Tier: %s +jei.bloodmagic:required_lp=LP: %d \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang_old b/src/main/resources/assets/bloodmagic/lang/en_US.lang_old deleted file mode 100644 index 2d74a6ce..00000000 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang_old +++ /dev/null @@ -1,542 +0,0 @@ -#Items -item.AlchemicalWizardry.bindable.activationCrystal.weak.name=Weak Activation Crystal -item.AlchemicalWizardry.bindable.activationCrystal.awakened.name=Awakened Activation Crystal -item.AlchemicalWizardry.bindable.activationCrystal.creative.name=Creative Activation Crystal - -item.AlchemicalWizardry.dagger.name=Sacrificial Dagger -item.AlchemicalWizardry.dagger.creative.name=Creative Sacrificial Dagger - -item.AlchemicalWizardry.scribe.water.name=Water Scribing Tools -item.AlchemicalWizardry.scribe.fire.name=Fire Scribing Tools -item.AlchemicalWizardry.scribe.earth.name=Earth Scribing Tools -item.AlchemicalWizardry.scribe.air.name=Air Scribing Tools -item.AlchemicalWizardry.scribe.dusk.name=Dusk Scribing Tools -item.AlchemicalWizardry.scribe.dawn.name=Dawn Scribing Tools - -item.AlchemicalWizardry.slate.blank.name=Blank Slate -item.AlchemicalWizardry.slate.reinforced.name=Reinforced Slate -item.AlchemicalWizardry.slate.imbued.name=Imbued Slate -item.AlchemicalWizardry.slate.demonic.name=Demonic Slate - -item.AlchemicalWizardry.focus.weak.name=Teleposition Focus -item.AlchemicalWizardry.focus.enhanced.name=Enhanced Teleposition Focus -item.AlchemicalWizardry.focus.reinforced.name=Reinforced Teleposition Focus -item.AlchemicalWizardry.focus.demonic.name=Demonic Teleposition Focus - -item.AlchemicalWizardry.orb.weak.name=Weak Blood Orb -item.AlchemicalWizardry.orb.apprentice.name=Apprentice Blood Orb -item.AlchemicalWizardry.orb.magician.name=Magician Blood Orb -item.AlchemicalWizardry.orb.master.name=Master Blood Orb -item.AlchemicalWizardry.orb.archmage.name=Archmage Blood Orb -item.AlchemicalWizardry.orb.transcendent.name=Transcendent Blood Orb - -item.AlchemicalWizardry.reagent.incendium.name=Incendium -item.AlchemicalWizardry.reagent.magicales.name=Magicales -item.AlchemicalWizardry.reagent.sanctus.name=Sanctus -item.AlchemicalWizardry.reagent.aether.name=Aether -item.AlchemicalWizardry.reagent.crepitous.name=Crepitous -item.AlchemicalWizardry.reagent.crystallos.name=Crystallos -item.AlchemicalWizardry.reagent.terrae.name=Terrae -item.AlchemicalWizardry.reagent.aquasalus.name=Aquasalus -item.AlchemicalWizardry.reagent.tennebrae.name=Tennebrae -item.AlchemicalWizardry.reagent.offensa.name=Offensa -item.AlchemicalWizardry.reagent.praesidium.name=Praesidium -item.AlchemicalWizardry.reagent.orbisterrae.name=Orbis Terrae -item.AlchemicalWizardry.reagent.virtus.name=Virtus -item.AlchemicalWizardry.reagent.reductus.name=Reductus -item.AlchemicalWizardry.reagent.potentia.name=Potentia - -item.AlchemicalWizardry.sigil.air.name=Air Sigil -item.AlchemicalWizardry.sigil.bloodLight.name=Sigil of the Blood Lamp -item.AlchemicalWizardry.sigil.compression.name=Sigil of Compression -item.AlchemicalWizardry.sigil.divination.name=Divination Sigil - -# Tooltips -tooltip.sigil.air.desc=I feel lighter already... -tooltip.sigil.bloodLight.desc=I see a light! -tooltip.sigil.compression.desc=Hands of Diamonds -tooltip.sigil.divination.desc=Peer into the soul - -#Block Localization -tile.altar.name=Blood Altar -tile.blood_rune.blank.name=Blood Rune -tile.blood_rune.fill.name=Rune of Augmented Capacity -tile.blood_rune.empty.name=Rune of Dislocation -tile.blood_rune.orb.name=Rune of the Orb -tile.blood_rune.betterCapacity.name=Rune of Superior Capacity -tile.blood_rune.acceleration.name=Rune of Acceleration -tile.speed_rune.name=Speed Rune -tile.efficiency_rune.name=Efficiency Rune -tile.sacrifice_rune.name=Rune of Sacrifice -tile.self_sacrifice_rune.name=Rune of Self-Sacrifice -tile.ritual_stone.name=Ritual Stone -tile.master_ritual_stone.name=Master Ritual Stone -tile.filled_socket.name=Filled Socket -tile.imperfect_ritual_stone.name=Imperfect Ritual Stone -tile.soul_armour_forge.name=Soul Armour Forge -tile.empty_socket.name=Empty Socket -tile.bloodstone_brick.name=Bloodstone Brick -tile.large_bloodstone_brick.name=Large Bloodstone Brick -tile.chemistry_set.name=Alchemical Chemistry Set -tile.spell_table.name=Spell Table -tile.pedestal.name=Arcane Pedestal -tile.plinth.name=Arcane Plinth -tile.teleposer.name=Teleposer -tile.spell_conduit.name=Spell Conduit -tile.spell_paradigm.projectile.name=Particle Generator -tile.spell_paradigm.self.name=Self Augmentator -tile.spell_paradigm.melee.name=Melee Aggregator -tile.spell_paradigm.tool.name=Tool Forger -tile.spell_enhancement.power1.name=Unstable Spell Empowerer -tile.spell_enhancement.power2.name=Standard Spell Empowerer -tile.spell_enhancement.power3.name=Reinforced Spell Empowerer -tile.spell_enhancement.power4.name=Imbued Spell Empowerer -tile.spell_enhancement.power5.name=Demonic Spell Empowerer -tile.spell_enhancement.cost1.name=Unstable Spell Dampener -tile.spell_enhancement.cost2.name=Standard Spell Dampener -tile.spell_enhancement.cost3.name=Reinforced Spell Dampener -tile.spell_enhancement.cost4.name=Imbued Spell Dampener -tile.spell_enhancement.cost5.name=Demonic Spell Dampener -tile.spell_enhancement.potency1.name=Unstable Spell Augmentor -tile.spell_enhancement.potency2.name=Standard Spell Augmentor -tile.spell_enhancement.potency3.name=Reinforced Spell Augmentor -tile.spell_enhancement.potency4.name=Imbued Spell Augmentor -tile.spell_enhancement.potency5.name=Demonic Spell Augmentor -tile.spell_modifier.default.name=Default Spell Modifier -tile.spell_modifier.offensive.name=Offensive Spell Modifier -tile.spell_modifier.defensive.name=Defensive Spell Modifier -tile.spell_modifier.environmental.name=Environmental Spell Modifier -tile.spell_effect.fire.name=Crucible of Fire -tile.spell_effect.ice.name=Ice Maker -tile.spell_effect.wind.name=Wind Generator -tile.spell_effect.earth.name=Earth Former -tile.alchemical_calcinator.name=Alchemical Calcinator -tile.crystal_belljar.name=Crystal Belljar -tile.reagent_conduit.name=Alchemy Relay -tile.life_essence.name=Life Essence -tile.crystal_block.fullCrystal.name=Crystal Cluster -tile.crystal_block.crystalBrick.name=Crystal Cluster Brick -tile.demon_portal.name=Demon Portal -tile.demon_chest.name=Demon's Chest -tile.enchantment_glyph.enchantability.name=Glyph of the Adept Enchanter -tile.enchantment_glyph.enchantmentLevel.name=Glyph of Arcane Potential -tile.stability_glyph.stability1.name=Glyph of Rigid Stability -tile.schematic_saver.name=Schematic Saver -tile.mimic_block.name=Mimic Block -tile.spectral_container.name=Spectral Container -tile.blood_light.name=Blood Light -tile.spectral_block.name=Spectral Block -tile.incense_crucible.name=Incense Crucible - -#Item Localization -item.weak_blood_orb.name=Weak Blood Orb -item.apprentice_blood_orb.name=Apprentice Blood Orb -item.magician_blood_orb.name=Magician's Blood Orb -item.master_blood_orb.name=Master Blood Orb -item.archmage_blood_orb.name=Archmage's Blood Orb -item.energy_blast.name=Energy Blaster -item.energy_sword.name=Bound Blade -item.lava_crystal.name=Lava Crystal -item.water_sigil.name=Water Sigil -item.lava_sigil.name=Lava Sigil -item.void_sigil.name=Void Sigil -item.blank_slate.name=Blank Slate -item.reinforced_slate.name=Reinforced Slate -item.sacrificial_dagger.name=Sacrificial Knife -item.dagger_of_sacrifice.name=Dagger of Sacrifice -item.air_sigil.name=Air Sigil -item.sigil_of_the_fast_miner.name=Sigil of the Fast Miner -item.sigil_of_elemental_affinity.name=Sigil of Elemental Affinity -item.sigil_of_haste.name=Sigil of Haste -item.sigil_of_holding.name=Sigil of Holding -item.divination_sigil.name=Divination Sigil -item.water_scribe_tool.name=Elemental Inscription Tool: Water -item.fire_scribe_tool.name=Elemental Inscription Tool: Fire -item.earth_scribe_tool.name=Elemental Inscription Tool: Earth -item.air_scribe_tool.name=Elemental Inscription Tool: Air -item.dusk_scribe_tool.name=Elemental Inscription Tool: Dusk -item.activation_crystal_weak.name=Weak Activation Crystal -item.activation_crystal_awakened.name=Awakened Activation Crystal -item.activation_crystal_creative.name=Creative Activation Crystal -item.bound_pickaxe.name=Bound Pickaxe -item.bound_axe.name=Bound Axe -item.bound_shovel.name=Bound Shovel -item.bound_helmet.name=Bound Helmet -item.bound_chestplate.name=Bound Chestplate -item.bound_leggings.name=Bound Leggings -item.bound_boots.name=Bound Boots -item.weak_blood_shard.name=Weak Blood Shard -item.growth_sigil.name=Sigil of the Green Grove -item.blank_spell.name=Unbound Crystal -item.alchemy_flask.name=Potion Flask -item.standard_binding_agent.name=Standard Binding Agent -item.mundane_power_catalyst.name=Mundane Power Catalyst -item.average_power_catalyst.name=Average Power Catalyst -item.greater_power_catalyst.name=Greater Power Catalyst -item.mundane_lengthening_catalyst.name=Mundane Lengthening Catalyst -item.average_lengthening_catalyst.name=Average Lengthening Catalyst -item.greater_lengthening_catalyst.name=Greater Lengthening Catalyst -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Aether -item.simple_catalyst.name=Simple Catalyst -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demon_blood_shard.name=Demon Blood Shard -item.sigil_of_wind.name=Sigil of the Whirlwind -item.teleposition_focus.name=Teleposition Focus -item.enhanced_teleposition_focus.name=Enhanced Teleposition Focus -item.reinforced_teleposition_focus.name=Reinforced Teleposition Focus -item.demonic_teleposition_focus.name=Demonic Teleposition Focus -item.imbued_slate.name=Imbued Slate -item.demonic_slate.name=Demonic Slate -item.sigil_of_the_bridge.name=Sigil of the Phantom Bridge -item.armour_inhibitor.name=Armour Inhibitor -item.creative_orb.name=Orb of Testing -item.weak_filling_agent.name=Weak Filling Agent -item.standard_filling_agent.name=Standard Filling Agent -item.enhanced_filling_agent.name=Enhanced Filling Agent -item.weak_binding_agent.name=Weak Binding Agent -item.ritual_diviner.name=Ritual Diviner -item.ritual_dismantler.name=Ritual Dismantler -item.sigil_of_magnetism.name=Sigil of Magnetism -item.key_of_binding.name=Key of Binding -item.energy_bazooka.name=Energy Bazooka -item.blood_light_sigil.name=Sigil of the Blood Lamp -item.complex_spell_crystal.name=Complex Spell Crystal -item.sigil_of_supression.name=Sigil of Supression -item.sigil_of_ender_severance.name=Sigil of Ender Severance -item.bucket_life.name=Bucket of Life -item.base_items.quartz_rod.name=Quartz Rod -item.base_items.empty_core.name=Empty Core -item.base_items.magicales_cable.name=Magicales Cable -item.base_items.wood_brace.name=Wooden Brace -item.base_items.stone_brace.name=Stone Brace -item.base_items.projectile_core.name=Projectile Core -item.base_items.self_core.name=Self Core -item.base_items.melee_core.name=Melee Core -item.base_items.tool_core.name=Tool Core -item.base_items.paradigm_back_plate.name=Paradigm Plate -item.base_items.output_cable.name=Output Spell Cable -item.base_items.input_cable.name=Input Spell Cable -item.base_items.flame_core.name=Fire Core -item.base_items.icy_core.name=Icy Core -item.base_items.gust_core.name=Gusty Core -item.base_items.earthen_core.name=Earthen Core -item.base_items.cracked_runic_plate.name=Cracked Runic Plate -item.base_items.runic_plate.name=Runic Plate -item.base_items.scribed_runic_plate.name=Imbued Runic Plate -item.base_items.default_core.name=Unattuned Core -item.base_items.offensive_core.name=Offensive Core -item.base_items.defensive_core.name=Defensive Core -item.base_items.environmental_core.name=Environmental Core -item.base_items.power_core.name=Power Core -item.base_items.cost_core.name=Reduction Core -item.base_items.potency_core.name=Potency Core -item.base_items.obsidian_brace.name=Obsidian Brace -item.base_items.ethereal_slate.name=Ethereal Slate -item.base_items.life_shard.name=Life Shard -item.base_items.soul_shard.name=Soul Shard -item.base_items.life_brace.name=Living Brace -item.base_items.soul_runic_plate.name=Soul Runic Plate -item.base_items.ender_shard.name=Ender Shard -item.base_alchemy_items.offensa.name=Offensa -item.base_alchemy_items.praesidium.name=Praesidium -item.base_alchemy_items.orbis_terrae.name=Orbis Terrae -item.base_alchemy_items.strengthened_catalyst.name=Strengthened Catalyst -item.base_alchemy_items.concentrated_catalyst.name=Concentrated Catalyst -item.base_alchemy_items.fractured_bone.name=Fractured Bone -item.base_alchemy_items.virtus.name=Virtus -item.base_alchemy_items.reductus.name=Reductus -item.base_alchemy_items.potentia.name=Potentia -item.sanguine_helmet.name=Sanguine Helmet -item.seer_sigil.name=Sigil of Sight -item.fluid_sigil.name=Sigil of Fluidity -item.multi_tool.name=Dynamic Mace -item.combinational_catalyst.name=Combinational Catalyst -item.sanguine_robe.name=Sanguine Robes -item.sanguine_pants.name=Sanguine Leggings -item.sanguine_boots.name=Sanguine Boots -item.alchemical_router.name=Alchemic Router -item.alchemical_segmenter.name=Alchemic Segmenter -item.alchemical_cleanser.name=Alchemic Cleanser -item.demon_crystal.name=Demon Crystal -item.creative_dagger.name=Creative Sacrificial Knife -item.blood_pack.name=Blood Letter's Pack -item.harvest_sigil.name=Harvest Goddess Sigil -item.compression_sigil.name=Sigil of Compression -item.assassin_sigil.name=Sigil of the Assassin -item.transcendent_blood_orb.name=Transcendent Blood Orb -item.mail_catalogue.name=Mail Order Catalogue -item.input_routing_focus.name=Input Routing Focus -item.output_routing_focus.default.name=Default Output Routing Focus -item.output_routing_focus.modItem.name=Output Routing Focus (ModItem) -item.output_routing_focus.ignMeta.name=Output Routing Focus (Ignore Meta) -item.output_routing_focus.matchNBT.name=Output Routing Focus (MatchNBT) -item.output_routing_focus.global.name=Output Routing Focus (Global) -item.dawn_scribe_tool.name=Elemental Inscription Tool: Dawn -item.bound_helmet_earth.name=Earth Omega Helmet -item.bound_chestplate_earth.name=Earth Omega Chestplate -item.bound_leggings_earth.name=Earth Omega Leggings -item.bound_boots_earth.name=Earth Omega Boots -item.bound_helmet_wind.name=Wind Omega Helmet -item.bound_chestplate_wind.name=Wind Omega Chestplate -item.bound_leggings_wind.name=Wind Omega Leggings -item.bound_boots_wind.name=Wind Omega Boots -item.bound_helmet_fire.name=Fire Omega Helmet -item.bound_chestplate_fire.name=Fire Omega Chestplate -item.bound_leggings_fire.name=Fire Omega Leggings -item.bound_boots_fire.name=Fire Omega Boots -item.bound_helmet_water.name=Water Omega Helmet -item.bound_chestplate_water.name=Water Omega Chestplate -item.bound_leggings_water.name=Water Omega Leggings -item.bound_boots_water.name=Water Omega Boots - -item.incense.wood_ash.name=Wood Ash -item.incense.byrrus.name=Byrrus -item.incense.livens.name=Livens -item.incense.viridis.name=Viridis -item.incense.purpura.name=Purpura - -#Creative Tab -itemGroup.tabBloodMagic=Blood Magic - -#Extra Strings -bm.string.consume=Usage -bm.string.drain=Drain -bm.string.tier=Tier -bm.string.crafting.orb.shaped=Shaped Orb Crafting -bm.string.crafting.orb.shapeless=Shapeless Orb Crafting -text.recipe.altar=Blood Altar -text.recipe.altar.tier=Tier: %s -text.recipe.altar.bloodRequired=LP: %s -text.recipe.shapedOrb=Shaped Orb Recipe - -#Entities -entity.AWWayofTime.EarthElemental.name=Earth Elemental -entity.AWWayofTime.FireElemental.name=Fire Elemental -entity.AWWayofTime.HolyElemental.name=Holy Elemental -entity.AWWayofTime.ShadeElemental.name=Shade Elemental -entity.AWWayofTime.WaterElemental.name=Water Elemental -entity.AWWayofTime.AirElemental.name=Air Elemental -entity.AWWayofTime.Shade.name=Shade -entity.AWWayofTime.BoulderFist.name=Boulder Fist -entity.AWWayofTime.IceDemon.name=Ice Demon -entity.AWWayofTime.SmallEarthGolem.name=Small Earth Golem -entity.AWWayofTime.WingedFireDemon.name=Winged Fire Demon -entity.AWWayofTime.BileDemon.name=Bile Demon -entity.AWWayofTime.LowerGuardian.name=Lower Guardian -entity.AWWayofTime.FallenAngel.name=Fallen Angel -entity.AWWayofTime.MinorDemonGruntGuardian.name=Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntGuardianWind.name=Wind Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntGuardianFire.name=Fire Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntGuardianIce.name=Ice Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntGuardianEarth.name=Earth Demon Grunt Guardian -entity.AWWayofTime.MinorDemonGruntWind.name=Wind Demon Grunt -entity.AWWayofTime.MinorDemonGruntFire.name=Fire Demon Grunt -entity.AWWayofTime.MinorDemonGruntIce.name=Ice Demon Grunt -entity.AWWayofTime.MinorDemonGruntEarth.name=Earth Demon Grunt -entity.AWWayofTime.MinorDemonGrunt.name=Demon Grunt - -#Commands -commands.soulnetwork.usage=/soulnetwork -commands.bind.usage=/bind -commands.bind.success=Item successfully bound! -commands.bind.failed.noPlayer=There is no player specified -commands.bind.failed.alreadyBound=Item is already bound; use /unbind to unbind it -commands.bind.failed.notBindable=Item cannot be bound -commands.unbind.usage=/unbind -commands.unbind.success=Item successfully unbound! -commands.unbind.failed.notBindable=Item cannot be unbound -commands.soulnetwork.usage=/soulnetwork [amount] -commands.soulnetwork.add.success=Successfully added %dLP to %s's Soul Network! -commands.soulnetwork.subtract.success=Successfully subtracted %dLP from %s's Soul Network! -commands.soulnetwork.fill.success=Successfully filled %s's Soul Network! -commands.soulnetwork.empty.success=Successfully emptied %s's Soul Network! -commands.soulnetwork.get.success=There is %dLP in %s's Soul Network! -commands.soulnetwork.noPlayer=There is no player specified -commands.soulnetwork.noCommand=There is no command specified -commands.soulnetwork.notACommand=That is not a valid command -commands.soulnetwork.fillMax.success=Successfully filled %s's Soul Network to their orb max! -commands.soulnetwork.create.success=Successfully created %s's Soul Network (Orb tier: %d) - -#Tooltips -tooltip.activationcrystal.weak=Activates low-level rituals -tooltip.activationcrystal.awakened=Activates more powerful rituals -tooltip.activationcrystal.creative=Creative Only - activates any ritual -tooltip.airsigil.desc=I feel lighter already... -tooltip.alchemy.coords=Coords: %d, %d, %d -tooltip.alchemy.damage=Damage: -tooltip.alchemy.dimension=Bound Dimension: %d -tooltip.alchemy.direction=Direction: -tooltip.alchemy.forrecipe=for Recipe -tooltip.alchemy.press=Press -tooltip.alchemy.recipe=&9Recipe: -tooltip.alchemy.ritualid=RitualID: -tooltip.alchemy.shift=shift -tooltip.alchemy.pressShift=-Press &l&9shift &7for Recipe- -tooltip.alchemy.usedinalchemy=Used in Alchemy -tooltip.alchemyflask.caution=CAUTION: Contents are throwable -tooltip.alchemyflask.swigsleft=Swigs Left: -tooltip.armorinhibitor.desc1=Used to suppress a soul's -tooltip.armorinhibitor.desc2=unnatural abilities. -tooltip.attunedcrystal.desc1=A tool to tune alchemy -tooltip.attunedcrystal.desc2=reagent transmission -tooltip.blankspell.desc=Crystal of infinite possibilities. -tooltip.bloodframe.desc=Stirs bees into a frenzy. -tooltip.bloodletterpack.desc=This pack really chaffes... -tooltip.bloodlightsigil.desc=I see a light! -tooltip.boundarmor.devprotect=Devilish Protection -tooltip.boundaxe.desc=Axe me about my puns! -tooltip.boundpickaxe.desc1=The Souls of the Damned -tooltip.boundpickaxe.desc2=do not like stone... -tooltip.boundshovel.desc=No, not that type of spade. -tooltip.caution.desc1=Caution: may cause -tooltip.caution.desc2=a bad day... -tooltip.cheatyitem.desc1=Right-click to fill network, -tooltip.cheatyitem.desc2=shift-right to empty. -tooltip.complexspellcrystal.desc=Crystal of unimaginable power -tooltip.crystalbelljar.contents=Current Contents: -tooltip.crystalbelljar.empty=- Empty -tooltip.telepositionfocus.demonic.desc1=A stronger version of the focus, -tooltip.telepositionfocus.demonic.desc2=using a demonic shard -tooltip.demonplacer.desc=Used to spawn demons. -tooltip.destclearer.desc1=Used to clear the destination -tooltip.destclearer.desc2=list for an alchemy container -tooltip.diablokey.desc=Binds other items to the owner's network -tooltip.divinationsigil.desc1=Peer into the soul to -tooltip.divinationsigil.desc2=get the current essence -tooltip.energybazooka.desc=Boom. -tooltip.energybattery.desc=Stores raw Life Essence -tooltip.energyblast.desc1=Used to fire devastating -tooltip.energyblast.desc2=projectiles. -tooltip.telepositionfocus.enhanced.desc1=A focus further enhanced in an altar -tooltip.fluidsigil.beastmode=Beast Mode -tooltip.fluidsigil.desc=A sigil with a lovely affinity for fluids -tooltip.fluidsigil.draintankmode=Drain Tank Mode -tooltip.fluidsigil.filltankmode=Fill Tank Mode -tooltip.fluidsigil.fluidplacementmode=Fluid Placement Mode -tooltip.fluidsigil.forcesyphonmode=Force-syphon Mode -tooltip.fluidsigil.syphoningmode=Syphoning Mode -tooltip.harvestsigil.desc=You sow what you reap -tooltip.infusedstone.desc1=Infused stone inside of -tooltip.infusedstone.desc2=a blood altar -tooltip.item.iteminslot=Item in slot -tooltip.item.currentitem=Current Item: -tooltip.lavacrystal.desc1=Store life to smelt -tooltip.lavacrystal.desc2=stuff in the furnace. -tooltip.lavasigil.desc1=Contact with liquid is -tooltip.lavasigil.desc2=highly unrecommended. -tooltip.lp.storedlp=Stored LP: -tooltip.mode.creative=Creative Only -tooltip.owner.currentowner=Current Owner: %s -tooltip.owner.demonsowner=Demon's Owner: -tooltip.packratsigil.desc=Hands of Diamonds -tooltip.reagent.selectedreagent=Currently selected reagent: -tooltip.telepositionfocus.reinforced.desc1=A stronger version of the focus, -tooltip.telepositionfocus.reinforced.desc2=using a weak shard -tooltip.ritualdiviner.airstones=Air Stones: -tooltip.ritualdiviner.blankstones=Blank Stones: -tooltip.ritualdiviner.cannotplace=Can not place Dusk runes -tooltip.ritualdiviner.canplace=Can place Dusk runes -tooltip.ritualdiviner.canplacedawn=Can place Dusk and Dawn runes -tooltip.ritualdiviner.desc=Used to explore new types of rituals -tooltip.ritualdiviner.duskstones=Dusk Stones: -tooltip.ritualdiviner.earthstones=Earth Stones: -tooltip.ritualdiviner.firestones=Fire Stones: -tooltip.ritualdiviner.moreinfo=Press shift for extended information -tooltip.ritualdiviner.ritualtunedto=Ritual tuned to face: -tooltip.ritualdiviner.waterstones=Water Stones: -tooltip.ritualdiviner.dawnstones=Dawn Stones: -tooltip.ritualdiviner.totalStones=Total Stones: -tooltip.dismatler.desc=You could turn this upside down? -tooltip.sacrificialdagger.desc1=A slight draining feeling tickles your fingers -tooltip.sacrificialdagger.desc2=Just a prick of the -tooltip.sacrificialdagger.desc3=finger will suffice... -tooltip.sanguinearmor.desc1=A pair of goggles imbued with power -tooltip.sanguinearmor.desc2=Robes imbued with forbidden power -tooltip.sanguinearmor.visdisc=Vis discount: -tooltip._scribe_tool.desc=The writing is on the wall... -tooltip.seersigil.desc=When seeing all is not enough -tooltip.sigil_ofelementalaffinity.desc1=Perfect for a fire-breathing fish -tooltip.sigil_ofelementalaffinity.desc2=who is afraid of heights! -tooltip.sigil_ofenderseverance.desc=Put those endermen in a Dire situation! -tooltip.sigil_ofgrowth.desc1=Who needs a green thumb when -tooltip.sigil_ofgrowth.desc2=you have a green slate? -tooltip.sigil_ofhaste.desc=One dose of caffeine later... -tooltip.sigil_ofholding.desc=Used to hold several Sigils! -tooltip.sigil_ofmagnetism.desc=I have a very magnetic personality! -tooltip.sigil_ofsupression.desc=Better than telekinesis -tooltip.sigil_oftheassassin.desc=Time to stay stealthy... -tooltip.sigil_ofthebridge.desc1=Activate to create a bridge -tooltip.sigil_ofthebridge.desc2=beneath your feet. -tooltip.sigil_ofthefastminer.desc=Keep going and going and going... -tooltip.sigil_ofwind.desc=Best not to wear a skirt. -tooltip.sigil.state.activated=Activated -tooltip.sigil.state.deactivated=Deactivated -tooltip.tanksegmenter.desc1=Used to designate which -tooltip.tanksegmenter.desc2=reagents can go into a container -tooltip.telepositionfocus.weak.desc1=An Enderpearl imbued with blood -tooltip.voidsigil.desc=Better than a Swiffer! -tooltip.watersigil.desc=Infinite water, anyone? -tooltip.routingFocus.limit=Limit: -tooltip.routingFocus.desc=A focus used to route items -tooltip.alchemy.usedinincense=Purifying incense used in a crucible - -#Messages -message.altar.capacity=Capacity: %s LP -message.altar.consumptionrate=Consumption Rate: -message.altar.currentessence=Altar's Current Essence: %s LP -message.altar.currenttier=Altar's Current Tier: %s -message.altar.progress=Altar's Progress: -message.altar.inputtank= Input Tank: %s LP -message.altar.outputtank= Output Tank: %s LP -message.altar.hunger=[BM] Your high regeneration rate has caused you to become hungry... -message.attunedcrystal.clearing=Clearing saved container... -message.attunedcrystal.error.cannotfind=Can no longer find linked container. -message.attunedcrystal.error.noconnections=Linked container has no connections remaining! -message.attunedcrystal.error.toofar=Linked container is either too far or is in a different dimension. -message.attunedcrystal.linked=Container is now linked. Transmitting: -message.attunedcrystal.linking=Linking to selected container. -message.attunedcrystal.setto=Attuned Crystal now set to: -message.demon.shallfollow=I shall follow and protect you! -message.demon.willstay=I will stay here for now, Master. -message.destinationclearer.cleared=Destination list now cleared. -message.divinationsigil.amount=Amount: -message.divinationsigil.currentessence=Current Essence: %d LP -message.divinationsigil.reagent=Reagent: %s, Amount: %d -message.masterstone.crystalvibrates=Your crystal vibrates pathetically. -message.masterstone.energyflows=A rush of energy flows through the ritual! -message.masterstone.nothinghappened=Nothing appears to have happened... -message.masterstone.ritualresistyou=The ritual appears to actively resist you! -message.masterstone.somethingstoppedyou=Something stopped you in your tracks... -message.masterstone.youfeelapull=You feel a pull, but you are too weak to push any further. -message.ritual.currentritual=Current Ritual: -message.ritual.side.east=EAST -message.ritual.side.north=NORTH -message.ritual.side.south=SOUTH -message.ritual.side.west=WEST -message.ritualdemonportal.missingjar=A jar on one of the pillars appears to be missing... -message.tanksegmenter.nowhas=Tank now has -message.tanksegmenter.setto=Tank Segmenter now set to: -message.tanksegmenter.tankssetto=tank(s) set to: -message.routerfocus.limit=Focus' Item Limit set to: - -#Achievements -achievement.alchemicalwizardry:firstPrick=Your First Prick! -achievement.alchemicalwizardry:firstPrick.desc=The first drop of life into the Altar... -achievement.alchemicalwizardry:weakOrb=Faintly Glowing Red... -achievement.alchemicalwizardry:weakOrb.desc=This orb will suffice...for now... - -#G-API Downloading -bm.versioning.getGAPI=["[BM] You don't have Guide-API installed! Install it to get it to unlock the book! [",{"text":"Download","color":"red","hoverEvent":{"action":"show_text","value":{"text":"Click this to auto-magically download the latest version","color":"red"}},"clickEvent":{"action":"run_command","value":"/bloodmagic-download-g-api"}},"]"] -bm.versioning.startingDownload=[{"text":"Starting download of %s Please do not remove your hard disk.", "color":"orange"}] -bm.versioning.doneDownloading=Finished downloading %s Reload your game to update. -bm.versioning.error=An error has occurred while downloading the mod! -bm.versioning.downloadedAlready=You have the latest version already, reload your game to update! -bm.versioning.downloadingAlready=It's downloading! Be patient! -bm.versioning.disabled=This feature is disabled. diff --git a/src/main/resources/assets/bloodmagic/lang/fr_FR.lang b/src/main/resources/assets/bloodmagic/lang/fr_FR.lang deleted file mode 100644 index f75e010a..00000000 --- a/src/main/resources/assets/bloodmagic/lang/fr_FR.lang +++ /dev/null @@ -1,649 +0,0 @@ -#Creative Tab -itemGroup.bloodmagic.creativeTab=Blood Magic -itemGroup.bloodmagic.creativeTabTome=Blood Magic Tômes d'Améliorations - -#Items -item.bloodmagic.activationCrystal.weak.name=Cristal d'Activation Affaibli -item.bloodmagic.activationCrystal.awakened.name=Cristal d'Activation Éveillé -item.bloodmagic.activationCrystal.creative.name=Cristal d'Activation Créatif - -item.bloodmagic.sacrificialDagger.normal.name=Dague Sacrificielle -item.bloodmagic.sacrificialDagger.creative.name=Dague Sacrificielle Créative -item.bloodmagic.pack.selfSacrifice.name=Sac à dos Sanguin -item.bloodmagic.pack.sacrifice.name=Manteau des Bras -item.bloodmagic.daggerOfSacrifice.name=Dague des Sacrifices - -item.bloodmagic.lavaCrystal.name=Cristal de Lave - -item.bloodmagic.bound.sword.name=Lame Sacrificielle -item.bloodmagic.bound.pickaxe.name=Pioche Sacrificielle -item.bloodmagic.bound.axe.name=Hache Sacrificielle -item.bloodmagic.bound.shovel.name=Pelle Sacrificielle - -item.bloodmagic.bucket.lifeEssence.name=Seau de Vie - -item.bloodmagic.scribe.water.name=Craie d’Inscription Elémentaire: Eau -item.bloodmagic.scribe.fire.name=Craie d’Inscription Elémentaire: Feu -item.bloodmagic.scribe.earth.name=Craie d’Inscription Elémentaire: Terre -item.bloodmagic.scribe.air.name=Craie d’Inscription Elémentaire: Air -item.bloodmagic.scribe.dusk.name=Craie d’Inscription Elémentaire: Crépuscule -item.bloodmagic.scribe.dawn.name=Craie d’Inscription Elémentaire: Aube - -item.bloodmagic.focus.weak.name=Focus de Téléposition -item.bloodmagic.focus.enhanced.name=Focus de Téléposition Amélioré -item.bloodmagic.focus.reinforced.name=Focus de Téléposition Renforcé -item.bloodmagic.focus.demonic.name=Focus de Téléposition Diabolique - -item.bloodmagic.slate.blank.name=Tablette Vierge -item.bloodmagic.slate.reinforced.name=Tablette Renforcée -item.bloodmagic.slate.imbued.name=Tablette Imprégnée -item.bloodmagic.slate.demonic.name=Tablette Diabolique -item.bloodmagic.slate.ethereal.name=Tablette Éthérée - -item.bloodmagic.orb.weak.name=Orbe Sanguinaire Affaiblie -item.bloodmagic.orb.apprentice.name=Orbe Sanguinaire de l’Apprenti -item.bloodmagic.orb.magician.name=Orbe Sanguinaire du Magicien -item.bloodmagic.orb.master.name=Orbe Sanguinaire du Maître -item.bloodmagic.orb.archmage.name=Orbe Sanguinaire de l'Enchanteur -item.bloodmagic.orb.transcendent.name=Orb Sanguinaire Transcendante - -item.bloodmagic.reagent.incendium.name=Incendium -item.bloodmagic.reagent.magicales.name=Magicales -item.bloodmagic.reagent.sanctus.name=Sanctus -item.bloodmagic.reagent.aether.name=Aether -item.bloodmagic.reagent.crepitous.name=Crepitous -item.bloodmagic.reagent.crystallos.name=Crystallos -item.bloodmagic.reagent.terrae.name=Terrae -item.bloodmagic.reagent.aquasalus.name=Aquasalus -item.bloodmagic.reagent.tennebrae.name=Tennebrae -item.bloodmagic.reagent.offensa.name=Offensa -item.bloodmagic.reagent.praesidium.name=Praesidium -item.bloodmagic.reagent.orbisterrae.name=Orbis Terrae -item.bloodmagic.reagent.virtus.name=Virtus -item.bloodmagic.reagent.reductus.name=Reductus -item.bloodmagic.reagent.potentia.name=Potentia - -item.bloodmagic.bloodShard.weak.name=Tesson Sanguin Faible -item.bloodmagic.bloodShard.demon.name=Tesson Sanguin Diabolique - -item.bloodmagic.baseComponent.reagentWater.name=Réactif d'Eau -item.bloodmagic.baseComponent.reagentLava.name=Réactif de Lave -item.bloodmagic.baseComponent.reagentAir.name=Réactif d'Air -item.bloodmagic.baseComponent.reagentFastMiner.name=Réactif Minier -item.bloodmagic.baseComponent.reagentVoid.name=Réactif du Vide -item.bloodmagic.baseComponent.reagentGrowth.name=Réactif de Forestation -item.bloodmagic.baseComponent.reagentAffinity.name=Réactif d'Affinitée Élémentaire -item.bloodmagic.baseComponent.reagentSight.name=Réactif de Vue -item.bloodmagic.baseComponent.reagentBinding.name=Réactif de Sacrifice -item.bloodmagic.baseComponent.reagentSuppression.name=Réactif de Suppression -item.bloodmagic.baseComponent.frameParts.name=Parties des cadres -item.bloodmagic.baseComponent.reagentBloodLight.name=Réactif de Lampe Sanguine -item.bloodmagic.baseComponent.reagentMagnetism.name=Réactif de Magnétisme -item.bloodmagic.baseComponent.reagentHaste.name=Réactif de Célérité -item.bloodmagic.baseComponent.reagentBridge.name=Réactif du Pont Fantôme -item.bloodmagic.baseComponent.reagentCompression.name=Réactif de Compression -item.bloodmagic.baseComponent.reagentSeverance.name=Réactif de Sévérance -item.bloodmagic.baseComponent.reagentHolding.name=Réactif de Possession - -item.bloodmagic.baseComponent.reagentTeleposition.name=Réactif de Téléposition -item.bloodmagic.baseComponent.reagentTransposition.name=Réactif de Transposition - -item.bloodmagic.baseComponent.ironSand.name=Sable de Fer -item.bloodmagic.baseComponent.goldSand.name=Sable d'Or -item.bloodmagic.baseComponent.coalSand.name=Sable de Charbon -item.bloodmagic.baseComponent.plantOil.name=Huile de Plante -item.bloodmagic.baseComponent.sulfur.name=Soufre -item.bloodmagic.baseComponent.saltpeter.name=Salpêtre -item.bloodmagic.baseComponent.neurotoxin.name=Neurotoxine -item.bloodmagic.baseComponent.antiseptic.name=Antiseptique - -item.bloodmagic.cuttingFluid.basicCuttingFluid.name=Fluide Coupant de Base -item.bloodmagic.cuttingFluid.explosive.name=Poudre Explosive - -item.bloodmagic.demonCrystal.crystalDefault.name=Cristal d'une Volonté Diabolique -item.bloodmagic.demonCrystal.crystalCorrosive.name=Cristal d'une Volonté Corrosive -item.bloodmagic.demonCrystal.crystalDestructive.name=Cristal d'une Volonté Destructive -item.bloodmagic.demonCrystal.crystalVengeful.name=Cristal d'une Volonté Vengeresse -item.bloodmagic.demonCrystal.crystalSteadfast.name=Cristal d'une Volonté Inébranlable - -item.bloodmagic.monsterSoul.base.name=Volonté Diabolique - -item.bloodmagic.sigil.air.name=Emblème d'Air -item.bloodmagic.sigil.bloodLight.name=Emblème de la Lampe Sanguine -item.bloodmagic.sigil.compression.name=Emblème de Compression -item.bloodmagic.sigil.divination.name=Emblème des Pythies -item.bloodmagic.sigil.water.name=Emblème d'Eau -item.bloodmagic.sigil.lava.name=Emblème de Lave -item.bloodmagic.sigil.void.name=Emblème du Vide -item.bloodmagic.sigil.greenGrove.name=Emblème de la forestation -item.bloodmagic.sigil.elementalAffinity.name=Emblème de l'Affinité Élémentaire -item.bloodmagic.sigil.haste.name=Emblème de Célérité -item.bloodmagic.sigil.suppression.name=Emblème de Délétion -item.bloodmagic.sigil.magnetism.name=Emblème de Magnétisme -item.bloodmagic.sigil.fastMiner.name=Emblème du Mineur Rapide -item.bloodmagic.sigil.seer.name=Emblème du Voyant -item.bloodmagic.sigil.phantomBridge.name=Emblème du Pont du Fantôme -item.bloodmagic.sigil.whirlwind.name=Emblème de la Tempête -item.bloodmagic.sigil.enderSeverance.name=Emblème de Sévérance de l'Ender -item.bloodmagic.sigil.holding.name=Emblème de Possession -item.bloodmagic.sigil.holding.display=&r%s: &o&n%s -item.bloodmagic.sigil.teleposition.name=Emblème de Téléposition -item.bloodmagic.sigil.transposition.name=Emblème de Transposition - -item.bloodmagic.livingArmour.helmet.name=Casque Vivant -item.bloodmagic.livingArmour.chest.name=Plastron Vivant -item.bloodmagic.livingArmour.legs.name=Jambières Vivantes -item.bloodmagic.livingArmour.boots.name=Bottes Vivantes -item.bloodmagic.sentientArmour.helmet.name=Casque Sentient -item.bloodmagic.sentientArmour.chest.name=Plastron Sentient -item.bloodmagic.sentientArmour.legs.name=Jambières Sentientes -item.bloodmagic.sentientArmour.boots.name=Bottes Sentientes - -item.bloodmagic.altarMaker.name=Créateur d'Autels - -item.bloodmagic.ritualDivinernormal.name=Devineur de Rituels -item.bloodmagic.ritualDivinerdusk.name=Devineur de Rituels [Crépuscule] -item.bloodmagic.ritualDivinerdawn.name=Devineur de Rituels [Aube] -item.bloodmagic.ritualReader.name=Bricoleur de Rituels - -item.bloodmagic.arcaneAshes.name=Cendres Ésotériques -item.bloodmagic.upgradeTome.name=Tablette d'Amélioration d'Armure Vivante -item.bloodmagic.upgradeTrainer.name=Bracelet d'Entrainement d'Armure Vivante - -item.bloodmagic.sentientSword.name=Épée Sentiente -item.bloodmagic.soulGem.petty.name=Faible Gemme Tartrique -item.bloodmagic.soulGem.lesser.name=Simple Gemme Tartrique -item.bloodmagic.soulGem.common.name=Gemme Tartrique Commune -item.bloodmagic.soulGem.greater.name=Gemme Tartrique Complexe -item.bloodmagic.soulGem.grand.name=Gemme Tartrique Puissante -item.bloodmagic.soulSnare.base.name=Piège Rudimentaire -item.bloodmagic.sentientBow.name=Arc Sentient -item.bloodmagic.sentientArmourGem.name=Gemme d'Armure Sentiente -item.bloodmagic.sentientAxe.name=Hâche Sentiente -item.bloodmagic.sentientPickaxe.name=Pioche Sentiente -item.bloodmagic.sentientShovel.name=Pelle Sentiente - -item.bloodmagic.nodeRouter.name=Routeur de Jonction -item.bloodmagic.itemFilter.exact.name=Filtre d'Objets Précis -item.bloodmagic.itemFilter.ignoreNBT.name=Filtre d'Objets par NBT -item.bloodmagic.itemFilter.modItems.name=Filtre d'Objets par Mod -item.bloodmagic.itemFilter.oreDict.name=Filtre d'Objets par le Catalogue de Minerai - -item.bloodmagic.experienceTome.name=Tôme de Peritia -item.bloodmagic.sanguineBook.name=Livre Sanguin - -item.bloodmagic.livingPointUpgrade.draftAngelus.name=Draft d'Angelus - -# Blocks -tile.bloodmagic.fluid.lifeEssence.name=Essence de Vie - -tile.bloodmagic.stone.ritual.master.name=Pierre Rituelle Maîtresse -tile.bloodmagic.stone.ritual.imperfect.name=Pierre Rituelle Imparfaite - -tile.bloodmagic.altar.name=Autel de Sang -tile.bloodmagic.alchemyArray.name=&r&fÉtalage d'Alchimie - -tile.bloodmagic.rune.blank.name=Rune de Sang -tile.bloodmagic.rune.speed.name=Rune de Vitesse -tile.bloodmagic.rune.efficiency.name=Rune d'Efficacité -tile.bloodmagic.rune.sacrifice.name=Rune de Sacrifice -tile.bloodmagic.rune.selfsacrifice.name=Rune de l'Autosacrifice -tile.bloodmagic.rune.displacement.name=Rune de Dislocation -tile.bloodmagic.rune.capacity.name=Rune de Capacité -tile.bloodmagic.rune.augcapacity.name=Rune de Capacité Supérieure -tile.bloodmagic.rune.orb.name=Rune de l'Orbe -tile.bloodmagic.rune.acceleration.name=Rune d'Accélération -tile.bloodmagic.rune.charging.name=Rune de Chargement - - -tile.bloodmagic.ritualStone.blank.name=Pierre Rituelle -tile.bloodmagic.ritualStone.water.name=Pierre Rituelle d'Eau -tile.bloodmagic.ritualStone.fire.name=Pierre Rituelle du Feu -tile.bloodmagic.ritualStone.earth.name=Pierre Rituelle de la Terre -tile.bloodmagic.ritualStone.air.name=Pierre Rituelle de l'Air -tile.bloodmagic.ritualStone.dusk.name=Pierre Rituelle du Crépuscule -tile.bloodmagic.ritualStone.dawn.name=Pierre Rituelle de l'Aube - -tile.bloodmagic.bloodstonebrick.large.name=Brique Large de Roche-Sang -tile.bloodmagic.bloodstonebrick.brick.name=Brique de Roche-Sang -tile.bloodmagic.crystal.large.name=Groupe de Cristaux -tile.bloodmagic.crystal.brick.name=Bloc de Crystal -tile.bloodmagic.bloodLight.name=Lumière Sanguine -tile.bloodmagic.spectralBlock.name=Bloc Spectral -tile.bloodmagic.phantom.name=Bloc Fantôme -tile.bloodmagic.incenseAltar.name=Autel Encens - -tile.bloodmagic.teleposer.name=Téléposeur -tile.bloodmagic.soulForge.name=Hellfire Forge -tile.bloodmagic.alchemyTable.name=Table d'Alchimie -tile.bloodmagic.demonCrucible.name=Creuset Diabolique -tile.bloodmagic.demonPylon.name=Pylône Diabolique -tile.bloodmagic.demonCrystallizer.name=Crystaliseur Diabolique - -tile.bloodmagic.masterRouting.name=Nœud de Routage Maître -tile.bloodmagic.outputRouting.name=Nœud de Routage de Sortie -tile.bloodmagic.inputRouting.name=Nœud de Routage d'Entré -tile.bloodmagic.itemRouting.name=Nœud de Routage - -tile.bloodmagic.path.wood.name=Chemin en Bois -tile.bloodmagic.path.woodtile.name=Chemin en Bois Carrelé -tile.bloodmagic.path.stone.name=Chemin en Pierre -tile.bloodmagic.path.stonetile.name=Chemin en Pierre Carrelée -tile.bloodmagic.path.wornstone.name=Chemin en Pierre Usé -tile.bloodmagic.path.wornstonetile.name=Chemin en Pierre Usé Carrelée -tile.bloodmagic.path.obsidian.name=Chemin en Obsidienne -tile.bloodmagic.path.obsidiantile.name=Chemin en Obsidienne Carrelée - -tile.bloodmagic.dimensionalPortal.name=Portail Dimensionnel -tile.bloodmagic.bloodTank.name=Réservoir de Sang - -tile.bloodmagic.demonCrystal.default.name=Groupe de Cristaux d'une Volonté Diabolique -tile.bloodmagic.demonCrystal.corrosive.name=Groupe de Cristaux d'une Volonté Corrosive -tile.bloodmagic.demonCrystal.destructive.name=Groupe de Cristaux d'une Volonté Destructive -tile.bloodmagic.demonCrystal.vengeful.name=Groupe de Cristaux d'une Volonté Vengeresse -tile.bloodmagic.demonCrystal.steadfast.name=Groupe de Cristaux d'une Volonté Inébranlable - -# Fluids -fluid.lifeEssence=Essence de Vie - -#Tooltips -tooltip.bloodmagic.extraInfo=&9-Tenir shift pour plus d'info- - -tooltip.bloodmagic.orb.desc=Stock d'essence de vie crue -tooltip.bloodmagic.orb.owner=Added by: %s -tooltip.bloodmagic.currentOwner=Propriétaire actuel: %s -tooltip.bloodmagic.currentTier=Niveau actuel: %d -tooltip.bloodmagic.config.disabled=Désactivée dans cet insant dans le ficher de Config - -tooltip.bloodmagic.activated=Activé -tooltip.bloodmagic.deactivated=Désactivé - -tooltip.bloodmagic.sigil.air.desc=&oJe me sens plus léger déjà... -tooltip.bloodmagic.sigil.bloodLight.desc=&oJe vois une lumière! -tooltip.bloodmagic.sigil.compression.desc=&oMains en Diamants -tooltip.bloodmagic.sigil.divination.desc=&oDévisager l'âme -tooltip.bloodmagic.sigil.divination.otherNetwork=Dévisager l'âme de %s -tooltip.bloodmagic.sigil.divination.currentAltarTier=Niveau Actuel: %d -tooltip.bloodmagic.sigil.divination.currentEssence=Essence Actuel: %d LP -tooltip.bloodmagic.sigil.divination.currentAltarCapacity=Capacité Actuelle: %d LP -tooltip.bloodmagic.sigil.divination.currentTranquility=Tranquillité Actuelle: %d -tooltip.bloodmagic.sigil.divination.currentBonus=Bonus Actuel: +%d%% -tooltip.bloodmagic.sigil.water.desc=&oUne infinité d'eau, personne? -tooltip.bloodmagic.sigil.lava.desc=&oCHAUD! NE LE MANGEZ PAS -tooltip.bloodmagic.sigil.void.desc=&oMieux que Swiffer®! -tooltip.bloodmagic.sigil.greenGrove.desc=&oÉcologique -tooltip.bloodmagic.sigil.magnetism.desc=&oJ'ai une personnalité très attirante -tooltip.bloodmagic.sigil.suppression.desc=&oMieux que la télékinésie... -tooltip.bloodmagic.sigil.haste.desc=&o42 doses de caféine plus tard... -tooltip.bloodmagic.sigil.fastMiner.desc=&oContinue à miner, à miner... -tooltip.bloodmagic.sigil.elementalAffinity.desc=&oDes poissons enflamées qui tombent! -tooltip.bloodmagic.sigil.seer.desc=&oQuand voir tout n'est pas suffisant -tooltip.bloodmagic.sigil.seer.currentAltarProgress=Progrès Actuel: %d LP/ %s LP -tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent=Progrès Actuel: %s -tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate=Vitesse de consomation: %d LP -tooltip.bloodmagic.sigil.seer.currentAltarTier=Niveau Actuel: %d -tooltip.bloodmagic.sigil.seer.currentEssence=Essence Actuelle: %d LP -tooltip.bloodmagic.sigil.seer.currentAltarCapacity=Capacité Actuelle: %d LP -tooltip.bloodmagic.sigil.seer.currentCharge=Charge Actuelle: %d -tooltip.bloodmagic.sigil.seer.currentTranquility=Tranquillité Actuelle: %d -tooltip.bloodmagic.sigil.seer.currentBonus=Bonus Actuel: +%d%% -tooltip.bloodmagic.sigil.phantomBridge.desc=&oMarcher sur de l'air fin... -tooltip.bloodmagic.sigil.whirlwind.desc=&oMieux de ne pas porter une jupe -tooltip.bloodmagic.sigil.enderSeverance.desc=&oMettre les Endermen dans des situations terribles! -tooltip.bloodmagic.sigil.teleposition.desc=Je suis très proche d'ètre transporté comme ça. -tooltip.bloodmagic.sigil.transposition.desc=Sens le pouvoir de la force, mon jeune apprenti. -tooltip.bloodmagic.sigil.holding.desc=Sigil-ception -tooltip.bloodmagic.sigil.holding.sigilInSlot=Slot %d: %s - -tooltip.bloodmagic.livingArmourPointsUpgrade.desc=Augmente le maxium de points de l'Armure Vivante à %d. - -tooltip.bloodmagic.bound.sword.desc=&oBattre le faible -tooltip.bloodmagic.bound.pickaxe.desc=&oDétruir les pierres sans pitié -tooltip.bloodmagic.bound.axe.desc=&oDéforestation diabolique -tooltip.bloodmagic.bound.shovel.desc=&oEffacer la terre du sol - -tooltip.bloodmagic.sacrificialDagger.desc=Juste une pîqure du doigt va suffir... -tooltip.bloodmagic.sacrificialDagger.creative=Faites un clic-droit sur un autel en appuyant sur le bouton 'sneak' pour le remplir -tooltip.bloodmagic.slate.desc=Pierre infusée dans un Autel de Sang -tooltip.bloodmagic.inscriber.desc=L'écriture est sur le mur... - -tooltip.bloodmagic.pack.selfSacrifice.desc=Ce sac à dos me frictionne vraiment... -tooltip.bloodmagic.pack.sacrifice.desc=Description -tooltip.bloodmagic.pack.stored=Stored: %d LP - -tooltip.bloodmagic.activationCrystal.weak=Actionne les rituels d'un Bas Niveau -tooltip.bloodmagic.activationCrystal.awakened=Actionne des rituels plus puissants -tooltip.bloodmagic.activationCrystal.creative=Creative Seulement - Actionne tout les rituels - -tooltip.bloodmagic.diviner.currentRitual=Rituel Courant: -tooltip.bloodmagic.diviner.blankRune=Runes Vierge: %d -tooltip.bloodmagic.diviner.waterRune=Runes d'Eau: %d -tooltip.bloodmagic.diviner.airRune=Runes d'Air: %d -tooltip.bloodmagic.diviner.fireRune=Runes de Feu: %d -tooltip.bloodmagic.diviner.earthRune=Runes de Terre: %d -tooltip.bloodmagic.diviner.duskRune=Runes de Cépuscule: %d -tooltip.bloodmagic.diviner.dawnRune=Runes d'Aube: %d -tooltip.bloodmagic.diviner.totalRune=Runes Totales: %d -tooltip.bloodmagic.diviner.extraInfo=Appuyer sur shift pour encore plus d'info -tooltip.bloodmagic.diviner.currentDirection=Directon Courante: %s - -tooltip.bloodmagic.ritualReader.currentState=Mode Courant: %s -tooltip.bloodmagic.ritualReader.set_area=Endroit Déterminé -tooltip.bloodmagic.ritualReader.information=Information -tooltip.bloodmagic.ritualReader.set_will_types=Choisir la volonté consommée -tooltip.bloodmagic.ritualReader.desc.set_area=Clic-droit sur une Pierre Rituelle Maîtresse pour cycler l'endroit de la rituelle que vous vouleiz modifier. Ensuite, cliquez les deux coins du nouveaux endroit que vous vouliez. -tooltip.bloodmagic.ritualReader.desc.information=Clic-droit sur une Pierre Rituelle Maîtresse pour receuillir des informations basics sur le rituel. -tooltip.bloodmagic.ritualReader.desc.set_will_types=Donnez les types de volonté diabolique que le rituel va consommer de l'aura par un Clic-Droit sur la PRM avec le même type de crystal dans votre bar chaude. - -tooltip.bloodmagic.arcaneAshes=Cendres sont utilisées pour dessiner un cercle d'alchimie - -tooltip.bloodmagic.telepositionFocus.coords=Coodornées courantes: (%d, %d, %d) -tooltip.bloodmagic.telepositionFocus.dimension=Dimension ID: %d -tooltip.bloodmagic.telepositionFocus.weak=Utilisé pour déplacer les blocs dans le monde -tooltip.bloodmagic.telepositionFocus.enhanced=Utilisé pour déplacer les blocs dans le monde -tooltip.bloodmagic.telepositionFocus.reinforced=Utilisé pour déplacer les blocs dans le monde -tooltip.bloodmagic.telepositionFocus.demonic=Utilisé pour déplacer les blocs dans le monde - -tooltip.bloodmagic.livingArmour.upgrade.speed=Pieds Rapides -tooltip.bloodmagic.livingArmour.upgrade.digging=Puissance des Nains -tooltip.bloodmagic.livingArmour.upgrade.poisonResist=Résistance au Poison -tooltip.bloodmagic.livingArmour.upgrade.fireResist=Cadeau d'Ignis -tooltip.bloodmagic.livingArmour.upgrade.selfSacrifice=Paumes Dures -tooltip.bloodmagic.livingArmour.upgrade.knockback=Culturiste -tooltip.bloodmagic.livingArmour.upgrade.physicalProtect=Peau Dure -tooltip.bloodmagic.livingArmour.upgrade.health=Sain -tooltip.bloodmagic.livingArmour.upgrade.meleeDamage=Coup Féroce -tooltip.bloodmagic.livingArmour.upgrade.arrowShot=Tir Acrobatique -tooltip.bloodmagic.livingArmour.upgrade.stepAssist=Marche Assistée -tooltip.bloodmagic.livingArmour.upgrade.grimReaper=Sprint de la Faucheuse -tooltip.bloodmagic.livingArmour.upgrade.solarPowered=Solar Powered -tooltip.bloodmagic.livingArmour.upgrade.thaumRunicShielding=Runic Shielding -tooltip.bloodmagic.livingArmour.upgrade.revealing=Revealing -tooltip.bloodmagic.livingArmour.upgrade.experienced=Experienced -tooltip.bloodmagic.livingArmour.upgrade.jump=Strong Legs -tooltip.bloodmagic.livingArmour.upgrade.fallProtect=Soft Fall -tooltip.bloodmagic.livingArmour.upgrade.graveDigger=Grave Digger -tooltip.bloodmagic.livingArmour.upgrade.sprintAttack=Charging Strike -tooltip.bloodmagic.livingArmour.upgrade.criticalStrike=True Strike -tooltip.bloodmagic.livingArmour.upgrade.elytra=Elytra -tooltip.bloodmagic.livingArmour.upgrade.slowness=Limp Leg -tooltip.bloodmagic.livingArmour.upgrade.crippledArm=Crippled Arm -tooltip.bloodmagic.livingArmour.upgrade.level=%s (Level %d) -tooltip.bloodmagic.livingArmour.upgrade.points=&6Upgrade points: %s / %s - -tooltip.bloodmagic.will=Will Quality: %1$,.2f -tooltip.bloodmagic.sentientSword.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.sentientAxe.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.sentientPickaxe.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.sentientShovel.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.soulGem.petty=A gem used to contain a little will -tooltip.bloodmagic.soulGem.lesser=A gem used to contain some will -tooltip.bloodmagic.soulGem.common=A gem used to contain more will -tooltip.bloodmagic.soulGem.greater=A gem used to contain a greater amount of will -tooltip.bloodmagic.soulGem.grand=A gem used to contain a large amount of will -tooltip.bloodmagic.soulSnare.desc=Throw at a monster and then kill them to obtain their demonic will - -tooltip.bloodmagic.itemFilter.exact=S'assure que les objets se ressemblent exactement -tooltip.bloodmagic.itemFilter.ignoreNBT=Ignore le NBT du filtre -tooltip.bloodmagic.itemFilter.modItems=Assortis les objets du même mod -tooltip.bloodmagic.itemFilter.oreDict=Used to filter through the Ore Dictionary - -tooltip.bloodmagic.fluid.type=Fluid Contained -tooltip.bloodmagic.fluid.amount=Amount -tooltip.bloodmagic.fluid.capacity=Capacity - -tooltip.bloodmagic.ghost.everything=Everything -tooltip.bloodmagic.ghost.amount=Ghost item amount: %d - -tooltip.bloodmagic.currentType.default=Contient: Volonté Crue -tooltip.bloodmagic.currentType.corrosive=Contient: Volonté Corrosive -tooltip.bloodmagic.currentType.destructive=Contient: Volonté Destructive -tooltip.bloodmagic.currentType.vengeful=Contient: Volonté Vengeresse -tooltip.bloodmagic.currentType.steadfast=Contient: Volonté Inébranlable - -tooltip.bloodmagic.experienceTome=A book used to store experience -tooltip.bloodmagic.experienceTome.exp=Exp: %0.3f -tooltip.bloodmagic.experienceTome.expLevel=Level: %d - -tooltip.bloodmagic.decoration.safe=Safe for decoration -tooltip.bloodmagic.decoration.notSafe=Dangerous for decoration - -tooltip.bloodmagic.cuttingFluidRatio=%d/%d uses remaining - -tooltip.bloodmagic.book.shifting=These symbols seem to be... &oshifting... - -# Ritual -ritual.bloodmagic.blockRange.tooBig=The block range given is too big! Needs to be at most %s blocks. -ritual.bloodmagic.blockRange.tooFar=The block range given is too far! Needs to be within a vertical range of %s blocks and a horizontal range of %s blocks. -ritual.bloodmagic.blockRange.inactive=The ritual stone is currently inactive, and cannot have its range modified. -ritual.bloodmagic.blockRange.noRange=The range was not properly chosen. -ritual.bloodmagic.blockRange.firstBlock=First block for new range stored. -ritual.bloodmagic.blockRange.success=New range successfully set! - -ritual.bloodmagic.testRitual=Test Ritual -ritual.bloodmagic.waterRitual=Ritual of the Full Spring -ritual.bloodmagic.lavaRitual=Serenade of the Nether -ritual.bloodmagic.greenGroveRitual=Ritual of the Green Grove -ritual.bloodmagic.jumpRitual=Ritual of the High Jump -ritual.bloodmagic.wellOfSufferingRitual=Well of Suffering -ritual.bloodmagic.featheredKnifeRitual=Ritual of the Feathered Knife -ritual.bloodmagic.regenerationRitual=Ritual of Regeneration -ritual.bloodmagic.harvestRitual=Reap of the Harvest Moon -ritual.bloodmagic.magneticRitual=Ritual of Magnetism -ritual.bloodmagic.crushingRitual=Ritual of the Crusher -ritual.bloodmagic.fullStomachRitual=Ritual of the Satiated Stomach -ritual.bloodmagic.interdictionRitual=Ritual of Interdiction -ritual.bloodmagic.containmentRitual=Ritual of Containment -ritual.bloodmagic.speedRitual=Ritual of Speed -ritual.bloodmagic.suppressionRitual=Ritual of Suppression -ritual.bloodmagic.expulsionRitual=Aura of Expulsion -ritual.bloodmagic.zephyrRitual=Call of the Zephyr -ritual.bloodmagic.upgradeRemoveRitual=Sound of the Cleansing Soul -ritual.bloodmagic.armourEvolveRitual=Ritual of Living Evolution -ritual.bloodmagic.animalGrowthRitual=Ritual of the Shepherd -ritual.bloodmagic.forsakenSoulRitual=Gathering of the Forsaken Souls -ritual.bloodmagic.crystalHarvestRitual=Crack of the Fractured Crystal - -ritual.bloodmagic.cobblestoneRitual=Le Vulcanos Frigius -ritual.bloodmagic.placerRitual=Laying of the Filler -ritual.bloodmagic.fellingRitual=Crash of the Timberman -ritual.bloodmagic.pumpRitual=Hymn of Siphoning -ritual.bloodmagic.altarBuilderRitual=The Assembly of the High Altar -ritual.bloodmagic.portalRitual=The Gate of the Fold - - -ritual.bloodmagic.waterRitual.info=Generates a source of water from the master ritual stone. -ritual.bloodmagic.lavaRitual.info=Generates a source of lava from the master ritual stone. -ritual.bloodmagic.greenGroveRitual.info=Grows crops within its area. -ritual.bloodmagic.jumpRitual.info=Causes entities to leap up into the air. -ritual.bloodmagic.wellOfSufferingRitual.info=Attacks mobs within its damage zone and puts the LP into a nearby blood altar. -ritual.bloodmagic.featheredKnifeRitual.info=Drains health from players in its area and puts the LP into a nearby blood altar. -ritual.bloodmagic.regenerationRitual.info=Casts regeneration on entities within its range if they are missing health. -ritual.bloodmagic.harvestRitual.info=Harvests plants within its range, dropping the results on the ground. -ritual.bloodmagic.magneticRitual.info=Pulls up ores from the ground and puts them into its placement range. -ritual.bloodmagic.crushingRitual.info=Breaks blocks within its crushing range and places the items into the linked chest. -ritual.bloodmagic.fullStomachRitual.info=Takes food from the linked chest and fills the player's saturation with it. -ritual.bloodmagic.interdictionRitual.info=Pushes all mobs within its area away from the master ritual stone. -ritual.bloodmagic.containmentRitual.info=Pulls all mobs within its area towards the master ritual stone. -ritual.bloodmagic.speedRitual.info=Launches players within its range in the direction of the ritual. -ritual.bloodmagic.suppressionRitual.info=Suppresses fluids within its range - deactivating the ritual returns the fluids back to the world. -ritual.bloodmagic.expulsionRitual.info=Expels players from its range that are neither the owner nor have a bound blood orb in the chest on top of the master ritual stone. -ritual.bloodmagic.zephyrRitual.info=Picks up items within its range and places them into the linked chest. -ritual.bloodmagic.upgradeRemoveRitual.info=Undocumented. -ritual.bloodmagic.armourEvolveRitual.info=Undocumented. -ritual.bloodmagic.animalGrowthRitual.info=Increases the maturity rate of baby animals within its range. -ritual.bloodmagic.forsakenSoulRitual.info=Damages mobs within its damage range and when the mob dies a demon crystal within its crystal range will be grown. -ritual.bloodmagic.crystalHarvestRitual.info=Breaks Demon Will crystal clusters within its range, dropping the results on top of the crystals. - -ritual.bloodmagic.placerRitual.info=Grabs blocks that are inside of the connected inventory and places them into the world. -ritual.bloodmagic.fellingRitual.info=A standard tree-cutting machine, this ritual will cut down all trees and leaves within its area and collect the drops. -ritual.bloodmagic.pumpRitual.info=Looks around the world and grabs fluids from the defined area. Will only remove and put the fluid into the connected tank if the tank has at least a bucket's worth of the same fluid. -ritual.bloodmagic.altarBuilderRitual.info=Builds an altar out of the components inside of the connected inventory. -ritual.bloodmagic.portalRitual.info=Creates a portal network based on the activator and the immediately surrounding blocks. Blocks can be changed after activation without changing the network of portals, and portals with the same "key" will link together. - -ritual.bloodmagic.waterRitual.waterRange.info=(Water) The area that the ritual will place water source blocks. -ritual.bloodmagic.lavaRitual.lavaRange.info=(Lava) The area that the ritual will place lava source blocks. -ritual.bloodmagic.greenGroveRitual.growing.info=(Growth) The area that the ritual will grow plants in. -ritual.bloodmagic.jumpRitual.jumpRange.info=(Jumping) Entities in this range will be launched in the air. -ritual.bloodmagic.wellOfSufferingRitual.altar.info=(Altar) This range defines the area that the ritual searches for the blood altar. Changing this will either expand or limit the range to a certain region. -ritual.bloodmagic.wellOfSufferingRitual.damage.info=(Damage) This defines where the ritual will damage a mob. All mobs inside of this range (except for players) will receive damage over time. -ritual.bloodmagic.featheredKnifeRitual.altar.info=(Altar) This range defines the area that the ritual searches for the blood altar. Changing this will either expand or limit the range to a certain region. -ritual.bloodmagic.featheredKnifeRitual.damage.info=(Damage) This defines where the ritual will damage a player. Players inside of this range will receive damage over time up to the specified limit. -ritual.bloodmagic.regenerationRitual.heal.info=(Healing) Mobs within this range will receive a regeneration buff. -ritual.bloodmagic.harvestRitual.harvestRange.info=(Harvesting) Plants within this range will be harvested. -ritual.bloodmagic.magneticRitual.placementRange.info=(Placement) The range that the ritual will place the grabbed ores into. -ritual.bloodmagic.crushingRitual.crushingRange.info=(Crushing) The blocks that the ritual will break. -ritual.bloodmagic.crushingRitual.chest.info=(Chest) The location of the inventory that the ritual will place the broken blocks into. -ritual.bloodmagic.fullStomachRitual.fillRange.info=(Feeding) The range that the ritual will look at to feed players. -ritual.bloodmagic.fullStomachRitual.chest.info=(Chest) The location of the inventory that the ritual will grab food from to feed players in range. -ritual.bloodmagic.interdictionRitual.interdictionRange.info=(Push) The area of the ritual where mobs will be pushed. All mobs are pushed away from the master ritual stone, regardless of where this area is. -ritual.bloodmagic.containmentRitual.containmentRange.info=(Containment) The area of the ritual where mobs will be pulled. All mobs are pulled towards the master ritual stone, regardless of where this area is. -ritual.bloodmagic.speedRitual.sanicRange.info=(Speed) All entities within this area are launched in the direction of the arrow formed by the ritual. -ritual.bloodmagic.suppressionRitual.suppressionRange.info=(Suppress) All liquids within the range are suppressed. -ritual.bloodmagic.expulsionRitual.expulsionRange.info=(Expulsion) -ritual.bloodmagic.zephyrRitual.zephyrRange.info=(Suction) Items within this range will be sucked into the linked chest. -ritual.bloodmagic.zephyrRitual.chest.info=(Chest) The location of the inventory that the ritual will place the picked up items into. -ritual.bloodmagic.animalGrowthRitual.growing.info=(Growth) Animals within this range will grow much faster. -ritual.bloodmagic.forsakenSoulRitual.crystal.info=(Crystal) Demon Crystals in this range receive an increase in growth speed when a mob is killed by the ritual. -ritual.bloodmagic.forsakenSoulRitual.damage.info=(Damage) Mobs within this range will be slowly damaged, and when killed will grow the crystals. -ritual.bloodmagic.crystalHarvestRitual.crystal.info=(Crystal) All Demon Will crystal clusters have a single crystal broken off, spawning the crystal into the world. If there is only one crystal on the cluster, it will not break it. - -ritual.bloodmagic.placerRitual.placerRange.info=(Placement) The range that the ritual will place its blocks in. -ritual.bloodmagic.placerRitual.chest.info=(Chest) The location of the inventory that the ritual will grab blocks from to place in the world. -ritual.bloodmagic.fellingRitual.fellingRange.info=(Cutting) The range that the ritual will search out logs and leaves in order to cut down. -ritual.bloodmagic.fellingRitual.chest.info=(Chest) The location of the inventory that the ritual will place the results into. -ritual.bloodmagic.pumpRitual.pumpRange.info=(Pump) The region that the ritual will look for fluids to grab from the world. - -# Chat -chat.bloodmagic.altarMaker.setTier=Set Tier to: %d -chat.bloodmagic.altarMaker.building=Building a Tier %d Altar -chat.bloodmagic.altarMaker.destroy=Destroyed a Tier %d Altar -chat.bloodmagic.altarMaker.creativeOnly=This is a creative only item. - -chat.bloodmagic.damageSource=%s's soul became too weak - -chat.bloodmagic.ritual.weak=You feel a push, but are too weak to perform this ritual. -chat.bloodmagic.ritual.prevent=The ritual is actively resisting you! -chat.bloodmagic.ritual.activate=A rush of energy flows through the ritual! -chat.bloodmagic.ritual.notValid=You feel that these runes are not configured correctly... - -chat.bloodmagic.livingArmour.upgrade.poisonRemove=You are starting to feel better already! -chat.bloodmagic.livingArmour.upgrade.fireRemove=&6A cool feeling envelopes you as the burning subsides. -chat.bloodmagic.livingArmour.upgrade.grimReaper=&6A shadowy force pulls you from the brink of death! -chat.bloodmagic.livingArmour.newUpgrade=&4Upgrade acquired! - -chat.bloodmagic.routing.remove=Removing contained location -chat.bloodmagic.routing.set=Setting node location -chat.bloodmagic.routing.link.master=Linked node to master! -chat.bloodmagic.routing.link=Linked nodes together - -chat.bloodmagic.altar.comp.glowstone=a block of glowstone -chat.bloodmagic.altar.comp.bloodstone=a large bloodstone brick -chat.bloodmagic.altar.comp.beacon=a beacon -chat.bloodmagic.altar.comp.bloodrune=a blood rune -chat.bloodmagic.altar.comp.crystal=an unimplemented item -chat.bloodmagic.altar.comp.notair=a solid block - -chat.bloodmagic.altar.nextTier=The next tier of blood altar is missing %s at %s. - -# sekrit - -secret.bloodmagic.bread.bloody=&r&cBloody Bread -secret.bloodmagic.bread.bloody.desc=Only for &odire &r&7emergencies. - -# Commands -commands.bloodmagic.error.arg.invalid=Invalid arguments -commands.bloodmagic.error.arg.missing=Not enough arguments -commands.bloodmagic.error.arg.player.missing=You must specify which player you wish to perform this action on. -commands.bloodmagic.error.404=Command not found! -commands.bloodmagic.error.unknown=Unknown command! -commands.bloodmagic.error.perm=You do not have permission to use this command. - -commands.bloodmagic.success=Executed successfully - -commands.bloodmagic.format.help=%s - %s -commands.bloodmagic.format.error=%s - %s - -commands.bloodmagic.help.usage=/bloodmagic help -commands.bloodmagic.help.help=Displays the help information for the "/bloodmagic" command. - -commands.bloodmagic.network.usage=/bloodmagic network [syphon|add|get|fill|cap] player [amount] -commands.bloodmagic.network.help=LP network utilities -commands.bloodmagic.network.syphon.help=Removes the given amount of LP from the given player's LP network. -commands.bloodmagic.network.syphon.success=Successfully syphoned %d LP from %s. -commands.bloodmagic.network.add.help=Adds the given amount of LP to the given player's LP network. Follows standard LP gain rules. -commands.bloodmagic.network.add.success=Successfully added %d LP to %s's LP network. -commands.bloodmagic.network.set.help=Sets the given player's LP to the given amount. -commands.bloodmagic.network.set.success=Successfully set %s's LP network to %d LP. -commands.bloodmagic.network.get.help=Returns the amount of LP in the given player's LP network. -commands.bloodmagic.network.fill.help=Fills the given player's LP network to %d. -commands.bloodmagic.network.fill.success=Successfully filled %s's LP network. -commands.bloodmagic.network.cap.help=Fills the given player's LP network to the max that their highest Blood Orb can store. -commands.bloodmagic.network.cap.success=Successfully capped off %s's LP network. - -commands.bloodmagic.bind.usage=/bloodmagic bind [true|false] [player] -commands.bloodmagic.bind.help=Attempts to (un)bind the currently held item. -commands.bloodmagic.bind.success=Binding successful -commands.bloodmagic.bind.remove.success=Unbinding successful - -commands.bloodmagic.orb.usage=/bloodmagic orb [set|get] player [tier] -commands.bloodmagic.orb.help=Used to set or get the Player's max Blood Orb tier. - -commands.bloodmagic.bind.usage=/bind -commands.bloodmagic.bind.success=Item successfully bound! -commands.bloodmagic.bind.failed.noPlayer=There is no player specified -commands.bloodmagic.bind.failed.alreadyBound=Item is already bound; use /unbind to unbind it -commands.bloodmagic.bind.failed.notBindable=Item cannot be bound -commands.bloodmagic.unbind.usage=/unbind -commands.bloodmagic.unbind.success=Item successfully unbound! -commands.bloodmagic.unbind.failed.notBindable=Item cannot be unbound -commands.bloodmagic.soulnetwork.usage=/soulnetwork [amount] -commands.bloodmagic.soulnetwork.add.success=Successfully added %dLP to %s's Soul Network! -commands.bloodmagic.soulnetwork.subtract.success=Successfully subtracted %dLP from %s's Soul Network! -commands.bloodmagic.soulnetwork.fill.success=Successfully filled %s's Soul Network! -commands.bloodmagic.soulnetwork.empty.success=Successfully emptied %s's Soul Network! -commands.bloodmagic.soulnetwork.get.success=There is %dLP in %s's Soul Network! -commands.bloodmagic.soulnetwork.noPlayer=There is no player specified -commands.bloodmagic.soulnetwork.noCommand=There is no command specified -commands.bloodmagic.soulnetwork.notACommand=That is not a valid command -commands.bloodmagic.soulnetwork.fillMax.success=Successfully filled %s's Soul Network to their orb max! -commands.bloodmagic.soulnetwork.create.success=Successfully created %s's Soul Network (Orb tier: %d) - -# Keybinds -bloodmagic.keybind.openSigilHolding=Open Sigil of Holding - -# JustEnoughItems -jei.bloodmagic.recipe.altar=Blood Altar -jei.bloodmagic.recipe.binding=Alchemy Array (Binding) -jei.bloodmagic.recipe.alchemyArrayCrafting=Alchemy Array -jei.bloodmagic.recipe.soulForge=Hellfire Forge -jei.bloodmagic.recipe.alchemyTable=Alchemy Table -jei.bloodmagic.recipe.requiredLP=LP: %d -jei.bloodmagic.recipe.requiredTier=Tier: %d -jei.bloodmagic.recipe.consumptionRate=Consumption: %d LP/t -jei.bloodmagic.recipe.drainRate=Drain: %d LP/t -jei.bloodmagic.recipe.minimumSouls=Minimum: %1$,.2f Will -jei.bloodmagic.recipe.soulsDrained=Drained: %1$,.2f Will -jei.bloodmagic.recipe.lpDrained=Drained: %,d LP -jei.bloodmagic.recipe.ticksRequired=Time: %,d Ticks - -jei.bloodmagic.desc.altarBuilder=A creative-only item for use in debugging and testing.\n\nShift + Right click to change the tier to build. Right click an Altar to initiate the build.\n\nBreak an Altar while holding to dismantle it. -jei.bloodmagic.desc.demonicWill=An imprint of a demonic entity attached to a creature.\n\nCan be obtained by killing a mob with a sentient weapon or by throwing a snare at a mob and killing it while it has white particles. - -# WAILA -waila.bloodmagic.sneak=&oSneak for Information -waila.bloodmagic.array.reagent=Reagent: %s -waila.bloodmagic.array.catalyst=Catalyst: %s -option.bloodmagic.bypassSneak=Bypass Sneak -option.bloodmagic.bloodAltar=Blood Altar -option.bloodmagic.ritualController=Ritual Stones -option.bloodmagic.teleposer=Teleposer -option.bloodmagic.array=Alchemy Array - -# Thaumcraft -tc.research_category.BLOODMAGIC=Sanguine Arcana - -# Thaumcraft Research -bloodmagic.research_name.BLOODMAGIC=Blood Magic -bloodmagic.research_text.BLOODMAGIC=Sanguine Arcana -bloodmagic.research_page.BLOODMAGIC.1=The realm of the Blood Magics has always appeared to be a more solitary and "individual" art with blood mages being notoriously reclusive and a bit insane at times. However, the powers of self-sacrifice and life essence have uses even beyond a normal blood mage's sight, in fact, it is quite apparent that it may have some uses in thaumaturgy after all! diff --git a/src/main/resources/assets/bloodmagic/lang/it_IT.lang b/src/main/resources/assets/bloodmagic/lang/it_IT.lang deleted file mode 100644 index 265b4275..00000000 --- a/src/main/resources/assets/bloodmagic/lang/it_IT.lang +++ /dev/null @@ -1,181 +0,0 @@ -#Block Localization -tile.bloodAltar.name=Altare del Sangue -tile.bloodRune.blank.name=Runa del Sangue -tile.bloodRune.fill.name=Runa di Capacit Aumentata -tile.bloodRune.empty.name=Runa di Dislocazione -tile.bloodRune.test.name=Runa del Globo -tile.speedRune.name=Runa di Velocit -tile.efficiencyRune.name=Runa di Efficienza -tile.runeOfSacrifice.name=Runa del Sacrificio -tile.runeOfSelfSacrifice.name=Runa di Auto-Sacrificio -tile.ritualStone.name=Pietra del Rituale -tile.blockMasterStone.name=Pietra Maestra del Rituale -tile.bloodSocket.name=Cavit Piena -tile.imperfectRitualStone.name=Pietra del Rituale Imperfetta -tile.armourForge.name=Forgia delle Armature dell'Anima -tile.emptySocket.name=Cavit Vuota -tile.bloodStoneBrick.name=Mattone di Pietra del Sangue -tile.largeBloodStoneBrick.name=Gran Mattone di Pietra del Sangue -tile.blockWritingTable.name=Set da Alchimista -tile.blockHomHeart.name=Tavolo della Magia -tile.bloodPedestal.name=Piedistallo Arcano -tile.bloodPlinth.name=Basamento Arcano -tile.bloodTeleposer.name=Teleposer -tile.blockConduit.name=Condotto di Magia -tile.blockSpellParadigm.projectile.name=Generatore di Particelle -tile.blockSpellParadigm.self.name=Auto-Miglioratore -tile.blockSpellParadigm.melee.name=Aggregatore di Mischia -tile.blockSpellEnhancement.power1.name=Potenziatore Instabile di Magia -tile.blockSpellEnhancement.power2.name=Potenziatore Standard di Magia -tile.blockSpellEnhancement.power3.name=Potenziatore Rinforzato di Magia -tile.blockSpellEnhancement.power4.name=Potenziatore Invaso di Magia -tile.blockSpellEnhancement.power5.name=Potenziatore Demoniaco di Magia -tile.blockSpellEnhancement.cost1.name=Smorzatore Instabile di Magia -tile.blockSpellEnhancement.cost2.name=Smorzatore Standard di Magia -tile.blockSpellEnhancement.cost3.name=Smorzatore Rinforzato di Magia -tile.blockSpellEnhancement.cost4.name=Smorzatore Invaso di Magia -tile.blockSpellEnhancement.cost5.name=Smorzatore Demoniaco di Magia -tile.blockSpellEnhancement.potency1.name=Miglioratore Instabile di Magia -tile.blockSpellEnhancement.potency2.name=Miglioratore Standard di Magia -tile.blockSpellEnhancement.potency3.name=Miglioratore Rinforzato di Magia -tile.blockSpellEnhancement.potency4.name=Miglioratore Invaso di Magia -tile.blockSpellEnhancement.potency5.name=Miglioratore Demoniaco di Magia -tile.blockSpellModifier.default.name=Modificatore di Magia -tile.blockSpellModifier.offensive.name=Modificatore di Magia Offensiva -tile.blockSpellModifier.defensive.name=Modificatore di Magia Difensiva -tile.blockSpellModifier.environmental.name=Modificatore di Magia Ambientale -tile.blockSpellEffect.fire.name=Crogiolo del Fuoco -tile.blockSpellEffect.ice.name=Creatore di Ghiaccio -tile.blockSpellEffect.wind.name=Generatore del Vento -tile.blockSpellEffect.earth.name=Formatore della Terra - -#Item Localization -item.weakBloodOrb.name=Globo di Sangue Debole -item.apprenticeBloodOrb.name=Globo di Sangue dell'Apprendista -item.magicianBloodOrb.name=Globo di Sangue del Mago -item.masterBloodOrb.name=Globo di Sangue del Maestro -item.archmageBloodOrb.name=Globo di Sangue dell'Arcimago -item.energyBlast.name=Blaster Energetico -item.energySword.name=Lama Legata -item.lavaCrystal.name=Cristallo Lavico -item.waterSigil.name=Sigillo dell'Acqua -item.lavaSigil.name=Sigillo di Lava -item.voidSigil.name=Sigillo del Vuoto -item.blankSlate.name=Ardesia Bianca -item.reinforcedSlate.name=Ardesia Rinforzata -item.sacrificialDagger.name=Pugnale Sacrificale -item.daggerOfSacrifice.name=Daga Sacrificale -item.airSigil.name=Sigillo dell'Aria -item.sigilOfTheFastMiner.name=Sigillo del Rapido Minatore -item.sigilOfElementalAffinity.name=Sigillo di Affinit Elementale -item.sigilOfHaste.name=Sigillo di Rapidit -item.sigilOfHolding.name=Sigillo della Tenacia Egoista -item.divinationSigil.name=Sigillo di Divinatione -item.waterScribeTool.name=Utensile d'Iscrizione Elementale: Acqua -item.fireScribeTool.name=Utensile d'Iscrizione Elementale: Fuoco -item.earthScribeTool.name=Utensile d'Iscrizione Elementale: Terra -item.airScribeTool.name=Utensile d'Iscrizione Elementale: Aria -item.duskScribeTool.name=Utensile d'Iscrizione Elementale: Crepuscolo -item.activationCrystalWeak.name=Cristallo d'Attivazione Debole -item.activationCrystalAwakened.name=Cristallo d'Attivazione Risvegliato -item.boundPickaxe.name=Piccone Vincolato -item.boundAxe.name=Ascia Vincolata -item.boundShovel.name=Vanga Vincolata -item.boundHelmet.name=Elmo Vincolato -item.boundPlate.name=Piastra Vincolata -item.boundLeggings.name=Gambali Vincolati -item.boundBoots.name=Stivali Vincolati -item.weakBloodShard.name=Scheggia di Sangue Debole -item.growthSigil.name=Sigillo del Verde Bosco -item.blankSpell.name=Cristallo non Vincolato -item.alchemyFlask.name=Boccetta per Pozione -item.standardBindingAgent.name=Agente Vincolante Standard -item.mundanePowerCatalyst.name=Catalizzatore Comune di Potere -item.averagePowerCatalyst.name=Catalizzatore Medio di Potere -item.greaterPowerCatalyst.name=Catalizzatore Maggiore di Potere -item.mundaneLengtheningCatalyst.name=Catalizzatore Procastinante Comune -item.averageLengtheningCatalyst.name=Catalizzatore Procastinante Medio -item.greaterLengtheningCatalyst.name=Catalizzatore Procastinante Maggiore -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Etere -item.simpleCatalyst.name=Catalizzatore Semplice -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demonBloodShard.name=Scheggia di Sangue di Demone -item.sigilOfWind.name=Sigillo del Vortice -item.telepositionFocus.name=Focus di Teleposizione -item.enhancedTelepositionFocus.name=Focus Migliorato di Teleposizione -item.reinforcedTelepositionFocus.name=Focus Rinforzato di Teleposizione -item.demonicTelepositionFocus.name=Focus Demoniaco di Teleposizione -item.imbuedSlate.name=Piastra Invasa -item.demonicSlate.name=Piastra Demoniaca -item.sigilOfTheBridge.name=Sigillo del POnte Spettrale -item.armourInhibitor.name=Inibitore di Armatura -item.cheatyItem.name=Globo di Prova -item.weakFillingAgent.name=Agente Riempiente Debole -item.standardFillingAgent.name=Agente Riempiente Standard -item.enhancedFillingAgent.name=Agente Riempiente Potenziato -item.weakBindingAgent.name=Agente Vincolante Debole -item.ritualDiviner.name=Divinatore del Rituale -item.sigilOfMagnetism.name=Sigillo del Magnetismo -item.itemDiabloKey.name=Chiave del Vincolo -item.energyBazooka.name=Cannone Energetico -item.bloodLightSigil.name=Sigillo della Torcia di Sangue -item.itemComplexSpellCrystal.name=Cristallo Magico Complesso -item.itemSigilOfSupression.name=Sigillo di Soppressione -item.itemSigilOfEnderSeverance.name=Sigillo di Disgiunzione Ender -item.bucketLive.name=Secchio di Vita -item.bloodMagicBaseItem.QuartzRod.name=Verga di Quarzo -item.bloodMagicBaseItem.EmptyCore.name=Nucleo Vuoto -item.bloodMagicBaseItem.MagicalesCable.name=Connessione Magicales -item.bloodMagicBaseItem.WoodBrace.name=Pilastro di Legno -item.bloodMagicBaseItem.StoneBrace.name=Pilastro di Pietra -item.bloodMagicBaseItem.ProjectileCore.name=Nucleo Proiettile -item.bloodMagicBaseItem.SelfCore.name=Auto-Nucleo -item.bloodMagicBaseItem.MeleeCore.name=Nucleo di Mischia -item.bloodMagicBaseItem.ParadigmBackPlate.name=Piastra Modello -item.bloodMagicBaseItem.OutputCable.name=Connessione in Uscita di Magia -item.bloodMagicBaseItem.InputCable.name=Connessione in Entrata di Magia -item.bloodMagicBaseItem.FlameCore.name=Nucleo Infuocato -item.bloodMagicBaseItem.IcyCore.name=Nucleo Ghiacciato -item.bloodMagicBaseItem.GustCore.name=Nucleo Ventoso -item.bloodMagicBaseItem.EarthenCore.name=Nucleo Terroso -item.bloodMagicBaseItem.CrackedRunicPlate.name=Piastra Runica Incrinata -item.bloodMagicBaseItem.RunicPlate.name=Piastra Runica -item.bloodMagicBaseItem.ScribedRunicPlate.name=Piastra Runica Invasa -item.bloodMagicBaseItem.DefaultCore.name=Nucleo Disarmonico -item.bloodMagicBaseItem.OffensiveCore.name=Nucleo Offensivo -item.bloodMagicBaseItem.DefensiveCore.name=Nucleo Difensivo -item.bloodMagicBaseItem.EnvironmentalCore.name=Nucleo Ambientale -item.bloodMagicBaseItem.PowerCore.name=Nucleo di Forza -item.bloodMagicBaseItem.CostCore.name=Nucleo di Riduzione -item.bloodMagicBaseItem.PotencyCore.name=Nucleo di Potenza -item.bloodMagicBaseItem.ObsidianBrace.name=Pilastro di Ossidiana -item.bloodMagicAlchemyItem.Offensa.name=Offensa -item.bloodMagicAlchemyItem.Praesidium.name=Praesidium -item.bloodMagicAlchemyItem.OrbisTerrae.name=Orbis Terrae -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=Catalizzatore Rafforzato -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=Catalizzatore Concentrato -item.bloodMagicAlchemyItem.FracturedBone.name=Osso Fratturato -item.bloodMagicAlchemyItem.Virtus.name=Virtus -item.bloodMagicAlchemyItem.Reductus.name=Reductus -item.bloodMagicAlchemyItem.Potentia.name=Potentia -item.sanguineHelmet.name=Elmo Sanguigno -item.itemSeerSigil.name=Sigillo della Veduta -item.itemFluidSigil.name= - - -#Creative Tab -itemGroup.tabBloodMagic=Magia del Sangue - -#Extra Strings -bm.string.consume=Utilizzo -bm.string.drain=Drenaggio -bm.string.tier=Livello -bm.string.crafting.orb.shaped=Creazione di un Glodo Formato -bm.string.crafting.orb.shapeless=Creazione di un Globo Informe \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/lang/ja_JP.lang b/src/main/resources/assets/bloodmagic/lang/ja_JP.lang deleted file mode 100644 index 58d7b932..00000000 --- a/src/main/resources/assets/bloodmagic/lang/ja_JP.lang +++ /dev/null @@ -1,892 +0,0 @@ -#Creative Tab -itemGroup.bloodmagic.creativeTab=Blood Magic -itemGroup.bloodmagic.creativeTabTome=Blood Magic ¦ 書物 - -#Items -item.bloodmagic.activationCrystal.weak.name=弱い起動クリスタル -item.bloodmagic.activationCrystal.awakened.name=覚醒した起動クリスタル -item.bloodmagic.activationCrystal.creative.name=クリエイティブ用の起動クリスタル - -item.bloodmagic.sacrificialDagger.normal.name=生贄のダガー -item.bloodmagic.sacrificialDagger.creative.name=生贄のダガー(クリエイティブ) -item.bloodmagic.pack.selfSacrifice.name=瀉血者のパック -item.bloodmagic.pack.sacrifice.name=武装コート -item.bloodmagic.daggerOfSacrifice.name=サクリファイスダガー - -item.bloodmagic.lavaCrystal.name=溶岩のクリスタル - -item.bloodmagic.bound.sword.name=結合した剣 -item.bloodmagic.bound.pickaxe.name=結合したツルハシ -item.bloodmagic.bound.axe.name=結合した斧 -item.bloodmagic.bound.shovel.name=結合したシャベル - -item.bloodmagic.bucket.lifeEssence.name=ライフエッセンス入りバケツ - -item.bloodmagic.scribe.water.name=属性筆記具:水 -item.bloodmagic.scribe.fire.name=属性筆記具:火 -item.bloodmagic.scribe.earth.name=属性筆記具:土 -item.bloodmagic.scribe.air.name=属性筆記具:風 -item.bloodmagic.scribe.dusk.name=属性筆記具:黄昏 -item.bloodmagic.scribe.dawn.name=属性筆記具:暁 - -item.bloodmagic.focus.weak.name=テレポートフォーカス -item.bloodmagic.focus.enhanced.name=強化テレポートフォーカス -item.bloodmagic.focus.reinforced.name=増強テレポートフォーカス -item.bloodmagic.focus.demonic.name=悪魔テレポートフォーカス - -item.bloodmagic.slate.blank.name=空の石版 -item.bloodmagic.slate.reinforced.name=強化された石版 -item.bloodmagic.slate.imbued.name=染みこんだ石版 -item.bloodmagic.slate.demonic.name=悪魔の石版 -item.bloodmagic.slate.ethereal.name=エーテルの石版 - -item.bloodmagic.orb.weak.name=弱いブラッドオーブ -item.bloodmagic.orb.apprentice.name=見習いのブラッドオーブ -item.bloodmagic.orb.magician.name=魔術師のブラッドオーブ -item.bloodmagic.orb.master.name=熟練者のブラッドオーブ -item.bloodmagic.orb.archmage.name=大魔術師のブラッドオーブ -item.bloodmagic.orb.transcendent.name=超越のブラッドオーブ - -item.bloodmagic.reagent.incendium.name=インセンディウム -item.bloodmagic.reagent.magicales.name=マギカリス -item.bloodmagic.reagent.sanctus.name=サンクトゥス -item.bloodmagic.reagent.aether.name=エーサー -item.bloodmagic.reagent.crepitous.name=クレピタス -item.bloodmagic.reagent.crystallos.name=クリスタロス -item.bloodmagic.reagent.terrae.name=テラエ -item.bloodmagic.reagent.aquasalus.name=アクアサルス -item.bloodmagic.reagent.tennebrae.name=テネブレ -item.bloodmagic.reagent.offensa.name=オフェンサ -item.bloodmagic.reagent.praesidium.name=プレジディウム -item.bloodmagic.reagent.orbisterrae.name=オービス・テラエ -item.bloodmagic.reagent.virtus.name=ヴィルトゥス -item.bloodmagic.reagent.reductus.name=レドクトゥス -item.bloodmagic.reagent.potentia.name=ポテンシア - -item.bloodmagic.bloodShard.weak.name=弱い血の結晶片 -item.bloodmagic.bloodShard.demon.name=悪魔の血の結晶片 - -item.bloodmagic.baseComponent.reagentWater.name=水の試薬 -item.bloodmagic.baseComponent.reagentLava.name=溶岩の試薬 -item.bloodmagic.baseComponent.reagentAir.name=風の試薬 -item.bloodmagic.baseComponent.reagentFastMiner.name=鉱夫の試薬 -item.bloodmagic.baseComponent.reagentVoid.name=虚無の試薬 -item.bloodmagic.baseComponent.reagentGrowth.name=緑化の試薬 -item.bloodmagic.baseComponent.reagentAffinity.name=精霊の加護の試薬 -item.bloodmagic.baseComponent.reagentSight.name=識別の試薬 -item.bloodmagic.baseComponent.reagentBinding.name=結合の試薬 -item.bloodmagic.baseComponent.reagentSuppression.name=除去の試薬 -item.bloodmagic.baseComponent.frameParts.name=フレームパーツ -item.bloodmagic.baseComponent.reagentBloodLight.name=血のランプの試薬 -item.bloodmagic.baseComponent.reagentMagnetism.name=磁力の試薬 -item.bloodmagic.baseComponent.reagentHaste.name=迅速の試薬 -item.bloodmagic.baseComponent.reagentBridge.name=幻影橋の試薬 -item.bloodmagic.baseComponent.reagentCompression.name=圧縮の試薬 -item.bloodmagic.baseComponent.reagentSeverance.name=断絶の試薬 -item.bloodmagic.baseComponent.reagentHolding.name=貯蔵の試薬 -item.bloodmagic.baseComponent.reagentClaw.name=鉤爪の試薬 -item.bloodmagic.baseComponent.reagentBounce.name=弾性の試薬 -item.bloodmagic.baseComponent.reagentFrost.name=寒気の試薬 - -item.bloodmagic.baseComponent.reagentTeleposition.name=テレポートの試薬 -item.bloodmagic.baseComponent.reagentTransposition.name=転位の試薬 - -item.bloodmagic.baseComponent.ironSand.name=鉄の砂 -item.bloodmagic.baseComponent.goldSand.name=金の砂 -item.bloodmagic.baseComponent.coalSand.name=石炭の砂 -item.bloodmagic.baseComponent.plantOil.name=植物油 -item.bloodmagic.baseComponent.sulfur.name=硫黄 -item.bloodmagic.baseComponent.saltpeter.name=硝石 -item.bloodmagic.baseComponent.neurotoxin.name=神経毒 -item.bloodmagic.baseComponent.antiseptic.name=防腐剤 - -item.bloodmagic.cuttingFluid.basicCuttingFluid.name=基礎切削液 -item.bloodmagic.cuttingFluid.explosive.name=爆薬 - -item.bloodmagic.baseComponent.mundaneLength.name=簡素な延長触媒 -item.bloodmagic.baseComponent.mundanePower.name=簡素な強化触媒 - - -item.bloodmagic.demonCrystal.crystalDefault.name=デーモンウィル結晶 -item.bloodmagic.demonCrystal.crystalCorrosive.name=腐食性ウィル結晶 -item.bloodmagic.demonCrystal.crystalDestructive.name=破壊性ウィル結晶 -item.bloodmagic.demonCrystal.crystalVengeful.name=報復性ウィル結晶 -item.bloodmagic.demonCrystal.crystalSteadfast.name=不活性ウィル結晶 - -item.bloodmagic.monsterSoul.base.name=デーモニックウィル -item.bloodmagic.monsterSoul.corrosive.name=腐食性デーモニックウィル -item.bloodmagic.monsterSoul.destructive.name=破壊性デーモニックウィル -item.bloodmagic.monsterSoul.vengeful.name=報復性デーモニックウィル -item.bloodmagic.monsterSoul.steadfast.name=不活性デーモニックウィル - -item.bloodmagic.sigil.air.name=風の印章 -item.bloodmagic.sigil.bloodLight.name=血のランプの印章 -item.bloodmagic.sigil.compression.name=圧縮の印章 -item.bloodmagic.sigil.divination.name=神託の印章 -item.bloodmagic.sigil.water.name=水の印章 -item.bloodmagic.sigil.lava.name=溶岩の印章 -item.bloodmagic.sigil.void.name=虚無の印章 -item.bloodmagic.sigil.greenGrove.name=緑化の印章 -item.bloodmagic.sigil.elementalAffinity.name=精霊の加護の印章 -item.bloodmagic.sigil.haste.name=迅速の印章 -item.bloodmagic.sigil.suppression.name=除去の印章 -item.bloodmagic.sigil.magnetism.name=磁力の印章 -item.bloodmagic.sigil.fastMiner.name=鉱夫の印章 -item.bloodmagic.sigil.seer.name=識別の印章 -item.bloodmagic.sigil.phantomBridge.name=幻影橋の印章 -item.bloodmagic.sigil.whirlwind.name=旋風の印章 -item.bloodmagic.sigil.enderSeverance.name=エンダー断絶の印章 -item.bloodmagic.sigil.holding.name=貯蔵の印章 -item.bloodmagic.sigil.holding.display=&r%s: &o&n%s -item.bloodmagic.sigil.teleposition.name=テレポートの印章 -item.bloodmagic.sigil.transposition.name=転位の印章 -item.bloodmagic.sigil.claw.name=鉤爪の印章 -item.bloodmagic.sigil.bounce.name=弾性の印章 -item.bloodmagic.sigil.frost.name=冬の息吹の印章 - -item.bloodmagic.livingArmour.helmet.name=生体のヘルメット -item.bloodmagic.livingArmour.chest.name=生体のチェストプレート -item.bloodmagic.livingArmour.legs.name=生体のレギンス -item.bloodmagic.livingArmour.boots.name=生体のブーツ -item.bloodmagic.sentientArmour.helmet.name=理力のヘルメット -item.bloodmagic.sentientArmour.chest.name=理力のチェストプレート -item.bloodmagic.sentientArmour.legs.name=理力のレギンス -item.bloodmagic.sentientArmour.boots.name=理力のブーツ - -item.bloodmagic.altarMaker.name=祭壇メーカー - -item.bloodmagic.ritualDivinernormal.name=儀式の占い棒 -item.bloodmagic.ritualDivinerdusk.name=儀式の占い棒 [黄昏] -item.bloodmagic.ritualDivinerdawn.name=儀式の占い棒 [暁] -item.bloodmagic.ritualReader.name=儀式の調整器 - -item.bloodmagic.arcaneAshes.name=秘儀の灰 -item.bloodmagic.upgradeTome.name=生体アーマー強化の書 -item.bloodmagic.downgradeTome.name=生体アーマー弱化の書 -item.bloodmagic.upgradeTrainer.name=生体アーマー養成ブレスレット - -item.bloodmagic.sentientSword.name=理力の剣 -item.bloodmagic.soulGem.petty.name=微細なタルタリックジェム -item.bloodmagic.soulGem.lesser.name=小さなタルタリックジェム -item.bloodmagic.soulGem.common.name=普通のタルタリックジェム -item.bloodmagic.soulGem.greater.name=大きなタルタリックジェム -item.bloodmagic.soulGem.grand.name=巨大なタルタリックジェム -item.bloodmagic.soulSnare.base.name=簡素な投げ罠 -item.bloodmagic.sentientBow.name=理力の弓 -item.bloodmagic.sentientArmourGem.name=理力のアーマージェム -item.bloodmagic.sentientAxe.name=理力の斧 -item.bloodmagic.sentientPickaxe.name=理力のツルハシ -item.bloodmagic.sentientShovel.name=理力のシャベル - -item.bloodmagic.nodeRouter.name=ノード設定器 -item.bloodmagic.itemFilter.exact.name=精密アイテムフィルタ -item.bloodmagic.itemFilter.ignoreNBT.name=NBTタグフィルタ -item.bloodmagic.itemFilter.modItems.name=MODアイテムフィルタ -item.bloodmagic.itemFilter.oreDict.name=鉱石辞書フィルタ -item.bloodmagic.fluidFilter.exact.name=液体フィルタ - -item.bloodmagic.experienceTome.name=ペリティアの書 -item.bloodmagic.sanguineBook.name=インスペクトリス・スカンダルム - -item.bloodmagic.livingPointUpgrade.draftAngelus.name=アンジェラスの一飲み - -item.bloodmagic.willGauge.name=デーモンウィルオーラ計測器 -item.bloodmagic.potionFlask.name=フラスコ入りポーション - -# Blocks -tile.bloodmagic.fluid.lifeEssence.name=ライフエッセンス - -tile.bloodmagic.stone.ritual.master.name=マスター儀式石 -tile.bloodmagic.stone.ritual.imperfect.name=簡易儀式石 -tile.bloodmagic.stone.ritual.inverted.name=反転マスター儀式石 - -tile.bloodmagic.altar.name=血の祭壇 -tile.bloodmagic.alchemyArray.name=&r&f錬金術魔法陣 - -tile.bloodmagic.rune.blank.name=空のルーン -tile.bloodmagic.rune.speed.name=速度のルーン -tile.bloodmagic.rune.efficiency.name=効率のルーン -tile.bloodmagic.rune.sacrifice.name=生贄のルーン -tile.bloodmagic.rune.selfsacrifice.name=自己犠牲のルーン -tile.bloodmagic.rune.displacement.name=転移のルーン -tile.bloodmagic.rune.capacity.name=容量増加のルーン -tile.bloodmagic.rune.augcapacity.name=容量倍加のルーン -tile.bloodmagic.rune.orb.name=オーブのルーン -tile.bloodmagic.rune.acceleration.name=加速のルーン -tile.bloodmagic.rune.charging.name=蓄積のルーン - - -tile.bloodmagic.ritualStone.blank.name=儀式石 -tile.bloodmagic.ritualStone.water.name=水の儀式石 -tile.bloodmagic.ritualStone.fire.name=火の儀式石 -tile.bloodmagic.ritualStone.earth.name=土の儀式石 -tile.bloodmagic.ritualStone.air.name=風の儀式石 -tile.bloodmagic.ritualStone.dusk.name=黄昏の儀式石 -tile.bloodmagic.ritualStone.dawn.name=暁の儀式石 - -tile.bloodmagic.bloodstonebrick.large.name=大きなブラッドストーンレンガ -tile.bloodmagic.bloodstonebrick.brick.name=ブラッドストーンレンガ -tile.bloodmagic.crystal.large.name=クリスタルクラスター -tile.bloodmagic.crystal.brick.name=クリスタルクラスターレンガ -tile.bloodmagic.bloodLight.name=血の灯火 -tile.bloodmagic.spectralBlock.name=亡霊ブロック -tile.bloodmagic.phantom.name=幻影ブロック -tile.bloodmagic.incenseAltar.name=香の祭壇 - -tile.bloodmagic.teleposer.name=テレポーザー -tile.bloodmagic.soulForge.name=業火のかまど -tile.bloodmagic.alchemyTable.name=錬金術テーブル -tile.bloodmagic.demonCrucible.name=悪魔のるつぼ -tile.bloodmagic.demonPylon.name=悪魔の塔 -tile.bloodmagic.demonCrystallizer.name=悪魔の晶析装置 - -tile.bloodmagic.masterRouting.name=マスター中継ノード -tile.bloodmagic.outputRouting.name=出力中継ノード -tile.bloodmagic.inputRouting.name=入力中継ノード -tile.bloodmagic.itemRouting.name=中継ノード - -tile.bloodmagic.path.wood.name=木の経路 -tile.bloodmagic.path.woodtile.name=タイル状の木の経路 -tile.bloodmagic.path.stone.name=石レンガの経路 -tile.bloodmagic.path.stonetile.name=タイル状の石の経路 -tile.bloodmagic.path.wornstone.name=摩耗した石の経路 -tile.bloodmagic.path.wornstonetile.name=タイル状の摩耗した石の経路 -tile.bloodmagic.path.obsidian.name=黒曜石レンガの経路 -tile.bloodmagic.path.obsidiantile.name=タイル状の黒曜石の経路 - -tile.bloodmagic.dimensionalPortal.name=ワープポータル -tile.bloodmagic.bloodTank.name=血液タンク - -tile.bloodmagic.demonCrystal.default.name=デーモンウィル結晶株 -tile.bloodmagic.demonCrystal.corrosive.name=腐食性ウィル結晶株 -tile.bloodmagic.demonCrystal.destructive.name=破壊性ウィル結晶株 -tile.bloodmagic.demonCrystal.vengeful.name=報復性ウィル結晶株 -tile.bloodmagic.demonCrystal.steadfast.name=不活性ウィル結晶株 - -tile.bloodmagic.mimic.nohitbox.name=希薄で不透過な偽装ブロック -tile.bloodmagic.mimic.solidopaque.name=不透過な偽装ブロック -tile.bloodmagic.mimic.solidclear.name=透過な偽装ブロック -tile.bloodmagic.mimic.solidlight.name=発光する偽装ブロック -tile.bloodmagic.mimic.sentient.name=理力の偽装ブロック - -tile.bloodmagic.bricks1.brick1_raw.name=長い原生の石レンガ -tile.bloodmagic.bricks1.brick1_corrosive.name=長い腐食性の石レンガ -tile.bloodmagic.bricks1.brick1_destructive.name=長い破壊性の石レンガ -tile.bloodmagic.bricks1.brick1_vengeful.name=長い報復性の石レンガ -tile.bloodmagic.bricks1.brick1_steadfast.name=長い不活性の石レンガ - -tile.bloodmagic.bricks2.smallbrick_raw.name=小さな原生の石レンガ -tile.bloodmagic.bricks2.smallbrick_corrosive.name=小さな腐食性の石レンガ -tile.bloodmagic.bricks2.smallbrick_destructive.name=小さな破壊性の石レンガ -tile.bloodmagic.bricks2.smallbrick_vengeful.name=小さな報復性の石レンガ -tile.bloodmagic.bricks2.smallbrick_steadfast.name=小さな不活性の石レンガ -tile.bloodmagic.bricks2.tile_raw.name=原生の石タイル -tile.bloodmagic.bricks2.tile_corrosive.name=腐食性の石タイル -tile.bloodmagic.bricks2.tile_destructive.name=破壊性の石タイル -tile.bloodmagic.bricks2.tile_vengeful.name=報復性の石タイル -tile.bloodmagic.bricks2.tile_steadfast.name=不活性の石タイル -tile.bloodmagic.bricks2.tilespecial_raw.name=装飾された原生の石タイル -tile.bloodmagic.bricks2.tilespecial_corrosive.name=装飾された腐食性の石タイル -tile.bloodmagic.bricks2.tilespecial_destructive.name=装飾された破壊性の石タイル -tile.bloodmagic.bricks2.tilespecial_vengeful.name=装飾された報復性の石タイル -tile.bloodmagic.bricks2.tilespecial_steadfast.name=装飾された不活性の石タイル - -tile.bloodmagic.inversionpillar.raw.name=原生の反転柱 -tile.bloodmagic.inversionpillar.corrosive.name=腐食性の反転柱 -tile.bloodmagic.inversionpillar.destructive.name=破壊性の反転柱 -tile.bloodmagic.inversionpillar.vengeful.name=報復性の反転柱 -tile.bloodmagic.inversionpillar.steadfast.name=不活性の反転柱 - -tile.bloodmagic.inversionpillarend.raw_bottom.name=原生の反転柱の台座 -tile.bloodmagic.inversionpillarend.corrosive_bottom.name=腐食性の反転柱の台座 -tile.bloodmagic.inversionpillarend.destructive_bottom.name=破壊性の反転柱の台座 -tile.bloodmagic.inversionpillarend.vengeful_bottom.name=報復性の反転柱の台座 -tile.bloodmagic.inversionpillarend.steadfast_bottom.name=不活性の反転柱の台座 -tile.bloodmagic.inversionpillarend.raw_top.name=原生の反転柱の柱頭 -tile.bloodmagic.inversionpillarend.corrosive_top.name=腐食性の反転柱の柱頭 -tile.bloodmagic.inversionpillarend.destructive_top.name=破壊性の反転柱の柱頭 -tile.bloodmagic.inversionpillarend.vengeful_top.name=報復性の反転柱の柱頭 -tile.bloodmagic.inversionpillarend.steadfast_top.name=不活性の反転柱の柱頭 - -tile.bloodmagic.demonlight.raw.name=原生デーモンアイ -tile.bloodmagic.demonlight.corrosive.name=腐食性デーモンアイ -tile.bloodmagic.demonlight.destructive.name=破壊性デーモンアイ -tile.bloodmagic.demonlight.vengeful.name=報復性デーモンアイ -tile.bloodmagic.demonlight.steadfast.name=不活性デーモンアイ - -tile.bloodmagic.extras.stone_raw.name=原生の石 -tile.bloodmagic.extras.stone_corrosive.name=腐食性の石 -tile.bloodmagic.extras.stone_destructive.name=破壊性の石 -tile.bloodmagic.extras.stone_vengeful.name=報復性の石 -tile.bloodmagic.extras.stone_steadfast.name=不活性の石 - -tile.bloodmagic.extras.polished_raw.name=磨かれた原生の石 -tile.bloodmagic.extras.polished_corrosive.name=磨かれた腐食性の石 -tile.bloodmagic.extras.polished_destructive.name=磨かれた破壊性の石 -tile.bloodmagic.extras.polished_vengeful.name=磨かれた報復性の石 -tile.bloodmagic.extras.polished_steadfast.name=磨かれた不活性の石 - -tile.bloodmagic.extras.metal_raw.name=原生デーモン合金 -tile.bloodmagic.extras.metal_corrosive.name=報復性デーモン合金 -tile.bloodmagic.extras.metal_destructive.name=破壊性デーモン合金 -tile.bloodmagic.extras.metal_vengeful.name=報復性デーモン合金 -tile.bloodmagic.extras.metal_steadfast.name=不活性デーモン合金 - -tile.bloodmagic.pillar1.raw.name=原生の石柱 -tile.bloodmagic.pillar1.corrosive.name=腐食性の石柱 -tile.bloodmagic.pillar1.destructive.name=破壊性の石柱 -tile.bloodmagic.pillar1.vengeful.name=報復性の石柱 -tile.bloodmagic.pillar1.steadfast.name=不活性の石柱 - -tile.bloodmagic.pillar2.raw.name=装飾された原生の石柱 -tile.bloodmagic.pillar2.corrosive.name=装飾された腐食性の石柱 -tile.bloodmagic.pillar2.destructive.name=装飾された破壊性の石柱 -tile.bloodmagic.pillar2.vengeful.name=装飾された報復性の石柱 -tile.bloodmagic.pillar2.steadfast.name=装飾された不活性の石柱 - -tile.bloodmagic.pillarCap1.raw.name=原生の石柱の柱頭 -tile.bloodmagic.pillarCap1.corrosive.name=腐食性の石柱の柱頭 -tile.bloodmagic.pillarCap2.destructive.name=破壊性の石柱の柱頭 -tile.bloodmagic.pillarCap2.vengeful.name=報復性の石柱の柱頭 -tile.bloodmagic.pillarCap3.steadfast.name=不活性の石柱の柱頭 - -tile.bloodmagic.wall1.brick_raw.name=原生の石レンガの壁 -tile.bloodmagic.wall1.brick_corrosive.name=腐食性の石レンガの壁 -tile.bloodmagic.wall1.brick_destructive.name=破壊性の石レンガの壁 -tile.bloodmagic.wall1.brick_vengeful.name=報復性の石レンガの壁 -tile.bloodmagic.wall1.brick_steadfast.name=不活性の石レンガの壁 -tile.bloodmagic.wall1.smallbrick_raw.name=原生の石レンガの小さな壁 -tile.bloodmagic.wall1.smallbrick_corrosive.name=腐食性の石レンガの小さな壁 -tile.bloodmagic.wall1.smallbrick_destructive.name=破壊性の石レンガの小さな壁 -tile.bloodmagic.wall1.smallbrick_vengeful.name=報復性の石レンガの小さな壁 -tile.bloodmagic.wall1.smallbrick_steadfast.name=不活性の石レンガの小さな壁 -tile.bloodmagic.wall1.large_raw.name=原生の石の壁 -tile.bloodmagic.wall1.large_corrosive.name=腐食性の石の壁 -tile.bloodmagic.wall1.large_destructive.name=破壊性の石の壁 -tile.bloodmagic.wall1.large_vengeful.name=報復性の石の壁 -tile.bloodmagic.wall1.large_steadfast.name=不活性の石の壁 - -tile.bloodmagic.stairs1.raw.name=原生の石の階段 -tile.bloodmagic.stairs1.corrosive.name=腐食性の石の階段 -tile.bloodmagic.stairs2.destructive.name=破壊性の石の階段 -tile.bloodmagic.stairs2.vengeful.name=報復性の石の階段 -tile.bloodmagic.stairs3.steadfast.name=不活性の石の階段 - -# Fluids -fluid.lifeEssence=ライフエッセンス - -# Tooltips -tooltip.bloodmagic.extraInfo=&9-Siftキーで詳細表示- - -tooltip.bloodmagic.orb.desc=加工前のライフエッセンスで満ちている -tooltip.bloodmagic.orb.owner=以下による追加要素: %s -tooltip.bloodmagic.currentOwner=現在の所有者: %s -tooltip.bloodmagic.currentTier=祭壇のグレード: %d -tooltip.bloodmagic.config.disabled=現在configにより無効化されています -tooltip.bloodmagic.tier=グレード%d - -tooltip.bloodmagic.activated=アクティブ -tooltip.bloodmagic.deactivated=非アクティブ - -tooltip.bloodmagic.sigil.air.desc=&o体が軽く感じる... -tooltip.bloodmagic.sigil.bloodLight.desc=&o明かりだ! -tooltip.bloodmagic.sigil.compression.desc=&oダイヤモンドの手 -tooltip.bloodmagic.sigil.divination.desc=&o魂を覗き込む -tooltip.bloodmagic.sigil.divination.otherNetwork=%sの魂と相互リンク中 -tooltip.bloodmagic.sigil.divination.currentAltarTier=祭壇のグレード: %d -tooltip.bloodmagic.sigil.divination.currentEssence=貯蔵量: %d LP -tooltip.bloodmagic.sigil.divination.currentAltarCapacity=最大容量: %d LP -tooltip.bloodmagic.sigil.divination.currentTranquility=現在の鎮静効果: %d -tooltip.bloodmagic.sigil.divination.currentInversion=現在の反転度: %d -tooltip.bloodmagic.sigil.divination.currentBonus=結合度: +%d%% -tooltip.bloodmagic.sigil.water.desc=&o無限の水はいかが? -tooltip.bloodmagic.sigil.lava.desc=&o高温注意!食べられません -tooltip.bloodmagic.sigil.void.desc=&oクイックルワイパー(R)より素晴らしい! -tooltip.bloodmagic.sigil.greenGrove.desc=&o環境にやさしい -tooltip.bloodmagic.sigil.magnetism.desc=&o私は引き付ける性格です -tooltip.bloodmagic.sigil.suppression.desc=&o素晴らしい念動力だ... -tooltip.bloodmagic.sigil.haste.desc=&oコーヒー42杯飲んだあと... -tooltip.bloodmagic.sigil.fastMiner.desc=&o掘って、掘って、また掘って... -tooltip.bloodmagic.sigil.elementalAffinity.desc=&oファイアフィッシュになる! -tooltip.bloodmagic.sigil.seer.desc=&oすべてを見通せてもまだ物足りない -tooltip.bloodmagic.sigil.seer.currentAltarProgress=進捗状況: %d LP/ %s LP -tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent=進捗状況: %s -tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate=消費率: %d LP -tooltip.bloodmagic.sigil.seer.currentAltarTier=祭壇のグレード: %d -tooltip.bloodmagic.sigil.seer.currentEssence=貯蔵量: %d LP -tooltip.bloodmagic.sigil.seer.currentAltarCapacity=最大容量: %d LP -tooltip.bloodmagic.sigil.seer.currentCharge=現在のチャージ: %d -tooltip.bloodmagic.sigil.seer.currentTranquility=現在の鎮静効果: %d -tooltip.bloodmagic.sigil.seer.currentBonus=結合度: +%d%% -tooltip.bloodmagic.sigil.phantomBridge.desc=&o空を歩こう... -tooltip.bloodmagic.sigil.whirlwind.desc=&oスカートは履かないほうがいいようだ -tooltip.bloodmagic.sigil.enderSeverance.desc=&oエンダーマンは悲惨な事になる! -tooltip.bloodmagic.sigil.teleposition.desc=わずかな距離なら移動できそうだ。 -tooltip.bloodmagic.sigil.transposition.desc=フォースの力を感じるのだ、若き弟子よ。 -tooltip.bloodmagic.sigil.holding.press=&o%s&r&7を押すことで変更 -tooltip.bloodmagic.sigil.holding.desc=多重化印章 -tooltip.bloodmagic.sigil.holding.sigilInSlot=スロット %d: %s - -tooltip.bloodmagic.livingArmourPointsUpgrade.desc=生体アーマーの強化ポイントの最大値を%dに増加させる。 - -tooltip.bloodmagic.bound.sword.desc=&o弱者の淘汰 -tooltip.bloodmagic.bound.pickaxe.desc=&o石への無慈悲な破壊 -tooltip.bloodmagic.bound.axe.desc=&o悪魔の伐採機 -tooltip.bloodmagic.bound.shovel.desc=&o土を掃除して綺麗に - -tooltip.bloodmagic.sacrificialDagger.desc=指を刺すには十分な切れ味のようだ... -tooltip.bloodmagic.sacrificialDagger.creative=スニーク状態で血の祭壇を右クリックをすることで満タンになる -tooltip.bloodmagic.slate.desc=血の祭壇で注入された石 -tooltip.bloodmagic.inscriber.desc=壁に描くのに使うようだ... - -tooltip.bloodmagic.pack.selfSacrifice.desc=このパックは本当にチクチクする... -tooltip.bloodmagic.pack.sacrifice.desc=Description -tooltip.bloodmagic.pack.stored=貯蔵量: %d LP - -tooltip.bloodmagic.activationCrystal.weak=低レベルの儀式を起動させる -tooltip.bloodmagic.activationCrystal.awakened=より強力な儀式を起動させる -tooltip.bloodmagic.activationCrystal.creative=クリエイティブ専用 - 全ての儀式を起動 - -tooltip.bloodmagic.diviner.currentRitual=選択中の儀式: -tooltip.bloodmagic.diviner.blankRune=儀式石: %d個 -tooltip.bloodmagic.diviner.waterRune=水の儀式石: %d個 -tooltip.bloodmagic.diviner.airRune=風の儀式石: %d個 -tooltip.bloodmagic.diviner.fireRune=火の儀式石: %d個 -tooltip.bloodmagic.diviner.earthRune=土の儀式石: %d個 -tooltip.bloodmagic.diviner.duskRune=黄昏の儀式石: %d個 -tooltip.bloodmagic.diviner.dawnRune=暁の儀式石: %d個 -tooltip.bloodmagic.diviner.totalRune=儀式石の合計: %d個 -tooltip.bloodmagic.diviner.extraInfo=&9-Shiftキーでルーンの詳細表示- -tooltip.bloodmagic.diviner.extraExtraInfo=&9-Shift + Mキーで機能拡張の詳細表示- -tooltip.bloodmagic.diviner.currentDirection=現在の方角: %s - -tooltip.bloodmagic.ritualReader.currentState=現在のモード: %s -tooltip.bloodmagic.ritualReader.set_area=設定エリア -tooltip.bloodmagic.ritualReader.information=基本情報 -tooltip.bloodmagic.ritualReader.set_will_types=消費ウィルの設定 -tooltip.bloodmagic.ritualReader.desc.set_area=起動中のマスター儀式石を右クリックすることで、儀式の効果範囲を変更できます。最初にマスター儀式石を右クリック、次に新しく設定したい効果範囲の 両端2箇所を順番にクリックします。 -tooltip.bloodmagic.ritualReader.desc.information=起動中のマスター儀式石を右クリックすることで、基本情報を読み取ります。 -tooltip.bloodmagic.ritualReader.desc.set_will_types=ホットバーにデーモンウィル結晶を入れた状態でマスター儀式石を右クリックすると、そのウィルを消費するように設定されます。 - -tooltip.bloodmagic.arcaneAshes=錬金術魔法陣を描くのに用いる灰 - -tooltip.bloodmagic.telepositionFocus.coords=現在の設定座標: (%d, %d, %d) -tooltip.bloodmagic.telepositionFocus.dimension=ディメンションID: %d -tooltip.bloodmagic.telepositionFocus.weak=ワールド内のブロックの転送に用いる -tooltip.bloodmagic.telepositionFocus.enhanced=ワールド内のブロックの転送に用いる -tooltip.bloodmagic.telepositionFocus.reinforced=ワールド内のブロックの転送に用いる -tooltip.bloodmagic.telepositionFocus.demonic=ワールド内のブロックの転送に用いる - -tooltip.bloodmagic.livingArmour.upgrade.speed=迅速 -tooltip.bloodmagic.livingArmour.upgrade.digging=ドワーフの力 -tooltip.bloodmagic.livingArmour.upgrade.poisonResist=毒抵抗 -tooltip.bloodmagic.livingArmour.upgrade.fireResist=イグニスの恩恵 -tooltip.bloodmagic.livingArmour.upgrade.selfSacrifice=頑丈な指 -tooltip.bloodmagic.livingArmour.upgrade.knockback=ボディービルダー -tooltip.bloodmagic.livingArmour.upgrade.physicalProtect=強固な身体 -tooltip.bloodmagic.livingArmour.upgrade.health=生命力 -tooltip.bloodmagic.livingArmour.upgrade.meleeDamage=強撃 -tooltip.bloodmagic.livingArmour.upgrade.arrowShot=トリックショット -tooltip.bloodmagic.livingArmour.upgrade.stepAssist=歩行補助 -tooltip.bloodmagic.livingArmour.upgrade.grimReaper=死神の疾走 -tooltip.bloodmagic.livingArmour.upgrade.solarPowered=太陽の恩恵 -tooltip.bloodmagic.livingArmour.upgrade.thaumRunicShielding=ルーンの加護 -tooltip.bloodmagic.livingArmour.upgrade.revealing=洞察 -tooltip.bloodmagic.livingArmour.upgrade.experienced=経験 -tooltip.bloodmagic.livingArmour.upgrade.jump=跳躍 -tooltip.bloodmagic.livingArmour.upgrade.fallProtect=軟着陸 -tooltip.bloodmagic.livingArmour.upgrade.graveDigger=グレイヴディガー -tooltip.bloodmagic.livingArmour.upgrade.sprintAttack=チャージストライク -tooltip.bloodmagic.livingArmour.upgrade.criticalStrike=トゥルーストライク -tooltip.bloodmagic.livingArmour.upgrade.elytra=エリトラ -tooltip.bloodmagic.livingArmour.upgrade.nightSight=夜間技能 -tooltip.bloodmagic.livingArmour.upgrade.repair=補修 - - -tooltip.bloodmagic.livingArmour.upgrade.slowness=引きずる足 -tooltip.bloodmagic.livingArmour.upgrade.crippledArm=不自由な腕 -tooltip.bloodmagic.livingArmour.upgrade.slippery=摩擦力低下 -tooltip.bloodmagic.livingArmour.upgrade.battleHunger=飢餓の戦い -tooltip.bloodmagic.livingArmour.upgrade.quenched=抑制 -tooltip.bloodmagic.livingArmour.upgrade.meleeDecrease=鈍い刃 -tooltip.bloodmagic.livingArmour.upgrade.digSlowdown=朽ちたツルハシ -tooltip.bloodmagic.livingArmour.upgrade.stormTrooper=突撃兵 -tooltip.bloodmagic.livingArmour.upgrade.slowHeal=病弱 -tooltip.bloodmagic.livingArmour.upgrade.disoriented=方向感覚障害 - -tooltip.bloodmagic.livingArmour.upgrade.level=%s (Lv %d) -tooltip.bloodmagic.livingArmour.upgrade.progress=%s (%d/100) -tooltip.bloodmagic.livingArmour.upgrade.points=&6強化ポイント: %s / %s - -tooltip.bloodmagic.livingArmour.extraExtraInfo=&9-Shift + Mで進捗情報- - -tooltip.bloodmagic.will=ウィル含有量: %1$,.2f -tooltip.bloodmagic.sentientSword.desc=デーモンウィルを使用することで潜在能力が開放されます -tooltip.bloodmagic.sentientAxe.desc=デーモンウィルを使用することで潜在能力が開放されます -tooltip.bloodmagic.sentientPickaxe.desc=デーモンウィルを使用することで潜在能力が開放されます -tooltip.bloodmagic.sentientShovel.desc=デーモンウィルを使用することで潜在能力が開放されます -tooltip.bloodmagic.soulGem.petty=この宝石は微量のウィルを貯蔵できます -tooltip.bloodmagic.soulGem.lesser=この宝石は少量のウィルを貯蔵できます -tooltip.bloodmagic.soulGem.common=この宝石はそこそこのウィルを貯蔵できます -tooltip.bloodmagic.soulGem.greater=この宝石は大量のウィルを貯蔵できます -tooltip.bloodmagic.soulGem.grand=この宝石は莫大なウィルを貯蔵できます -tooltip.bloodmagic.soulSnare.desc=モンスターに投げつけてから倒すことでデーモニックウィルを入手できます - -tooltip.bloodmagic.itemFilter.exact=アイテムが正確に一致する場合にフィルタします -tooltip.bloodmagic.itemFilter.ignoreNBT=NBTタグでフィルタします -tooltip.bloodmagic.itemFilter.modItems=特定MODのアイテムをフィルタします -tooltip.bloodmagic.itemFilter.oreDict=鉱石辞書を用いてフィルタします - -tooltip.bloodmagic.itemFilter.exact=液体の入出力をフィルタします - -tooltip.bloodmagic.fluid.type=液体内容物: %s -tooltip.bloodmagic.fluid.amount=内容量: %d / %d mB -tooltip.bloodmagic.fluid.capacity=最大容量: %d mB - -tooltip.bloodmagic.ghost.everything=全て -tooltip.bloodmagic.ghost.amount=幻影アイテムの個数: %d個 - -tooltip.bloodmagic.currentType.default=内容物: 原生ウィル -tooltip.bloodmagic.currentType.corrosive=内容物: 腐食性ウィル -tooltip.bloodmagic.currentType.destructive=内容物: 破壊性ウィル -tooltip.bloodmagic.currentType.vengeful=内容物: 報復性ウィル -tooltip.bloodmagic.currentType.steadfast=内容物: 不活性ウィル - -tooltip.bloodmagic.currentBaseType.default=原生 -tooltip.bloodmagic.currentBaseType.corrosive=腐食性 -tooltip.bloodmagic.currentBaseType.destructive=破壊性 -tooltip.bloodmagic.currentBaseType.vengeful=報復性 -tooltip.bloodmagic.currentBaseType.steadfast=不活性 - -tooltip.bloodmagic.experienceTome=経験値を貯蔵するために用いる本 -tooltip.bloodmagic.experienceTome.exp=Exp: %0.3f -tooltip.bloodmagic.experienceTome.expLevel=レベル: %d - -tooltip.bloodmagic.decoration.safe=安全な装飾 -tooltip.bloodmagic.decoration.notSafe=危険な装飾 - -tooltip.bloodmagic.cuttingFluidRatio=%d/%d 回使用可能 - -tooltip.bloodmagic.potion.uses=%d 回使用可能 - -tooltip.bloodmagic.book.shifting=紋様が... &oShiftして... - -tooltip.bloodmagic.willGauge=大気中のデーモンウィルを測定するための奇妙な装置。 - -# Ritual -ritual.bloodmagic.blockRange.tooBig=指定されたブロック範囲が広すぎます!最大%sブロックの範囲内である必要があります。 -ritual.bloodmagic.blockRange.tooFar=指定されたブロック範囲が遠すぎます!垂直方向に%sブロック、水平方向に%sブロックの範囲内である必要があります。 -ritual.bloodmagic.blockRange.inactive=儀式石は停止中であり、範囲の変更はできません。 -ritual.bloodmagic.blockRange.noRange=ブロック範囲は適切に設定されませんでした。 -ritual.bloodmagic.blockRange.firstBlock=効果範囲の開始ブロックを設定しました。 -ritual.bloodmagic.blockRange.success=正常に新しい効果範囲が設定されました! -ritual.bloodmagic.willConfig.set=この儀式に以下の種類のデーモンウィルを使用: %s -ritual.bloodmagic.willConfig.void=この儀式はデーモンウィルを使用しません - -ritual.bloodmagic.testRitual=試験用儀式 -ritual.bloodmagic.waterRitual=湧水の儀式 -ritual.bloodmagic.lavaRitual=ネザーの小夜曲 -ritual.bloodmagic.greenGroveRitual=緑化の儀式 -ritual.bloodmagic.jumpRitual=跳躍の儀式 -ritual.bloodmagic.wellOfSufferingRitual=苦痛の井戸 -ritual.bloodmagic.featheredKnifeRitual=フェザーナイフの儀式 -ritual.bloodmagic.regenerationRitual=再生の儀式 -ritual.bloodmagic.harvestRitual=収穫月の儀式 -ritual.bloodmagic.magneticRitual=磁力の儀式 -ritual.bloodmagic.crushingRitual=粉砕者の儀式 -ritual.bloodmagic.fullStomachRitual=飽食の儀式 -ritual.bloodmagic.interdictionRitual=排除の儀式 -ritual.bloodmagic.containmentRitual=幽閉の儀式 -ritual.bloodmagic.speedRitual=風の儀式 -ritual.bloodmagic.suppressionRitual=除去の儀式 -ritual.bloodmagic.expulsionRitual=追放のオーラ -ritual.bloodmagic.zephyrRitual=ゼファーの呼び声 -ritual.bloodmagic.upgradeRemoveRitual=浄霊の調べ -ritual.bloodmagic.armourEvolveRitual=生体進化の儀式 -ritual.bloodmagic.animalGrowthRitual=牧羊の儀式 -ritual.bloodmagic.forsakenSoulRitual=見放された魂の蒐集 -ritual.bloodmagic.crystalHarvestRitual=欠けた結晶の粉砕 -ritual.bloodmagic.meteorRitual=崩壊する塔の印 - -ritual.bloodmagic.cobblestoneRitual=ル・ヴォルカノス・フィギュス -ritual.bloodmagic.placerRitual=設置充填の儀式 -ritual.bloodmagic.fellingRitual=木こりの粉砕 -ritual.bloodmagic.pumpRitual=サイフォンの讃歌 -ritual.bloodmagic.altarBuilderRitual=高位祭壇構築儀式 -ritual.bloodmagic.portalRitual=組み込みゲート -ritual.bloodmagic.downgradeRitual=重き魂の懺悔 - -ritual.bloodmagic.waterRitual.info=マスター儀式石から水源を生成します。 -ritual.bloodmagic.lavaRitual.info=マスター儀式石から溶岩源を生成します。 -ritual.bloodmagic.lavaRitual.default.info=(原生) 溶岩の生成LPコストを下げ、リンクさせた容器に溶岩を注ぎ込みます。 -ritual.bloodmagic.lavaRitual.corrosive.info=(腐食性) 範囲内にいる生物のうち、火炎耐性を持つものに深刻なダメージを与えます。 -ritual.bloodmagic.lavaRitual.destructive.info=(破壊性) 総ウィル量に応じて溶岩の設置範囲が拡大します。 -ritual.bloodmagic.lavaRitual.vengeful.info=(報復性) 範囲内の生物に対して火炎への抵抗を付与します。 -ritual.bloodmagic.lavaRitual.steadfast.info=(不活性) 指定した範囲内にいるプレイヤーに対して火炎耐性を付与します。 - -ritual.bloodmagic.greenGroveRitual.info=エリア内の作物を成長させます。 -ritual.bloodmagic.jumpRitual.info=空中にはね飛ぶ効果を付与します。 -ritual.bloodmagic.wellOfSufferingRitual.info=生物にダメージを与えるエリアを生成し、付近の血の祭壇にLPを供給します。 -ritual.bloodmagic.featheredKnifeRitual.info=プレイヤーにダメージを与えるエリアを生成し、付近後の祭壇にLPを供給します。 -ritual.bloodmagic.regenerationRitual.info=エリア内にHPが減少している生物がいた場合、再生能力を付与します。 -ritual.bloodmagic.regenerationRitual.default.info=(原生) -ritual.bloodmagic.regenerationRitual.corrosive.info=(腐食性) 範囲内にいるプレイヤー以外の生物から生命力を奪い、プレイヤーを治癒します。 -ritual.bloodmagic.regenerationRitual.destructive.info=(破壊性) -ritual.bloodmagic.regenerationRitual.vengeful.info=(報復性) -ritual.bloodmagic.regenerationRitual.steadfast.info=(不活性) -ritual.bloodmagic.harvestRitual.info=エリア内の作物を刈り取り、種などの収穫物があった場合は植え直します。 -ritual.bloodmagic.magneticRitual.info=地中から鉱石を掘り起こし、指定エリアに並べます。 -ritual.bloodmagic.crushingRitual.info=指定エリアのブロックを破壊し、収集物をリンクしているチェストに格納します。 -ritual.bloodmagic.crushingRitual.destructive.info=(破壊性) ブロックを強制的に破壊します:破壊した全てのブロックは幸運IIIの効果が適用されています。 -ritual.bloodmagic.crushingRitual.steadfast.info=(不活性) 全てのブロックはシルクタッチによって破壊されます。幸運の効果は無視されます。 -ritual.bloodmagic.crushingRitual.corrosive.info=(腐食性) 全てのブロックは切削液で破壊されます。シルクタッチの効果は無視されます。 -ritual.bloodmagic.crushingRitual.vengeful.info=(報復性) 可能であればインベントリの圧縮を試みます。1回の動作で一度の圧縮しか行われません。 -ritual.bloodmagic.crushingRitual.default.info=(原生) 総ウィル量に応じて、儀式の速度が向上します。 -ritual.bloodmagic.greenGroveRitual.corrosive.info=(腐食性) 作物の周囲にいる生物は攻撃を受け、生命力が作物に吸収される。 -ritual.bloodmagic.greenGroveRitual.default.info=(原生) オーラ中のウィル量に応じて全ての儀式の作動速度が向上します。 -ritual.bloodmagic.greenGroveRitual.vengeful.info=(報復性) Tick当たりの成長の成功率が増加します。 -ritual.bloodmagic.greenGroveRitual.steadfast.info=(不活性) 種を植え直し、潅水範囲にあるブロックを湿らせる。 -ritual.bloodmagic.greenGroveRitual.destructive.info=(破壊性) 総ウィル量に応じて、成長させる範囲が拡大します。 -ritual.bloodmagic.featheredKnifeRitual.default.info=(原生) オーラ中の総ウィル量に応じて、儀式の速度が向上します。 -ritual.bloodmagic.featheredKnifeRitual.destructive.info=(破壊性) オーラ中の総ウィル量に応じて、儀式による収集量を増やします。 -ritual.bloodmagic.featheredKnifeRitual.vengeful.info=(報復性) 犠牲にするHPの最低値を10%%までにします。所有者が不活性が有効にしていると上書きされます。 -ritual.bloodmagic.featheredKnifeRitual.corrosive.info=(腐食性) お香による効果増大を有効にします。 -ritual.bloodmagic.featheredKnifeRitual.steadfast.info=(不活性) 犠牲にするHPの最低値を30%%から70%%にします。 -ritual.bloodmagic.speedRitual.default.info=(原生) オーラ中の総ウィル量に応じて、射出速度が上昇します。 -ritual.bloodmagic.speedRitual.vengeful.info=(報復性) 大人の生物やプレイヤーを移動させます。破壊性も利用していた場合はプレイヤーを移動させます。 -ritual.bloodmagic.speedRitual.destructive.info=(破壊性) 子供の生物やプレイヤーを移動させます。報復性も利用していた場合はプレイヤーを移動させます。 -ritual.bloodmagic.animalGrowthRitual.vengeful.info=(報復性) 大人が再び繁殖するまでの時間を短縮すます。 -ritual.bloodmagic.animalGrowthRitual.steadfast.info=(不活性) 関連付けられたチェスト内のアイテムを用いて、エリア内の大人を自動的に繁殖させます。 -ritual.bloodmagic.animalGrowthRitual.default.info=(原生) オーラ中の総ウィル量に応じて、儀式の速度が向上します。 -ritual.bloodmagic.animalGrowthRitual.destructive.info=(破壊性) 長い間繁殖を行っていない大人は、MOBに向かっていき爆発する。 -ritual.bloodmagic.animalGrowthRitual.corrosive.info=(腐食性) Unimplemented. - -ritual.bloodmagic.fullStomachRitual.info=リンクしているチェスト内にある食料を、満腹でないプレイヤーに自動的に供給します。 -ritual.bloodmagic.interdictionRitual.info=マスター儀式石の一定エリア内の生物を排除して侵入できないようにします。 -ritual.bloodmagic.containmentRitual.info=エリア内の生物をスター儀式石の周囲に引き寄せます。 -ritual.bloodmagic.speedRitual.info=矢印状の儀式石の方向へ、プレイヤーを射出します。 -ritual.bloodmagic.suppressionRitual.info=あらゆる流体元を除去します - 儀式の動作を停止すると液体は戻ってくる。 -ritual.bloodmagic.expulsionRitual.info=儀式の設置者か、マスター儀式石の上のチェストに契約済みブラッドオーブのを入れたプレイヤー以外を所定エリアから排除します。 -ritual.bloodmagic.zephyrRitual.info=エリア内のドロップアイテムを収集し、リンクされたチェストに収納します。 -ritual.bloodmagic.upgradeRemoveRitual.info=Undocumented. -ritual.bloodmagic.armourEvolveRitual.info=Undocumented. -ritual.bloodmagic.animalGrowthRitual.info=エリア内にいる子供生物の成長速度を早めます。 -ritual.bloodmagic.forsakenSoulRitual.info=エリア内の生物にダメージを与え、生物が死んだ時にウィルを回収してデーモンウィル結晶を成長させます。 -ritual.bloodmagic.crystalHarvestRitual.info=範囲内のデーモンウィル結晶株を破壊してウィル結晶にしてドロップさせます。 -ritual.bloodmagic.placerRitual.info=リンクしているチェスの中からブロックとして設置可能なものを取り出し、隙間なく設置します。 -ritual.bloodmagic.fellingRitual.info=この儀式は標準的な木材伐採装置として動作し、エリア内のすべての原木及び葉を伐採および採取します。 -ritual.bloodmagic.pumpRitual.info=設定エリアから流体を吸い出し、1バケツ分以上の容量がある流体タンクへと供給します。 -ritual.bloodmagic.altarBuilderRitual.info=マスター儀式石とリンクしているチェストの中身を使用して血の祭壇を構築します。 -ritual.bloodmagic.portalRitual.info=作成し起動させると同時に周囲のブロック材質を固有の”キー”とするポータルネットワークを構築します。周囲ブロックの変更は起動後でも可能であり、ポータルは同じキー同士をリンクします。 -ritual.bloodmagic.meteorRitual.info=範囲内のアイテムを消費し、空から資源に富んだ隕石を儀式に直撃させるように召喚します。 - -ritual.bloodmagic.waterRitual.waterRange.info=(水) 設定したエリアに水源を生成させます。 -ritual.bloodmagic.lavaRitual.lavaRange.info=(溶岩) 設定したエリアに溶岩源を生成させます。 -ritual.bloodmagic.lavaRitual.lavaTank.info=(原生) 儀式によって生成した溶岩を入れるタンク。 -ritual.bloodmagic.lavaRitual.fireFuse.info=(報復性) 範囲内のエンティティは炎によって苦しめられます。 -ritual.bloodmagic.lavaRitual.fireResist.info=(不活性) 範囲内のプレイヤーは火炎耐性の効果を与えます。 -ritual.bloodmagic.lavaRitual.fireDamage.info=(腐食性) 範囲内にいる火炎耐性を持つ生物はウィル量に比例したダメージを受けます。 -ritual.bloodmagic.greenGroveRitual.growing.info=(成長) 設定したエリア内の植物の成長を促進させます。 -ritual.bloodmagic.greenGroveRitual.leech.info=(腐食性) 作物の成長のために周辺の生物は生命力を吸収される。 -ritual.bloodmagic.greenGroveRitual.hydrate.info=(不活性) 範囲内の耕したブロックを湿らせ、エリア周辺にある種子を植え付ける。 -ritual.bloodmagic.jumpRitual.jumpRange.info=(跳躍) 設定したエリア内に居る生物を空中に飛び上がらせます。 -ritual.bloodmagic.wellOfSufferingRitual.altar.info=(祭壇) 儀式が血の祭壇を検索するエリアを指定します。変更することにより検索エリアを拡大したり特定の領域に制限したりすることが可能です。 -ritual.bloodmagic.wellOfSufferingRitual.damage.info=(ダメージ) 儀式によって生物が継続ダメージを受けるエリアを設定します。この範囲内に居るすべての生物は徐々にダメージを受け続ける(プレイヤーを除く)。 -ritual.bloodmagic.featheredKnifeRitual.altar.info=(祭壇)儀式が血の祭壇を検索するエリアを指定します。変更することにより検索エリアを拡大したり特定の領域に制限したりすることが可能です。 -ritual.bloodmagic.featheredKnifeRitual.damage.info=(ダメージ) 儀式によってプレイヤーが継続ダメージを受けるエリアを設定します。この範囲内に居るプレイヤーは死ぬ一歩手前まで徐々にダメージを受け続ける。 -ritual.bloodmagic.regenerationRitual.heal.info=(回復) 範囲内に居る生物は再生能力の効果を与えます。 -ritual.bloodmagic.regenerationRitual.vampire.info=(吸血主義) 範囲内にいる生物はプレイヤーの回復のために生命力が削られていきます。 -ritual.bloodmagic.harvestRitual.harvestRange.info=(収穫) 範囲内の植物を収穫します。 -ritual.bloodmagic.magneticRitual.placementRange.info=(配置) 儀式はこのエリアに手に入れた鉱石を配置します。 -ritual.bloodmagic.crushingRitual.crushingRange.info=(粉砕) 儀式はこのエリア内のブロックを破壊して入手します。 -ritual.bloodmagic.crushingRitual.chest.info=(チェスト) 儀式が破壊したブロックを格納するインベントリの場所。 -ritual.bloodmagic.fullStomachRitual.fillRange.info=(補給) 儀式がプレイヤーに食料を供給する範囲。 -ritual.bloodmagic.fullStomachRitual.chest.info=(チェスト) 儀式がプレイヤーに供給するための食料を取り出すインベントリの場所。 -ritual.bloodmagic.interdictionRitual.interdictionRange.info=(排除) 儀式によって生物が弾き飛ばされる範囲。すべての生物はこの設定エリアに関係なくマスター儀式石から弾き飛ばされる。 -ritual.bloodmagic.containmentRitual.containmentRange.info=(幽閉) 儀式によって生物が引き寄せられる範囲。すべての生物はこの設定エリアに関係なくマスター儀式石の方へと引き寄せられる。 -ritual.bloodmagic.speedRitual.sanicRange.info=(加速) 設定したエリア内のすべての生物が矢印の方向へと射出されます。 -ritual.bloodmagic.suppressionRitual.suppressionRange.info=(除去) 範囲内のすべての液体が押しのけられます。 -ritual.bloodmagic.expulsionRitual.expulsionRange.info=(追放) -ritual.bloodmagic.zephyrRitual.zephyrRange.info=(吸引) 設定範囲内のアイテムが収集され、リンクされているチェストに収納されます。 -ritual.bloodmagic.zephyrRitual.chest.info=(チェスト) 儀式が収集したアイテムを収納するためのチェストの場所。 -ritual.bloodmagic.animalGrowthRitual.growing.info=(成長) 範囲内の動物がとても早く成長します。 -ritual.bloodmagic.animalGrowthRitual.chest.info=(チェスト) 繁殖させるための適切な餌を入れたチェストの場所。 -ritual.bloodmagic.forsakenSoulRitual.crystal.info=(結晶) 儀式によって生物が死亡した際に、この範囲内のデーモンウィル結晶の成長が促進します。 -ritual.bloodmagic.forsakenSoulRitual.damage.info=(ダメージ) この範囲内の生物は徐々にダメージを受け、死亡した際のウィルがクリスタルの成長に利用されます。 -ritual.bloodmagic.crystalHarvestRitual.crystal.info=(結晶) 析出した全てのデーモンウィル結晶株を破壊して単結晶の結晶にします。結晶株が1つだけになった場合は破壊しない。 - -ritual.bloodmagic.placerRitual.placerRange.info=(場所) 儀式が設定範囲にブロックを設置します。 -ritual.bloodmagic.placerRitual.chest.info=(チェスト) 儀式がブロックを設置するために、ブロックを取り出すインベントリの場所。 -ritual.bloodmagic.fellingRitual.fellingRange.info=(伐採) 儀式が伐採するための原木や葉を探す範囲。 -ritual.bloodmagic.fellingRitual.chest.info=(チェスト) 儀式が蒐集物を格納するインベントリの場所。 -ritual.bloodmagic.pumpRitual.pumpRange.info=(ポンプ) 儀式が採取するための液体を探す範囲。 - -ritual.bloodmagic.downgradeRitual.dialogue.bow.1=さて人間よ、更なる力が欲しいか...? -ritual.bloodmagic.downgradeRitual.dialogue.bow.100=もちろん知っているだろうが、何事にも対価が必要である... 何らかの代償を支払うことなく、私はお前に更なる力を与える訳にはいかないのだ... -ritual.bloodmagic.downgradeRitual.dialogue.bow.300=私の前に供物を差し出すことでお前は感覚を失い、長距離の投擲物を命中させることができなくなるだろう。弓矢が勝利の鍵たり得ることは、もはやないのだ。 -ritual.bloodmagic.downgradeRitual.dialogue.bow.500=だがその見返りとして、私はさらなる成長をもたらすためにお前の鎧を解放しよう... お前がすべき事は供物を捧げ、この祭壇に跪くことだ... -ritual.bloodmagic.downgradeRitual.dialogue.quenched.1=フフフ... ごきげんよう。 より強力な力を欲しているようだな。 -ritual.bloodmagic.downgradeRitual.dialogue.quenched.100=いっぱいになった杯を再び注ぎ直すには、必ず一度空にする必要がある。これはお前にも十分理解できるだろう。 -ritual.bloodmagic.downgradeRitual.dialogue.quenched.300=次のような取引を持ちかけよう:飲むことにより技能をひとつ失い、私はお前に莫大な潜在能力を与えよう。しかしながら、この取引がお前にとって価値あるものであるかどうかは完全に別の問題だ... -ritual.bloodmagic.downgradeRitual.dialogue.quenched.500=さあ跪け、人間よ。そして私が授けた杯を飲み干すがいい。おそらくそれはお前にとっての最後の一杯となろう。 -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.1=ふうむ... お前の本当の望みは何なのだ? -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.100=もし死を超越した人間ならば、私はお前と取引をすることはできない─ その代わりに別の取引を提示することはできる... -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.300=ただし、私はお前に何かしらの代償を要求しよう:お前の物理的な戦闘能力だ。 -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.500=これに契約することで、もはやお前は確実に武器を振るえなくなり、以前に振るえていたダメージのほんの僅かしか与えることができなくなる。 -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.700=さあ、お前の選択次第だ:祭壇に跪くか、己の剣を執り続けるのか? -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.1=用心したまえ、人間よ。お前の地盤は崩れ行くことになるだろう。 -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.100=私は我が同輩たちとは異なる。お前の生命を扱う魔術師として、お前の望みを叶えるための恐ろしい契約を提供しよう。 -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.300=お前の怪我はいずれ癒えることだろう。しかし私の”加護”を受けし者はそれが酷くゆったりとしたものになる。戦場で傷を負えばお前をさらに悩ませることだろう。 -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.500=挑む前によくよく考えたまえ。ひとたび空にしてしまった杯を、再び満たすことは不可能なのだから... - -# Chat -chat.bloodmagic.altarMaker.setTier=グレードを設定: %d -chat.bloodmagic.altarMaker.building=グレード %dの祭壇を作成 -chat.bloodmagic.altarMaker.destroy=グレード %dの祭壇を破壊 -chat.bloodmagic.altarMaker.creativeOnly=これはクリエイティブモード専用アイテムです。 - -chat.bloodmagic.damageSource=%sの魂は非常に弱くなっています - -chat.bloodmagic.ritual.weak=エネルギーの流れが感じられるが、儀式の起動には何かが足りないようだ。 -chat.bloodmagic.ritual.prevent=儀式があなたに激しく抵抗している! -chat.bloodmagic.ritual.activate=エネルギーの奔流が儀式に流れ込む! -chat.bloodmagic.ritual.notValid=あなたはルーンの配置が正しくないように感じた... - -chat.bloodmagic.livingArmour.upgrade.poisonRemove=あなたは良い効果を感じた! -chat.bloodmagic.livingArmour.upgrade.fireRemove=&6清涼感があなたを包み込み、炎上が収まった。 -chat.bloodmagic.livingArmour.upgrade.grimReaper=&6闇の力があなたを死の淵から引き寄せる! -chat.bloodmagic.livingArmour.newUpgrade=&4強化ポイントを取得しました! - -chat.bloodmagic.routing.remove=記録された座標情報を消去しました -chat.bloodmagic.routing.set=ノードの座標を設定しました -chat.bloodmagic.routing.link.master=マスターのノードとリンクさせました! -chat.bloodmagic.routing.link=ノードをお互いにリンクさせました - -chat.bloodmagic.altar.comp.glowstone=グロウストーンのブロック -chat.bloodmagic.altar.comp.bloodstone=大きなブラッドストーンレンガ -chat.bloodmagic.altar.comp.beacon=ビーコン -chat.bloodmagic.altar.comp.bloodrune=血のルーン -chat.bloodmagic.altar.comp.crystal=未実装のアイテム -chat.bloodmagic.altar.comp.notair=固体ブロック - -chat.bloodmagic.altar.nextTier=次のグレードの血の祭壇にするには%sが%sの場所に不足しています。 - -chat.bloodmagic.mimic.potionSet=ポーションを設置しました。 -chat.bloodmagic.mimic.potionRemove=ポーションを無効化しました。 -chat.bloodmagic.mimic.potionInterval.up=ポーション生成の時間間隔を以下に増加しました: %d tick -chat.bloodmagic.mimic.potionInterval.down=ポーション生成の時間間隔を以下に減少しました: %d tick -chat.bloodmagic.mimic.detectRadius.up=プレイヤーの検知範囲を以下に拡大しました: %d ブロック -chat.bloodmagic.mimic.detectRadius.down=プレイヤーの検知範囲を以下に縮小しました: %d ブロック -chat.bloodmagic.mimic.potionSpawnRadius.up=ポーション生成の効果範囲を以下に拡大しました: %d ブロック -chat.bloodmagic.mimic.potionSpawnRadius.down=ポーション生成の効果範囲を以下に減少しました: %d ブロック - -# entity -entity.bloodmagic.SentientSpecter.name=理力の霊魂 -entity.bloodmagic.Mimic.name=ミミック - -# Commands -commands.bloodmagic.error.arg.invalid=無効な引数です -commands.bloodmagic.error.arg.missing=引数が足りません -commands.bloodmagic.error.arg.player.missing=あなたは実行する対象プレイヤーを指定する必要があります。 -commands.bloodmagic.error.404=コマンドが見つかりません! -commands.bloodmagic.error.unknown=未知のコマンドです! -commands.bloodmagic.error.perm=このコマンドを実行する権限がありません。 - -commands.bloodmagic.success=正常に実行されました - -commands.bloodmagic.format.help=%s - %s -commands.bloodmagic.format.error=%s - %s - -commands.bloodmagic.help.usage=/bloodmagic help -commands.bloodmagic.help.help="/bloodmagic" コマンドでヘルプ情報が表示されます。 - -commands.bloodmagic.network.usage=/bloodmagic network [syphon|add|get|fill|cap] <プレイヤー> [量] -commands.bloodmagic.network.help=LP ネットワークユーティリティ -commands.bloodmagic.network.syphon.help=指定したプレイヤーのLPネットワークからLPを削減します -commands.bloodmagic.network.syphon.success=%d LPだけ、%sのソウルネットワークを削減することに成功しました。 -commands.bloodmagic.network.add.help=指定されたプレイヤーのLPネットワークのLPを、LP増加ルールの範囲内で増加させます。 -commands.bloodmagic.network.add.success=%d LPだけ、%sのLPネットワークを増加させることに成功しました。 -commands.bloodmagic.network.set.help=指定したプレイヤーのLPを設定します。 -commands.bloodmagic.network.set.success=%sのLPネットワークを%d LPに設定することに成功しました。 -commands.bloodmagic.network.get.help=指定したプレイヤーのLPネットワークのLP量を返します。 -commands.bloodmagic.network.fill.help=指定したプレイヤーのLPネットワークを%d LPまで満たします。 -commands.bloodmagic.network.fill.success=%sのLPネットワークを最大まで付与することに成功しました。 -commands.bloodmagic.network.cap.help=プレイヤーが入手できる最高位のブラッドオーブで貯蔵可能な最大値のLPを付与します。 -commands.bloodmagic.network.cap.success=%sのLPネットワークの限界値までLPを付与することに成功しました。 - -commands.bloodmagic.bind.usage=/bloodmagic bind [true|false] [プレイヤー] -commands.bloodmagic.bind.help=手に所持したアイテムを結合/分離します。 -commands.bloodmagic.bind.success=結合に成功しました -commands.bloodmagic.bind.remove.success=分離に成功しました - -commands.bloodmagic.orb.usage=/bloodmagic orb [set|get] <プレイヤー> [グレード] -commands.bloodmagic.orb.help=対象プレイヤーのブラッドオーブのグレードの最大値を設定、取得するために使います。 - -commands.bloodmagic.bind.usage=/bind <プレイヤー> -commands.bloodmagic.bind.success=アイテムの登録が成功しました! -commands.bloodmagic.bind.failed.noPlayer=指定されたプレイヤーは存在しません -commands.bloodmagic.bind.failed.alreadyBound=アイテムは既に登録済みです; /unbind コマンドで登録解除してください -commands.bloodmagic.bind.failed.notBindable=アイテムの登録が出来ませんでした -commands.bloodmagic.unbind.usage=/unbind -commands.bloodmagic.unbind.success=アイテムの登録解除が成功しました! -commands.bloodmagic.unbind.failed.notBindable=アイテムの登録解除が出来ませんでした -commands.bloodmagic.soulnetwork.usage=/soulnetwork <プレイヤー> [量] -commands.bloodmagic.soulnetwork.add.success=%d LPだけ、%sのソウルネットワークを増加させることに成功しました! -commands.bloodmagic.soulnetwork.subtract.success=%d LPだけ、%sのソウルネットワークを減少させることに成功しました! -commands.bloodmagic.soulnetwork.fill.success=正常に%sのソウルネットワークを満たしました! -commands.bloodmagic.soulnetwork.empty.success=正常に%sのソウルネットワークを空にしました! -commands.bloodmagic.soulnetwork.get.success=%dだけ%sのソウルネットワークにはLPがあります! -commands.bloodmagic.soulnetwork.noPlayer=指定されたプレイヤーは存在しません -commands.bloodmagic.soulnetwork.noCommand=指定されたコマンドはありません -commands.bloodmagic.soulnetwork.notACommand=有効なコマンドではありません -commands.bloodmagic.soulnetwork.fillMax.success=正常に%sのソウルネットワークにオーブの最大値までLPを供給しました! -commands.bloodmagic.soulnetwork.create.success=正常に%sのソウルネットワークを構築しました(オーブのグレード: %d) - -# GUI -tile.bloodmagic.inputNode.name=入力ノード -tile.bloodmagic.outputNode.name=出力ノード - -# Keybinds -bloodmagic.keybind.open_holding=貯蔵の印章を開く -bloodmagic.keybind.cycle_holding_pos=印章を順に回す (+) -bloodmagic.keybind.cycle_holding_neg=印章を逆に回す (-) - -# JustEnoughItems -jei.bloodmagic.recipe.altar=血の祭壇 -jei.bloodmagic.recipe.binding=錬金術魔法陣(結合) -jei.bloodmagic.recipe.alchemyArrayCrafting=錬金術魔法陣 -jei.bloodmagic.recipe.soulForge=業火のかまど -jei.bloodmagic.recipe.alchemyTable=錬金術テーブル -jei.bloodmagic.recipe.armourDowngrade=懺悔 (儀式) -jei.bloodmagic.recipe.requiredLP=LP: %d -jei.bloodmagic.recipe.requiredTier=グレード: %d -jei.bloodmagic.recipe.consumptionRate=消費率: %d LP/t -jei.bloodmagic.recipe.drainRate=消費率: %d LP/t -jei.bloodmagic.recipe.minimumSouls=最小: %1$,.2fウィル -jei.bloodmagic.recipe.soulsDrained=消費: %1$,.2fウィル -jei.bloodmagic.recipe.lpDrained=消費: %,d LP -jei.bloodmagic.recipe.ticksRequired=時間: %,d Ticks - -jei.bloodmagic.desc.altarBuilder=デバッグやテストに利用するクリエイティブモード専用アイテム。\n\nShift+右クリックで作成するグレードの変更を行い、右クリックで祭壇を構築。\n\n血の祭壇を左クリックで儀式石ごと破壊されます。 -jei.bloodmagic.desc.demonicWill=生物が内包する悪魔の因子。\n\nMobを理力の剣によって殺害する、または簡素な投げ罠を投げ、白いパーティクルが発生している間に殺害することで入手ができる。 - -# WAILA -waila.bloodmagic.sneak=&oスニークで詳細情報 -waila.bloodmagic.array.reagent=試薬: %s -waila.bloodmagic.array.catalyst=触媒: %s -option.bloodmagic.bypassSneak=スニークで回避 -option.bloodmagic.bloodAltar=血の祭壇 -option.bloodmagic.ritualController=儀式石 -option.bloodmagic.teleposer=テレポーザー -option.bloodmagic.array=錬金術魔法陣 - -# Thaumcraft -tc.research_category.BLOODMAGIC=血紅の秘儀 - -# Thaumcraft Research -bloodmagic.research_name.BLOODMAGIC=Blood Magic -bloodmagic.research_text.BLOODMAGIC=血紅の秘儀 -bloodmagic.research_page.BLOODMAGIC.1=Blood Magic の領域は常に孤独であり、 ”個人の” 技能は世間から疎まれ、時には心を病んでしまうこともあるかも知れない。しかし、自己犠牲とライフエッセンスの力は一般の血の魔術師を超えた領域に到達し、それどころか人知を超えた能力を身につられるだろうことは完全に明白であろう! - -# Buttons -button.bloodmagic.tooltip.fill=ネットワークに充填 \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/lang/ko_KR.lang b/src/main/resources/assets/bloodmagic/lang/ko_KR.lang deleted file mode 100644 index 5787e851..00000000 --- a/src/main/resources/assets/bloodmagic/lang/ko_KR.lang +++ /dev/null @@ -1,194 +0,0 @@ -#Block Localization -tile.bloodAltar.name=피의 제단 -tile.bloodRune.blank.name=피의 룬 -tile.bloodRune.fill.name=저장량증가의 룬 -tile.bloodRune.empty.name=흡수의 룬 -tile.bloodRune.orb.name=보주의 룬 -tile.bloodRune.betterCapacity.name=Rune of Superior Capacity -tile.speedRune.name=속도의 룬 -tile.efficiencyRune.name=효율의 룬 -tile.runeOfSacrifice.name=희생의 룬 -tile.runeOfSelfSacrifice.name=자기희생의 룬 -tile.ritualStone.name=의식의 돌 -tile.blockMasterStone.name=의식의돌 제어 -tile.bloodSocket.name=Filled Socket -tile.imperfectRitualStone.name=Imperfect Ritual Stone -tile.armourForge.name=Soul Armour Forge -tile.emptySocket.name=빈 소켓 -tile.bloodStoneBrick.name=Bloodstone Brick -tile.largeBloodStoneBrick.name=큰 선혈석재벽돌 -tile.blockWritingTable.name=Alchemic Chemistry Set -tile.blockHomHeart.name=Spell Table -tile.bloodPedestal.name=Arcane Pedestal -tile.bloodPlinth.name=Arcane Plinth -tile.bloodTeleposer.name=Teleposer -tile.blockConduit.name=Spell Conduit -tile.blockSpellParadigm.projectile.name=Particle Generator -tile.blockSpellParadigm.self.name=Self Augmentator -tile.blockSpellParadigm.melee.name=Melee Aggregator -tile.blockSpellParadigm.tool.name=Tool Forger -tile.blockSpellEnhancement.power1.name=Unstable Spell Empowerer -tile.blockSpellEnhancement.power2.name=Standard Spell Empowerer -tile.blockSpellEnhancement.power3.name=Reinforced Spell Empowerer -tile.blockSpellEnhancement.power4.name=Imbued Spell Empowerer -tile.blockSpellEnhancement.power5.name=Demonic Spell Empowerer -tile.blockSpellEnhancement.cost1.name=Unstable Spell Dampener -tile.blockSpellEnhancement.cost2.name=Standard Spell Dampener -tile.blockSpellEnhancement.cost3.name=Reinforced Spell Dampener -tile.blockSpellEnhancement.cost4.name=Imbued Spell Dampener -tile.blockSpellEnhancement.cost5.name=Demonic Spell Dampener -tile.blockSpellEnhancement.potency1.name=Unstable Spell Augmentor -tile.blockSpellEnhancement.potency2.name=Standard Spell Augmentor -tile.blockSpellEnhancement.potency3.name=Reinforced Spell Augmentor -tile.blockSpellEnhancement.potency4.name=Imbued Spell Augmentor -tile.blockSpellEnhancement.potency5.name=Demonic Spell Augmentor -tile.blockSpellModifier.default.name=Default Spell Modifier -tile.blockSpellModifier.offensive.name=Offensive Spell Modifier -tile.blockSpellModifier.defensive.name=Defensive Spell Modifier -tile.blockSpellModifier.environmental.name=Environmental Spell Modifier -tile.blockSpellEffect.fire.name=Crucible of Fire -tile.blockSpellEffect.ice.name=Ice Maker -tile.blockSpellEffect.wind.name=Wind Generator -tile.blockSpellEffect.earth.name=Earth Former -tile.alchemicCalcinator.name=Alchemic Calcinator -tile.crystalBelljar.name=Crystal Belljar -tile.blockReagentConduit.name=Alchemy Relay - -#Item Localization -item.weakBloodOrb.name=약한 선혈의 보주 -item.apprenticeBloodOrb.name=견습 선혈의 보주 -item.magicianBloodOrb.name=마법사의 선혈보주 -item.masterBloodOrb.name=마스터 선혈의 보주 -item.archmageBloodOrb.name=아크메이지의 선혈보주 -item.energyBlast.name=Energy Blaster -item.energySword.name=Bound Blade -item.lavaCrystal.name=용암수정 -item.waterSigil.name=물의 부적 -item.lavaSigil.name=용암의 부적 -item.voidSigil.name=공허의 부적 -item.blankSlate.name=빈 판 -item.reinforcedSlate.name=보강된 판 -item.sacrificialDagger.name=희생의 검 -item.daggerOfSacrifice.name=희생의 단검 -item.airSigil.name=바람의 부적 -item.sigilOfTheFastMiner.name=쾌속의광부 부적 -item.sigilOfElementalAffinity.name=원소친화의 부적 -item.sigilOfHaste.name=Sigil of Haste -item.sigilOfHolding.name=보관의 부적 -item.divinationSigil.name=점술의 시질 -item.waterScribeTool.name=Elemental Inscription Tool: Water -item.fireScribeTool.name=Elemental Inscription Tool: Fire -item.earthScribeTool.name=Elemental Inscription Tool: Earth -item.airScribeTool.name=Elemental Inscription Tool: Air -item.duskScribeTool.name=Elemental Inscription Tool: Dusk -item.activationCrystalWeak.name=Weak Activation Crystal -item.activationCrystalAwakened.name=Awakened Activation Crystal -item.boundPickaxe.name=Bound Pickaxe -item.boundAxe.name=Bound Axe -item.boundShovel.name=Bound Shovel -item.boundHelmet.name=Bound Helmet -item.boundPlate.name=Bound Plate -item.boundLeggings.name=Bound Leggings -item.boundBoots.name=Bound Boots -item.weakBloodShard.name=Weak Blood Shard -item.growthSigil.name=수풀의 부적 -item.blankSpell.name=Unbound Crystal -item.alchemyFlask.name=Potion Flask -item.standardBindingAgent.name=Standard Binding Agent -item.mundanePowerCatalyst.name=Mundane Power Catalyst -item.averagePowerCatalyst.name=Average Power Catalyst -item.greaterPowerCatalyst.name=Greater Power Catalyst -item.mundaneLengtheningCatalyst.name=Mundane Lengthening Catalyst -item.averageLengtheningCatalyst.name=Average Lengthening Catalyst -item.greaterLengtheningCatalyst.name=Greater Lengthening Catalyst -item.incendium.name=Incendium -item.magicales.name=Magicales -item.sanctus.name=Sanctus -item.aether.name=Aether -item.simpleCatalyst.name=Simple Catalyst -item.crepitous.name=Crepitous -item.crystallos.name=Crystallos -item.terrae.name=Terrae -item.aquasalus.name=Aquasalus -item.tennebrae.name=Tenebrae -item.demonBloodShard.name=Demon Blood Shard -item.sigilOfWind.name=Sigil of the Whirlwind -item.telepositionFocus.name=Teleposition Focus -item.enhancedTelepositionFocus.name=Enhanced Teleposition Focus -item.reinforcedTelepositionFocus.name=Reinforced Teleposition Focus -item.demonicTelepositionFocus.name=Demonic Teleposition Focus -item.imbuedSlate.name=Imbued Slate -item.demonicSlate.name=Demonic Slate -item.sigilOfTheBridge.name=영각의 부적 -item.armourInhibitor.name=Armour Inhibitor -item.cheatyItem.name=Orb of Testing -item.weakFillingAgent.name=Weak Filling Agent -item.standardFillingAgent.name=Standard Filling Agent -item.enhancedFillingAgent.name=Enhanced Filling Agent -item.weakBindingAgent.name=Weak Binding Agent -item.ritualDiviner.name=Ritual Diviner -item.sigilOfMagnetism.name=자기력 부적 -item.itemDiabloKey.name=Key of Binding -item.energyBazooka.name=Energy Bazooka -item.bloodLightSigil.name=선혈의 램프 부적 -item.itemComplexSpellCrystal.name=Complex Spell Crystal -item.itemSigilOfSupression.name=Sigil of Supression -item.itemSigilOfEnderSeverance.name=Sigil of Ender Severance -item.bucketLife.name=Bucket of Life -item.bloodMagicBaseItem.QuartzRod.name=Quartz Rod -item.bloodMagicBaseItem.EmptyCore.name=Empty Core -item.bloodMagicBaseItem.MagicalesCable.name=Magicales Cable -item.bloodMagicBaseItem.WoodBrace.name=Wooden Brace -item.bloodMagicBaseItem.StoneBrace.name=Stone Brace -item.bloodMagicBaseItem.ProjectileCore.name=Projectile Core -item.bloodMagicBaseItem.SelfCore.name=Self Core -item.bloodMagicBaseItem.MeleeCore.name=Melee Core -item.bloodMagicBaseItem.ToolCore.name=Tool Core -item.bloodMagicBaseItem.ParadigmBackPlate.name=Paradigm Plate -item.bloodMagicBaseItem.OutputCable.name=Output Spell Cable -item.bloodMagicBaseItem.InputCable.name=Input Spell Cable -item.bloodMagicBaseItem.FlameCore.name=Fire Core -item.bloodMagicBaseItem.IcyCore.name=Icy Core -item.bloodMagicBaseItem.GustCore.name=Gusty Core -item.bloodMagicBaseItem.EarthenCore.name=Earthen Core -item.bloodMagicBaseItem.CrackedRunicPlate.name=Cracked Runic Plate -item.bloodMagicBaseItem.RunicPlate.name=Runic Plate -item.bloodMagicBaseItem.ScribedRunicPlate.name=Imbued Runic Plate -item.bloodMagicBaseItem.DefaultCore.name=Unattuned Core -item.bloodMagicBaseItem.OffensiveCore.name=Offensive Core -item.bloodMagicBaseItem.DefensiveCore.name=Defensive Core -item.bloodMagicBaseItem.EnvironmentalCore.name=Environmental Core -item.bloodMagicBaseItem.PowerCore.name=Power Core -item.bloodMagicBaseItem.CostCore.name=Reduction Core -item.bloodMagicBaseItem.PotencyCore.name=Potency Core -item.bloodMagicBaseItem.ObsidianBrace.name=Obsidian Brace -item.bloodMagicAlchemyItem.Offensa.name=Offensa -item.bloodMagicAlchemyItem.Praesidium.name=Praesidium -item.bloodMagicAlchemyItem.OrbisTerrae.name=Orbis Terrae -item.bloodMagicAlchemyItem.StrengthenedCatalyst.name=Strengthened Catalyst -item.bloodMagicAlchemyItem.ConcentratedCatalyst.name=Concentrated Catalyst -item.bloodMagicAlchemyItem.FracturedBone.name=Fractured Bone -item.bloodMagicAlchemyItem.Virtus.name=Virtus -item.bloodMagicAlchemyItem.Reductus.name=Reductus -item.bloodMagicAlchemyItem.Potentia.name=Potentia -item.sanguineHelmet.name=Sanguine Helmet -item.itemSeerSigil.name=Sigil of Sight -#item.itemFluidSigil.name= -item.multiTool.name=Dynamic Mace -item.itemCombinationalCatalyst.name=Combinational Catalyst -item.sanguineRobe.name=Sanguine Robes -item.sanguinePants.name=Sanguine Leggings -item.sanguineBoots.name=Sanguine Boots -item.itemAttunedCrystal.name=Alchemic Router -item.itemTankSegmenter.name=Alchemic Segmenter -item.destinationClearer.name=Alchemic Cleanser - -#Creative Tab -itemGroup.tabbloodmagic=선혈의마술[Blood Magic] - -#Extra Strings -bm.string.consume=사용량 -bm.string.drain=흡수량 -bm.string.tier=티어 -bm.string.crafting.orb.shaped=블러드매직 오브 조합법 -bm.string.crafting.orb.shapeless=블러드매직 오브 조합법 diff --git a/src/main/resources/assets/bloodmagic/lang/ru_RU.lang b/src/main/resources/assets/bloodmagic/lang/ru_RU.lang deleted file mode 100644 index db0f46b8..00000000 --- a/src/main/resources/assets/bloodmagic/lang/ru_RU.lang +++ /dev/null @@ -1,404 +0,0 @@ -#Creative Tab -itemGroup.bloodmagic.creativeTab=Blood Magic -itemGroup.bloodmagic.creativeTabTome=Blood Magic Upgrade Tomes - -#Items -item.bloodmagic.activationCrystal.weak.name=Слабый кристал активации -item.bloodmagic.activationCrystal.awakened.name=Пробуждённый кристал активации -item.bloodmagic.activationCrystal.creative.name=Творческий кристал активации - -item.bloodmagic.sacrificialDagger.normal.name=Жертвенный кинжал -item.bloodmagic.sacrificialDagger.creative.name=Творческий жертвенный кинжал -item.bloodmagic.pack.selfSacrifice.name=Blood Letter's Pack -item.bloodmagic.pack.sacrifice.name=Coat of Arms -item.bloodmagic.daggerOfSacrifice.name=Кинжал жертвоприношения - -item.bloodmagic.lavaCrystal.name=Лавовый кристал - -item.bloodmagic.bound.sword.name=Связанный клинок -item.bloodmagic.bound.pickaxe.name=Связанная кирка -item.bloodmagic.bound.axe.name=Связанный топор -item.bloodmagic.bound.shovel.name=Связанная лопата - -item.bloodmagic.bucket.lifeEssence.name=Ведро жизни - -item.bloodmagic.scribe.water.name=Инструмент начертания элемента: Вода -item.bloodmagic.scribe.fire.name=Инструмент начертания элемента: Огонь -item.bloodmagic.scribe.earth.name=Инструмент начертания элемента: Земля -item.bloodmagic.scribe.air.name=Инструмент начертания элемента: Воздух -item.bloodmagic.scribe.dusk.name=Инструмент начертания элемента: Сумерки -item.bloodmagic.scribe.dawn.name=Инструмент начертания элемента: Рассвет - -item.bloodmagic.focus.weak.name=Фокус телепозиции -item.bloodmagic.focus.enhanced.name=Улучшенный фокус телепозиции -item.bloodmagic.focus.reinforced.name=Усиленный фокус телепозиции -item.bloodmagic.focus.demonic.name=Демонический фокус телепозиции - -item.bloodmagic.slate.blank.name=Чистая плитка -item.bloodmagic.slate.reinforced.name=Укреплённая плитка -item.bloodmagic.slate.imbued.name=Пропитанная плитка -item.bloodmagic.slate.demonic.name=Демоническая плитка -item.bloodmagic.slate.ethereal.name=Эфирная плитка - -item.bloodmagic.orb.weak.name=Слабый кровавый шар -item.bloodmagic.orb.apprentice.name=Кровавый шар ученика -item.bloodmagic.orb.magician.name=Кровавый шар мага -item.bloodmagic.orb.master.name=Кровавый шар мастера -item.bloodmagic.orb.archmage.name=Кровавый шар архимага -item.bloodmagic.orb.transcendent.name=Необыкновенный кровавый шар - -item.bloodmagic.reagent.incendium.name=Incendium -item.bloodmagic.reagent.magicales.name=Magicales -item.bloodmagic.reagent.sanctus.name=Sanctus -item.bloodmagic.reagent.aether.name=Aether -item.bloodmagic.reagent.crepitous.name=Crepitous -item.bloodmagic.reagent.crystallos.name=Crystallos -item.bloodmagic.reagent.terrae.name=Terrae -item.bloodmagic.reagent.aquasalus.name=Aquasalus -item.bloodmagic.reagent.tennebrae.name=Tennebrae -item.bloodmagic.reagent.offensa.name=Offensa -item.bloodmagic.reagent.praesidium.name=Praesidium -item.bloodmagic.reagent.orbisterrae.name=Orbis Terrae -item.bloodmagic.reagent.virtus.name=Virtus -item.bloodmagic.reagent.reductus.name=Reductus -item.bloodmagic.reagent.potentia.name=Potentia - -item.bloodmagic.bloodShard.weak.name=Слабый кровавый осколок -item.bloodmagic.bloodShard.demon.name=Демонический кровавый осколок - -item.bloodmagic.baseComponent.reagentWater.name=Реагент воды -item.bloodmagic.baseComponent.reagentLava.name=Реагент лавы -item.bloodmagic.baseComponent.reagentAir.name=Реагент воздуха -item.bloodmagic.baseComponent.reagentFastMiner.name=Реагент добычи -item.bloodmagic.baseComponent.reagentVoid.name=Реагент пустоты -item.bloodmagic.baseComponent.reagentGrowth.name=Реагент роста -item.bloodmagic.baseComponent.reagentAffinity.name=Реагент стихийного родства -item.bloodmagic.baseComponent.reagentSight.name=Реагент взгляда -item.bloodmagic.baseComponent.reagentBinding.name=Реагент связи -item.bloodmagic.baseComponent.reagentSuppression.name=Реагент подавления -item.bloodmagic.baseComponent.frameParts.name=Части каркаса -item.bloodmagic.baseComponent.reagentBloodLight.name=Реагент света -item.bloodmagic.baseComponent.reagentMagnetism.name=Реагент притяжения -item.bloodmagic.baseComponent.reagentHaste.name=Реагент скорости -item.bloodmagic.baseComponent.reagentBridge.name=Реагент моста -item.bloodmagic.baseComponent.reagentCompression.name=Реагент сжатия -item.bloodmagic.baseComponent.reagentSeverance.name=Реагент разделения - -item.bloodmagic.baseComponent.reagentTeleposition.name=Реагент телепозиции -item.bloodmagic.baseComponent.reagentTransposition.name=Реагент транспозиции - -item.bloodmagic.monsterSoul.base.name=Демоническая энергия - -item.bloodmagic.sigil.air.name=Сигил воздуха -item.bloodmagic.sigil.bloodLight.name=Сигил кровавого светильника -item.bloodmagic.sigil.compression.name=Сигил сжатия -item.bloodmagic.sigil.divination.name=Сигил предсказания -item.bloodmagic.sigil.water.name=Сигил воды -item.bloodmagic.sigil.lava.name=Сигил лавы -item.bloodmagic.sigil.void.name=Сигил пустоты -item.bloodmagic.sigil.greenGrove.name=Сигил зеленой рощи -item.bloodmagic.sigil.elementalAffinity.name=Сигил стихийного родства -item.bloodmagic.sigil.haste.name=Сигил скорости -item.bloodmagic.sigil.suppression.name=Сигил подавления -item.bloodmagic.sigil.magnetism.name=Сигил притяжения -item.bloodmagic.sigil.fastMiner.name=Сигил быстрого копателя -item.bloodmagic.sigil.seer.name=Сигил зрения -item.bloodmagic.sigil.phantomBridge.name=Сигил призрачного моста -item.bloodmagic.sigil.whirlwind.name=Сигил вихря -item.bloodmagic.sigil.enderSeverance.name=Сигил разрыва Края - -item.bloodmagic.sigil.teleposition.name=Сигил телепозиции -item.bloodmagic.sigil.transposition.name=Сигил транспозиции - -item.bloodmagic.livingArmour.helmet.name=Живой шлем -item.bloodmagic.livingArmour.chest.name=Живая кираса -item.bloodmagic.livingArmour.legs.name=Живые поножи -item.bloodmagic.livingArmour.boots.name=Живые ботинки -item.bloodmagic.sentientArmour.helmet.name=Разумный шлем -item.bloodmagic.sentientArmour.chest.name=Разумная кираса -item.bloodmagic.sentientArmour.legs.name=Разумные поножи -item.bloodmagic.sentientArmour.boots.name=Разумные ботинки - -item.bloodmagic.altarMaker.name=Altar Maker - -item.bloodmagic.ritualDivinernormal.name=Предсказатель ритуала -item.bloodmagic.ritualDivinerdusk.name=Предсказатель ритуала [Сумерки] -item.bloodmagic.ritualDivinerdawn.name=Предсказатель ритуала [Рассвет] - -item.bloodmagic.arcaneAshes.name=Волшебный пепел -item.bloodmagic.upgradeTome.name=Living Armour Upgrade Tome -item.bloodmagic.upgradeTrainer.name=Living Armour Training Bracelet - -item.bloodmagic.sentientSword.name=Разумный меч -item.bloodmagic.soulGem.petty.name=Мелкий адский камень -item.bloodmagic.soulGem.lesser.name=Небольшой адский камень -item.bloodmagic.soulGem.common.name=Обычный адский камень -item.bloodmagic.soulGem.greater.name=Большой адский камень -item.bloodmagic.soulGem.grand.name=Великий адский камень -item.bloodmagic.soulSnare.base.name=Простая ловушка -item.bloodmagic.sentientBow.name=Разумный лук -item.bloodmagic.sentientArmourGem.name=Разумный камень - -item.bloodmagic.nodeRouter.name=Node Router -item.bloodmagic.itemFilter.exact.name=Точный фильтр предметов -item.bloodmagic.itemFilter.ignoreNBT.name=NBT фильтр предметов -item.bloodmagic.itemFilter.modItems.name=Mod фильтр предметов -item.bloodmagic.itemFilter.oreDict.name=OreDict фильтр предметов - -# Blocks -tile.bloodmagic.fluid.lifeEssence.name=Жизненная эссенция - -tile.bloodmagic.stone.ritual.master.name=Главный ритуальный камень -tile.bloodmagic.stone.ritual.imperfect.name=Неполноценный ритуальный камень - -tile.bloodmagic.altar.name=Кровавый алтарь -tile.bloodmagic.alchemyArray.name=&r&fАлхимическая матрица - -tile.bloodmagic.rune.blank.name=Чистая руна -tile.bloodmagic.rune.speed.name=Руна скорости -tile.bloodmagic.rune.efficiency.name=Руна эффективности -tile.bloodmagic.rune.sacrifice.name=Руна жертвоприношения -tile.bloodmagic.rune.selfSacrifice.name=Руна самопожертвования -tile.bloodmagic.rune.displacement.name=Руна перемещения -tile.bloodmagic.rune.capacity.name=Руна ёмкости -tile.bloodmagic.rune.augCapacity.name=Руна дополнительной ёмкости -tile.bloodmagic.rune.orb.name=Руна шара -tile.bloodmagic.rune.acceleration.name=Руна ускорения -tile.bloodmagic.rune.charging.name=Руна заряда - - -tile.bloodmagic.ritualStone.blank.name=Ритуальный камень -tile.bloodmagic.ritualStone.water.name=Ритуальный камень воды -tile.bloodmagic.ritualStone.fire.name=Ритуальный камень огня -tile.bloodmagic.ritualStone.earth.name=Ритуальный камень земли -tile.bloodmagic.ritualStone.air.name=Ритуальный камень воздуха -tile.bloodmagic.ritualStone.dusk.name=Ритуальный камень сумерек -tile.bloodmagic.ritualStone.dawn.name=Ритуальный камень рассвета - -tile.bloodmagic.bloodstonebrick.large.name=Большой кровавый кирпич -tile.bloodmagic.bloodstonebrick.brick.name=Кровавый кирпич -tile.bloodmagic.crystal.large.name=Большой кристальный кирпич -tile.bloodmagic.crystal.brick.name=Кристальный кирпич -tile.bloodmagic.bloodLight.name=Кровавый свет -tile.bloodmagic.spectralBlock.name=Иллюзорный блок -tile.bloodmagic.phantom.name=Призрачный блок -tile.bloodmagic.incenseAltar.name=Жертвенник для курений - -tile.bloodmagic.teleposer.name=Телепозер -tile.bloodmagic.soulForge.name=Адская кузница -tile.bloodmagic.demonCrucible.name=Демонический тигель - -tile.bloodmagic.masterRouting.name=Master Routing Node -tile.bloodmagic.outputRouting.name=Output Routing Node -tile.bloodmagic.inputRouting.name=Input Routing Node -tile.bloodmagic.itemRouting.name=Routing Node - -tile.bloodmagic.path.wood.name=Деревянная дорожка -tile.bloodmagic.path.woodTile.name=Узорная деревянная дорожка -tile.bloodmagic.path.stone.name=Каменная дорожка -tile.bloodmagic.path.stoneTile.name=Узорная каменная дорожка -tile.bloodmagic.path.wornstone.name=Старая каменная дорожка -tile.bloodmagic.path.wornstoneTile.name=Узорная старая каменная дорожка -tile.bloodmagic.path.obsidian.name=Обсидиановая дорожка -tile.bloodmagic.path.obsidianTile.name=Узорная обсидиановая дорожка - -tile.bloodmagic.dimensionalPortal.name=Пространственный портал -tile.bloodmagic.bloodTank.name=Резервуар крови - -# Tooltips -tooltip.bloodmagic.orb.desc=Хранит жизненную эссенцию -tooltip.bloodmagic.orb.owner=Создан: %s -tooltip.bloodmagic.currentOwner=Владелец: %s -tooltip.bloodmagic.currentTier=Уровень: %d -tooltip.bloodmagic.config.disabled=Запрещено настройками - -tooltip.bloodmagic.activated=Активирован -tooltip.bloodmagic.deactivated=Деактивирован - -tooltip.bloodmagic.sigil.air.desc=&oОщущается легкость... -tooltip.bloodmagic.sigil.bloodLight.desc=&oЯ вижу свет! -tooltip.bloodmagic.sigil.compression.desc=&oКучи алмазов -tooltip.bloodmagic.sigil.divination.desc=&oВзгляд в душу -tooltip.bloodmagic.sigil.divination.otherNetwork=Заглянем в душу %s -tooltip.bloodmagic.sigil.divination.currentAltarTier=Уровень: %d -tooltip.bloodmagic.sigil.divination.currentEssence=Эссенции: %d LP -tooltip.bloodmagic.sigil.divination.currentAltarCapacity=Ёмкость: %d LP -tooltip.bloodmagic.sigil.divination.currentTranquility=Спокойствие: %d -tooltip.bloodmagic.sigil.divination.currentBonus=Бонус: +%d%% -tooltip.bloodmagic.sigil.water.desc=&oНужна вода? -tooltip.bloodmagic.sigil.lava.desc=&oГОРЯЧЕЕ! НЕ ЕСТЬ! -tooltip.bloodmagic.sigil.void.desc=&oЛучше чем Swiffer! -tooltip.bloodmagic.sigil.greenGrove.desc=&oЭкологически чистый -tooltip.bloodmagic.sigil.magnetism.desc=&oЯ очень притягательная личность! -tooltip.bloodmagic.sigil.suppression.desc=&oЛучше, чем телекинез... -tooltip.bloodmagic.sigil.haste.desc=&oПосле 42 чашек кофе... -tooltip.bloodmagic.sigil.fastMiner.desc=&oВсе глубже и глубже... -tooltip.bloodmagic.sigil.elementalAffinity.desc=&oПадающая огненная рыба! -tooltip.bloodmagic.sigil.seer.desc=&oКогда просто видеть недостаточно -tooltip.bloodmagic.sigil.seer.currentAltarProgress=Прогресс: %d LP/ %s LP -tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent=Прогресс: %s -tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate=Расход: %d LP -tooltip.bloodmagic.sigil.seer.currentAltarTier=Уровень: %d -tooltip.bloodmagic.sigil.seer.currentEssence=Эссенции: %d LP -tooltip.bloodmagic.sigil.seer.currentAltarCapacity=Ёмкость: %d LP -tooltip.bloodmagic.sigil.seer.currentCharge=Заряд: %d -tooltip.bloodmagic.sigil.seer.currentTranquility=Спокойствие: %d -tooltip.bloodmagic.sigil.seer.currentBonus=Бонус: +%d%% -tooltip.bloodmagic.sigil.phantomBridge.desc=&oПрогулки в воздухе... -tooltip.bloodmagic.sigil.whirlwind.desc=&oЛучше не одевать юбку -tooltip.bloodmagic.sigil.enderSeverance.desc=&oНеприятности для странников Края! - -tooltip.bloodmagic.sigil.teleposition.desc=Я очень близок к возможности перемещения. -tooltip.bloodmagic.sigil.transposition.desc=Ощути Силу, мой юный ученик. - -tooltip.bloodmagic.bound.sword.desc=&oОтбраковка слабаков -tooltip.bloodmagic.bound.pickaxe.desc=&oБезжалостное уничтожение камня -tooltip.bloodmagic.bound.axe.desc=&oДемоническая вырубка -tooltip.bloodmagic.bound.shovel.desc=&oОчистим пол от грязи - -tooltip.bloodmagic.sacrificialDagger.desc=Небольшой надрез на пальце... -tooltip.bloodmagic.slate.desc=Камень, наполненный в кровавом алтаре -tooltip.bloodmagic.inscriber.desc=Надписи на стене... - -tooltip.bloodmagic.pack.selfSacrifice.desc=This pack really chafes... -tooltip.bloodmagic.pack.sacrifice.desc=Description -tooltip.bloodmagic.pack.stored=Накоплено: %d LP - -tooltip.bloodmagic.activationCrystal.weak=Активирует простые ритуалы -tooltip.bloodmagic.activationCrystal.awakened=Активирует сложные ритуалы -tooltip.bloodmagic.activationCrystal.creative=Только в креативе - активирует любые ритуалы - -tooltip.bloodmagic.diviner.currentRitual=Выбранный ритуал: -tooltip.bloodmagic.diviner.blankRune=Ритуальных камней: %d -tooltip.bloodmagic.diviner.waterRune=Камней воды: %d -tooltip.bloodmagic.diviner.airRune=Камней воздуха: %d -tooltip.bloodmagic.diviner.fireRune=Камней огня: %d -tooltip.bloodmagic.diviner.earthRune=Камней земли: %d -tooltip.bloodmagic.diviner.duskRune=Камней сумерек: %d -tooltip.bloodmagic.diviner.dawnRune=Камней рассвета: %d -tooltip.bloodmagic.diviner.totalRune=Всего ритуальных камней: %d -tooltip.bloodmagic.diviner.extraInfo=Shift для дополнительной информации -tooltip.bloodmagic.diviner.currentDirection=Направление: %s - -tooltip.bloodmagic.arcaneAshes=Пепел для начертания алхимических знаков - -tooltip.bloodmagic.telepositionFocus.coords=Координаты: (%d, %d, %d) -tooltip.bloodmagic.telepositionFocus.dimension=ID Измерения: %d -tooltip.bloodmagic.telepositionFocus.weak=Может перемещать блоки -tooltip.bloodmagic.telepositionFocus.enhanced=Может перемещать блоки -tooltip.bloodmagic.telepositionFocus.reinforced=Может перемещать блоки -tooltip.bloodmagic.telepositionFocus.demonic=Может перемещать блоки - -tooltip.bloodmagic.livingArmour.upgrade.speed=Быстрые ноги -tooltip.bloodmagic.livingArmour.upgrade.digging=Сила гномов -tooltip.bloodmagic.livingArmour.upgrade.poisonResist=Стойкость к ядам -tooltip.bloodmagic.livingArmour.upgrade.selfSacrifice=Твердые ладони -tooltip.bloodmagic.livingArmour.upgrade.knockback=Культурист -tooltip.bloodmagic.livingArmour.upgrade.physicalProtect=Толстая кожа -tooltip.bloodmagic.livingArmour.upgrade.health=Здровый -tooltip.bloodmagic.livingArmour.upgrade.meleeDamage=Свирепый удар -tooltip.bloodmagic.livingArmour.upgrade.arrowShot=Меткий стрелок -tooltip.bloodmagic.livingArmour.upgrade.stepAssist=Высокий шаг -tooltip.bloodmagic.livingArmour.upgrade.grimReaper=Избежал смерти -tooltip.bloodmagic.livingArmour.upgrade.solarPowered=Солнечная энергия -tooltip.bloodmagic.livingArmour.upgrade.thaumRunicShielding=Рунический щит -tooltip.bloodmagic.livingArmour.upgrade.revealing=Обнаружение -tooltip.bloodmagic.livingArmour.upgrade.level=%s (Уровень %d) -tooltip.bloodmagic.livingArmour.upgrade.points=&6Очки улучшения: %s / %s - -tooltip.bloodmagic.will=Энергии: %1$,.2f -tooltip.bloodmagic.sentientSword.desc=Использует демоническую энергию для максимальной эффективности. -tooltip.bloodmagic.soulGem.petty=Этот камень может хранить очень мало энергии -tooltip.bloodmagic.soulGem.lesser=Этот камень может хранить немного энергии -tooltip.bloodmagic.soulGem.common=Этот камень может хранить среднее количество энергии -tooltip.bloodmagic.soulGem.greater=Этот камень может хранить много энергии -tooltip.bloodmagic.soulGem.grand=Этот камень может хранить очень много энергии -tooltip.bloodmagic.soulSnare.desc=Бросьте в существо и затем убейте, что бы получить демоническую энергию - -tooltip.bloodmagic.itemFilter.exact=Требует точного соответствия -tooltip.bloodmagic.itemFilter.ignoreNBT=Позволяет игнорировать NBT -tooltip.bloodmagic.itemFilter.modItems=Позволяет отобрать предметы из одного мода -tooltip.bloodmagic.itemFilter.oreDict=Фильтр использующий Ore Dictionary - -tooltip.bloodmagic.fluid.type=Жидкость: %s -tooltip.bloodmagic.fluid.amount=Кол-во: %d / %d мВ -tooltip.bloodmagic.fluid.capacity=Ёмкость: %d мВ - -# Ritual -ritual.bloodmagic.testRitual=Тестовый ритуал -ritual.bloodmagic.waterRitual=Ритуал вызова родника -ritual.bloodmagic.lavaRitual=Адская серенада -ritual.bloodmagic.greenGroveRitual=Ритуал зеленой рощи -ritual.bloodmagic.jumpRitual=Ритуал высокого прыжка -ritual.bloodmagic.wellOfSufferingRitual=Колодец Страданий -ritual.bloodmagic.featheredKnifeRitual=Ритуал быстрого кинжала -ritual.bloodmagic.regenerationRitual=Ритуал регенерации -ritual.bloodmagic.harvestRitual=Ритуал жнеца -ritual.bloodmagic.magneticRitual=Ритуал магнетизма -ritual.bloodmagic.crushingRitual=Ритуал дробления -ritual.bloodmagic.fullStomachRitual=Ритуал сытости -ritual.bloodmagic.interdictionRitual=Ритуал запрета -ritual.bloodmagic.containmentRitual=Ритуал сдерживания -ritual.bloodmagic.speedRitual=Ритуал скорости -ritual.bloodmagic.suppressionRitual=Ритуал подавления -ritual.bloodmagic.expulsionRitual=Аура изгнания -ritual.bloodmagic.zephyrRitual=Зов Зефира -ritual.bloodmagic.upgradeRemoveRitual=Звук очищения душ -ritual.bloodmagic.armourEvolveRitual=Ритуал эволюции - -ritual.bloodmagic.cobblestoneRitual=Le Vulcanos Frigius -ritual.bloodmagic.placerRitual=Наполнитель -ritual.bloodmagic.fellingRitual=Дровосек -ritual.bloodmagic.pumpRitual=Гимн откачки -ritual.bloodmagic.altarBuilderRitual=Строитель алтаря -ritual.bloodmagic.portalRitual=Ритуал врат - -# Chat -chat.bloodmagic.altarMaker.setTier=Установить уровень: %d -chat.bloodmagic.altarMaker.building=Строится алтарь %d уровня -chat.bloodmagic.altarMaker.destroy=Разобран алтарь %d уровня -chat.bloodmagic.altarMaker.creativeOnly=Предмет только для креатива. - -chat.bloodmagic.damageSource=душа %s слишком ослабла - -chat.bloodmagic.ritual.weak=Вы чувствуете толчок, но слишком слабый, чтобы выполнить ритуал. -chat.bloodmagic.ritual.prevent=Ритуал сопротивляется вашему воздействию! -chat.bloodmagic.ritual.activate=Потоки энергии текут через ритуал! -chat.bloodmagic.ritual.notValid=Вы чувствуете, что руны стоят неправильно... - -chat.bloodmagic.livingArmour.upgrade.poisonRemove=You are starting to feel better already! -chat.bloodmagic.livingArmour.upgrade.grimReaper=&6Темные силы спасли вас за секунду до смерти! -chat.bloodmagic.livingArmour.newUpgrade=&4Получено улучшение! - -# JustEnoughItems -jei.bloodmagic.recipe.altar=Кровавый алтарь -jei.bloodmagic.recipe.binding=Алхимическая матрица (Связывание) -jei.bloodmagic.recipe.alchemyArrayCrafting=Алхимическая матрица -jei.bloodmagic.recipe.soulForge=Адская кузница -jei.bloodmagic.recipe.requiredLP=LP: %d -jei.bloodmagic.recipe.requiredTier=Уровень: %d -jei.bloodmagic.recipe.consumptionRate=Расход: %d LP/t -jei.bloodmagic.recipe.drainRate=Потери: %d LP/t -jei.bloodmagic.recipe.minimumSouls=Минимум: %1$,.2f энергии -jei.bloodmagic.recipe.soulsDrained=Затраты: %1$,.2f энергии - -jei.bloodmagic.desc.altarBuilder=A creative-only item for use in debugging and testing.\n\nShift + Right click to change the tier to build. Right click an Altar to initiate the build.\n\nBreak an Altar while holding to dismantle it. -jei.bloodmagic.desc.demonicWill=An imprint of a demonic entity attached to a creature.\n\nCan be obtained by killing a mob with a sentient weapon or by throwing a snare at a mob and killing it while it has white particles. - -# WAILA -waila.bloodmagic.sneak=&oSneak for Information -waila.bloodmagic.array.reagent=Реагент: %s -waila.bloodmagic.array.catalyst=Катализатор: %s -option.bloodmagic.bypassSneak=Bypass Sneak -option.bloodmagic.bloodAltar=Кровавый алтарь -option.bloodmagic.ritualController=Ритуальные камни -option.bloodmagic.teleposer=Телепозер -option.bloodmagic.array=Алхимическая матрица - -# Thaumcraft -tc.research_category.BLOODMAGIC=Sanguine Arcana - -# Thaumcraft Research -bloodmagic.research_name.BLOODMAGIC=Blood Magic -bloodmagic.research_text.BLOODMAGIC=Sanguine Arcana -bloodmagic.research_page.BLOODMAGIC.1=The realm of the Blood Magics has always appeared to be a more solitary and "individual" art with blood mages being notoriously reclusive and a bit insane at times. However, the powers of self-sacrifice and life essence have uses even beyond a normal blood mage's sight, in fact, it is quite apparent that it may have some uses in thaumaturgy after all! diff --git a/src/main/resources/assets/bloodmagic/lang/zh_CN.lang b/src/main/resources/assets/bloodmagic/lang/zh_CN.lang deleted file mode 100644 index 6ccec15a..00000000 --- a/src/main/resources/assets/bloodmagic/lang/zh_CN.lang +++ /dev/null @@ -1,890 +0,0 @@ -#Creative Tab -itemGroup.bloodmagic.creativeTab=血魔法 -itemGroup.bloodmagic.creativeTabTome=血魔法|手册 - -#Items -item.bloodmagic.activation_crystal.weak.name=[虚弱]激活水晶 -item.bloodmagic.activation_crystal.awakened.name=[觉醒]激活水晶 -item.bloodmagic.activation_crystal.creative.name=[创造]激活水晶 - -item.bloodmagic.sacrificial_dagger.normal.name=牺牲匕首 -item.bloodmagic.sacrificial_dagger.creative.name=[创造]牺牲匕首 -item.bloodmagic.pack.selfSacrifice.name=血液背包 -item.bloodmagic.pack.sacrifice.name=斗士铠衣 -item.bloodmagic.daggerOfSacrifice.name=献祭刀 - -item.bloodmagic.lavaCrystal.name=熔岩晶体 - -item.bloodmagic.bound.sword.name=束缚之剑 -item.bloodmagic.bound.pickaxe.name=束缚之镐 -item.bloodmagic.bound.axe.name=束缚之斧 -item.bloodmagic.bound.shovel.name=束缚之锹 - -item.bloodmagic.bucket.lifeEssence.name=生命源质桶 - -item.bloodmagic.scribe.water.name=元素铭文工具:水 -item.bloodmagic.scribe.fire.name=元素铭文工具:火 -item.bloodmagic.scribe.earth.name=元素铭文工具:土 -item.bloodmagic.scribe.air.name=元素铭文工具:风 -item.bloodmagic.scribe.dusk.name=元素铭文工具:薄暮 -item.bloodmagic.scribe.dawn.name=元素铭文工具:破晓 - -item.bloodmagic.focus.weak.name=传送核心 -item.bloodmagic.focus.enhanced.name=[加强]传送核心 -item.bloodmagic.focus.reinforced.name=[强化]传送核心 -item.bloodmagic.focus.demonic.name=[恶魔]传送核心 - -item.bloodmagic.slate.blank.name=空白石板 -item.bloodmagic.slate.reinforced.name=强化石板 -item.bloodmagic.slate.imbued.name=灌输石板 -item.bloodmagic.slate.demonic.name=恶魔石板 -item.bloodmagic.slate.ethereal.name=悬幽石板 - -item.bloodmagic.orb.weak.name=[虚弱]气血宝珠 -item.bloodmagic.orb.apprentice.name=[学徒]气血宝珠 -item.bloodmagic.orb.magician.name=[法师]气血宝珠 -item.bloodmagic.orb.master.name=[导师]气血宝珠 -item.bloodmagic.orb.archmage.name=[贤者]气血宝珠 -item.bloodmagic.orb.transcendent.name=[卓越]气血宝珠 - -item.bloodmagic.reagent.incendium.name=烈焰元素 -item.bloodmagic.reagent.magicales.name=魔法元素 -item.bloodmagic.reagent.sanctus.name=神圣元素 -item.bloodmagic.reagent.aether.name=以太元素 -item.bloodmagic.reagent.crepitous.name=爆破元素 -item.bloodmagic.reagent.crystallos.name=冰晶元素 -item.bloodmagic.reagent.terrae.name=大地元素 -item.bloodmagic.reagent.aquasalus.name=液之元素 -item.bloodmagic.reagent.tennebrae.name=暗黑元素 -item.bloodmagic.reagent.offensa.name=攻势元素 -item.bloodmagic.reagent.praesidium.name=守护元素 -item.bloodmagic.reagent.orbisterrae.name=奥土元素 -item.bloodmagic.reagent.virtus.name=力量元素 -item.bloodmagic.reagent.reductus.name=代价元素 -item.bloodmagic.reagent.potentia.name=效能元素 - -item.bloodmagic.blood_shard.weak.name=[虚弱]气血碎片 -item.bloodmagic.blood_shard.demonic.name=[恶魔]气血碎片 - -item.bloodmagic.baseComponent.reagent_water.name=水之试剂 -item.bloodmagic.baseComponent.reagent_lava.name=熔岩试剂 -item.bloodmagic.baseComponent.reagent_air.name=风之试剂 -item.bloodmagic.baseComponent.reagent_fast_miner.name=采掘试剂 -item.bloodmagic.baseComponent.reagent_void.name=虚空试剂 -item.bloodmagic.baseComponent.reagent_growth.name=促生试剂 -item.bloodmagic.baseComponent.reagent_affinity.name=元素试剂 -item.bloodmagic.baseComponent.reagent_sight.name=见解试剂 -item.bloodmagic.baseComponent.reagent_binding.name=束缚试剂 -item.bloodmagic.baseComponent.reagent_suppression.name=抑液试剂 -item.bloodmagic.baseComponent.reagent_bloodlight.name=血光试剂 -item.bloodmagic.baseComponent.reagent_magnetism.name=磁引试剂 -item.bloodmagic.baseComponent.reagent_haste.name=急速试剂 -item.bloodmagic.baseComponent.reagent_bridge.name=影桥试剂 -item.bloodmagic.baseComponent.reagent_compression.name=压挤试剂 -item.bloodmagic.baseComponent.reagent_severance.name=隔绝试剂 -item.bloodmagic.baseComponent.reagent_holding.name=集持试剂 -item.bloodmagic.baseComponent.reagent_claw.name=爪之试剂 -item.bloodmagic.baseComponent.reagent_bounce.name=弹性试剂 -item.bloodmagic.baseComponent.reagent_frost.name=霜之试剂 -item.bloodmagic.baseComponent.reagent_teleposition.name=传送试剂 -item.bloodmagic.baseComponent.reagent_transposition.name=移位试剂 - -item.bloodmagic.baseComponent.frame_part.name=框架零件 -item.bloodmagic.baseComponent.sand_iron.name=铁矿砂 -item.bloodmagic.baseComponent.sand_gold.name=金矿砂 -item.bloodmagic.baseComponent.sand_coal.name=煤矿砂 -item.bloodmagic.baseComponent.plant_oil.name=植物油 -item.bloodmagic.baseComponent.sulfur.name=硫磺 -item.bloodmagic.baseComponent.saltpeter.name=硝石 -item.bloodmagic.baseComponent.neuro_toxin.name=神经毒素 -item.bloodmagic.baseComponent.antiseptic.name=防腐剂 -item.bloodmagic.baseComponent.catalyst_length_1.name=简单的延时催化剂 -item.bloodmagic.baseComponent.catalyst_power_1.name=简单的功效催化剂 - -item.bloodmagic.cutting_fluid.basic.name=基础切削油 -item.bloodmagic.cutting_fluid.explosive.name=爆炸火药 - -item.bloodmagic.demonCrystal.default.name=恶魔意志晶体 -item.bloodmagic.demonCrystal.corrosive.name=腐蚀意志晶体 -item.bloodmagic.demonCrystal.destructive.name=破坏意志晶体 -item.bloodmagic.demonCrystal.vengeful.name=复仇意志晶体 -item.bloodmagic.demonCrystal.steadfast.name=坚毅意志晶体 - -item.bloodmagic.monster_soul.raw.name=[原生]恶魔意志 -item.bloodmagic.monster_soul.corrosive.name=[腐蚀]恶魔意志 -item.bloodmagic.monster_soul.destructive.name=[破坏]恶魔意志 -item.bloodmagic.monster_soul.vengeful.name=[复仇]恶魔意志 -item.bloodmagic.monster_soul.steadfast.name=[坚毅]恶魔意志 - -item.bloodmagic.sigil.air.name=风之印记 -item.bloodmagic.sigil.blood_light.name=血光印记 -item.bloodmagic.sigil.compression.name=压挤印记 -item.bloodmagic.sigil.divination.name=占卜印记 -item.bloodmagic.sigil.water.name=水之印记 -item.bloodmagic.sigil.lava.name=熔岩印记 -item.bloodmagic.sigil.void.name=虚空印记 -item.bloodmagic.sigil.green_grove.name=绿丛印记 -item.bloodmagic.sigil.elemental_affinity.name=元素印记 -item.bloodmagic.sigil.haste.name=急速印记 -item.bloodmagic.sigil.suppression.name=抑液印记 -item.bloodmagic.sigil.magnetism.name=磁引印记 -item.bloodmagic.sigil.fast_miner.name=速掘印记 -item.bloodmagic.sigil.seer.name=见解印记 -item.bloodmagic.sigil.phantom_bridge.name=影桥印记 -item.bloodmagic.sigil.whirlwind.name=旋风印记 -item.bloodmagic.sigil.ender_severance.name=绝影印记 -item.bloodmagic.sigil.holding.name=集持印记 -item.bloodmagic.sigil.holding.display=&r%s:&o&n%s -item.bloodmagic.sigil.teleposition.name=传送印记 -item.bloodmagic.sigil.transposition.name=移位印记 -item.bloodmagic.sigil.claw.name=爪之印记 -item.bloodmagic.sigil.bounce.name=弹性印记 -item.bloodmagic.sigil.frost.name=冰霜印记 - -item.bloodmagic.livingArmour.helmet.name=束灵头盔 -item.bloodmagic.livingArmour.chest.name=束灵胸甲 -item.bloodmagic.livingArmour.legs.name=束灵护腿 -item.bloodmagic.livingArmour.boots.name=束灵靴子 -item.bloodmagic.sentientArmour.helmet.name=感知头盔 -item.bloodmagic.sentientArmour.chest.name=感知胸甲 -item.bloodmagic.sentientArmour.legs.name=感知护腿 -item.bloodmagic.sentientArmour.boots.name=感知靴子 - -item.bloodmagic.altarMaker.name=祭坛搭建工具 - -item.bloodmagic.ritualDivinernormal.name=仪式推测仗 -item.bloodmagic.ritualDivinerdusk.name=仪式推测仗 [薄暮] -item.bloodmagic.ritualDivinerdawn.name=仪式推测仗 [破晓] -item.bloodmagic.ritualReader.name=仪式调整钳 - -item.bloodmagic.arcaneAshes.name=奥术粉灰 -item.bloodmagic.upgradeTome.name=束灵盔甲强化手册 -item.bloodmagic.downgradeTome.name=束灵盔甲降级手册 -item.bloodmagic.upgradeTrainer.name=束灵盔甲训练手镯 - -item.bloodmagic.sentientSword.name=感知之剑 -item.bloodmagic.soulGem.petty.name=[微小]地狱魂石 -item.bloodmagic.soulGem.lesser.name=[细块]地狱魂石 -item.bloodmagic.soulGem.common.name=[普通]地狱魂石 -item.bloodmagic.soulGem.greater.name=[较大]地狱魂石 -item.bloodmagic.soulGem.grand.name=[精制]地狱魂石 -item.bloodmagic.soulSnare.base.name=原始投网 -item.bloodmagic.sentientBow.name=感知之弓 -item.bloodmagic.sentientArmourGem.name=感知盔甲宝石 -item.bloodmagic.sentientAxe.name=感知之斧 -item.bloodmagic.sentientPickaxe.name=感知之镐 -item.bloodmagic.sentientShovel.name=感知之锹 - -item.bloodmagic.nodeRouter.name=节点连接工具 -item.bloodmagic.itemFilter.exact.name=精确物品筛选器 -item.bloodmagic.itemFilter.ignoreNBT.name=NBT物品筛选器 -item.bloodmagic.itemFilter.modItems.name=Mod物品筛选器 -item.bloodmagic.itemFilter.oreDict.name=矿物物品筛选器 -item.bloodmagic.fluidFilter.exact.name=精确液体筛选器 - -item.bloodmagic.experienceTome.name=经验手册 -item.bloodmagic.sanguineBook.name=指示之书 - -item.bloodmagic.living_point_upgrade.draft_angelus.name=祷告之始 - -item.bloodmagic.willGauge.name=灵域测量仪 -item.bloodmagic.potionFlask.name=药剂瓶 - -# Blocks -tile.bloodmagic.fluid.lifeEssence.name=生命源质 - -tile.bloodmagic.stone.ritual.master.name=主仪式石 -tile.bloodmagic.stone.ritual.imperfect.name=不完善的仪式石 -tile.bloodmagic.stone.ritual.inverted.name=反转的主仪式石 - -tile.bloodmagic.altar.name=血之祭坛 -tile.bloodmagic.alchemyArray.name=&r&f炼金矩阵 - -tile.bloodmagic.rune.blank.name=空白符文 -tile.bloodmagic.rune.speed.name=速度符文 -tile.bloodmagic.rune.efficiency.name=效率符文 -tile.bloodmagic.rune.sacrifice.name=献祭符文 -tile.bloodmagic.rune.self_sacrifice.name=牺牲符文 -tile.bloodmagic.rune.displacement.name=转位符文 -tile.bloodmagic.rune.capacity.name=增容符文 -tile.bloodmagic.rune.augmented_capacity.name=超容符文 -tile.bloodmagic.rune.orb.name=宝珠符文 -tile.bloodmagic.rune.acceleration.name=促进符文 -tile.bloodmagic.rune.charging.name=充能符文 - - -tile.bloodmagic.ritualStone.blank.name=仪式石 -tile.bloodmagic.ritualStone.water.name=水之仪式石 -tile.bloodmagic.ritualStone.fire.name=火之仪式石 -tile.bloodmagic.ritualStone.earth.name=土之仪式石 -tile.bloodmagic.ritualStone.air.name=风之仪式石 -tile.bloodmagic.ritualStone.dusk.name=薄暮仪式石 -tile.bloodmagic.ritualStone.dawn.name=破晓仪式石 - -tile.bloodmagic.bloodstone_tile.name=大血石砖 -tile.bloodmagic.bloodstone_brick.name=血石砖 -tile.bloodmagic.crystal_tile.name=晶簇块 -tile.bloodmagic.crystal_brick.name=晶簇砖 -tile.bloodmagic.bloodLight.name=血之光源 -tile.bloodmagic.spectralBlock.name=幽灵方块 -tile.bloodmagic.phantom.name=影桥方块 -tile.bloodmagic.incenseAltar.name=熏香祭坛 - -tile.bloodmagic.teleposer.name=传送器 -tile.bloodmagic.soulForge.name=狱火熔炉 -tile.bloodmagic.alchemyTable.name=炼金术桌 -tile.bloodmagic.demonCrucible.name=恶魔坩埚 -tile.bloodmagic.demonPylon.name=恶魔导能塔 -tile.bloodmagic.demonCrystallizer.name=恶魔结晶坛 - -tile.bloodmagic.masterRouting.name=主控路由节点 -tile.bloodmagic.outputRouting.name=输出路由节点 -tile.bloodmagic.inputRouting.name=输入路由节点 -tile.bloodmagic.itemRouting.name=路由节点 - -tile.bloodmagic.path.wood.name=木制路面 -tile.bloodmagic.path.woodtile.name=木瓦路面 -tile.bloodmagic.path.stone.name=石砖路面 -tile.bloodmagic.path.stonetile.name=石瓦路面 -tile.bloodmagic.path.wornstone.name=碎石砖路面 -tile.bloodmagic.path.wornstonetile.name=碎石路面 -tile.bloodmagic.path.obsidian.name=黑曜石砖路面 -tile.bloodmagic.path.obsidiantile.name=黑曜石瓦路面 - -tile.bloodmagic.dimensionalPortal.name=空间传送门 -tile.bloodmagic.bloodTank.name=血法师的储罐 - -tile.bloodmagic.demonCrystal.default.name=[原生]意志晶簇 -tile.bloodmagic.demonCrystal.corrosive.name=[腐蚀]意志晶簇 -tile.bloodmagic.demonCrystal.destructive.name=[破坏]意志晶簇 -tile.bloodmagic.demonCrystal.vengeful.name=[复仇]意志晶簇 -tile.bloodmagic.demonCrystal.steadfast.name=[坚毅]意志晶簇 - -tile.bloodmagic.mimic.nohitbox.name=[悬幽]拟态方块 -tile.bloodmagic.mimic.solidopaque.name=拟态方块 -tile.bloodmagic.mimic.solidclear.name=[清透]拟态方块 -tile.bloodmagic.mimic.solidlight.name=[光亮]拟态方块 -tile.bloodmagic.mimic.sentient.name=[感知]拟态方块 - -tile.bloodmagic.bricks1.brick1_raw.name=原生石砖 -tile.bloodmagic.bricks1.brick1_corrosive.name=腐蚀石砖 -tile.bloodmagic.bricks1.brick1_destructive.name=破坏石砖 -tile.bloodmagic.bricks1.brick1_vengeful.name=复仇石砖 -tile.bloodmagic.bricks1.brick1_steadfast.name=坚毅石砖 - -tile.bloodmagic.bricks2.smallbrick_raw.name=小原生石砖 -tile.bloodmagic.bricks2.smallbrick_corrosive.name=小腐蚀石砖 -tile.bloodmagic.bricks2.smallbrick_destructive.name=小破坏石砖 -tile.bloodmagic.bricks2.smallbrick_vengeful.name=小复仇石砖 -tile.bloodmagic.bricks2.smallbrick_steadfast.name=小坚毅石砖 -tile.bloodmagic.bricks2.tile_raw.name=原生石瓦 -tile.bloodmagic.bricks2.tile_corrosive.name=腐蚀石瓦 -tile.bloodmagic.bricks2.tile_destructive.name=破坏石瓦 -tile.bloodmagic.bricks2.tile_vengeful.name=复仇石瓦 -tile.bloodmagic.bricks2.tile_steadfast.name=坚毅石瓦 -tile.bloodmagic.bricks2.tilespecial_raw.name=二重原生石瓦 -tile.bloodmagic.bricks2.tilespecial_corrosive.name=二重腐蚀石瓦 -tile.bloodmagic.bricks2.tilespecial_destructive.name=二重破坏石瓦 -tile.bloodmagic.bricks2.tilespecial_vengeful.name=二重复仇石瓦 -tile.bloodmagic.bricks2.tilespecial_steadfast.name=二重坚毅石瓦 - -tile.bloodmagic.inversionpillar.raw.name=[原生]反转柱 -tile.bloodmagic.inversionpillar.corrosive.name=[腐蚀]反转柱 -tile.bloodmagic.inversionpillar.destructive.name=[破坏]反转柱 -tile.bloodmagic.inversionpillar.vengeful.name=[复仇]反转柱 -tile.bloodmagic.inversionpillar.steadfast.name=[坚毅]反转柱 - -tile.bloodmagic.inversionpillarend.raw_bottom.name=[原生]反转柱基 -tile.bloodmagic.inversionpillarend.corrosive_bottom.name=[腐蚀]反转柱基 -tile.bloodmagic.inversionpillarend.destructive_bottom.name=[破坏]反转柱基 -tile.bloodmagic.inversionpillarend.vengeful_bottom.name=[复仇]反转柱基 -tile.bloodmagic.inversionpillarend.steadfast_bottom.name=[坚毅]反转柱基 -tile.bloodmagic.inversionpillarend.raw_top.name=[原生]反转柱顶盖 -tile.bloodmagic.inversionpillarend.corrosive_top.name=[腐蚀]反转柱顶盖 -tile.bloodmagic.inversionpillarend.destructive_top.name=[破坏]反转柱顶盖 -tile.bloodmagic.inversionpillarend.vengeful_top.name=[复仇]反转柱顶盖 -tile.bloodmagic.inversionpillarend.steadfast_top.name=[坚毅]反转柱顶盖 - -tile.bloodmagic.demonlight.raw.name=[原生]意志之瞳 -tile.bloodmagic.demonlight.corrosive.name=[腐蚀]意志之瞳 -tile.bloodmagic.demonlight.destructive.name=[破坏]意志之瞳 -tile.bloodmagic.demonlight.vengeful.name=[复仇]意志之瞳 -tile.bloodmagic.demonlight.steadfast.name=[坚毅]意志之瞳 - -tile.bloodmagic.extras.stone_raw.name=原生石头 -tile.bloodmagic.extras.stone_corrosive.name=腐蚀石头 -tile.bloodmagic.extras.stone_destructive.name=破坏石头 -tile.bloodmagic.extras.stone_vengeful.name=复仇石头 -tile.bloodmagic.extras.stone_steadfast.name=坚毅石头 - -tile.bloodmagic.extras.polished_raw.name=磨制原生石 -tile.bloodmagic.extras.polished_corrosive.name=磨制腐蚀石 -tile.bloodmagic.extras.polished_destructive.name=磨制破坏石 -tile.bloodmagic.extras.polished_vengeful.name=磨制复仇石 -tile.bloodmagic.extras.polished_steadfast.name=磨制坚毅石 - -tile.bloodmagic.extras.metal_raw.name=原生意志合金 -tile.bloodmagic.extras.metal_corrosive.name=腐蚀意志合金 -tile.bloodmagic.extras.metal_destructive.name=破坏意志合金 -tile.bloodmagic.extras.metal_vengeful.name=复仇意志合金 -tile.bloodmagic.extras.metal_steadfast.name=坚毅意志合金 - -tile.bloodmagic.pillar1.raw.name=原生石柱 -tile.bloodmagic.pillar1.corrosive.name=腐蚀石柱 -tile.bloodmagic.pillar1.destructive.name=破坏石柱 -tile.bloodmagic.pillar1.vengeful.name=复仇石柱 -tile.bloodmagic.pillar1.steadfast.name=坚毅石柱 - -tile.bloodmagic.pillar2.raw.name=二重原生石柱 -tile.bloodmagic.pillar2.corrosive.name=二重腐蚀石柱 -tile.bloodmagic.pillar2.destructive.name=二重破坏石柱 -tile.bloodmagic.pillar2.vengeful.name=二重复仇石柱 -tile.bloodmagic.pillar2.steadfast.name=二重坚毅石柱 - -tile.bloodmagic.pillarCap1.raw.name=原生顶柱 -tile.bloodmagic.pillarCap1.corrosive.name=腐蚀顶柱 -tile.bloodmagic.pillarCap2.destructive.name=破坏顶柱 -tile.bloodmagic.pillarCap2.vengeful.name=复仇顶柱 -tile.bloodmagic.pillarCap3.steadfast.name=坚毅顶柱 - -tile.bloodmagic.wall1.brick_raw.name=原生石砖墙 -tile.bloodmagic.wall1.brick_corrosive.name=腐蚀石砖墙 -tile.bloodmagic.wall1.brick_destructive.name=破坏石砖墙 -tile.bloodmagic.wall1.brick_vengeful.name=复仇石砖墙 -tile.bloodmagic.wall1.brick_steadfast.name=坚毅石砖墙 -tile.bloodmagic.wall1.smallbrick_raw.name=小原生石砖墙 -tile.bloodmagic.wall1.smallbrick_corrosive.name=小腐蚀石砖墙 -tile.bloodmagic.wall1.smallbrick_destructive.name=小破坏石砖墙 -tile.bloodmagic.wall1.smallbrick_vengeful.name=小复仇石砖墙 -tile.bloodmagic.wall1.smallbrick_steadfast.name=小坚毅石砖墙 -tile.bloodmagic.wall1.large_raw.name=原生石墙 -tile.bloodmagic.wall1.large_corrosive.name=腐蚀石墙 -tile.bloodmagic.wall1.large_destructive.name=破坏石墙 -tile.bloodmagic.wall1.large_vengeful.name=复仇石墙 -tile.bloodmagic.wall1.large_steadfast.name=坚毅石墙 - -tile.bloodmagic.stairs1.raw.name=原生石楼梯 -tile.bloodmagic.stairs1.corrosive.name=腐蚀石楼梯 -tile.bloodmagic.stairs2.destructive.name=破坏石楼梯 -tile.bloodmagic.stairs2.vengeful.name=复仇石楼梯 -tile.bloodmagic.stairs3.steadfast.name=坚毅石楼梯 - -# Fluids -fluid.lifeEssence=生命源质 - -# Tooltips -tooltip.bloodmagic.extraInfo=&9-按住 Shift 了解更多信息- - -tooltip.bloodmagic.orb.desc=储存原生的生命源质 -tooltip.bloodmagic.orb.owner=来源:%s -tooltip.bloodmagic.currentOwner=当前所有者:%s -tooltip.bloodmagic.currentTier=当前层级:%d -tooltip.bloodmagic.config.disabled=于配置信息中禁用 -tooltip.bloodmagic.tier=层级 %d - -tooltip.bloodmagic.activated=激活 -tooltip.bloodmagic.deactivated=停用 - -tooltip.bloodmagic.sigil.air.desc=&o我感到轻松多了... -tooltip.bloodmagic.sigil.blood_light.desc=&o我看见了一束光明! -tooltip.bloodmagic.sigil.compression.desc=&o钻石之手 -tooltip.bloodmagic.sigil.divination.desc=&o窥视灵魂 -tooltip.bloodmagic.sigil.divination.otherNetwork=窥视 %s 的灵魂 -tooltip.bloodmagic.sigil.divination.currentAltarTier=当前层级:%d -tooltip.bloodmagic.sigil.divination.currentEssence=当前源质:%d LP -tooltip.bloodmagic.sigil.divination.currentAltarCapacity=当前容量:%d LP -tooltip.bloodmagic.sigil.divination.currentTranquility=当前静谧:%d -tooltip.bloodmagic.sigil.divination.currentInversion=当前反转:%d -tooltip.bloodmagic.sigil.divination.currentBonus=当前效益:+%d%% -tooltip.bloodmagic.sigil.water.desc=&o无限水源? -tooltip.bloodmagic.sigil.lava.desc=&o噢好烫! 不要吃 -tooltip.bloodmagic.sigil.void.desc=&o胜过速易洁®! -tooltip.bloodmagic.sigil.green_grove.desc=&o绿色环保无污染 -tooltip.bloodmagic.sigil.magnetism.desc=&o我现在非常具有吸引力 -tooltip.bloodmagic.sigil.suppression.desc=&o比念力移动更好... -tooltip.bloodmagic.sigil.haste.desc=&o42继咖啡因后... -tooltip.bloodmagic.sigil.fast_miner.desc=&o继续挖, 继续挖... -tooltip.bloodmagic.sigil.elementalAffinity.desc=&o落入焰中的鱼儿! -tooltip.bloodmagic.sigil.seer.desc=&o当看到的一切还不足够 -tooltip.bloodmagic.sigil.seer.currentAltarProgress=当前进度:%d LP/ %s LP -tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent=当前进度:%s -tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate=消耗率:%d LP -tooltip.bloodmagic.sigil.seer.currentAltarTier=当前层级:%d -tooltip.bloodmagic.sigil.seer.currentEssence=当前源质:%d LP -tooltip.bloodmagic.sigil.seer.currentAltarCapacity=当前容量:%d LP -tooltip.bloodmagic.sigil.seer.currentCharge=当前储能:%d -tooltip.bloodmagic.sigil.seer.currentTranquility=当前静谧:%d -tooltip.bloodmagic.sigil.seer.currentBonus=当前效益:+%d%% -tooltip.bloodmagic.sigil.phantom_bridge.desc=&o御气于青空之上... -tooltip.bloodmagic.sigil.whirlwind.desc=&o最好不要穿裙子 -tooltip.bloodmagic.sigil.ender_severance.desc=&o使末影人遇上一个严峻形势! -tooltip.bloodmagic.sigil.teleposition.desc=随时可以脱离这里。 -tooltip.bloodmagic.sigil.transposition.desc=感受原力的力量,我年轻的学徒。 -tooltip.bloodmagic.sigil.holding.press=按下&o%s&r&7修改 -tooltip.bloodmagic.sigil.holding.desc=印记掌控 -tooltip.bloodmagic.sigil.holding.sigilInSlot=印记 %d:%s - -tooltip.bloodmagic.livingArmourPointsUpgrade.desc=提升感知盔甲的最大点数至 %d。 - -tooltip.bloodmagic.bound.sword.desc=&o屠杀幼弱之生灵 -tooltip.bloodmagic.bound.pickaxe.desc=&o无情地凿通大地 -tooltip.bloodmagic.bound.axe.desc=&o恶魔般的滥砍滥伐 -tooltip.bloodmagic.bound.shovel.desc=&o洗扫大地除去尘土 - -tooltip.bloodmagic.sacrificialDagger.desc=只要轻轻划过手指... -tooltip.bloodmagic.sacrificialDagger.creative=对着祭坛潜行右击填满 -tooltip.bloodmagic.slate.desc=在祭坛中将石头转化 -tooltip.bloodmagic.inscriber.desc=在墙面上的文字... - -tooltip.bloodmagic.pack.selfSacrifice.desc=相当不舒适的背包... -tooltip.bloodmagic.pack.sacrifice.desc=描述 -tooltip.bloodmagic.pack.stored=储存:%d LP - -tooltip.bloodmagic.activation_crystal.weak=激活低等仪式 -tooltip.bloodmagic.activation_crystal.awakened=激活更强大的仪式 -tooltip.bloodmagic.activation_crystal.creative=创造模式 - 激活任何仪式 - -tooltip.bloodmagic.diviner.currentRitual=当前仪式: -tooltip.bloodmagic.diviner.blankRune=空白仪式石:%d -tooltip.bloodmagic.diviner.waterRune=水之仪式石:%d -tooltip.bloodmagic.diviner.airRune=风之仪式石:%d -tooltip.bloodmagic.diviner.fireRune=火之仪式石:%d -tooltip.bloodmagic.diviner.earthRune=土之仪式石:%d -tooltip.bloodmagic.diviner.duskRune=薄暮仪式石:%d -tooltip.bloodmagic.diviner.dawnRune=破晓仪式石:%d -tooltip.bloodmagic.diviner.totalRune=仪式石总数:%d -tooltip.bloodmagic.diviner.extraInfo=&9-按 Shift 了解详细信息- -tooltip.bloodmagic.diviner.extraExtraInfo=&9-按住 Shift + M 展开更多信息- -tooltip.bloodmagic.diviner.currentDirection=当前朝向:%s - -tooltip.bloodmagic.ritualReader.currentState=当前模式:%s -tooltip.bloodmagic.ritualReader.set_area=定义区域 -tooltip.bloodmagic.ritualReader.information=信息 -tooltip.bloodmagic.ritualReader.set_will_types=设置意志消耗 -tooltip.bloodmagic.ritualReader.desc.set_area=右击已激活仪式的主仪式石,选至你想更改的区域,随后分别右击新区域角落的两个方块。 -tooltip.bloodmagic.ritualReader.desc.information=右击已激活仪式的主仪式石了解仪式的基本信息。 -tooltip.bloodmagic.ritualReader.desc.set_will_types=设置仪式将消耗的恶魔意志类型, 工具栏中存放该类晶体右击主仪式石. - -tooltip.bloodmagic.arcaneAshes=用于绘制炼金矩阵的粉灰 - -tooltip.bloodmagic.telepositionFocus.coords=当前坐标:(%d, %d, %d) -tooltip.bloodmagic.telepositionFocus.dimension=世界ID:%d -tooltip.bloodmagic.telepositionFocus.bound=绑定:%s 于 %d, %d, %d -tooltip.bloodmagic.telepositionFocus.weak=用于在世界中转移区域 -tooltip.bloodmagic.telepositionFocus.enhanced=用于在世界中转移区域 -tooltip.bloodmagic.telepositionFocus.reinforced=用于在世界中转移区域 -tooltip.bloodmagic.telepositionFocus.demonic=用于在世界中转移区域 - -tooltip.bloodmagic.livingArmour.upgrade.speed=迅捷双足 -tooltip.bloodmagic.livingArmour.upgrade.digging=矮人力量 -tooltip.bloodmagic.livingArmour.upgrade.poisonResist=抗毒体质 -tooltip.bloodmagic.livingArmour.upgrade.fireResist=焰火之礼 -tooltip.bloodmagic.livingArmour.upgrade.selfSacrifice=结实手心 -tooltip.bloodmagic.livingArmour.upgrade.knockback=强劲身躯 -tooltip.bloodmagic.livingArmour.upgrade.physicalProtect=坚韧皮肤 -tooltip.bloodmagic.livingArmour.upgrade.health=健壮体质 -tooltip.bloodmagic.livingArmour.upgrade.meleeDamage=猛烈击打 -tooltip.bloodmagic.livingArmour.upgrade.arrowShot=射击诀窍 -tooltip.bloodmagic.livingArmour.upgrade.stepAssist=步伐补助 -tooltip.bloodmagic.livingArmour.upgrade.grimReaper=死神竞跑 -tooltip.bloodmagic.livingArmour.upgrade.solarPowered=阳光能量 -tooltip.bloodmagic.livingArmour.upgrade.thaumRunicShielding=古碑守护 -tooltip.bloodmagic.livingArmour.upgrade.revealing=揭示 -tooltip.bloodmagic.livingArmour.upgrade.experienced=熟练 -tooltip.bloodmagic.livingArmour.upgrade.jump=壮实双腿 -tooltip.bloodmagic.livingArmour.upgrade.fallProtect=柔和落叶 -tooltip.bloodmagic.livingArmour.upgrade.graveDigger=掘墓者 -tooltip.bloodmagic.livingArmour.upgrade.sprintAttack=冲撞击打 -tooltip.bloodmagic.livingArmour.upgrade.criticalStrike=精准击打 -tooltip.bloodmagic.livingArmour.upgrade.elytra=鞘翅 -tooltip.bloodmagic.livingArmour.upgrade.nightSight=夜行猛技 -tooltip.bloodmagic.livingArmour.upgrade.repair=修复 - - -tooltip.bloodmagic.livingArmour.upgrade.slowness=疲瘸之腿 -tooltip.bloodmagic.livingArmour.upgrade.crippledArm=残废手臂 -tooltip.bloodmagic.livingArmour.upgrade.slippery=如履寒冰 -tooltip.bloodmagic.livingArmour.upgrade.battleHunger=饿殍遍野 -tooltip.bloodmagic.livingArmour.upgrade.quenched=淬火 -tooltip.bloodmagic.livingArmour.upgrade.meleeDecrease=钝拙之刃 -tooltip.bloodmagic.livingArmour.upgrade.digSlowdown=弱化挖掘 -tooltip.bloodmagic.livingArmour.upgrade.stormTrooper=风暴骑兵 -tooltip.bloodmagic.livingArmour.upgrade.slowHeal=愈合延缓 -tooltip.bloodmagic.livingArmour.upgrade.disoriented=平衡失调 - -tooltip.bloodmagic.livingArmour.upgrade.level=%s(等级 %d) -tooltip.bloodmagic.livingArmour.upgrade.progress=%s(%d/100) -tooltip.bloodmagic.livingArmour.upgrade.points=&6强化点数:%s / %s - -tooltip.bloodmagic.livingArmour.extraExtraInfo=&9-按住 Shift + M 查看进展信息- - -tooltip.bloodmagic.will=意志质量:%1$,.2f -tooltip.bloodmagic.sentientSword.desc=以恶魔意志唤起其最大潜能。 -tooltip.bloodmagic.sentientAxe.desc=以恶魔意志唤起其最大潜能。 -tooltip.bloodmagic.sentientPickaxe.desc=以恶魔意志唤起其最大潜能。 -tooltip.bloodmagic.sentientShovel.desc=以恶魔意志唤起其最大潜能。 -tooltip.bloodmagic.soulGem.petty=用于存储微量意志的宝石 -tooltip.bloodmagic.soulGem.lesser=用于存储少量意志的宝石 -tooltip.bloodmagic.soulGem.common=用于存储更多意志的宝石 -tooltip.bloodmagic.soulGem.greater=用于存储大量意志的宝石 -tooltip.bloodmagic.soulGem.grand=用于存储极大数额意志的宝石 -tooltip.bloodmagic.soulSnare.desc=投掷向怪物并消灭它们来获取附于其身的恶魔意志 - -tooltip.bloodmagic.itemFilter.exact=精确匹配物品 -tooltip.bloodmagic.itemFilter.ignoreNBT=忽视筛选的NBT -tooltip.bloodmagic.itemFilter.modItems=同Mod的物品全部匹配 -tooltip.bloodmagic.itemFilter.oreDict=按矿物辞典筛选 - -tooltip.bloodmagic.itemFilter.exact=精确匹配液体 - -tooltip.bloodmagic.fluid.type=所含液体:%s -tooltip.bloodmagic.fluid.amount=数量:%d / %d mB -tooltip.bloodmagic.fluid.capacity=容量:%d mB - -tooltip.bloodmagic.ghost.everything=任何物品 -tooltip.bloodmagic.ghost.amount=幽灵物品数量:%d - -tooltip.bloodmagic.currentType.default=蕴含:原生意志 -tooltip.bloodmagic.currentType.corrosive=蕴含:腐蚀意志 -tooltip.bloodmagic.currentType.destructive=蕴含:破坏意志 -tooltip.bloodmagic.currentType.vengeful=蕴含:复仇意志 -tooltip.bloodmagic.currentType.steadfast=蕴含:坚毅意志 - -tooltip.bloodmagic.currentBaseType.default=原生 -tooltip.bloodmagic.currentBaseType.corrosive=腐蚀 -tooltip.bloodmagic.currentBaseType.destructive=破坏 -tooltip.bloodmagic.currentBaseType.vengeful=复仇 -tooltip.bloodmagic.currentBaseType.steadfast=坚毅 - -tooltip.bloodmagic.experienceTome=用于储存经验的书 -tooltip.bloodmagic.experienceTome.exp=经验值:%0.3f -tooltip.bloodmagic.experienceTome.expLevel=等级:%d - -tooltip.bloodmagic.decoration.safe=安全装潢 -tooltip.bloodmagic.decoration.notSafe=危险装潢 - -tooltip.bloodmagic.cuttingFluidRatio=%d/%d 所剩可用 - -tooltip.bloodmagic.potion.uses=剩余使用次数:%d - -tooltip.bloodmagic.book.shifting=这些符号似乎... &o在变换着... - -tooltip.bloodmagic.willGauge=一个奇怪的装置,可以测量恶魔灵域中的恶魔意志。 - -# Ritual -ritual.bloodmagic.blockRange.tooBig=提供的方块范围过大!最多不超过 %s 个方块。 -ritual.bloodmagic.blockRange.tooFar=提供的方块范围太远!需要在垂直距离 %s , 水平距离 %s 之内。 -ritual.bloodmagic.blockRange.inactive=该仪式石目前无活动,没有可修改的范围。 -ritual.bloodmagic.blockRange.noRange=范围选择不恰当。 -ritual.bloodmagic.blockRange.firstBlock=记录新范围的第一个方块。 -ritual.bloodmagic.blockRange.success=新范围设置成功! -ritual.bloodmagic.willConfig.set=该仪式将使用这类恶魔意志类型:%s -ritual.bloodmagic.willConfig.void=该仪式不再会使用恶魔意志 - -ritual.bloodmagic.testRitual=测试仪式 -ritual.bloodmagic.waterRitual=涌泉仪式 -ritual.bloodmagic.lavaRitual=下界夜曲 -ritual.bloodmagic.greenGroveRitual=绿丛仪式 -ritual.bloodmagic.jumpRitual=高跳仪式 -ritual.bloodmagic.wellOfSufferingRitual=苦难之井 -ritual.bloodmagic.featheredKnifeRitual=羽刀仪式 -ritual.bloodmagic.regenerationRitual=重生仪式 -ritual.bloodmagic.harvestRitual=丰收之月 -ritual.bloodmagic.magneticRitual=磁引仪式 -ritual.bloodmagic.crushingRitual=挖掘仪式 -ritual.bloodmagic.fullStomachRitual=盛宴之歌 -ritual.bloodmagic.interdictionRitual=制止仪式 -ritual.bloodmagic.containmentRitual=牵制仪式 -ritual.bloodmagic.speedRitual=速移仪式 -ritual.bloodmagic.suppressionRitual=抑液仪式 -ritual.bloodmagic.expulsionRitual=驱逐氛场 -ritual.bloodmagic.zephyrRitual=和风之唤 -ritual.bloodmagic.upgradeRemoveRitual=净灵之音 -ritual.bloodmagic.armourEvolveRitual=束灵进化 -ritual.bloodmagic.animalGrowthRitual=牧养仪式 -ritual.bloodmagic.forsakenSoulRitual=孤魂集会 -ritual.bloodmagic.crystalHarvestRitual=碎晶裂纹 -ritual.bloodmagic.meteorRitual=坠星标位 - -ritual.bloodmagic.cobblestoneRitual=极寒火山 -ritual.bloodmagic.placerRitual=铺设仪式 -ritual.bloodmagic.fellingRitual=伐林仪式 -ritual.bloodmagic.pumpRitual=虹吸圣曲 -ritual.bloodmagic.altarBuilderRitual=祭坛集结号 -ritual.bloodmagic.portalRitual=折域之门 -ritual.bloodmagic.downgradeRitual=沉重灵魂的忏悔 - -ritual.bloodmagic.waterRitual.info=通过主仪式石生成一个水源方块 -ritual.bloodmagic.lavaRitual.info=通过主仪式石生成一个岩浆源方块 -ritual.bloodmagic.lavaRitual.default.info=[原生]降低生成岩浆的LP消耗,并将岩浆导入连接的容器内 -ritual.bloodmagic.lavaRitual.corrosive.info=[腐蚀]范围内免疫火焰伤害的实体将受到伤害 -ritual.bloodmagic.lavaRitual.destructive.info=[破坏]岩浆的放置范围根据意志的总量增加 -ritual.bloodmagic.lavaRitual.vengeful.info=[复仇]给予范围内实体缓燃引线效果(上天) -ritual.bloodmagic.lavaRitual.steadfast.info=[坚毅]给予范围内的玩家防火效果 - -ritual.bloodmagic.greenGroveRitual.info=在其范围内种植农作物 -ritual.bloodmagic.jumpRitual.info=使实体跃向高空 -ritual.bloodmagic.wellOfSufferingRitual.info=攻击其伤害范围内的生物,并将所获LP储入邻近的血之祭坛 -ritual.bloodmagic.featheredKnifeRitual.info=扣除其范围内的玩家生命值,并将所获LP储入邻近的血之祭坛 -ritual.bloodmagic.regenerationRitual.info=治疗其范围内失去生命值的实体 -ritual.bloodmagic.regenerationRitual.default.info=[原生] -ritual.bloodmagic.regenerationRitual.corrosive.info=[腐蚀]从非玩家的实体身上汲取鲜血以治疗玩家 -ritual.bloodmagic.regenerationRitual.destructive.info=[破坏] -ritual.bloodmagic.regenerationRitual.vengeful.info=[复仇] -ritual.bloodmagic.regenerationRitual.steadfast.info=[坚毅] -ritual.bloodmagic.harvestRitual.info=收割其范围内的植物,产物掉落于地上 -ritual.bloodmagic.magneticRitual.info=将地底的矿石传送至其放置区域 -ritual.bloodmagic.crushingRitual.info=破坏其挖掘范围内的方块,并将掉落物放置于所连接的箱子 -ritual.bloodmagic.crushingRitual.destructive.info=[破坏]强力的破坏方块:所有方块破坏受 时运III 影响 -ritual.bloodmagic.crushingRitual.steadfast.info=[坚毅]以 精准采集 获取被破坏方块。适用情况下覆盖时运 -ritual.bloodmagic.crushingRitual.corrosive.info=[腐蚀]所有被破坏方块将以基础切削油的形式处理。适用情况下覆盖精准采集 -ritual.bloodmagic.crushingRitual.vengeful.info=[复仇]压缩库存内的物品(如将煤炭压缩成煤炭块),目前每次操作仅执行一次压缩 -ritual.bloodmagic.crushingRitual.default.info=[原生]根据意志总量增加仪式的运行速度 -ritual.bloodmagic.greenGroveRitual.corrosive.info=[腐蚀]范围内的实体将被附近的植物攻击, 蚕食掉他们的生命 -ritual.bloodmagic.greenGroveRitual.default.info=[原生]根据灵域内意志的总量加快所有的仪式运作速度 -ritual.bloodmagic.greenGroveRitual.vengeful.info=[复仇]增加生长刻成功的速率 -ritual.bloodmagic.greenGroveRitual.steadfast.info=[坚毅]在水合范围内, 种子会被再次种植且方块会被润湿 -ritual.bloodmagic.greenGroveRitual.destructive.info=[破坏] 促进作物生长的范围根据意志的总量增加 -ritual.bloodmagic.featheredKnifeRitual.default.info=[原生] 根据灵域内意志的总量增加仪式的运行速度 -ritual.bloodmagic.featheredKnifeRitual.destructive.info=[破坏] 根据意志总量增加仪式的产出的LP -ritual.bloodmagic.featheredKnifeRitual.vengeful.info=[复仇] 将牺牲的最小生命值设为10%%.覆盖[坚毅]的效果 -ritual.bloodmagic.featheredKnifeRitual.corrosive.info=[腐蚀] 使用玩家的“熏香”来提高收益 -ritual.bloodmagic.featheredKnifeRitual.steadfast.info=[坚毅] 将牺牲的最小生命值设为30%%到70%% -ritual.bloodmagic.speedRitual.default.info=[原生] 根据意志总量增加仪式产生的移动速度 -ritual.bloodmagic.speedRitual.vengeful.info=[复仇] 防止玩家与成年动物被运输,如果与[破坏]配合,则运输玩家 -ritual.bloodmagic.speedRitual.destructive.info=[破坏] 防止玩家与幼年动物被运输,如果与[复仇]配合,则运输玩家 -ritual.bloodmagic.animalGrowthRitual.vengeful.info=[复仇] 减少成年动物繁殖的间隔时间 -ritual.bloodmagic.animalGrowthRitual.steadfast.info=[坚毅] 使用箱子内的物品饲养区域内的动物 -ritual.bloodmagic.animalGrowthRitual.default.info=[原生] 根据灵域内意志的总量增加仪式的运行速度 -ritual.bloodmagic.animalGrowthRitual.destructive.info=[破坏]让最近没有繁殖后代的成年动物冲向怪物自爆 -ritual.bloodmagic.animalGrowthRitual.corrosive.info=[腐蚀] 暂无特殊效果 - -ritual.bloodmagic.fullStomachRitual.info=从连接的箱子中获取食物,来补充玩家的饥饿值。 -ritual.bloodmagic.interdictionRitual.info=使其范围内的所有生物推离于主仪式石。 -ritual.bloodmagic.containmentRitual.info=使其范围内的所有生物牵引向主仪式石。 -ritual.bloodmagic.speedRitual.info=将其范围内的玩家以仪式方向抛射出去。 -ritual.bloodmagic.suppressionRitual.info=抑制其范围内的液体;停用仪式时恢复。 -ritual.bloodmagic.expulsionRitual.info=驱逐其范围内,非激活者或主仪式石上方箱子中无绑定血宝珠的玩家,离开该区域。 -ritual.bloodmagic.zephyrRitual.info=拾取其范围内的掉落物,并放入所连接的箱子。 -ritual.bloodmagic.upgradeRemoveRitual.info=没有记载。 -ritual.bloodmagic.armourEvolveRitual.info=没有记载。 -ritual.bloodmagic.animalGrowthRitual.info=加快其范围内的幼年动物的生长速度。 -ritual.bloodmagic.forsakenSoulRitual.info=对其伤害范围内的生物造成伤害,当生物死亡时,其晶体范围内的恶魔晶簇将生长。 -ritual.bloodmagic.crystalHarvestRitual.info=破坏范围内的恶魔意志晶簇,掉落物丢于晶簇顶部。 -ritual.bloodmagic.placerRitual.info=取出所连接的容器中的方块,并放置于世界中。 -ritual.bloodmagic.fellingRitual.info=一个伐木设施,该仪式将砍伐其范围内所有树与叶子,并收集掉落物。 -ritual.bloodmagic.pumpRitual.info=从规定范围获取液体。只有当所连接的液体容器至少有一桶量的相同液体时,移入液体。 -ritual.bloodmagic.altarBuilderRitual.info=将所连接的容器中的祭坛部件搭建出来。 -ritual.bloodmagic.portalRitual.info=创建一个传送门网络,以激活者及直接接触方块为基础,两者相同的两个传送门达成连接。激活后未修改传送网络的情况下方块可以变更。 -ritual.bloodmagic.meteorRitual.info=消耗其物品范围内的一个物品,从天空中召唤一个充满资源的流星,直接坠向仪式。 - -ritual.bloodmagic.waterRitual.waterRange.info=(水源) 仪式放置水源方块的区域。 -ritual.bloodmagic.lavaRitual.lavaRange.info=(岩浆) 仪式放置岩浆方块的区域。 -ritual.bloodmagic.lavaRitual.lavaTank.info=[原生] 仪式将岩浆导入其中的储罐 -ritual.bloodmagic.lavaRitual.fireFuse.info=[复仇] 在这个区域内的实体将遭受缓燃引线效果 -ritual.bloodmagic.lavaRitual.fireResist.info=[坚毅] 玩家在此区域内可获得防火buff -ritual.bloodmagic.lavaRitual.fireDamage.info=[腐蚀] 该区域内免疫火焰伤害的实体将受到伤害,伤害量与意志的量相关 -ritual.bloodmagic.greenGroveRitual.growing.info=(生长) 仪式加快植物生长的区域。 -ritual.bloodmagic.greenGroveRitual.leech.info=[腐蚀] 区域内实体的生命将流失于滋养附近的农作物。 -ritual.bloodmagic.greenGroveRitual.hydrate.info=[坚毅] 区域内的方块将被润湿为耕地,且区域内的种子将被就近种植。 -ritual.bloodmagic.jumpRitual.jumpRange.info=(跳跃) 在这个区域内的实体将跃向高空。 -ritual.bloodmagic.wellOfSufferingRitual.altar.info=(祭坛) 规定仪式检测血之祭坛的区域。该项修改为添加或撤销一个坐标。 -ritual.bloodmagic.wellOfSufferingRitual.damage.info=(伤害) 规定仪式伤害生物的区域。该区域内所有生物(除了玩家)将持续受到伤害。 -ritual.bloodmagic.featheredKnifeRitual.altar.info=(祭坛) 规定仪式检测血之祭坛的区域。该项修改为添加或撤销一个坐标。 -ritual.bloodmagic.featheredKnifeRitual.damage.info=(伤害) 规定仪式伤害玩家的区域。该区域内的玩家将持续受到伤害直至设定的生命值下限。 -ritual.bloodmagic.regenerationRitual.heal.info=(治愈) 该区域内的生物将获得生命恢复buff。 -ritual.bloodmagic.regenerationRitual.vampire.info=(血蛭) 汲取区域内怪物的生命来治愈玩家 -ritual.bloodmagic.harvestRitual.harvestRange.info=(收割) 该区域内的植物将被收割。 -ritual.bloodmagic.magneticRitual.placementRange.info=(放置) 仪式将把获取的矿石放置于该区域内。 -ritual.bloodmagic.crushingRitual.crushingRange.info=(挖掘) 该区域的方块将被破坏。 -ritual.bloodmagic.crushingRitual.chest.info=(箱子) 箱子位置,仪式将把破坏的方块放入其中。 -ritual.bloodmagic.fullStomachRitual.fillRange.info=(喂食) 仪式将会喂食该区域内的玩家。 -ritual.bloodmagic.fullStomachRitual.chest.info=(箱子) 箱子位置, 仪式将提取其中的食物来喂食区域内的玩家。 -ritual.bloodmagic.interdictionRitual.interdictionRange.info=(推离) 仪式推离生物的区域。无论该区域位于何处,所有生物将被推离于主仪式石。 -ritual.bloodmagic.containmentRitual.containmentRange.info=(牵引) 仪式牵引生物的区域。无论该区域位于何处,所有生物将被牵引向主仪式石。 -ritual.bloodmagic.speedRitual.sanicRange.info=(速度) 所有位于该区域内的实体,将被抛射向仪式摆相成的箭头方向。 -ritual.bloodmagic.suppressionRitual.suppressionRange.info=(抑液) 该区域内所有液体将被仪式抑制。 -ritual.bloodmagic.expulsionRitual.expulsionRange.info=(驱逐) -ritual.bloodmagic.zephyrRitual.zephyrRange.info=(拾取) 该区域内的物品将被拾取储入所连接箱子。 -ritual.bloodmagic.zephyrRitual.chest.info=(箱子) 箱子位置, 仪式将把拾取的物品放入其中。 -ritual.bloodmagic.animalGrowthRitual.growing.info=(成长) 该区域内的动物将成长得更快。 -ritual.bloodmagic.animalGrowthRitual.chest.info=(箱子) 用于存放喂养动物物品的箱子 -ritual.bloodmagic.forsakenSoulRitual.crystal.info=(晶体) 当有生物因仪式死亡时,该区域内的晶簇生长速度将加快。 -ritual.bloodmagic.forsakenSoulRitual.damage.info=(伤害) 该区域内的生物将缓慢的收到伤害,当死亡时晶簇将生长。 -ritual.bloodmagic.crystalHarvestRitual.crystal.info=(晶体) 晶簇将被破坏成仅留单晶的晶簇,被破坏的晶体将掉落于世界。 - -ritual.bloodmagic.placerRitual.placerRange.info=(放置) 仪式将放置方块的区域。 -ritual.bloodmagic.placerRitual.chest.info=(箱子) 箱子位置, 仪式将提取其中的方块放置于世界中。 -ritual.bloodmagic.fellingRitual.fellingRange.info=(砍伐) 仪式将搜寻原木和树叶并进行砍伐的区域。 -ritual.bloodmagic.fellingRitual.chest.info=(箱子) 箱子位置, 仪式将把掉落物放入其中。 -ritual.bloodmagic.pumpRitual.pumpRange.info=(引水) 仪式于世界中获取液体的区域。 - -ritual.bloodmagic.downgradeRitual.dialogue.bow.1=那么,少年,你渴望力量么...? -ritual.bloodmagic.downgradeRitual.dialogue.bow.100=当然了,没有不需要代价的交易...我也不会轻易地给予你力量,而不求任何回报 -ritual.bloodmagic.downgradeRitual.dialogue.bow.300=那么就献祭自身,抛弃自我,放弃那百步穿杨的精准。记住,箭矢将不再是你获胜的凭依 -ritual.bloodmagic.downgradeRitual.dialogue.bow.500=我会帮你解开盔甲的封印以作回报,这样它们就能进一步地强化下去...而你所要做的就是在这仪式前叩拜 -ritual.bloodmagic.downgradeRitual.dialogue.quenched.1=嚯嚯嚯...你好,凡人,从你眼神中我看到了渴望,对力量的渴望 -ritual.bloodmagic.downgradeRitual.dialogue.quenched.100=谨记!当杯子装满时,想要装下更多就必须先将她倒空 -ritual.bloodmagic.downgradeRitual.dialogue.quenched.300=那么,我们做个交易吧:忘却那杜康的美味,我将给予你变得更有潜力的机会。相信我,你完全不需要考虑这么做是否值得... -ritual.bloodmagic.downgradeRitual.dialogue.quenched.500=跪下吧!凡人。饮下这杯酒。这或许会是你此生最后一次 -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.1=嗯...你究竟想要得到什么? -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.100=想要超脱凡人的力量?我无法满足你的要求——不过,我这里有另外一项交易... -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.300=我可以帮你改良你的盔甲,使它可以获得更多的强化机会。但是,作为交换,你将失去自身战斗的能力 -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.500=如果愿意,就别再挥动手中的剑刃,它将永远失去昨日的荣耀 -ritual.bloodmagic.downgradeRitual.dialogue.dulledBlade.700=那么,你的选择是什么,是跪在仪式前,还是继续挥动手中的剑刃? -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.1=当心你脚下的大地,凡人! -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.100=和我的伙伴不同,我只有残酷的交易。如果你想成为魔法师,那么就用你的身体来交换 -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.300=伤口总会愈合。如果答应了我的条件,那么你身上的伤口将更难愈合,直到战斗的烙印或作无形的瘟疫 -ritual.bloodmagic.downgradeRitual.dialogue.slowHeal.500=好了,赶紧考虑吧。你或许会后悔,因为哪怕你的杯子空了,它也很难在被填满... - -# Chat -chat.bloodmagic.altarMaker.setTier=层级设置:%d -chat.bloodmagic.altarMaker.building=铺设一个 %d 层祭坛 -chat.bloodmagic.altarMaker.destroy=消除一个 %d 层祭坛 -chat.bloodmagic.altarMaker.creativeOnly=该物品仅限创造模式。 - -chat.bloodmagic.damageSource=%s 的灵魂开始变得虚弱 - -chat.bloodmagic.ritual.weak=你感到有股拉力, 但没有足够的力量来完成这个仪式. -chat.bloodmagic.ritual.prevent=仪式在积极的抵抗你! -chat.bloodmagic.ritual.activate=一股能量流经这个仪式! -chat.bloodmagic.ritual.notValid=这些仪式石似乎有些摆放不得当... - -chat.bloodmagic.livingArmour.upgrade.poisonRemove=你感到已经好多了! -chat.bloodmagic.livingArmour.upgrade.fireRemove=&6火焰抵抗随一股清凉感附着于你。 -chat.bloodmagic.livingArmour.upgrade.grimReaper=&6朦胧中一股能量使你脱离死亡边缘! -chat.bloodmagic.livingArmour.newUpgrade=&4强化完成! - -chat.bloodmagic.routing.remove=移出记录位置 -chat.bloodmagic.routing.set=设置节点位置 -chat.bloodmagic.routing.link.master=连接到主节点! -chat.bloodmagic.routing.link=节点连接完成 - -chat.bloodmagic.altar.comp.glowstone=一个萤石块 -chat.bloodmagic.altar.comp.bloodstone=一个大血石砖 -chat.bloodmagic.altar.comp.beacon=一个信标 -chat.bloodmagic.altar.comp.bloodrune=一个气血符文 -chat.bloodmagic.altar.comp.crystal=一个无效物品 -chat.bloodmagic.altar.comp.notair=一个实心方块 - -chat.bloodmagic.altar.nextTier=下一层级的血之祭坛缺失%s,对应坐标为 %s 。 - -chat.bloodmagic.mimic.potionSet=药剂陷阱已设置. -chat.bloodmagic.mimic.potionRemove=药剂陷阱已移除. -chat.bloodmagic.mimic.potionInterval.up=药剂时间间隔已增加至:%d 刻。 -chat.bloodmagic.mimic.potionInterval.down=药剂时间间隔已减少至:%d 刻。 -chat.bloodmagic.mimic.detectRadius.up=玩家检测半径已增加至:%d 格方块。 -chat.bloodmagic.mimic.detectRadius.down=玩家检测半径已减少至:%d 格方块。 -chat.bloodmagic.mimic.potionSpawnRadius.up=药剂生成半径已增加至:%d 格方块。 -chat.bloodmagic.mimic.potionSpawnRadius.down=药剂生成半径已减少至:%d 格方块。 - -# entity -entity.bloodmagic.SentientSpecter.name=感知之灵 -entity.bloodmagic.Mimic.name=拟态 - -# Commands -commands.bloodmagic.error.arg.invalid=无效参数 -commands.bloodmagic.error.arg.missing=参数不足 -commands.bloodmagic.error.arg.player.missing=你必须指定一个玩家来执行该命令。 -commands.bloodmagic.error.404=命令未找到! -commands.bloodmagic.error.unknown=未知的命令! -commands.bloodmagic.error.perm=你没有使用该命令的权限。 - -commands.bloodmagic.success=成功执行 - -commands.bloodmagic.format.help=%s - %s -commands.bloodmagic.format.error=%s - %s - -commands.bloodmagic.help.usage=/bloodmagic help -commands.bloodmagic.help.help=使用"/bloodmagic help"命令显示指令列表。 - -commands.bloodmagic.network.usage=/bloodmagic network [吸取(syphon)|添加(add)|查看(get)|填充(fill)|填满(cap)] <玩家> [数量] -commands.bloodmagic.network.help=灵魂网络实用工具 -commands.bloodmagic.network.syphon.help=从指定玩家的灵魂网络中移出指定的LP值。 -commands.bloodmagic.network.syphon.success=成功从 %s 吸取出 %dLP。 -commands.bloodmagic.network.add.help=添加指定的LP值到指定玩家的灵魂网络中。服从标准的LP增加规则。 -commands.bloodmagic.network.add.success=成功添加 %dLP 到 %s 的灵魂网络。 -commands.bloodmagic.network.set.help=将指定玩家的LP设置为所给数值。 -commands.bloodmagic.network.set.success=成功将 %s 灵魂网络中的LP设置为 %d。 -commands.bloodmagic.network.get.help=返还指定玩家灵魂网络中的LP值。 -commands.bloodmagic.network.fill.help=将指定玩家的LP填充为 %d。 -commands.bloodmagic.network.fill.success=成功填充 %s 的灵魂网络。 -commands.bloodmagic.network.cap.help=填充指定玩家的灵魂网络至其所持有的最高阶气血宝珠容量的最大值。 -commands.bloodmagic.network.cap.success=成功填满 %s 的灵魂网络。 - -commands.bloodmagic.bind.usage=/bind <玩家> -commands.bloodmagic.bind.help=用于设置/解除对手持物品的绑定情况。 -commands.bloodmagic.bind.success=物品成功绑定! -commands.bloodmagic.bind.remove.success=解除绑定成功 - -commands.bloodmagic.orb.usage=/bloodmagic orb [设置(set)|查看(get)] <玩家> [等级] -commands.bloodmagic.orb.help=用于设置或查看玩家的最高血宝珠等级. - -commands.bloodmagic.bind.usage=/bind <玩家> -commands.bloodmagic.bind.success=物品成功绑定! -commands.bloodmagic.bind.failed.noPlayer=没有指定玩家 -commands.bloodmagic.bind.failed.alreadyBound=物品已经被绑定;使用 /unbind 来解除绑定 -commands.bloodmagic.bind.failed.notBindable=物品无法被绑定 -commands.bloodmagic.unbind.usage=/unbind -commands.bloodmagic.unbind.success=物品成功解除绑定! -commands.bloodmagic.unbind.failed.notBindable=物品无法解除绑定 -commands.bloodmagic.soulnetwork.usage=/soulnetwork <玩家> <添加(add)|减去(subtract)|填满(fill)|清空(empty)|查看(get)> [数量] -commands.bloodmagic.soulnetwork.add.success=成功添加 %dLP 到 %s 的灵魂网络! -commands.bloodmagic.soulnetwork.subtract.success=成功从 %s 的灵魂网络中减去 %dLP! -commands.bloodmagic.soulnetwork.fill.success=成功填满 %s 的灵魂网络! -commands.bloodmagic.soulnetwork.empty.success=成功清空 %s 的灵魂网络! -commands.bloodmagic.soulnetwork.get.success=%s 的灵魂网络中有 %dLP! -commands.bloodmagic.soulnetwork.noPlayer=没有指定玩家 -commands.bloodmagic.soulnetwork.noCommand=这不符命令规定 -commands.bloodmagic.soulnetwork.notACommand=这不是有效的命令 -commands.bloodmagic.soulnetwork.fillMax.success=成功将 %s 的灵魂网络填满至其宝珠的最大值! -commands.bloodmagic.soulnetwork.create.success=创建 %s 的灵魂网络成功(宝珠等级:%d) - -# GUI -tile.bloodmagic.inputNode.name=输入节点 -tile.bloodmagic.outputNode.name=输出节点 - -# Keybinds -bloodmagic.keybind.open_holding=打开集持印记 -bloodmagic.keybind.cycle_holding_pos=循环选择印记 (+) -bloodmagic.keybind.cycle_holding_neg=循环选择印记 (-) - -# JustEnoughItems -jei.bloodmagic.recipe.altar=血之祭坛 -jei.bloodmagic.recipe.binding=炼金矩阵 (绑定) -jei.bloodmagic.recipe.alchemyArrayCrafting=炼金矩阵 -jei.bloodmagic.recipe.soulForge=狱火熔炉 -jei.bloodmagic.recipe.alchemyTable=炼金术桌 -jei.bloodmagic.recipe.armourDowngrade=祭品 (仪式:沉重灵魂的忏悔) -jei.bloodmagic.recipe.requiredLP=LP: %d -jei.bloodmagic.recipe.requiredTier=层级:%d -jei.bloodmagic.recipe.consumptionRate=消耗率:%d LP/t -jei.bloodmagic.recipe.drainRate=消耗率:%d LP/t -jei.bloodmagic.recipe.minimumSouls=最小值:%1$,.2f Will -jei.bloodmagic.recipe.soulsDrained=消耗:%1$,.2f Will -jei.bloodmagic.recipe.lpDrained=消耗:%,d LP -jei.bloodmagic.recipe.ticksRequired=时间:%,d 刻 - -jei.bloodmagic.desc.altarBuilder=该物品仅限创造模式,用于调试测试.\n\nShift + 右键 改变层级。右键祭坛开始搭建。\n\n手持破坏祭坛时将全部移除。 -jei.bloodmagic.desc.demonicWill=附身于生物的恶魔意志之体现.\n\n可以通过用感知武器杀死生物掉落,或是对着生物抛掷原始投网。当它出现白色颗粒时杀了它。 - -# WAILA -waila.bloodmagic.sneak=&o潜行查看信息 -waila.bloodmagic.array.reagent=试剂:%s -waila.bloodmagic.array.catalyst=石板:%s -option.bloodmagic.bypassSneak=潜行 -option.bloodmagic.bloodAltar=血之祭坛 -option.bloodmagic.ritualController=仪式石 -option.bloodmagic.teleposer=传送器 -option.bloodmagic.array=炼金矩阵 - -# Thaumcraft -tc.research_category.BLOODMAGIC=血红奥术 - -# Thaumcraft Research -bloodmagic.research_name.BLOODMAGIC=血魔法 -bloodmagic.research_text.BLOODMAGIC=血红奥术 -bloodmagic.research_page.BLOODMAGIC.1=血魔法的领域总是似乎有些孤立且像是“个人”艺术,同众所周知的喜爱隐居有时还有点疯癫的血魔法师。然而,自我牺牲与生命源质的力量甚至拥有超出一般血魔法师所见的用途,事实上,这种力量显然终究能应用于神秘学。 - -# Buttons -button.bloodmagic.tooltip.fill=填充网络 diff --git a/src/main/resources/assets/bloodmagic/lang/zh_TW.lang b/src/main/resources/assets/bloodmagic/lang/zh_TW.lang deleted file mode 100644 index 3632a10a..00000000 --- a/src/main/resources/assets/bloodmagic/lang/zh_TW.lang +++ /dev/null @@ -1,404 +0,0 @@ -#Creative Tab -itemGroup.bloodmagic.creativeTab=血魔法 -itemGroup.bloodmagic.creativeTabTome=血魔法強化經文 - -#Items -item.bloodmagic.activationCrystal.weak.name=[虛弱]激活水晶 -item.bloodmagic.activationCrystal.awakened.name=[覺醒]激活水晶 -item.bloodmagic.activationCrystal.creative.name=[創造模式]激活水晶 - -item.bloodmagic.sacrificialDagger.normal.name=犧牲匕首 -item.bloodmagic.sacrificialDagger.creative.name=創造模式犧牲匕首 -item.bloodmagic.pack.selfSacrifice.name=血文背包 -item.bloodmagic.pack.sacrifice.name=紋章血甲 -item.bloodmagic.daggerOfSacrifice.name=獻祭刀 - -item.bloodmagic.lavaCrystal.name=熔岩晶體 - -item.bloodmagic.bound.sword.name=約束之劍 -item.bloodmagic.bound.pickaxe.name=約束之鎬 -item.bloodmagic.bound.axe.name=約束之斧 -item.bloodmagic.bound.shovel.name=約束之鍬 - -item.bloodmagic.bucket.lifeEssence.name=生命之桶 - -item.bloodmagic.scribe.water.name=元素銘文:水 -item.bloodmagic.scribe.fire.name=元素銘文:火 -item.bloodmagic.scribe.earth.name=元素銘文:地 -item.bloodmagic.scribe.air.name=元素銘文:風 -item.bloodmagic.scribe.dusk.name=元素銘文:黃昏 -item.bloodmagic.scribe.dawn.name=元素銘文:黎明 - -item.bloodmagic.focus.weak.name=傳送方位核心 -item.bloodmagic.focus.enhanced.name=強化傳送方位核心 -item.bloodmagic.focus.reinforced.name=力之傳送方位核心 -item.bloodmagic.focus.demonic.name=惡魔傳送方位核心 - -item.bloodmagic.slate.blank.name=空白石板 -item.bloodmagic.slate.reinforced.name=力之石板 -item.bloodmagic.slate.imbued.name=灌輸石板 -item.bloodmagic.slate.demonic.name=惡魔石板 -item.bloodmagic.slate.ethereal.name=玄幽石板 - -item.bloodmagic.orb.weak.name=虛弱氣血寶珠 -item.bloodmagic.orb.apprentice.name=學徒氣血寶珠 -item.bloodmagic.orb.magician.name=魔法使氣血寶珠 -item.bloodmagic.orb.master.name=魔導師氣血寶珠 -item.bloodmagic.orb.archmage.name=大賢者氣血寶珠 -item.bloodmagic.orb.transcendent.name=超越者氣血寶珠 - -item.bloodmagic.reagent.incendium.name=火焰粉末 -item.bloodmagic.reagent.magicales.name=魔法粉末 -item.bloodmagic.reagent.sanctus.name=神聖粉末 -item.bloodmagic.reagent.aether.name=以太元素 -item.bloodmagic.reagent.crepitous.name=爆破粉末 -item.bloodmagic.reagent.crystallos.name=冰晶粉末 -item.bloodmagic.reagent.terrae.name=泥土粉末 -item.bloodmagic.reagent.aquasalus.name=液之粉末 -item.bloodmagic.reagent.tennebrae.name=暗黑粉末 -item.bloodmagic.reagent.offensa.name=攻勢粉末 -item.bloodmagic.reagent.praesidium.name=防守粉末 -item.bloodmagic.reagent.orbisterrae.name=環境粉末 -item.bloodmagic.reagent.virtus.name=力量粉末 -item.bloodmagic.reagent.reductus.name=代價粉末 -item.bloodmagic.reagent.potentia.name=效能粉末 - -item.bloodmagic.bloodShard.weak.name=虛弱氣血碎片 -item.bloodmagic.bloodShard.demon.name=惡魔氣血碎片 - -item.bloodmagic.baseComponent.reagentWater.name=水之試劑 -item.bloodmagic.baseComponent.reagentLava.name=熔岩試劑 -item.bloodmagic.baseComponent.reagentAir.name=空之試劑 -item.bloodmagic.baseComponent.reagentFastMiner.name=礦之試劑 -item.bloodmagic.baseComponent.reagentVoid.name=虛空試劑 -item.bloodmagic.baseComponent.reagentGrowth.name=成長試劑 -item.bloodmagic.baseComponent.reagentAffinity.name=元素親和力試劑 -item.bloodmagic.baseComponent.reagentSight.name=視之試劑 -item.bloodmagic.baseComponent.reagentBinding.name=約束試劑 -item.bloodmagic.baseComponent.reagentSuppression.name=抑制試劑 -item.bloodmagic.baseComponent.frameParts.name=框架部件 -item.bloodmagic.baseComponent.reagentBloodLight.name=血光試劑 -item.bloodmagic.baseComponent.reagentMagnetism.name=磁引試劑 -item.bloodmagic.baseComponent.reagentHaste.name=急速試劑 -item.bloodmagic.baseComponent.reagentBridge.name=影橋試劑 -item.bloodmagic.baseComponent.reagentCompression.name=壓縮試劑 -item.bloodmagic.baseComponent.reagentSeverance.name=驅散試劑 - -item.bloodmagic.baseComponent.reagentTeleposition.name=轉送試劑 -item.bloodmagic.baseComponent.reagentTransposition.name=移位試劑 - -item.bloodmagic.monsterSoul.base.name=惡魔慾望 - -item.bloodmagic.sigil.air.name=空氣印記 -item.bloodmagic.sigil.bloodLight.name=血光印記 -item.bloodmagic.sigil.compression.name=壓縮印記 -item.bloodmagic.sigil.divination.name=占卜印記 -item.bloodmagic.sigil.water.name=水之印記 -item.bloodmagic.sigil.lava.name=熔岩印記 -item.bloodmagic.sigil.void.name=虛空印記 -item.bloodmagic.sigil.greenGrove.name=綠叢印記 -item.bloodmagic.sigil.elementalAffinity.name=元素印記 -item.bloodmagic.sigil.haste.name=急速印記 -item.bloodmagic.sigil.suppression.name=抑制印記 -item.bloodmagic.sigil.magnetism.name=磁引印記 -item.bloodmagic.sigil.fastMiner.name=速掘印記 -item.bloodmagic.sigil.seer.name=搜索印記 -item.bloodmagic.sigil.phantomBridge.name=影橋印記 -item.bloodmagic.sigil.whirlwind.name=旋風印記 -item.bloodmagic.sigil.enderSeverance.name=終末印記 - -item.bloodmagic.sigil.teleposition.name=轉送印記 -item.bloodmagic.sigil.transposition.name=移位印記 - -item.bloodmagic.livingArmour.helmet.name=生命頭盔 -item.bloodmagic.livingArmour.chest.name=生命胸甲 -item.bloodmagic.livingArmour.legs.name=生命護腿 -item.bloodmagic.livingArmour.boots.name=生命長靴 -item.bloodmagic.sentientArmour.helmet.name=感知頭盔 -item.bloodmagic.sentientArmour.chest.name=感知胸甲 -item.bloodmagic.sentientArmour.legs.name=感知護腿 -item.bloodmagic.sentientArmour.boots.name=感知長靴 - -item.bloodmagic.altarMaker.name=祭壇產生器 - -item.bloodmagic.ritualDivinernormal.name=儀式占杖 -item.bloodmagic.ritualDivinerdusk.name=儀式占杖[黃昏] -item.bloodmagic.ritualDivinerdawn.name=儀式占杖[黎明] - -item.bloodmagic.arcaneAshes.name=奧法灰燼 -item.bloodmagic.upgradeTome.name=生命護甲升級經文 -item.bloodmagic.upgradeTrainer.name=生命護甲培養環 - -item.bloodmagic.sentientSword.name=感知劍 -item.bloodmagic.soulGem.petty.name=貧脊酒石晶 -item.bloodmagic.soulGem.lesser.name=次級酒石晶 -item.bloodmagic.soulGem.common.name=普通酒石晶 -item.bloodmagic.soulGem.greater.name=上等酒石晶 -item.bloodmagic.soulGem.grand.name=稀世酒石晶 -item.bloodmagic.soulSnare.base.name=簡易套索 -item.bloodmagic.sentientBow.name=感知弓 -item.bloodmagic.sentientArmourGem.name=感知護甲寶石 - -item.bloodmagic.nodeRouter.name=節點路由 -item.bloodmagic.itemFilter.exact.name=精確物品篩選器 -item.bloodmagic.itemFilter.ignoreNBT.name=NBT物品篩選器 -item.bloodmagic.itemFilter.modItems.name=模組物品篩選器 -item.bloodmagic.itemFilter.oreDict.name=礦物辭典物品篩選器 - -# Blocks -tile.bloodmagic.fluid.lifeEssence.name=生命精華 - -tile.bloodmagic.stone.ritual.master.name=魔導師儀式石 -tile.bloodmagic.stone.ritual.imperfect.name=次級儀式石 - -tile.bloodmagic.altar.name=血祭壇 -tile.bloodmagic.alchemyArray.name=&r&f煉金矩陣 - -tile.bloodmagic.rune.blank.name=空白符文石 -tile.bloodmagic.rune.speed.name=速度符文石 -tile.bloodmagic.rune.efficiency.name=效益符文石 -tile.bloodmagic.rune.sacrifice.name=犧牲符文石 -tile.bloodmagic.rune.selfSacrifice.name=獻祭符文石 -tile.bloodmagic.rune.displacement.name=移位符文石 -tile.bloodmagic.rune.capacity.name=容納符文石 -tile.bloodmagic.rune.augCapacity.name=增容符文石 -tile.bloodmagic.rune.orb.name=珠之符文石 -tile.bloodmagic.rune.acceleration.name=促進符文石 -tile.bloodmagic.rune.charging.name=充能符文石 - - -tile.bloodmagic.ritualStone.blank.name=儀式石 -tile.bloodmagic.ritualStone.water.name=水之儀式石 -tile.bloodmagic.ritualStone.fire.name=火之儀式石 -tile.bloodmagic.ritualStone.earth.name=地之儀式石 -tile.bloodmagic.ritualStone.air.name=風之儀式石 -tile.bloodmagic.ritualStone.dusk.name=黃昏儀式石 -tile.bloodmagic.ritualStone.dawn.name=黎明之儀式石 - -tile.bloodmagic.bloodstonebrick.large.name=大血石磚 -tile.bloodmagic.bloodstonebrick.brick.name=血石磚 -tile.bloodmagic.crystal.large.name=晶簇方塊 -tile.bloodmagic.crystal.brick.name=晶簇磚 -tile.bloodmagic.bloodLight.name=血光 -tile.bloodmagic.spectralBlock.name=波譜方塊 -tile.bloodmagic.phantom.name=幻象方塊 -tile.bloodmagic.incenseAltar.name=香壇 - -tile.bloodmagic.teleposer.name=轉送器 -tile.bloodmagic.soulForge.name=獄炎融爐 -tile.bloodmagic.demonCrucible.name=惡魔坩堝 - -tile.bloodmagic.masterRouting.name=魔導師路由節點 -tile.bloodmagic.outputRouting.name=輸出路由節點 -tile.bloodmagic.inputRouting.name=輸入路由節點 -tile.bloodmagic.itemRouting.name=路由節點 - -tile.bloodmagic.path.wood.name=木材通路 -tile.bloodmagic.path.woodTile.name=平滑木通路 -tile.bloodmagic.path.stone.name=石磚通路 -tile.bloodmagic.path.stoneTile.name=平滑石通路 -tile.bloodmagic.path.wornstone.name=裂石磚通路 -tile.bloodmagic.path.wornstoneTile.name=平滑裂石通路 -tile.bloodmagic.path.obsidian.name=黑曜石通路 -tile.bloodmagic.path.obsidianTile.name=平滑黑曜石通路 - -tile.bloodmagic.dimensionalPortal.name=維度傳送門 -tile.bloodmagic.bloodTank.name=血槽 - -# 工具提示 -tooltip.bloodmagic.orb.desc=儲存生命精華 -tooltip.bloodmagic.orb.owner=Added by: %s -tooltip.bloodmagic.currentOwner=Current owner: %s -tooltip.bloodmagic.currentTier=Current tier: %d -tooltip.bloodmagic.config.disabled=Currently disabled in the Config - -tooltip.bloodmagic.activated=啟用 -tooltip.bloodmagic.deactivated=未啟用 - -tooltip.bloodmagic.sigil.air.desc=&oI feel lighter already... -tooltip.bloodmagic.sigil.bloodLight.desc=&oI see a light! -tooltip.bloodmagic.sigil.compression.desc=&oHands of diamonds -tooltip.bloodmagic.sigil.divination.desc=&oPeer into the soul -tooltip.bloodmagic.sigil.divination.otherNetwork=Peering into the soul of %s -tooltip.bloodmagic.sigil.divination.currentAltarTier=Current Tier: %d -tooltip.bloodmagic.sigil.divination.currentEssence=Current Essence: %,d LP -tooltip.bloodmagic.sigil.divination.currentAltarCapacity=Current Capacity: %,d LP -tooltip.bloodmagic.sigil.divination.currentTranquility=Current Tranquility: %,d -tooltip.bloodmagic.sigil.divination.currentBonus=Current Bonus: +%,d%% -tooltip.bloodmagic.sigil.water.desc=&oInfinite water, anyone? -tooltip.bloodmagic.sigil.lava.desc=&oHOT! DO NOT EAT -tooltip.bloodmagic.sigil.void.desc=&oBetter than a Swiffer®! -tooltip.bloodmagic.sigil.greenGrove.desc=&oEnvironmentally friendly -tooltip.bloodmagic.sigil.magnetism.desc=&oI have a very magnetic personality -tooltip.bloodmagic.sigil.suppression.desc=&oBetter than telekinesis... -tooltip.bloodmagic.sigil.haste.desc=&o42 doses of caffeine later... -tooltip.bloodmagic.sigil.fastMiner.desc=&oKeep mining, and mining... -tooltip.bloodmagic.sigil.elementalAffinity.desc=&oFalling fire fishes! -tooltip.bloodmagic.sigil.seer.desc=&oWhen seeing all is not enough -tooltip.bloodmagic.sigil.seer.currentAltarProgress=Current Progress: %,d LP/ %s LP -tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent=Current Progress: %s -tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate=Consumption Rate: %,d LP -tooltip.bloodmagic.sigil.seer.currentAltarTier=Current Tier: %d -tooltip.bloodmagic.sigil.seer.currentEssence=Current Essence: %,d LP -tooltip.bloodmagic.sigil.seer.currentAltarCapacity=Current Capacity: %,d LP -tooltip.bloodmagic.sigil.seer.currentCharge=Current Charge: %,d -tooltip.bloodmagic.sigil.seer.currentTranquility=Current Tranquility: %,d -tooltip.bloodmagic.sigil.seer.currentBonus=Current Bonus: +%,d%% -tooltip.bloodmagic.sigil.phantomBridge.desc=&oWalking on thin air... -tooltip.bloodmagic.sigil.whirlwind.desc=&oBest not to wear a skirt -tooltip.bloodmagic.sigil.enderSeverance.desc=&oPutting Endermen in Dire situations! - -tooltip.bloodmagic.sigil.teleposition.desc=I am very close to being moved by this. -tooltip.bloodmagic.sigil.transposition.desc=Feel the power of the Force, my young apprentice. - -tooltip.bloodmagic.bound.sword.desc=&oCulling the weak -tooltip.bloodmagic.bound.pickaxe.desc=&oDestroying stone without mercy -tooltip.bloodmagic.bound.axe.desc=&oDemonic deforestation -tooltip.bloodmagic.bound.shovel.desc=&oScrubs floors clean of dirt - -tooltip.bloodmagic.sacrificialDagger.desc=Just a prick of the finger will suffice... -tooltip.bloodmagic.slate.desc=Infused stone inside of a Blood Altar -tooltip.bloodmagic.inscriber.desc=The writing is on the wall... - -tooltip.bloodmagic.pack.selfSacrifice.desc=這背包戴起來好痛… -tooltip.bloodmagic.pack.sacrifice.desc=Description -tooltip.bloodmagic.pack.stored=Stored: %,d LP - -tooltip.bloodmagic.activationCrystal.weak=居動低階儀式 -tooltip.bloodmagic.activationCrystal.awakened=驅動更強大的儀式 -tooltip.bloodmagic.activationCrystal.creative=Creative Only - Activates any ritual - -tooltip.bloodmagic.diviner.currentRitual=Current Ritual: -tooltip.bloodmagic.diviner.blankRune=Blank Runes: %d -tooltip.bloodmagic.diviner.waterRune=Water Runes: %d -tooltip.bloodmagic.diviner.airRune=Air Runes: %d -tooltip.bloodmagic.diviner.fireRune=Fire Runes: %d -tooltip.bloodmagic.diviner.earthRune=Earth Runes: %d -tooltip.bloodmagic.diviner.duskRune=Dusk Runes: %d -tooltip.bloodmagic.diviner.dawnRune=Dawn Runes: %d -tooltip.bloodmagic.diviner.totalRune=Total Runes: %d -tooltip.bloodmagic.diviner.extraInfo=按shift顯示額外資訊 -tooltip.bloodmagic.diviner.currentDirection=Current Direction: %s - -tooltip.bloodmagic.arcaneAshes=灑一個圈以用於煉金術 - -tooltip.bloodmagic.telepositionFocus.coords=Current coordinates: (%,d, %,d, %,d) -tooltip.bloodmagic.telepositionFocus.dimension=Dimension ID: %d -tooltip.bloodmagic.telepositionFocus.weak=Used to move blocks in the world -tooltip.bloodmagic.telepositionFocus.enhanced=Used to move blocks in the world -tooltip.bloodmagic.telepositionFocus.reinforced=Used to move blocks in the world -tooltip.bloodmagic.telepositionFocus.demonic=Used to move blocks in the world - -tooltip.bloodmagic.livingArmour.upgrade.speed=Quick Feet -tooltip.bloodmagic.livingArmour.upgrade.digging=Dwarven Might -tooltip.bloodmagic.livingArmour.upgrade.poisonResist=Poison Resistance -tooltip.bloodmagic.livingArmour.upgrade.selfSacrifice=Tough Palms -tooltip.bloodmagic.livingArmour.upgrade.knockback=Body Builder -tooltip.bloodmagic.livingArmour.upgrade.physicalProtect=Tough Skin -tooltip.bloodmagic.livingArmour.upgrade.health=Healthy -tooltip.bloodmagic.livingArmour.upgrade.meleeDamage=Fierce Strike -tooltip.bloodmagic.livingArmour.upgrade.arrowShot=Trick Shot -tooltip.bloodmagic.livingArmour.upgrade.stepAssist=Step Assist -tooltip.bloodmagic.livingArmour.upgrade.grimReaper=Grim Reaper's Sprint -tooltip.bloodmagic.livingArmour.upgrade.solarPowered=Solar Powered -tooltip.bloodmagic.livingArmour.upgrade.thaumRunicShielding=Runic Shielding -tooltip.bloodmagic.livingArmour.upgrade.revealing=Revealing -tooltip.bloodmagic.livingArmour.upgrade.level=%s (Level %d) -tooltip.bloodmagic.livingArmour.upgrade.points=&6Upgrade points: %s / %s - -tooltip.bloodmagic.will=Will Quality: %1$,.2f -tooltip.bloodmagic.sentientSword.desc=Uses demon will to unleash its full potential. -tooltip.bloodmagic.soulGem.petty=A gem used to contain a little will -tooltip.bloodmagic.soulGem.lesser=A gem used to contain some will -tooltip.bloodmagic.soulGem.common=A gem used to contain more will -tooltip.bloodmagic.soulGem.greater=A gem used to contain a greater amount of will -tooltip.bloodmagic.soulGem.grand=A gem used to contain a large amount of will -tooltip.bloodmagic.soulSnare.desc=Throw at a monster and then kill them to obtain their demonic will - -tooltip.bloodmagic.itemFilter.exact=Will make sure the items match precisely -tooltip.bloodmagic.itemFilter.ignoreNBT=Ignores the NBT of the filter -tooltip.bloodmagic.itemFilter.modItems=Matches all items from the same mod -tooltip.bloodmagic.itemFilter.oreDict=Used to filter through the Ore Dictionary - -tooltip.bloodmagic.fluid.type=Fluid Contained -tooltip.bloodmagic.fluid.amount=Amount -tooltip.bloodmagic.fluid.capacity=Capacity - -# 儀式 -ritual.bloodmagic.testRitual=Test Ritual -ritual.bloodmagic.waterRitual=Ritual of the Full Spring -ritual.bloodmagic.lavaRitual=Serenade of the Nether -ritual.bloodmagic.greenGroveRitual=Ritual of the Green Grove -ritual.bloodmagic.jumpRitual=Ritual of the High Jump -ritual.bloodmagic.wellOfSufferingRitual=Well of Suffering -ritual.bloodmagic.featheredKnifeRitual=Ritual of the Feathered Knife -ritual.bloodmagic.regenerationRitual=Ritual of Regeneration -ritual.bloodmagic.harvestRitual=Reap of the Harvest Moon -ritual.bloodmagic.magneticRitual=Ritual of Magnetism -ritual.bloodmagic.crushingRitual=Ritual of the Crusher -ritual.bloodmagic.fullStomachRitual=Ritual of the Satiated Stomach -ritual.bloodmagic.interdictionRitual=Ritual of Interdiction -ritual.bloodmagic.containmentRitual=Ritual of Containment -ritual.bloodmagic.speedRitual=Ritual of Speed -ritual.bloodmagic.suppressionRitual=Ritual of Suppression -ritual.bloodmagic.expulsionRitual=Aura of Expulsion -ritual.bloodmagic.zephyrRitual=Call of the Zephyr -ritual.bloodmagic.upgradeRemoveRitual=Sound of the Cleansing Soul -ritual.bloodmagic.armourEvolveRitual=Ritual of Living Evolution - -ritual.bloodmagic.cobblestoneRitual=Le Vulcanos Frigius -ritual.bloodmagic.placerRitual=The Filler -ritual.bloodmagic.fellingRitual=The Timberman -ritual.bloodmagic.pumpRitual=Hymn of Siphoning -ritual.bloodmagic.altarBuilderRitual=The Assembly of the High Altar -ritual.bloodmagic.portalRitual=The Gate of the Fold - -# Chat -chat.bloodmagic.altarMaker.setTier=Set Tier to: %d -chat.bloodmagic.altarMaker.building=Building a Tier %d Altar -chat.bloodmagic.altarMaker.destroy=Destroyed a Tier %d Altar -chat.bloodmagic.altarMaker.creativeOnly=This is a creative only item. - -chat.bloodmagic.damageSource=%s的靈魂變得過於虛弱 - -chat.bloodmagic.ritual.weak=你感到一股力量,但是過於微弱,不足以驅動儀式。 -chat.bloodmagic.ritual.prevent=你受到儀式劇烈的抗拒! -chat.bloodmagic.ritual.activate=能量快速的在儀式中流竄! -chat.bloodmagic.ritual.notValid=你感覺這些符文的配置似乎不大正確… - -chat.bloodmagic.livingArmour.upgrade.poisonRemove=你的狀態已好轉! -chat.bloodmagic.livingArmour.upgrade.grimReaper=&6一股陰暗的力量將你從死亡邊緣拉回! -chat.bloodmagic.livingArmour.newUpgrade=&4取得升級! - -# JustEnoughItems -jei.bloodmagic.recipe.altar=血祭壇 -jei.bloodmagic.recipe.binding=Alchemy Array (Binding) -jei.bloodmagic.recipe.alchemyArrayCrafting=煉金矩陣 -jei.bloodmagic.recipe.soulForge=獄炎融爐 -jei.bloodmagic.recipe.requiredLP=LP: %,d -jei.bloodmagic.recipe.requiredTier=Tier: %d -jei.bloodmagic.recipe.consumptionRate=Consumption: %,d LP/t -jei.bloodmagic.recipe.drainRate=Drain: %,d LP/t -jei.bloodmagic.recipe.minimumSouls=Minimum: %1$,.2f Will -jei.bloodmagic.recipe.soulsDrained=Drained: %1$,.2f Will - -jei.bloodmagic.desc.altarBuilder=A creative-only item for use in debugging and testing.\n\nShift + Right click to change the tier to build. Right click an Altar to initiate the build.\n\nBreak an Altar while holding to dismantle it. -jei.bloodmagic.desc.demonicWill=惡魔憑依在生物身上而產生的印記。\n\n透過持感知武器殺死敵人獲得。或以簡易套索擲向敵人,使其顯現出白光後殺死以取得。 - -# WAILA -waila.bloodmagic.sneak=&o潛行展開詳細資訊 -waila.bloodmagic.array.reagent=Reagent: %s -waila.bloodmagic.array.catalyst=Catalyst: %s -option.bloodmagic.bypassSneak=Bypass Sneak -option.bloodmagic.bloodAltar=血祭壇 -option.bloodmagic.ritualController=儀式石 -option.bloodmagic.teleposer=轉送器 -option.bloodmagic.array=煉金矩陣 - -# Thaumcraft -tc.research_category.BLOODMAGIC=血儀術 - -# Thaumcraft Research -bloodmagic.research_name.BLOODMAGIC=血魔法 -bloodmagic.research_text.BLOODMAGIC=血儀術 -bloodmagic.research_page.BLOODMAGIC.1=血魔法的領域一直令人感到孤僻, 而血術師的"獨門"祕法更是出名的悖離人群,常使人感到瘋狂。 然而自我犧牲與生命精華的力量甚至能擁有平凡血術師所難以估計的強大力量, 顯然秘術使可以把它作為某些用途! diff --git a/src/main/resources/assets/bloodmagic/loot_tables/bm_loot_table.json b/src/main/resources/assets/bloodmagic/loot_tables/bm_loot_table.json deleted file mode 100644 index ef383f71..00000000 --- a/src/main/resources/assets/bloodmagic/loot_tables/bm_loot_table.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "pools": [ - { - "name": "Testing", - "rolls": 1, - "entries": [ - { - "type": "item", - "name": "minecraft:stone", - "weight": 3, - "functions": [ - { - "function": "set_data", - "data": 0 - }, - { - "function": "set_count", - "count": 1 - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/armor/sacrificearmour_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sacrificearmour_layer_1.png deleted file mode 100644 index db260f2fde1a3707587c42f675de9e11910c57a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?{6P)@^zd?Z6SAB7#n_KktRi>Uu>Q_SKsKK?gd00Sw{6HDXU0 z05HE|6KvG~%fFPm6Ym9_4YI4bQh%4%fL^a6pcwY^D>f7A21|JGvq8`SLwL%@Itw0x zjXD#nIRHkT-`9wmH()&0F6L%!LSdbMX=9H+R@Z=DMH5@UN7wTWf3qH7;9eJjR-N2} zUDjSb_lR4Gwu;VoGCoyZ1K!?0EA}5$$t~D4ceD`i9wSTPCnI_lO&F+LA3nv_^&eg? z@?zS*xvo)DS;-dwIC^Y}BbT34HA*Wkg4XaP5z`=JWg$JYDe%krhr%l5pXpV^z)%;> z9W9LXSpbB>I?vKGT(}W|X?QiYj9*h($}i&q+KwL}(5hEG#VR%+6xNI4frx2f4Nn4a zXQ-S0E6)YM-3O-`OJ*QFvuW1ctWCr;$Sv4_AD^c3HD6#I@M$VQX|7Igf^M;LjmTJ8 zq6w4iyU*oOQkr*jb3E2APF!pwIk;Sw0)4ledH-~J+Z?XBtMHFi+l>-;>`dx)*`BGM zCJ_qjq~9FE&{V#yIjl7ZE*<{#M^(IL-vX{MU|S)no+c4Zm|Tl50x)<}XDpeiy7;Q! z15!Or0@zlF8#U2{3BX97^~-44)vv*=HDss6*W|5lJk~CDa?kIyf)uIk&&Qhp0000< KMNUMnLSTYwpFCOs diff --git a/src/main/resources/assets/bloodmagic/models/armor/selfsacrificearmour_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/selfsacrificearmour_layer_1.png deleted file mode 100644 index 98048cbf1b7b8290cd5faad4e21ba8267f4cd432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmV+{1=IS8P)B$e1V;b>1i48> zK~!ko<(Xe>Q*{)_KfmqvQuc>#b2mdaRx#Bv#fg$MqAVtK382#v!@?eX;6Y=3ATfqS z7PA<#7!2tXCNPsd?7@dEA%+Ibc%X`D2uULf(*Vl~+JOTt`*WG2qwVLk(J^n;_v? zK3|_G<=>Q0FFHyDXCO>_pOt7BGK42lfvO6jZ|-_p|`^W zfYoLp;MemXfPQB^0lyBA0z~8PIzIdG8~|UQ+>YDjo8@D7X!#Go!+>b(bP&8cil^to ztiWGxzX11pp2o zX?(!IC*lm;H<$n`;McJ`G{&y$Kp915mC5NaQJ~1I0>tm-eu?E|;C^R48+X>>I(R3g z1UkN`=GvKogx_Niz(N_=AgaDAtI^CVe}^K3gk<;nTMs3!#}vZr@`;Ay@ zyWfJ_2V;j5M66Zq~%Mc$V{M(wvrk(-Jt7@pDziW!bYvIC$XA4_L= zN~gBilK&;Jpx{kFWQO3~vG{(OPl05G_o(VET@^k|5h9`zz)1V^>I@SUQpOCm5zu5| z%C$}5LTZaGoWDC3d!~6xWHA7cX_8oE;;*3+B+R&oigFoC$Z-*+Tq;sS5~Agw3MPXx@9~dJaP0LCPkJ@1r3#h-j)>q;MGw| zDpmG2pOW3)R)SYYY2Wi52aay0dP5D@&J1As8J@D1@a#*a0GZkIG-6q2Kv&ZmnJjkN zIvt4s_cotO%;b!K(?HdH3WuHAU!*iY<5uZF)AT`v$SvELd$ZEnwUO2;RPz z5=^FcPBS1$0m@`0Xm5E2pL-}4V0@pr7t0u7cWC?>2ovz@gjN*F^=nH6z))aPs*(F* zDca&iYlQlp^;B6^e4bzejMZB{;M^e>>s~E2f)~b{HMD+L(;7y{!t%APRb06+E�c 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 M07*qoM6N<$f~-fc00000 diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_2.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_destructive_layer_2.png deleted file mode 100644 index 4228a2ef00971a3823a13c8150562dcf6619e77d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2071 zcmV+y2A9M5G z%jhA=-42&4W=Jj_}{DR+FyS^wuen3_NF!d$I{!vTWb(7AJ&KcJ5O#C>T z|EB{}A45@-h$Rwe42Ka*B=GPfkAN2>$ZsCQGm|m==DXhm%kwz!``^N{EC4`bI80t7 zcYb$ACuu(wdAqs_a04*9sM8nO;w3cE-BF^qWuBHMd=t2h2@>=y`tn$Usq9KK_{3 zb55LmlQ0z>zd~4YGg!`9F6IHn<_DzaR%ogMOV?l-23Xf*T}^^!7|<*SZeAUlsz9G# zh-Mf(eZ+eNc5L2M6tKqb9?$^>mTCLTiq7VuwCyO%u{rm1EV@F+{v2Dv%EbnOY zE*2K@*7qoY6@xIfG+MrJD`I0Z*=TNYK+@GD&Rw`v5kq&a`#LPc04GW?^)w=<&s-P7 zovuy&?TvTP)!hvM7>h=6&)Tn+RIo<@0MLAMFJ>;E2Sw9h#bBNaG*y9-PN8GvDokA* zsW?s}lL5^zF!gjhTUx?0Z^u|k_VdQ5F5J$R;Yz(=vch;7EE0_ z4_!^dG7RWy608`67+!?&v+si81>2?j7MNSpx7ucCt^NGP-lZPpSf&9k7=o#%!HE(c ze{7FOX{;DTfaQ_RSg=f^?2UZVlBa;W#cjAYIRTnsFn%rqh8OY_kh+$D)VLVwJGO80 zG(7v_5pq5?Rl%|e8Ebyz4PB?6+)LU@#pzrHGH7}=r8(^JnCZ(G@}i7o7{p^76--?m zDHw&^Ogp!}g^;(J+y+ar?+*ZAOSHh|OO+Wqg(hpkt=$T6Of)toFMv|wo>8p$ZE$%< z6ObGKD+R#0qO z^X1$OKNA2B9vv+BazFXO4}Ir6)Bge@!$au1?JI~34;8&g-RNvH4}j6}nUcv#v9$Bh z;eN7_+Q*9quu_5P)T7VHg%3 z+Vv~S{qj4vKMF-nA~HOL$nX#VATm6JZCkdId;7L6TXE=cKk0MAn3MavlNh(6+P+s{n0otR0RLa1rRUH@^nflZLxZ%mr z)yaiW#BnqX-9o6|W?zyx0)k;$NUA!5B8zZ?09lUV^H6G9TOE_+!vtsqMHa0sb{xOJuV zSWZ_2b-JRg9- zGq5sQ=(-Mpw>@LWgItzjyb5v8x9=hD{$*8-GM*@q8}ps>?|49NF-!}`Uw)Oa3;_49 zzY~9b{#i)%JdV90!#uMOn}7Z%@H~qLH+~H#PM!8uhciF7?e4A1s;dBpVE}|>B2C4c zooSktx4?#PZ^T`RIAXK2Xl!UeY<3n(QbVwgM|R{n%uJjI%ho{PDb$DRv7)ydD|)-p z*wBCt^IqYezhZV4tv4^j1^`APUj2JOCX+!bl>q>xQkCc5ZUx8_Z=t8X1>t%DH+9!z z=f3?2Ni^yt9u!6Au>Y11>vr47g{VsbcT^RC{{cI^st$dJT(bZG002ovPDHLkV1g(n B)x`h+ diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_1.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_1.png deleted file mode 100644 index 79a2b1db59f118b331dfedc06793fb1972817333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2392 zcmV-e38(gnP) z0B=qzN%jB$010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~k#HDJjHFNp%1K2<1sc zK~!ko)meLNQ`Z^)-8gpa_&VU2U>-@Z6B6-k>#(#82rFe1)qv1Ost{dUt>Uq1Qt4Wu zNn>MWRimyHsTA5W2x&D?%R_6TIE%CuF~U-^@ru<@N8%C1ahwE)7-zZHvEv)(?2qen zxV|`X0^^T-|J-xF@7#0G_dDO~oXa5vWzWtf01%TT==dxEKvW!rMymw?-0Ssmn8K7c znZa7U0b0EwfoIOO6LYSesK<`QpK<`iBndG|0su&nFr-NM0lvRQ2bAy6S?~nOu@xn}uWtY7^*0mxsTO$5`8TGpQhBB9kz7DOEgSsIIS_?G zX!QoxR`QKAtS}cWM1H}1@L5@Cqk&Ku#EhaP5c_%{3WM_acw5O=wj*NV+^J~$ri~ox z>dCh94RE{Nq_#iEfZ4uj<0D&Hx)cc`=xt|tK3RMEQ#Keac?b`M002gN9!ORgz3n&H zn2EO4bF0l706320)I0!a92msyfdK%(w(?~VKx|mf=l(Vq06?E@fq1VM znX_`BGn+7Np&iD#bHR<8(09HW05EgS3S<^cN2t3S#7Gbg3J~x0B2A}7i~5Pkx)zY`j}GN z$~PqJUMLj0?*;&hTW=6$zpAdD&@q&s49IZ-pm{#&;xGs9Z)?!_)(4!mXfcV!t?|s# zCGg*Jb2+vmV$Lsw*w+Io5@z**vQALe5)<)tC{w}L=~Xb9su}nxw)}`qRJVd5NH5m5v7F!bMk{{stFDqI!c{bcV_*;oKg2!K=r)Bq)0 za57+wW=o-l<`S0N8FKwC>2oo-a=@ED$ zWHejgas4M@AvVWyLP6ltwct1onlz0JN^Ari$6+)DICO5y{KXLb-7+B7S@>z$)A-^} zKdg_d6xL)Ipvf>ySoxtO1x{ELm{p{4X-xTK{Zu6QyJ51Kq@L;{XB`r7n5LGT3te4 zZQe$+1v=AoM1=t~IGr#Vc`S1*#b_)BS8E%Dkcjo=GrWEf!1FNDcD zmmR%zrs)ZCb?|;D3mA`-Ri7rqz!anDkzSA(cuT_K2JiR~>*_$W>pGe){~JD^7X`%& zAVi}$dZHS+x%p^tIuk%pR;=`U$<{NT{E;q2$GbPA)Zla?Dhy!u(o$&k2IQBn2E8Aw z{qpz&?=-hug3sqgiK7%Yn+-WOJ4zg-@cF!GZn=bmhYq0f{rA{=)b}3tC7W|RP@eg^0ViutqxQ?= zkRoA-eLYP1Gha8bpgMTR2Y;Ij7T$p4hd;$k({#M?`YTxVQU!WA9rk^E06KjJg5GxQ zd*|H*z-!N*LnIP`b&-Sd_r3Ejg5LHqDdu6}D7thS6+c!SVCMRgfZK z1{8GxAsj|Pl5k@v%+guk&=5kBgh*rvvEi_M^%g%qQy<^|yWg{FHRx?;rMOz25`gBG zOX&1?FwbUV&n*?30RTr&R0BYQ3;=e#x)lKMkEU}BWts`DwR{I5B;wh!l`!WQ!ZLp` zo-JF6#-@vMq%V1r1xor}YvXxnbQu7EPB8@E)hqBef1BW1G^zu@KmTT&(*Vb+K zWm+vX8S+h)T0SlS>&n&wW$^-|L}Y=f)8oO8SGPh4i7**?HijzR>G5Do#b)^16Eqv9X~neOh9 zj}GEDfBXYGhm0pr2>?|_xy!}&Vyq~62FYYp@nU;1np-a6`ppgqA(1Hv040u6ISw2- z#4L#hItma4ObCf6d%6Ug359-wFV@ z>^vp^a?3B2uh#s%sQz;`8{hcVv2o?&R)VyWqb5iFGw5xHIlmA=Z#%2usoyH=@L#_2 z0#ju7n{PAzFW%b8Vn(OOgCiduWU?d2Pq0)+fuVCyfGAHLgC_e-bwuWr=XzRJ()^w5 z;&QCZlVm5xH}=Sp__IHKFlO;Yf3T>Zl)k8`d!#z0V)gQI0r($ePG*E|{ku>A0000< KMNUMnLSTaKt!#e) diff --git a/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_2.png b/src/main/resources/assets/bloodmagic/models/armor/sentientarmour_layer_2.png deleted file mode 100644 index 184ad5c66d58c5da43d74711454f217a9c7cdf0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1824 zcmV+*2jBRKP) z0B=qzN%jB$010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~k#C3>Dx%IYDh(UVTAI;*qaWXH zdK-+*r+zNDIh(0Hz*hQV+#csxIdl(mBA!WD{>D)gNu`yNO^p1YaP4 zGOHE7KmaeVUJV0hhP(3!_TKQ}gO^?bYcOEv#~(rv1OPyp)k-#^obRw#llEh-V zDF8hat2L3W^cIMkeVQ_?ok z0@48_)u=cwAAoh2ZIeN>dH{gQXqE{V4F>@L=O;M<00JM)dL-N)H{RdAO;ZcUT*vc1 zVp1RQ)32%8?Qv(-wm4P_rq+C_#8x#fA28H^P4>RKr8T2jZrLpNIqe;tL{pyLD@03D z4d!x|Gx>l_^L1uhC8FUV1U?EO76U7p%!fmu83r_~hknF5qTwL;k%ef6!R{9M5m>u) zNk+iR98S@DO}nHxX1>M3DG!2&d0o$V)@d%y}9@EC#*Nj5r^G>%_@%X}DS<)OSaJM~%Y) z0PuP|SXBQ+RtuI{007wTn~H&pXF<_4Sffd01<`O2vB)s&Gaf_V`7?RPX(SS$83u7a zl2e?QYFJBydk(jeF`~fIwyXdI`>&H1n$^SSy#SUgMm)x&V#+l1T{sIq9D)#wfe(kk z8ci@-C!+V%A7Bhz%1hUcYHoJjtdxf8Q}5HKPLWxT5RXA`vLMb!pf{SaWpk6v(paMj zI@W+>LVysD8@DylGe<0@!|LGNi77z3xWfZ@Ra%w-jbgod(eP`SRPvYM

AaB4_K0x53G7U+co|cAOCr)OJvro-@L^d}Ok84_( zbPUTCBOLI9F>o08`!CIncbsy=?Qs))+$m!&UO5jsxNy})Ogcdr0-7vL7P?PWBMmCIq3(v?@v;?fRmjlZ9pDzF+ zNf~RAf*_4DB6pB|OQC&bU!estgImwiE9yruY1X0%OR;>X5 z?Argis!zH>LZ&1XxKQ^EI!nc*q>|$+OC}z$e)C33y7_gh)*u)T!PVUbS9ccxz}4M_ z#)g%Iw>LJd#DPQ2q)!ZEV(u?ZVx$)3_M|iy4GzJ;nb7JF;EdmoA{_%t&*6ukzt5OB ziSuO_B9o@iOp0DwJgd@dO+1^@I4$r|7)#3$2@RpWqm$A~PNbHk6e^c~v0MoZ7xd1N zDzR0mEI`QvvM@CYx3OgMF}c)RU*8~if+`D0B!Hr#w08o^Z18piaLbb+Wj3hH)bnMgu@L}ZpI%3N0v`?$R>xVa2>SX|*;!BTfXvDLABxHcl-g@Zww8+zXz%Exe1QPT z0GBUbhH~pfO)nhbqcE`gv>yMC0HBNlW4IHfq+uq)N0YA8CpA6r^2N(wVD(f!VXE3% z*rTSq1=*U6N`Bq;4R&tdp-ELoNKn4qyP#1}|>aT7{0!S29&>)!-zvcO=rfTkeRey+c+YVC!!fd2rl$)Q*OkmjBM O00002cA``cbgH7YuIF9Z3we#)| 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/altar.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_altar.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/models/altar.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_altar.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/accelerationrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_acceleration.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/accelerationrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_acceleration.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/bettercapacityrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_augmented_capacity.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/bettercapacityrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_augmented_capacity.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/blankrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_blank.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/blankrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_blank.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/altarcapacityrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_capacity.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/altarcapacityrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_capacity.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/chargingrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_charging.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/chargingrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_charging.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/dislocationrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_displacement.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/dislocationrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_displacement.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/efficiencyrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_efficiency.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/efficiencyrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_efficiency.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/orbcapacityrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_orb.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/orbcapacityrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_orb.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/runeofsacrifice.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_sacrifice.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/runeofsacrifice.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_sacrifice.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/runeofselfsacrifice.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_self_sacrifice.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/runeofselfsacrifice.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_self_sacrifice.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/speedrune.png b/src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_speed.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/speedrune.png rename to src/main/resources/assets/bloodmagic/textures/blocks/blood_rune/blood_rune_speed.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/bloodsocket.png b/src/main/resources/assets/bloodmagic/textures/blocks/bloodsocket.png deleted file mode 100644 index fe7219a82bec9f0cc749d0b0d94a8ea2b8fe9138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1609 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 diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/empty.png b/src/main/resources/assets/bloodmagic/textures/blocks/empty.png deleted file mode 100644 index 5ac033976cede1000103e6cca70f4a6618f477e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 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 diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/imperfectritualstone.png b/src/main/resources/assets/bloodmagic/textures/blocks/imperfectritualstone.png deleted file mode 100644 index 528cc3758329d63d035141f276a4ee853c5c0793..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1598 zcmbVMX;2eq7>*pHQbD9tMXlWiN8^-acXN>JLI9Hu5+q200RE`sX7>xMkZh7&On~Tk zR=}tTR;$*L>L8-XRIK*UqUemMRrn!}#cI`|Q|eKys8q3HHypM<9Dj6YcE9U=p6C7E zV=FS!=ZA(&3lWJ#p~e&ST6s6=0-|{|YXOkaM&^S| zK++}73m{%33Uo5rd3>HJ4X0R}jP%>cJT`}b7K!2$Jr0s81UzH``HWpFet6=P7-DFx zI9FvtOb$ILU{Xq5AgeSzn<_1&Fj}0L0L6Q7fxrfM67txJ>>TdViidb{Vea3C#n6xm zU#JxiJC$e3fb^^jKq{F^N+EI-Qe!eyrNmG)29hJF0!9&7j!97zSE_L|78-fPf|`rA z;+aJ9h?cO@iVJw&fy1!d?UuO}GS-z3qZo$4h#Z#7rGkZ&E3xyWM{4JyM;QpfQ7*>8 zGprr*Gm;jznAeI0PlvBybC^u8iS67-poEaY9?}7$G6c5S{P!BN=J-tTuN!Z)=CVs1 z0L}y)TkN8Qd|0DL!9wibF61{9yulZ`7$GTS5y4W$HelzCgjOt^$Y_SfUlZ?K`8aH3b`^F zOCH4qW zL&Fy)fQwlM=wugbgN8zkGjEWWE67+{Nl{XoR4b%ptWqh}!~#UB1Qrd6k_f3$W8x7! z{eMFT3r@lQI{8oCjBW|V=%2ps0%7sGkAPih9+%K17i&u|ibMgFk(ih5xgJ^FweSWK zes1|}XGDL(%I1?$$nu8D&MD7c9Xhx<#cXJ}t_wb~Xc?(?KX~^0tcmUC`!9J1FRy2t z*v4byum|N_SirbRx|{p;Q}qudbvM5|>S%8~GN-=2`_7V@#wB)Qf6S%+Denpk z+gnv4_KlxY*SNjoLdOU0OHpxqI$Cc1QkfLQ3_R*-FUp}4DQ@btZn_XA!Y)tBvv{b`J zs(fjk%Jo%5T1C;cuHzHXXY~eEK)}9)@bPDAt0O*)*_9JC=Kd4?bYgK%;U85?f2EP~ zGUv|vDlBUAI@qU}R@gAz#{Vp_O+c>?w6tj_TDM#)Hg8`M4*8JQoZ~??65qFN@wYy@ z7-A(>?#Z&Ax~WT~-#^mHOsNddyByXtv%5I!YO(Funr2_?T4Z(K)SCSb=0o03&4(-Z zo{mh6f4R#v=ckA}^E+4LW7mvLJucbs^8ThWZ!WzvDPi}77pAP|U-U48&0S&1Ycf-H zu@g_W>`)$SN2X;fhxS-1EURQGxd0oN`fgn`C!-8?&wLhsDZ! zW140elM-77y`k-^uJQeM6Y|hH;_l?x!8;B_`{F3Y!JYl5M1dlYE&pi6jlXLBe{`cE KooLc6S^W=*N?cC> diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/lifeessenceflowing.png b/src/main/resources/assets/bloodmagic/textures/blocks/life_essence_flowing.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/lifeessenceflowing.png rename to src/main/resources/assets/bloodmagic/textures/blocks/life_essence_flowing.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/lifeessenceflowing.png.mcmeta b/src/main/resources/assets/bloodmagic/textures/blocks/life_essence_flowing.png.mcmeta similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/lifeessenceflowing.png.mcmeta rename to src/main/resources/assets/bloodmagic/textures/blocks/life_essence_flowing.png.mcmeta diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/lifeessencestill.png b/src/main/resources/assets/bloodmagic/textures/blocks/life_essence_still.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/lifeessencestill.png rename to src/main/resources/assets/bloodmagic/textures/blocks/life_essence_still.png diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/lifeessencestill.png.mcmeta b/src/main/resources/assets/bloodmagic/textures/blocks/life_essence_still.png.mcmeta similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/blocks/lifeessencestill.png.mcmeta rename to src/main/resources/assets/bloodmagic/textures/blocks/life_essence_still.png.mcmeta diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/lightritualstone.png b/src/main/resources/assets/bloodmagic/textures/blocks/lightritualstone.png deleted file mode 100644 index b8415523a172a4fb6d96fe7b5ee1eeb6b360a8c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 878 zcmV-!1CjiRP)DCLyW!lzRXG03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00PoUL_t(I%SDsTZW~n; z$A9^QdD5R)bagdjmkNU$JM9so9F!4~mEyaXE_fCW4OAc4e^sBIu^oV0E- z^?cp=xN|RysbF;$M>^;KDbCK$EPxPTj71265MV7BV-P~n@B1mG00hPu09=6ac+B?p zHd<@SvOr47Y&J)0jSzyOD5xq$+qOt4iK3V!NyzgYX|3g8x#aqKMV@C&rxQ+2J|YZ5 zc6KJ@dCt+%5wqEhs;ZFEVZDCId_G4?i7TaKeS1qB$3#)g)zvkt)eTiu;dvg$81g(r zsRCml%QB|ZF-_AT#2X4ql`IxBo2?+2u5iZKQ$gdmQ$ zsGADuNTPYnp1b1PNAL3FF&sZQ;4rB8@}bAGs~3P^Fc{!@4nhbd^t^6w6Rfoi+=w5Z z`XqOkysZL;=Zd$o3BC(^6H8s!)OE#hIO=T$h~t>)bQj%r%=beM#se;XPdWbdh|j{NiuQ+A!Ha;g8Ed`Ate5ef1vq_Z?)JB1Er&@B4jH zPft&66pa`ThoouB&UhP7XmVxv-wmwB*{v&)+`qHsOy>_2>$Ovp67I(!Sh^pcX!cRqm)AH4k-nm z=P??EL{UstDe77wrR;4KLSQX`#c>=Q$Hf>!+qSr_gX_A)afG!NrAn-|EEaooU55~& zM^Kg}j^ofY8F^j+7HdK4j;`z8eCzA(IFdBYa2yH1zjo)l&=LVL&cN?Rt& zChGj2__1uFWJhyde&Z5X^uTPUmB$4K9W1cuhhu*1^#P9A(M~XPi5wh}y<*Z%sl01-P(yR?Y zW+zz)@&HNuOWHu1L=sWLSo4K^%MyZOoeDB!qwqO75iOCVrTaLNDgpvz1BHxB58rP( z2SW_4hgWJWsD(2C2a{dKgXLv8R;sLs!f7~t0hHz=L~a%6Jv`=@5a*$7 z1ct^;gd#mW9#p<%DP&-I0BIB&IfW`QNQ)~ljT*-=8Kgup6@sCN5|?8bq1F;u3N-P+ zA{$TJi9Dlef=gWKVTT}a1cG?IUWHesVEIA>!*Luzm55R)7cJy&ze^x}a+fr9x^gr#7Z8bh@v zR1?OUU2cJNQ6S9Cgt*7C+81I80}n`n<*h7R9Ik?;4pv~@4wi!q1}JeQaJvqW&YmAkGHq}{5?3MRIo&leK z@>5#+a82rA?cu^WCVN1*JjAY=JsJ3$U#Wf=)G3HE&xJQ*TToMHG$&0TIh(s$#(#co zw|CjW!R1j`N}J+qjvvpS^M1_zY5UYWztfjPj>VPxJ5Sfig1VdcpT5)@@!k|OQzkuf z+8^{QZrm|Uop-OcYvk>>HoG3|=_t^S#5V4N{fAR`?GJRPnRj(p*2iq#YQ4Dm($M_G z^M+sxw_*BK&KT9y{)V)?t1S@sh3tx~*S_xV;P9D}*8&aj?9tI_WnLNnA@>z))CJvRQBzZ=7?86IrX^gOmBIoI{CM&xAg~0b}aH7Fv++> n?ejh`Cp~!=y|HfXr0J4t*`<|zFK70Je#Yjk9AnMGf(`!wbp=8z diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/masterritualstone_inverted.png b/src/main/resources/assets/bloodmagic/textures/blocks/masterritualstone_inverted.png deleted file mode 100644 index 9ba93d8b8bbf23394f1c72ef43134b7804402b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 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 S{e%62b!Xeg;EzAox9z|4gMFz0 diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/phantomblock.png b/src/main/resources/assets/bloodmagic/textures/blocks/phantomblock.png deleted file mode 100644 index 81c4f64c2564ee33f1a5d22e055e18652593af85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1700 zcmbVNX;2eq7*3%^q)@4)6oKlpI%+Y=W;Y4RrUVK}fFKFsDo53Jv)Pphn+@4T60RAY zq9S%=iWh3BcL4=kwTy#x3bj&cnab%{6{p~c7fPv6MQ!N@!S;vakM7LwcRkPZ9^d=U zmKhB(-kt%TJRZ+m7pqC)MjzMf!RNm7A537}FqhS)v&l5c=3{n(7ip$V1fZj^RYVej znVq?9L>Q0fo@+@-XVdlZN}Q%dmP$3K}rE(=43QRp9XU%RV zl}VcDDO=o11!l3VO$kBy`T3%JiHNqZf?yOyAu$3Wh>$}F8K;%S96~FzU|K;#Fu2`f zV=c55a4BLYI*(O>oTtx1plo{mb73npl_)M{kOQ+put*G1lq;@DG{Ytl|GM!)G?U`A z5l|Ar(0O*8yAN`~G?~lY%MH1JoHxn@yM?%54MO0-d-T391S5d?;{QWTY{HCnYys)&pV zm8%ugT%DC+F)L0?+qQ7Fr?~2ua+PX3fw8nbg{E_+tH78=vow=M+W@s1SdwP3n(2Jz zUDpjg3s^(gEo%sKw4J7a$rLLsFEEdYWnzj4}m{J$ZdGJx}+y{Z$;;NR|85-F@BsQ&*SU=1}b7H&#?TvO6nSl2T#OU$d#Ek8As`ugOLL#H)p8lpa4_YY)V Bhcf^G diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/ritualstone.png b/src/main/resources/assets/bloodmagic/textures/blocks/ritualstone.png deleted file mode 100644 index 1001bb27463956baead83f2e067d2348b998d009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1502 zcmbVMeQeZZ94;He1SS(PIRQiIz-&mb?e%VJ%MNn%?zWq|ZHyT^C(Da5W(nPZ;T(w)_!xE4UpWBI;U#x;CFgAjt03Re#o}{x; z0oVablehy726!$=QVuGc3?z6SgeOTCi+fowPC2p(!eggRj0^X8y(H-+JfuB=^~t)y z$vjACi>CG%*7Hy-!)kyt6s=TIsuNvM98wHL4=F0lvT(+7Q5KY1Ju_aRdjY$FCawm8 zS5qW-G{ubg0Qn#t$O3jU8|8Rg5Vbq(9LmvV%>yKnMFYyl2LM3E@WTI19cDU(#rxzx zeUo@)He-Bye+taQ{W$`%IXs#Gu8NjLZvze|4M_VCT=*UapVj|45y?we6Ljm*hW>Ouifs!Pb?|i4KJC$!IOl^SGz2h1^?a3N$jIWDc5a21;M_pui- zDt#XJXyKe>`_?7>)1FN0smmC@PRYC=AHE)YGlgpUsCyiFr7U-;V6Ow~XU>N%mlyrM zDLG}{bI0$*qV(HE2SaU*Llw6!_D+oM1bc4cS%;{m*}r7&|LtbqN;AX_Ke5kr3{)R$ zovFXWsvDQ9N6KGquf8zMzR=&Zw!&3pnfADLzO&8VedGAJRVg0WpHal+__xz5K0CN* z@fy}Ld<|~P&G!zsX1E&m_E6E0$k2{cgA1SCaCb5eb+wc~G0T(mVf>Hl^Ax%dELqj? E587xe-v9sr diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/sentientmimic.png b/src/main/resources/assets/bloodmagic/textures/blocks/sentientmimic.png deleted file mode 100644 index b2393417672214f81a5c19aa6e78388532ea6120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 901 zcmV;01A6?4P)N2bZe?^J zG%heMHD!e|WdHyJ14%?dR5(u+liP0FMifQ$4~?xjLHp7lX>7@oco)UXaCn=cL^VL( zZ3m8HTeg(+2Z9!@3#UNSe<;u*27>-ouzLJJfEeJoLm_Ggx&MTfZs?bWc`zdij?r;MfI2T12$3mZG{~{$eT$ynUJ?$7qc&)ZYuh?aehe=Q$sLyOT!uT%9erxqZ#8zzpIA zm91DdMp*1I(7|(g8B+R>EYr*|NFZQHP=AB&Mrd>RuQGk2d;4dWolzxMpIb z7taaYlsI?s)tp3o;*Nvw&G4LvI1n36i&@v?j|!4la?n_&;;mj+G)*PTHKCQgcqt(& z+Lh#ACb}Mr#VJ-|?~TT+MOo@TXHd$f{SbxptAZ$#dmBsTN;6%fmB5l8OW{zta_?m( zg)5BhI2=t-k4el%$E49WB(k1L)-;_CNrPvy-uuL|rRCv>M22MYJ(D{t_kcvUPzn6( b#f1L>y44PyWMxgZ00000NkvXXu0mjfo7Je$ diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/shardcluster.png b/src/main/resources/assets/bloodmagic/textures/blocks/shardcluster.png deleted file mode 100644 index 6a1cfa3e79015228c3fce6d4651e3a6006f3a44e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmV->1BCpEP)rWIBoy{010qNS#tmY3ljhU3ljkVnw%H_000McNliru-wF-^4LbL;rT_o{03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00Q4hL_t(I%LT!URvSeC zfZ=~tPEQtqY`5EV4%?!4XZTsoff<9rCdIfRIJYRy}ZC%y6Vl(pK!YPfYDsEb=wB5op)K zG=^NKTo-o?lwxh}Y0!vXzt5gHtN*4m76pP^am4_SVgHat`I&vr=(P~n8${y? z&Vn;s8Q@wjSA1Zn7PO+~cyx?SMr#_j#fB_N(MC|IEpFdo;Ej-%T=4VaCw%2oW&%I- zSyeG-!IWkC#OdIIus&j~KBAk34ga*U(#3w zIGRIwz*5IF6bM}w41;~{(i<#S5{f>#(g+hV%jazD9ibSbYMb-uD<R-*MtiSeA2^IwrD1HtI9l2#yC6y1eBvf8^Zzjz5zt{s;4Hc?yn% RJ9Pj6002ovPDHLkV1mB7i*^72 diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/shardclusterbrick.png b/src/main/resources/assets/bloodmagic/textures/blocks/shardclusterbrick.png deleted file mode 100644 index a2510fe0c89b794194c2bf835ce541c6f99d6d8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?YBP)rWIBoy{010qNS#tmY3ljhU3ljkVnw%H_000McNliru-wF-^4KNpGPaXgO03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00NCkL_t(2&jrEjZqrr( z0N`^!wv#w^>!b}!n_BlQ`@B83yzy3aB zZvw)fBZ%z`x0R(t-Y;^`ApP2*MxNAAZ6wlN)8Su$Pa29$)hvA*N&G=?3 zx503TVs?B%UM61T0MI}%02*7AAiqMdue0|JXjm5kuiwe^RrtDAH9;6xWM9`Ma9%u^ z-iiAW4Duq+$)^DE&Y2;I3#B+F_lE}xInkZ1RS}P8vTYihMrcs!1~GO*jykC(e3HuD z!oQHM>v$%>fC$=6-7;{DjR*($L8W8sVZ@aZgwlQU-!zz+UTLnGjkK#t{$smqce28> zFcwPhs{6<#1+9+BNc$K{o#AX}e-LFM1&qaHIbB^PZxMum_Co2*EO3vmKfYhRc>avO zVwB#t*YC#fI@fl+9(!Yw-V|`q0BwY6Ch{4l!;SvjOVj^x+ZNB^u$f|nqOMYC400000NkvXXu0mjf3UFdo diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/simpletranscircle.png b/src/main/resources/assets/bloodmagic/textures/blocks/simpletranscircle.png deleted file mode 100644 index d178e55befcf6815c66bf5d4b529f9d9e2517f91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4254 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 diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/solidclearmimic.png b/src/main/resources/assets/bloodmagic/textures/blocks/solidclearmimic.png deleted file mode 100644 index 8c571249a2eda18245fa42b9399dad3c53c973d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 zcmV;)12+7LP)N2bZe?^J zG%heMHD!e|WdHyJM@d9MR5(u^l1pzJRTzf7;UX%ET9u}vA`4ozaS~r<>=;+5QX{3Y z9eZNW*b`r7=FHWxlLAr}K(3QG32oIqLa0rsF|gtvAQcc*)xXpQdN{E7bac+*J@5Cv zPr`qzhLSH(Or}r@X_A=&YEmVazKQux74w2lF1J7`m*Q42Pdc5WFq|k@!r>;`lDr+LAm4 z(a>Ue*~S)|1Z{!uLRc6Uc?P6xzaeS`0La(|ocqnOXH z+Z@M_XiH~b$UOQNEizeEIw&aEGCTcqOGzqaOjG4&L_X|*ULZn{q>(bJsaa$Ax`9= z=~bdABoZ#|cXblt?G|BZ;j|qZm5Qv*!;qvKQR4IOW)iGNKno6pD= zGPmgkJ-N3_vs7g`<8gR&#KY4OLD!Sk9Y*oj|GV0na#(c@Y}c36x)S?25_#z$kW~#r z!J4j7uW4xY7Di2H&Ct>HGFnH+XjQ40D`<_T{LIG7e|EjWcM2% z3x>fOPA{at?#Pf`9$aZ6tQPG+5?fwE$VT#W66IW0VR3PhPFHd-B=-{O{#6UVXXE+- zT{)hlF}h@8c`id&V($j5ELF(=$ANjFhB}ktMz%;YHHVV=l3;-KE~}(<00000NkvXXu0mjf?C;4E diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/solidlightmimic.png b/src/main/resources/assets/bloodmagic/textures/blocks/solidlightmimic.png deleted file mode 100644 index 9d020eddb71782bb5bbb905d040145e820f89e96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 964 zcmV;#13UbQP)N2bZe?^J zG%heMHD!e|WdHyJLP z?Cj3Y%+Bx0Zfb%QBFUPx`y*>C^g*a^LbN2*AU^0zpVXj4|0+Q~p7!Cuy@z|xx##=+ zT*bcoHn+_w(oG39;>-! zLa#;8@_1Cfjvf01Zb9e zCr*lk(TMVTi7gSjQynLzPNJl&Y2vVfBRW)!0=>PybR6*Q@56sjem>>p@%Mc5>k+%d zF5PE6ij{(h>f=TU>G}sK`pOtV65va>qFxiFZ4$rD>5DV|`um)Ve=ayZ{)yNQal#O@ zT#}c0;#PpObQ#53eHU*d!b==V57aj*C$_`s>35u;U+~)>e{%NYF;38;6$X?`6~e?O za5jX4w@@k#mQ^pwGQRiB4^bZLvSA&7sVT z3*l>D0|PCuvLB}C4i4$}c1fCT?7-*i{Vt2JSZWG9)qF*ACJjv&mkjE4jiljWyLB=(;ouYP8jj4fo?oL8$1-2ccKs@0 zC&u4w61QD!Th@YiTblTBi$X!ea++kTAEMlPt;Q5>vq>}fOgi~& zx{1IxEyZ7t8p=NA)BE?xR;Go6JD17Gugc0dy;+*%w#1@2OQwDkeR+(^>KF^g6e&5A mHfBV53Bf;Izk;#y9{&U2;R;5ZjHbi@0000N2bZe?^J zG%heMHD!e|WdHyJKS@MER5(u^lWR{LWf+F%7x)3OSWHZei4=Bsc4kiyDq3pE9@rxc zdzka=3=1|PF_6Go=pNWAN&kTf7MHZd_`x4wBpUQj^@F*5+7I*LeKPNJzt4SNkK%m% z5$T*paydydv4*ZLvZ$}HoLQjx$qdHa3>h`SY9dEGonTqbqU$QDTnc;U9?F82X1!3w z?skYwldiqX!D1G}ve*wCEZ3mh^?91q@B<6)TaTXMQ7AkiDK#atu!I@8JSwaaxHi7+ z(qGJAh915X5IS9{`5Y%d!}omo$Dy=Q!1O{?Erp_HV{)(v0+(95PQKA%vsR{AC{Sx` zlke22Z&lc?ZBlPkX*LZ!&%xjG-jA*1Vh`xHrL$vFH1eFTt?}~Y8Ry3*c%mLT9foH^ zUVMMS+3F*zrQ&~<*QMqAENB@NJ*9J~#W+eOC^pIr&c~dsuQ56u;DVu=q`qr~83D2gMdzhAzc{&vml%b&TtnsPku(|z}y2z2lER|KjG&C6;ev2R@Z@l^`8uGYQ=0MjtlK6FX1tlRV1n+Y7 z4I0HdFV-K@ADuHC922#Bn7+r4&-zRT1IAxHq+BS|5kh-Htd^1naa9*n9Bd)bs8=Wm zMB7`N6eQA?z*8$$rPiX^*pieCc6J&>O&8PILDPkUB{hvD^W=-`G{aEl3pq;13HCy~ z{Wf9G!8Aj{rHrV$l9o-W)SzRv(c@pBq|&Nf{uM?pxlVAz|c()aMl-_(fXHa88Pysv3e;dLaFdkv$bOau;yNiS zU7&=O<~S@HPbwg>MFpxWew{}n7Ml!Vu8aD z${=OEaw0t#Y%R=1K%tm}2>4Y_BH;@qNCY_Yuo!Ek zPA^f*5=Lw>D=90RqRbKqqG_5#^Ed>#0z$-MF$8lVE|<+9*p_?~g<9Dr%k)tN8D`Ov zxS7HU6X;e%HAF5YWig(<3c+YrDqjnmEF+0xQU+O3GlXzp$Y^xOHH@}UYV2P(-iWrO z=9@7{jai6XQp?Y z5fLyVi8t-f+8&0gc*#B181e< zCLKXrX1j0bRlqWg#Pcv+0!bLb;S@{oH<;(b0$3vyYS~;d6S^Md>)EIXMc7=uMhqi} zP^jmNStESi|4kjlI0d=uHy7F6j_p@yHc^*ykLzMFld7caIwC=w-`9|}VAGyJ_eTTozqo=(=MLW@|#fq0F zGH&(W+*(2YW%BqZT`xzJ-@=XkmXbAZru;M_%bjH05kE9l9-^+-G2&syh>Ido3-vAClZe| diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/spectralblock.png b/src/main/resources/assets/bloodmagic/textures/blocks/spectralblock.png deleted file mode 100644 index 996fc22a8a78d6722e0fb990e9486e5e41a3448e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15123 zcmeI3e^4Cd8OL8R#)wt9Q75G1m~-<>raAWZesJEpTufOAj2s{#4KNeK-rg>3xVt@W zm+V0l(b#&K#?U%;G|`EzE$UFksXtR_l8$3zVzJhy%^$_^N8=C+=?e=&a>#YtuyoW^Hk!l>y5xiXSZcF7 zZ4Rc9aj-52%Xn;d59~@LNJ^O#!>);VVT! zwMd+x$jWLgEa*NZEVM~EXn8O=!J$6uVkmO)e%h>BBE5y z``|!{q6ArcsT34MhhXzKowALwyWF;bhhZQE!F#*laSM{*O+xhhQTKVFc~$H(cS|~S z@N0%f+~aNgu|Sx4sj3tW_GdTJx3GJYXW3?{bMENuL`X@VNl_uD zN#>3#qh_~U<`B!AQKnCF=dyxmo@PGL+z?WbqvwofmzD8MyD9%~0aNi2_r-Gy{gyqs`Mlq|7ZuYIJUWW;=F%JvsAGV_`4A zbqUEDFdRK^ESou{Z!&8d>PqT84mK} z8d#g)!XiQi1Q$vJYZF{pM5ut^LTO-af(wfX6%bq~4XjOYVG*GMf(xaAwFxdPB2++d zp){~I!G%SH3J5Ng2G%CHu!v9r!G+Sm+5{IC5h@_KP#Rd9;KCw81q2sL18WmpSVX9R z;6iC&ZGsDn2o(@qC=IMlaA6Ul0)h*rfwc)PEFx4uaG^A?Ho=8OgbD~Qlm^x&xUh&& z0l|gRz}f^C77;2SxKJ8co8ZDCLIngDN&{%M$RVK&x2Q z;0K^*4FG++0r+eNUe5#2We4CwD*)^h04!G@-Tu2u0P>Y;eq&?&udYX{V;@$2tAbhM zI6>X@zK#A5H9lQ?mOsUAO1_r(a{&4Xg+*8(mypd)jvMc+uJ+7f5j5;5%=B?61yh87;hPyx^L$EC+x9y z`Fj?oXW~25aAGfW?A7qt_DOC-`@wTpfuQ_O(a#@YE^>A6*5vo;#=A8)iy!Pe)AaBA zwkM9C-uAfET|aTSVo96qc;(3zzuwhpbQ*h><@FW*_zLjH(H-*N2E5zy^FZa28!U%L z4m7W!);%L0Jh#rda&UOlLy6<(Ke-b8Xvlvh;G7TaFW>S;V)~Y%(WeF;+nxA3S0~AB zXY)XHA_0Coc!6>hT3R};H=cIB5|lfQ1J5d}o{1V2{BKT2X2N5yH^>3L(6YiJ$#U_) z$Vfhr*UD>e4LrYt9=P}LJujUYy)gONe~Y)CdE+_Vkk7WBt>u@3J&6Yr7Rzna!}}H9 z4t`N{^5PxTG*|cKA1LZh{yO=VbKRvz8y_^5%cYiojo$&lpN5CtoA~LzGlw?uCu$Bp zdww&2ov{w|F_oH;2ZlqPFJ7uh6fM7c=TwjI{n3XKcgnT=YG=pto66s6J^QQmzu(Qj zbyx8^D&NvAQ_ia_dDL3x_0-EPA7At3jZ}c5_A!GO$1lD4HYgmunF@eH%g^{52iapq zH(AP@#Z-Ln`-$Vzy+>#K{6>C-<%5>79WTB;JXGgAIl8xN+tZ1UUORPg|DSgqy)`gA z^6AU#XI?#Z59s4Roa826J9T8}reV-sE5w)2nu^PFq=NbK|b!M)GF^T-bi TT)#A5Tdl6B<%ho8`r!Wn@CC!D diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/stonebrickpath.png b/src/main/resources/assets/bloodmagic/textures/blocks/stonebrickpath.png deleted file mode 100644 index c470ec95ee5908b023b09e91d35599dc9117b14f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16221 zcmeI3du$ZP8NfHR31CWsgHuAHqRWM*kg&I}d+qA(i0w7l!ABkYz;;7K_V(uND|ffY z?V3BAK4?i>uvFRu>ei6DDpCkSA$>$esa+COw`!{bX$2x`2%*$fTWX%dE_G`{XYYOE z^T=xXBdT_#dwlcF_sz`j`{tY7KXzx++ST(b9;qM*Vtzxt*bILc=$|>W;P*FEop$&$ zH&)-S62!cP`sW^E-%Ae@gljnDYt!1ije@L1EK)%614}XzgT0|{Wilqon}BBWgN{(t zZN4`2me~{vxXrCLFYS%hg3eHVPaL%Lto6w~n`AyG$qbQf)t+gz;=XlnB|nQE0dFxf12Qf3&&f;$FIX@y$<#;Hjg_NjC_bd68F3oK=>jUMl?7AYc{6JAP%MMbcl2VLfEHqWl zC?Mx;VqNiYdTIfg0$~sVQB8$*Oj)~Fr=lrpr!viudG)jd!6&Th4w9j1%ydo0ES(CO2)W=| zh1xifG$rm+l&~k0WlcGRrrO$cR+*NyhN1x_p)Pk(s7WE-1#due1}Fiw(TfQ{s#Ov)Uf9UQ~igEa4= z^vw%h6y}x9jchxNwpC|&bX}gHpW|pdZD$}smYgQn;v3jw|nX2An)Ek$yVJ zk*wY7Ae~kj?i$%i(*fQuGm@NJOBpv)hN=(g3DjL0&vXK{fX$_?g#=1h@R$@=fnJ~7 z=3Ifwm;6jlWHTdO=LAXCYrjX<%LfR!sFK#gwDOj&Oo!0aaLx?D6!YoFNOXcIuKZ+N zrF%{9L{)-XLW+ax4!ALAQW-N|OU+RC<#)+l34|(b`QO6e=Ku(Db}Q+$b2Q1@tt{MC z5<~i(yfqkbI-P!=$%VNnis%yc#S{U~oC28&&ImRpSH6q7Oz)u-<_u1!nZ%$lLAg_k zc7T9~$}KC`fX?W{9JZMi!wi`JE^Nrb`+pF*Ogu{qVy?(eEub#_o=bqm7Zw63UG(5S zn9^3rnN0sSy@-ap()}GQ4KH|S4zH|fu^KgP$D04in507(-{^ivWA&Z6+LaF&#+7@ ze3pTaQB?jpYRd7JKYZ@ypTdgnrdPz5F$e+#FB-V;d=RaH3ju-`4P1CWh}OV`0Ktm} zE<7JZYv4kF;6(!$o)4lma3MhOqJay~2hke15FmKbz=h|7XboHl5WHyM!t+721}+2$ zUNmsw`5;;Y7Xkz?8o2O$5Uqg=0fH9|TzEc+*1&}T!HWhiJRd}B;6i}lMFSU}527`2 zAwck=feX(E(HgiAAb8Qhh3A844O|EiylCLU^Fg!*E(8c(G;rbhAX)<#0t7D_xbS=s zt$_;xf)@>3cs_{Mz=Z(8iv}({A4F^5LV(~!EUt>eo5>&wUq?>B_l{cwJN0**O>%v+ zmmqpRNf6t%6U4+F_~INS|)d0zwxUFuB}2mHS&jviIa~yQj6WY_v|=b>$7~YVZ&QJ5y$;~4PB9;r_ME=xLNV%8?o?_FCF^H z!Jh~FQpdKA9o+x>uWmMd{ORzre-BrSU-`A~)xF=}+uS?JW z$Hp&zR}2p<3P$JppMU44iH+y?5B1x>F?LGq+UI_~OF6Rd@cl1uxO(f!pRE{=xq25f z&n>STzxDyU@W7uw|MjtxZ(MY|@+t9E^ODNS{)Q9cFHVRbCF-~JE?zb_d`r17ulLS{ z^_Ne7`|ZTF_wGGzu3R#3_`QAK+xXJTtz%XFTe@9`8kn1B{|YKEUVVS?xgU*4esC&0 z@Y%srYa-sGLnrUFoZB_>#$)D(&PN=gf23*jk^U63ck@cG>H4MLE=uis@z9I2E8CY} zeJVw(&))mAc;d|dJwJ4R;rj96o$x*I7V-G!{&D;ArQy|^o==(XV_uof+@2gi*Egs= zFo$_~z~1+n)}?)eV}Gd}Ak5X1V^tP_?JSw3wBopKXzt~{sMeM-CFUrniszO E9|ukAWdHyG diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/stonetilepath.png b/src/main/resources/assets/bloodmagic/textures/blocks/stonetilepath.png deleted file mode 100644 index 1432c7cad74786fb7ad39aa52770c30b62afa587..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15846 zcmeI3dyo{x9mnSgRLLoc76~D-4C|uA80O}=uVHU_+}?4QV$XZ*$sN&>+1cLP$?fhe zGqbmQgcFp~@`$lSO$rGqsk|hokwh_7;R^79L@I%ll#hVPnMx{LMU?Y}h=SO&&$+(6 zE__ugsh+CconQa@_wAlf|N1wxf6P!@>+)H(U$3PoYF0~gumk>HYJD!62EXs#9CyQ? znd#;pgQ6~;ZGCE}t=r~O)S@kFxZCUwt&kKgStm!e2&l^?)37&1`4{KXveE}kM+Ee$ zse0%5$Udh-jn+F?x(5D0APG#_kxM30hLo#! z=5-}_ZZ$JbN4|^MSMOYE4e00&wK*Cz9XMQdZd&0u&f)RZaW1dGyB0clmUA(zkKtIF zGD7+qsR_YWO8zv;p$kX zT2NFe$D}iQB0sgL!hi%wf|O~%IIe13I|vh1F6V7MlsP%*p zRcg?IY-)N~(-MI~mbH}-IvN`CS>?E9rJ9OrS>s!N1`VmKcSQ{ZWfKHoKDuEh(gGLe zc!~4Cl%!d&#IiP#LQg~^q(#-(fK7v^Sx=aU8eWOx>>9S7s0Q3WQQ4F)NX6dQrV~}9 zn5HLXGoU8rUcjVNy?&MPBg2SkC7aMBs5pO47FQNz&KpDy(#J!q&%{{l^`mip->;npFel=YTD5 zVfN;0StnRCv9;t#sQH?dmURPIJFebY+H&P0R<2Q2On&D|vSL-UfMRV35cM+?S}W5k zM;61>$qRU4lneT{@Tteh#z6|Vp$by@UQ>%0TFlJKI#}8ZbK*kwdO>w!7%J~)tm>ao zKZk`d@DKkhOVY7!^8I0^2d zVqN?1Ekh-XmAIVh1s5ty zwnylE^(?f)2Xy$~fGPhum{eHH_n*)5q;f@{r7EID20?(}O@a&02k{bI2oStUaN+qN zUV;k&f;R~+JRihMa3MhOCc%a0gLnxp1PI4T@Fu~9 z=Yx0&E(8ePB)IT=5HG=n0KuCC7oHE|CAbhEc$475^Fh1>7Xk!t5?pvbh?n3(fZ$Dn z3(p7f5?lxnyh(83`5<0`3ju;R2`)Sz#7l4?K=39OS8e5WTabe9*k<9&w0G~_&V9{Ra_8+&?c%>(du-OP z7k2&V_~?lf`p7|1@ujX?)UKi0;B})- zHUCUC{4wz0)@hl{xwB_qTevHxzy8DP-M@JG`H`)+W&Sd{$k{P>&8a=VZ+>Xwjf>B} z|G~B^Jm=58`SV+ry<+fNLav|wt37*DZ{zc;U%C9&#w;zj6Q0(=Y#Rcl)8o=Un;lr7w&d&%Cqk z-|j!(cSR@{UeGuAK;-^KSH_0<i{ZAjtUcdkK;Z1M6bmG)8X5M3)PL3}5!IwLOE6(kGldGiHkW_wBuT`LFKU v+``RXI{VYcT!>`gkaD_48ag8hGnxMDDwdT2N@>QDQC`5l6-lM$(DcFd)o8Bw?V!j3i@f3^Al_ zYQaJQV8SL`6Gz4=SBp@>%s|{2hRbZF*Z>eJaaj>G1tY;EEE%_mX#-z1&_LWErfIoK zrqUXYnedhAHY_Gxr9snEP@#b)Sq_G}M3e$EMk1igoNBR)Tw>a&UJOcEVvpsd^ZL$H`Rg-fYMXq`VQWvEfuvkW?9gI?R}bRLI0M>I=hw8$>J^5n!m1 zO-I>6KHY$EFuIV<lZEN2OMOsP}`!x5Y?nM^8Y!+aqt zg2#vD>~XHbVkZ#`ijCXGDcfUQ?i;zHa2tk@giS*bspDM`Z6Zj*ZX&E;csRINi(3qY z)4s%Ap_c*6FdM!ZGsta(85~Wq2!D-vCd69atdfaXNFF4=lA(-&O7`n$z)(^kbjSlwQ175EE|YM z_f5(PM09Ht%Z<9Sm?(J8)#Qqb054JV9y$@aEh=CBg*tX2+FO23P}-L4iwpY7*P&?7 zfPUNaxf3R8wOY%qv+W!4nv{oS@B3}+yFP4k-1w;Sfr-=Z-Fr?V$$XNc*byfm>Fi#h z<2@Xj-+n*$*CW3?4$cE+o^&>y_L#TX&a3Fx4+Dd-9T&1{8yo+AnhfpoV4e3{lp3)5 zg>y;HkB)=V?Umn^?eS~PtFGS_D%Zs?h}YeyKRNG*d^~>2jLjDPH&ScFy7LXGY322& z>U+Ob>55t<`q+hGMOo(N9i_wR2|>k=I=`;f9^Q%cMGSR)I&!(?Ph8$p>iL$hG_GUq z+Ty*LnI((1a?-av4cwsb#-a53^B}+BH^*@zb1^idYM;X7A79mj?DkEZb<{d@zt82` zIYEa$_Z;rb9Bgb=1XdkeDsgd^+YFK>rs^(Po+!;5n1cBGsZVqh>qP;#GA#P8+z;>8 z#b2NHpj&b+C<@gb0_IXhSBpSKqk(htt`->Wa!=KHZ$n+PP5So%NS1P&a!+>K1&qeMar>#AW+q zk1j1>pBg&0;Ilxl=MMY#f)n@Nvk%8K%2Fz-%?-D`4kw9P1d%z#t1<>E4iJ0Z)<1vv zEOHI6NoDT8h(z)a`e(bAAHXypzFnO+>v1+P0VrW*Tu;cB Qw7P#GiU^ggMw*!Q53#_FivR!s diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/teleposer_top.png b/src/main/resources/assets/bloodmagic/textures/blocks/teleposer_top.png deleted file mode 100644 index 6e4196975b601032b7393719af0724b465ebe35a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1703 zcmbVNeNfY87>|57L^$!rrsJ4q(Va4zrfCapBh{lVUydRl1u6qIqyZwdscE1E&y%yL zh@g`xbBe$L^9#lK$*!C-h906!Wu9`NIGKWqA{*id2gp(cw?91pSnl#Z@B8NWd%mB` z)`;+6cULc0007)WLsU_m^sv7!4&3_f&Qw26e8vW9*=RbMHRB8k1nB4_5)9SjDP$Ch z>$281ll}nUxR%mrS*>e2 znjCuTlvW)9DrtrUefhpHArPXVM8-#b#WED-fkFW)LQnxBl))&9i6t272TnW?XN}P% zV^ON030vGr4yCfJ5knBO*~~YK_%xG(pfZ^Z5eN~X5atlDDa*j(7T92#H>p8Inh1t6 zvJ`Cq?HchUI)jx%oTqO?&>Pk2cZvd?ft)wka)#oHf~Tu!B12Ca*ie-m;=b^8lnxW3xRfN4 zMKB?fNnjl*CSjRK;0q@w5qPpl>MNCqk|y=Mk1rDhsH9Rql|Z3Tp=h8uKq-?1N>oCn zP$5x?rHV;zsKLbI27;WlO>wp-xXKT5F(pIdEX`A}Ukd45iLz_co!3v}6a=ax(SU*%CWtvo5B$2r#l z-|eyI;ELj&0+d%Z@FtjkHN0rux-@Iq2J&=+)8QjU&zUaQmnp6ORq*YEzv8V8tFFym z+6XlC^&PWXhfCXxiP7}W8OqKq2D@|jac)<-wB*Uu9||fLmu;x<$cveOeynRj^;Vnw zw%8URc*l-cBkc_y&$-@qWBB=w%8HzXl8e*IhEDxm?WuTV z+rF!Op|I&}qb%k{H?$+NxcE2?*Bm$hnYZ`Ai;kYlas4xWoFkhhlB1b*=PVaZiFLfk zT{Lo}2-)gKU!IgDio9BeNHMVT)eRgBy)K&3sT5plh7Ydg&+sV7%9CDnM z@?GvUhH+y*RSfALIX_k!1v7nr|)4$?c#i7`k(MMj+ zW24ZUXGX84!v_vOd|27p>0W@BT%dNXUPi44U6Ph9YN9$j7S2udT$P|uBwRancVJ-d zncd>Tn8GQS;!C$UMXU+S-xv=^$261=)SMADohX`Lf5KC~HqyBpyEi_rq$U>G%Ulv^s7Aa zKKH~0t{bV?lF|YM39e4d^vKHC&sQli& z2Z6t6+xuVjcJG-Us~jD?RkwL-O}%M!aO8SfbG!IshsgMvmmOo?=kENmYV>u_zIwNy zO!d>k>azxHwpE(1`Q#?<6RCIl{>;raaCmXIZR!-Kf`BluvFQS!{(Mf8Xc_R#{_6-0 L3|G}CR&V?V6bP9` diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/waterritualstone.png b/src/main/resources/assets/bloodmagic/textures/blocks/waterritualstone.png deleted file mode 100644 index a0b3a91f4648eba658890427a25a6a6696629925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1629 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 diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/woodtilepath.png b/src/main/resources/assets/bloodmagic/textures/blocks/woodtilepath.png deleted file mode 100644 index 18aa04777a93b2378600b99005ffe3ba82d52c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17780 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 diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/wornstonebrickpath.png b/src/main/resources/assets/bloodmagic/textures/blocks/wornstonebrickpath.png deleted file mode 100644 index d2774c79d31775bf784e072b4dde24fb9d38e01c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16299 zcmeI3eQ*@z8NioN3q=^BH8w-1?XgM?t(*P0+q>J%lVLU zuY^nSzOFsEMUhJJ2Us8Fi&zK zMdmV+#6g=#Q#6=Znk15PP!7pqT?2M>PP<5hs;gRqIzq@n^@xE%PJF(>*g4l53grx~ z>E5LPK?-S3ORcUsB9pbUrZz=I*}D{M<*r=2*OfpfIYT@dni1D7$CVMx3{BE3Q3}Zn zxxile@~AB6YP3#OgYION)ua(x%F7c~Whr_<2}^2Bo9ZHAlT5xd-eixU%WhDQc2J3g zm9C>1o_2teBq%3OQCUusGa(;7RZ;@YSw0woa?~-v2g_4jwvVitun%y4BtaK$$V>Lz zEI*RS2h?at(A`Q%sF%q|xZXu(2D4@kRux~a2GuB7mh85=$XvrYtvssOWR&%^uqbOF z8Cq77K&lc4ce+qNbTq99D(+<4kW^8T_)JiH!0KQ))=7vm?IdVgW(f|+glLs1hn2S4 z0~F^Xjl&CEWY(3cjnp{Ecd-QAQeLmsYjZM`hvjJ6Yn$%zveP}R$K$CeXKl1Cx1;3f z(4}W{L2cZqC!de63TwImxKw%E##$7x7TIsJIUEd2FjT-!1Q?r4_#K=?NPZjT42X77 zw$X_q8)}}}V#;+oI&htvAZPVk9S$1>2r}G=1e5E`ayBf`eNhEm7ldHeoHSR?@06Sz zClG!rU?mv4%|SSAA~-dolcFTfFVcdT-b)TQ!$MUmMgcVs&1a&3X3Gx^9nBO_qJu|- zs3sfzsT5B)sKJ(>tcg@*B>EgLh(_;si$?p9B^NnlG_$NhOILD&GCZ9(hG3Za$T4CK zav0TqlCBc7Ms}j90X-%}Rb(1rK^AaluMIJ6N4)Rc+h-7BM=fz51fNxW0{&s&Yx#A(O^?z zzJsB_2i%#1Ps%h~4V%tKn`WzF(~RYuu%f$}R5WNf%gVShOy0H32G20E+s?99)>3b43nwKdfG@_!;+)mSq3~tk%P}s!!B=w z7oVH?BeSEM=@s&227!Q}MH3gA52Q75K|s)=i3`mK(wev+AZXFVh2{fkOTo4enXyQWifwU$r2nbpGHE}^e(4vV8%?Hw& zxF8^C(Zq%318GfM5D>J8#5FGSX0jXxuOr96d&k|6R&d~*Ws6u@>%*{RQ!s4#qZl@D z9en>C!CpT=mf0FA5UDlG4D~I1|`Tpg994Y$? zSKc12*mqJr`{0X5n`Vqz)p~qI%jo52-oA46+`qei_tCmF-JRuq;qN_Ca?3QSap3X? zMelxc^5hF09qP8cFD9Spcxl}`JDdxMPkZMa-oNuu=h==8_=meoIBqTOD;eF}?fkgC zkzF|UvoCtQ$H5EUMa-JEcetMCR{s%OP%{2K%T{g2>d_x>J9ezThlR`~Wwx zR#)HLc`7(_%gO7H9Nc(i;Mqm*@l{ox^VcT!k9~9Q?txv``aZc8$F=7lTm9ks=bE?8 zKU>Nl#>=1IbyPTGdqV5Z-@Wag)`Hts<*&3=ZfTe`Yt4qv74&a6SNo3rY1@H4qc&;P zOA6NJ=Pl@ccl9eBQ>WnDPn>(mllQ~km&@F*)b#9XtJr$=;>AndVCNl6jyl$|@Ic|fN5@z7 z_5F2!=M?q#g?%jqyMN=ax(57<{LxvP@2qb*+uu3XRr>R`*{^-`;Hgb3fAiyxrkM}6 zz2?R7+Btm-_nf+I@^yXbT4JT zJkoq2w!pLG*C!6u|Dvwo&YkL^{&iDduJZik8C+U?``%aECRcpA;crW~RK(7N9^Z>y zJ~iu!Nz~!3>UX8L=fAPzj`+1JPrH7(@7|{||1Agcl?{LHk(ASO8|lYBA9$Y{AN=R_ c(OB2d9)95uM_*cIyiQ-`t@gY=eesI_0H1Unr2qf` diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/wornstonetilepath.png b/src/main/resources/assets/bloodmagic/textures/blocks/wornstonetilepath.png deleted file mode 100644 index 0df77da0b5c97a4ece61e8cec3be21caab1e333b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15950 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 LNkvXXu0mjfx4s^A diff --git a/src/main/resources/assets/bloodmagic/textures/entities/defaultcrystallayer.png b/src/main/resources/assets/bloodmagic/textures/entities/defaultcrystallayer.png deleted file mode 100644 index 5f2cc19c4a9dfbbd91cc51489e778f463e2121dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7231 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 N002ovPDHLkV1jpX2W0sKis zK~y-)y^~Ey({UKbKfnK8{QtLPn{Ej?4JV~RvMF z23bpI$gk&FURvhE*k@I!Pi?etcehu*B{S%)E!gXhG8>OE9*z(mA0wB`5gZ&=n=Tk~ zD5<{{;Pul<4mrwsV5*>RVglV_MK^TJlhgR#hqdJqvrgdRi5%Om?_aiCA`RF;c8ZV(x5mYZ(3bnPmW&ayJe z_XecD^`P_^N`B7$I^wuqiuu4{EUS5f9yiHz5!x1nc5F5q9#1Lp zc$_yQp9)jZG>zC|8rGoWyPGM04MnxpSj;ATRh4AZSy0;6LAvVPDNT~V-_^{$^MiC- z4ODdnGjsFUZ3e-iErRsBh8#)~IYkI3k-c6Xz8m?sDF63w`~ly@+&}LxgG~Sc002ov JPDHLkV1g9j4iW$W diff --git a/src/main/resources/assets/bloodmagic/textures/entities/explosionprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/explosionprojectile.png deleted file mode 100644 index 94323bc45b60666f2ac217d2d6efb559514e712a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1463 zcmbVMeNYs27(PEjf^?L`FDloQ95MEG_r7=GVBq!+E;zsghZ{v@Z})fH3b%XgE#AQ& zG|8v~Qfda+3{9C?CL=0iW*teUK&4m$OO(s$|TBT5<;izd66&pSmQB>-6(!#e2f-95;&zAbHD>J>e)^GL*a_as^gO3ROn(bcGvmqJ=cbr4t3iGK3PN^niA%U|NOi zU~zqSQ>EAFbt*@gXDYl-L*goZj_qW~z87Yca3EL;V7E?(rlF5UwfjnK+MmScFIHzAav@e7kc zU^fHCEbwk|TjvK>MQ&N-S$)$yv*}9RrCV*gJ~=el=0fkp zX7#2YU2-gUU3TK)A+5HvKRW&NjMVez-+UwK(Mvxsnn$H}cc<(usX4oEbM5v-))#ct zk37?-&OaH4wYAN;a3JlS2SfIi7e-bzJ^y!AgD(&zs?-3Oi67X6#Kgpnj#Y-P8}Am za)Z}$t~rW>z_y$Bu600#o(Xj7?A6c(1E(fe)*Bq1FaW}iAc*ad-ZF}77RmojeSvZ{qg4- ze!HL5gCFd?$JFoKdLW|4Tr;qOY;3GOlBhhn!Rea6X}FjnD=rStTXXJ6aGi11-I)8Q z3TG@#sObJYP_(^&*mm$n%!yZ;GsT`*V8&1-CY2w-{QccMQxO&20(( exbY`sT7=AVX{d6qY+HBeS86fkkge&(TmAuXxFz@i diff --git a/src/main/resources/assets/bloodmagic/textures/entities/fireprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/fireprojectile.png deleted file mode 100644 index ca9d61e0b116e830e3ed12fa4d59e1b4880be3a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1395 zcmbVMeM}p57(V1f1V&J%k!iByh(V^;yXyz-opf8LCKALwMX$dU!+)3&@gcuO;`x3Xb39V5)LwKJy2jTsN(}>WbV=+ z0`r_1*=ca%&Y%tW`LY%XRJFLO*_L{imPCd3+l~ z;3X5K-i$0e<#ATRHcHazTQD1~M!0 zL4_9saGa6xicN|cQ9WJ0f)I2%SBV4iN}$w`VPPhS5gHs5g!sLdtYyUw{&izbYq`2P z2rxI0#U_bW^WiHGMJ1yZ-Qqnyvbfn+G)~+n@l)C*!3ntk6WxpTPaSGw5eE| zz&Zl5!UR~5(B@U`6|C`rSjr{=MiHfIQEW(5L8V_*MAdr(;kZ$>~v?)ay}(WppTKG!P_Uf$A5Itl+u-8#+vN z3X9jtf9fW&r50m+y4nTmVzrMzKy4mL?GnEKuWJyL)ajrt)#35eRWEE$w&dKuH;>Ou zWkz!>`PS%1#YIBO;f3-7&)C`5JTwwHFl6m>$4bwoS~A;4Y9e10rBu<@_9N@bxf2tO z!?pS|A8k~&6f=qrWddMsrm6hBs*9>e#4%2v~cUT!Lo7GRNngC z*=J5x%)a{5ans??AFpYQ8r%D?e739S+it7t;&t8RosRn%8OM7?I=aKvQ&aflhqJ$L zJdrV07c<}&FW)PHxg<9h(e}3QfTyP4NFJ))^X}cY_4_08^hCb*vC=nNFFbN=w=2Bq z%Z}SMwu1xdr<;ZW-9G)q2T$#J<)kBfaT3IS&FTAU{KkCN!mWx;vC7)fg_mwSj`sEt z*)veZ%dK-+{yR^PbWZwmPCfknCrbXYKXNxjhfz9K{;6#+ZT7uKyQi)e9cmePeQ5gp zq0s0zyNJ*^-`2OD+dKTusk@zdqbc=Yj}-O|rcSut&h!Pf>Du{-{(R~{C~YFW+fj3= zr>(C`$;yqT{j$5iV?vm?b^Rgu=9!<7=*=G%w;xP`-p})2os29*;=e(M-9>+F-52=> D*oFF@ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/holyprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/holyprojectile.png deleted file mode 100644 index 52fb9ad375e27326ac2ec4fafcb3a230f44225d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1349 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 diff --git a/src/main/resources/assets/bloodmagic/textures/entities/nodebeam.png b/src/main/resources/assets/bloodmagic/textures/entities/nodebeam.png deleted file mode 100644 index 67545b45f2da1d7479e754c875c9e481b6d6eb92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 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 diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow.png deleted file mode 100644 index 10830442e6c1bda900dd0e46bca2bd443eb105d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 772 zcmV+f1N;1mP)`VUGSsA9+A<>=9sChSUJ7y>BzYW(=-R<8e}Mi29TNNj z^N@`qLOhx5kV%cutPVDpIX#z$*Ne}O@8`oR zYz=hLSb+;Ux#;!0U{DYzOAWNCQX}U~K3jr-kkf@&gCEuE*yNxa)AOHERc<6DKLy_S zm?7&Jj(nF$x4J?qhcRXWX0g?yXFvr2IG6jDGBPqC%Q7TMf<~jk_SP1nkuW0RFyx&b zaLysiGUohKn2{scAcAM=6Xg68Y}whjX8}R2)#IjlmP)ReP;jaNkDs~~mEnnBq`_%F zqC^nP#~JVJizx$wv>;OHbqjRa*^1$5`FZqgDTp*v7As(x$V^wk8*2$_@7_Zyga7)F z7DP&!fV3b|&wz@hLV^Q;TB~Ok;}246^(ZqZi&24CWm6}%4(Y8dblXQiiaPxQ@r7O>VZVS_b;OVLf|I=^c3#JRMV6I0000 diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow_corrosive.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_corrosive.png deleted file mode 100644 index b636b2a3bd9f7494d6d43ae6e43765ac02cf27a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 783 zcmV+q1MvKbP)#& zgA&V&KnZEI8~e~G91D{65!n)*S++sMbooIxUVZm^x(c$ZcXJ^ScC2-G62AVoEM}}C?E&|c%Fw+sYH0;7nUO;L~$9y zq5zKLAP52`K8|CKMiHiY^m<=mKF`R$TddIw7|b0IraV-3t`ORSJ!tJ5mz0J}x(s^s z{w0VAOXUW}wS9=`1=9JTi%wnBpm6(6$#6x%Fj*&gES@p2y-WqwIvJd?rodqCKq`a# zbKrw6N|^v3bWyi;6HA2z2LSSH4XeC3P4a9FOIZq10be1I@*-Rlh*xaB<)aJLa!R^@ zu2w1ODb524DsJc0(2|rOihTk2wW@ z!vWx3q#yll#VjeE@L%|8lZT$Q9Ey38N*2(TM5yk%dIcN+1}sIZ8snT)__6)@aCk>B z>klP=7@4cu;qZ>YT-A=_`r5cIE|Rz6!LAmHH$18uNCbRsBl<4{egnDr8qYOJe+~cu N002ovPDHLkV1hmrS9SmZ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow_destructive.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_destructive.png deleted file mode 100644 index 42a19c2aa7414229b5d258f448b22d452223f407..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 771 zcmV+e1N{7nP)zvrUNjfwT*DiSlY+9I?+MyWv(#vVi{P>C$9)EiQ1iO`!p#V9Bf zLGGZ3p>LKIEJB1H0*4j`GxIjI=2odwnv{P~@72>oMXaZ7dAA-sPe1ta}u4?1(mmSyLgkcYnml2M=zQ?c{I{ zHIHs1Q+gJzj6L9{p=Q=yEs9zIoxN0#cBc*ike~jXjYcCBMZx0YB9fDnF*m;eRb7R; zvV!F$1%e5N=JwXF@tseUfC?t|H~2aO#gVU^)# zUJ|?AJz!>Z)m$dw-e6Q2NH7FkTvK`wsato44KLf!&!0W>cvM|aW=g@~L>*p5TY_p^ z8{!$l?}Z`Y;+|bK@t}K+E{{sgAQOWzKF)l;`mpyLy{4=p1MwPX# zkUefx*0!Rcs)1rIprEROw17usLM`CyKcfFazz_2u6Tfh37{vep002ovPDHLkV1ii= BPdoqs diff --git a/src/main/resources/assets/bloodmagic/textures/entities/soularrow_steadfast.png b/src/main/resources/assets/bloodmagic/textures/entities/soularrow_steadfast.png deleted file mode 100644 index 9e234d8782f15731e8b7aaa42c80781195012e7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 783 zcmV+q1MvKbP)3AJHU%CF4UJGL?&nb*n;7bVb=Zu;>~kdNB?~{y z;*Z2)cbl6IKAoe8su!8byc+wdG064a-j|4%0BuQ|)-H3{cg45-Mcf|*v&x>D@ z2OP&ik|Y?%zQ8oMg5@78c-tXjsanNm8e07}z(?*$M)fI?_GjiGCAA98FJ8)OLreDr zeS7u^j0k4^cE;7WDyjf4h(7jO5hnSlC(+4){6)VGrSkfj}vDwuH{a6_8(l zK_HZ`DyHSvE__zK2gZTqsY_&5KV~7RK)$VvMl2sOt}-FBC=D~c?T9|Xg{A@*6H4iW zYY^IuWB|axgK+?WV}u7{f}DYDYbm+9e3rUfy2a16N$RrDlqotfkekwyZH`XUC@t39_rR*|sixuFlQj_dDeDAFKRX?&BPv|!SzwS*#VcPa!tKWMYxQgaGPqjX5omEg)H&?I=vz#U&Edv*1xb0S zlZ$1^xhW_%-J{D-J4jx6B47b_MpK2JemMXjGhu*uo`)a^@Or(7ii(2Uhwlbcg;zPVcyV9 z=B{B75gutv8Q0t!&shh%u3{SD1_deN^fWqVjO4sMoXEYJu_8?*># zalapUtAWBMz*`N}Jdnh~A;AHFTbaQw<$ff$GJ}OJf^fjs2!y=}Hw6AwXp}%vn~pmfZj1d<`D~~lai5EnUB7qVaN*NrR{=s!w<*M*t0mO z^Y;P(=C0pe{j$M%AT}|$C!qUaCSUhs^bHN8;;L>{$Y?}EeF@5A6IoCrX#H*>F((b* zoE|JjZ-L$6#OFIE007;#1@{){4@DCbMO>H`S>4Yi*d0zhX{v(WXhi+~Y-m*RlBcTQ zJ)ra0sO*J;Aw~tC=^@!2PVCGpV$1if)KGU8Wv>Mm)H$Hps$c-tz}t@|(55BkH$317 z{)7X7@75$LcE_=hOv1n6EtW4-u1pAclS&pir&^|_V&xh*09@P^x2`qLNrk6oreJ(z z3hx(Pp)o%9K<~=+x)x*) zacsblg-s?d4jp^N8K(=2W=u!O#ugWc7$1uwVzL=Yw!s_=5p~onQ1lP7KfL7b_xgT5 zpYQMcxRzqu+QfvE1er{hXepvfrSYlA`*^(cePJq0OT)8bL4{bxJH;R^09hW(I{;+y z(k@U6Xtu8Q3y>p|#nyW46=H>TJ<0H16&=u`N@z8p5rB@d1M=f zp*a(=+62!#RbefL%)9^~ol1u=m>P!+gbLSb2^`OY)EKToaST-x2#%9l1BvUQg$I_@ z1lCEGQiTgz(#iz8MbSs1XfPO51vM&OaG^Ls5GbZb)oMhtK>T%_NQV&4pB`nPfS(aO zKGDN-P=t|o@Bz^TOPDQa+sNQLq%dM+-#^C2z}3y$MQk{OOXuC zUzh@dXB%J(1>OtIg_!g#A+I5{MhAft2yhxO#E5HIgwW$g#GuFYl1ok} z4waljBX#nhx`}Q{#Tc0`c7e25>?6QQ%_B%%GMl#Lp-dKY&O+tcLqA?FTc_MzBA=be z(zboZxUL^iG(ETclh)4rhYnnAWKT5TY5rZgXESbeq95WsH?ej4}?e1?**eM@eHadM{Y`@~8dnMU%s|dn9f*ow&a*anb zr(XOnb$YzI# zZ5z!Q?%6-G?zPtVtK*e1#MgrZ={NcUu}5mNCp+B5p`J6ZmmT))`_?bonzmnhH#5|K zdFY({`#!p{^Jd!v@y_PafkAt7a~mZ#q&0NAu#(2`v~4Eobm2+m>g;E(RHtUV5%1_q z*-*ZE*%q{`bs!Mlb?bPXy!_2$?;UNrm^6GSskiCp7;5kev@tQR+Z3ub{vwZiC&hZN zZ}j5|?&(uc?9JT#;g_+mn01vCljdDFt)t5In)=+n$IiC2VB@FG>T_3In#fJt_Np76 z*}Ao=_X70i_O9EUYvh}Q*!7{R6QAz2IH2*jC|uide`d$sO6Ro?y!H&6&7yc%bo{5o i^@FSeglAL7;*w?Mj?M=~e@{(Cevy^}8+9hXs_`F<)doHQ diff --git a/src/main/resources/assets/bloodmagic/textures/entities/windgustprojectile.png b/src/main/resources/assets/bloodmagic/textures/entities/windgustprojectile.png deleted file mode 100644 index fab71f51ee2bcfe17933e7019dadc0afc6a167db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1486 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 Bq@e%+ diff --git a/src/main/resources/assets/bloodmagic/textures/gui/alchemytable.png b/src/main/resources/assets/bloodmagic/textures/gui/alchemytable.png deleted file mode 100644 index b30ff88a8a74f9904befac2b90c0b1f4408f7f18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3428 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 LoNP)ezW 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 DUAT>Y diff --git a/src/main/resources/assets/bloodmagic/textures/gui/bookleft.png b/src/main/resources/assets/bloodmagic/textures/gui/bookleft.png deleted file mode 100644 index 08b462df1c3a95725497df9fb6e36574e26fa4e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11940 zcmajFXEdDO7dCv)7`?YBqYOsxU80Q=J%|$0kPy8lgs7tvq9jU47($}=P8cmw5+z!6 zgXp~v2G9Kd>s{}sXRYVU%zd9T=bBxvea=36?O0<&ZAvm$G5`Q5b#*jN004x41OX&O z_^&4~3+(|w%tcpI&CG9lC&(q9y(e|PXtV8XFix5xnwnBJAO5l|RV41)Kb_pKvf)9V z7VYXZuNOtCtw5ylIFcNMDuHImA-^XQ*Vh??Bz&(BwK&dd`6CJj%@u*hrE--oMjE`e zicNW8LU(&LhAujrWpGQSSxB|H#KXte-1nrVxq!;^?m%nMWwvQhTZN(WpkS>6u^SVa zRy;H9+n|^J&2>MYPR{1L)epra&qDSiFLzIGU=iS-BzNj}f*l`TJ22a>Q%7Adki3}_ zCS<0SYKvY5R@)qG*|35C6aZj&$J<7NjVyI~mpaE~X1Jqn&YONvURvM z=I?8-FC%h`Tf}*^2B*!>FBRD>A3k;YPWk)qHuD0*x!B&Cf&Uy;Qj(E}>sj3dHDIH_ zdd__2g+rmfFSyMb5=*EfTNNL1kOF{B1k#ucL2|5-QzuEZ^fX+8Xr_ABMUcG)0vH=< z#7o@B(a^;YUv_a#PF}VCafJKO*~5Oi=N;X34rl~O&_pn zo({h-4AsCapdEy0kCm`IXlYipioXQ$RW9k;uDCrDy`Y!NS!}l3R!qT3$wc0&1rb>4 zthq#V#j-+G1Tztp05~Q{<GLnAB8OKJy(R&<_xN@6X!I!J0jhCm1q4~V`EV|j<$D$LLNTeSP0p6|w2JbUB z`CAIE4*ESFNoE|hy2uLv0OtjNDC#a$v5S^jvKmTw;$iI=$VUpFIjd6BG=7j*8|~eDS?M z=CwM>LG-QAT;~~zr&bGWMsk$+`1KsxyQ2CZ%t(d^u( z4S7oJI~nsw+CU&yl}?2JX=@-UNAPwE_4O|gG$ns_AgfmRi2+)EveCZXBfskTa)O^Q zteQ`A@9i2(Os6JGYJ5$yqFSh@=NIszp?%(|;XNz{T~!Y{i^z)zYafD(V#{K$GJ>P; z^zFne28=AoAL9gA2(wvO%4O$?G8TR$Bz{%VF?~`J9V{^mw#ijR>pA$I6%u6Wt%_9b zTnUi9Q;hoD@wp1TJn1S`-^}t|XmWJs)~(ZPiqc>D7J0V$9mS7&$5^zP?HUEI3@(OC z`?l%j9`N7N**=p511a2%UAuZDUPNkV2ic~R<$TjL0JNHbohku{RiB-X_FUm{l54ZS zqNxt0;g=$|;SW`z#YryoG!mq^xmJn*>mYQ$z7lc!XHy!7q-=HnUMVg)dgA$8IP*M9!{u)DQY(LsP3&2dmg;sq<)Q+*Gyu zO8*TQG43a(4%mQ<`N24we~9P4!A1S6HY6@HWG#aX0U?4-zGq+)xadDg72a@fn?9W= zy#&EYgHBbboss-JQ3ca;lA^%UGE}e_>Ew$r)M4)JAst5puoq=oD&#@KYn#24*+os; zkce?0UQ|BiRg`bwzJqh{>^nkZp>_s}&kv@Nr8(jkij1-O>7qIogRbZ7U~h&vk{xh7rM_rXS=q95!MkVM}&So;&Yi-yp#9L>x<%*iWL@34-^gRuq5 zYEIj9xqrAo8FV1Xe$Cn$DG*n_-s;jEuCb`X3=K<9fbuP&GdAJha?$0Gq!&{>HJ-NX zN*~O;q(ZQec%rRPukRGcKU8bk z9-7Xlh{C}YP6q##F~W!0(u>{+eRVs#HC(N#-wp!iPL_F(q-+|GO`kxd+ad%%PCT17 zo`Ra&a6VYq-4Lq>-OY1(o=S#7YHS=GnXWGP zo9T*kxtuW#mlP+9FY_0ShQJh~S}I^rOEDR&mN{Q?TP{cMOl+)xQ%uh*S6v|Xk8wDA zt>u+OJ=yg;?wNW@Ih{aS-cWM$T~6~&i}nW?uil>wc`4oNsU9OSG|{hQe3l>HmatH5 z)yeb2XwKZR#xC4~!rRtb*>}1fg*fq!4I@QR*}4jEye+bQw6S~5Q z;VV2#E88weKl>dzS%j-s(^hrrkda!w33yjLOwpK*;aQ zLRMk{mjKVwmCoj9g*6Rd>le{$Q#0f{V5nXCs2TI{Q`IRS%irA97PPi^@B5h!#%~os zA2TK)B$W|&h=rQgem559wNNrMoqQs+$$NR#eeuAQM$={;Ydn0&rdCTYF>KIFMnRCI zM+n`_pRP-*PuDLGF%FuXC4#;suxL3J{uxKxe{SF(9`ON~}_r(v;%+djp09k+ql2^u-n%b`Xt?f6erXAI zBF!0;;Q#U7W;Pi4#TQJLhXe=QJZB5ztJlvybw^Y3M$Tq#MxU@P=NPoQDL^aVKZg+} zBcwdZCf|y>soJ>;D07!SR3-gZRZq_r8=oEorUZ*wm%Kd^j0Nx>Cb6NK&gI#^DERs%i3EOk^P!?IDQ$*0$?_d;4t5pK% z$1brfMBQ2B61Qau8q!olspnfL$m4pdKfIHUc@L@w|><%#8K)6lUf7Tbb`X9HUU!3+AGBo(n4ME6j5)g#FY}#y0deOe8!!^ptGw}g5Ar9@&u6y zB%{%g>Qe*r)6l%h<3;F!aaarJgpK2UT(qt5_#LYhrV?js2TdcTMm=A-Pu zPmjHab?&A?u67}1;O$nM80rteI0|Bb^*FY@kU{r+>3;=OzeB{@B|UpnaQ)h?E40|H zQq7txqLH>8t6;P;`-xkxd0~yZ zqRS7$%$ea7xzl62w%8N4mRo;~z05;j$$m+qDU3=+T%Wp!Q);Om9Cg$3Iw|s1$q{Qj zlQI_6jv$W7DS{{2aLX?G9dUBU4(c{GQZrHyhe1Z9?Ps-M9N6${!^megslRv4Mh1UI z5pDL^W_Bs2@d2_jbV&oC{g)LDEQK<3Ih1p3c5v0k%zVyH(qBkXW-9nNMBqBb1}!eV zjG431FzwijE%Oea9*KDPJjUKI)b;LM@+wS!Vu<}RPiw}Qy3zY@B8tGc>3*68kuHi? zc93J)7u=sfID_`2IsLtR?{7k0Sqg@j#E6KjhW*!@%?usW`CS1`qI|@j?UkEAzpu|RA9t z41Fax8?>Oj(SgzdZ+y;SqeG-dj*HMaR#X1?05~&{Vtu;`+22gM@(g>+tAu-8?~|?^ zgwPs179}-v(Kvqv)*>TRj`k_#!Tu^tm%A-X|EA)*GBCgmIywEuqU!Q(sP>_1)SGzd zeKNKe7f)7fXdL_sBH0pO2D`gDc7ML>PS;LZLXuBYROm`LAsJr|CqopI&Y3v@+2 zEk(If}`pv08;X7e5cRRE!G1ZVzPlPEu1F{L+68i|r zwAJuYDJ=+=GFYy)E<{1bqCgtj-#gY;Pk8^!^UcL6C;aFHeC(Sk8R9B{-dMItl=i{VKuYRZzO_2X@L zjYiD$Lk$0*r#zv0AoT7<({t@qu^2b$JqeNYorVTE%*c621ig{U&NZtKjs!vaPY8|- zC<2+?#7YVjjLJ*pchtKUI^f@cAjG>(~p=aW3 z5yYHtD8$;%o%0*S4NSDaCqTiZ6?D9s!0?Qb?A>vmW?^C(!)sU;8$jfl z@k4X_6uMgM2 z5i0>VTQmEopVlG;J64KayfABDo#}eh_Lr${T33X-X+y1PYAH7cTJE9?H46$gq@$T< zhRqf~gkGTYppfLPcc%o>CUuqXd+S7m!{xF64iZ7zm4oY|0v<~ z`TO$(#!ym*dHY((aBkGJv35#vVlXY;{;r#R$ZyoV8s9g!^*#6pMDcCV?7;Bj{SA$hraq1*E$q{)`s^Pw<_g$I1(Feb`vD+k0&Qf> zeHu+Y;0p_)%u`l9jHff%FG0f;x_Mw;EK0i1ZuF`E%ga4O#CGf28xts+$%vyNyl{Bki0xJV%}rj%ot)AE7$k(Flq-0Pon$C8 zPxF2LhpQ)d8d{ws|D@N;jR`kzHk1@v)|1A7iwJR5=YUd@o$@zNdc(R;_n#kuSf7W- z0<7YFRMN6Lw}7Ws&6yi9`+6PXQ0_{mnfGzV&yIK>cA$i~bTpt8pju087IN?DcR)Je zv|pq4kJbyj6h(UDa7l0HeHX`YTA=jk!B0QqT+Q|(HmXM=q+@?w?i!))lDS!!tS`_& zHxu->Q0dG~wD`Ej_*HDee=X*C*O~*Qu)F*o4~F>lPMwU{k(*bhOjpdSUQPYd;;a)R zfu&+Lmj9icv$*U@9T+=pEj>;O`bZ4`p}b$01;2L68QQR0Hk)!?4EeTD=b+wYR&pQH z!yK8wVnmkfBs4c|6P~$e-$yq76g@(MP(5Y41G#f6Dm3pKw7P&h0F+5|ZK7S%Qhsc4 z+h+8>YN;^xgW8AflJnZ~i8J6?K98lq@RD8wY>EIryy;=KZjk=!n zU6a;5^c`;G7q{NExT!!Z>nk>!#s*=^wGA4;hisj8Gd^0hp^;yYLzz~cj62j-7F+8q z|J1ctnQKSqc-ygzv*hl>eVQC9g5?*@=`Yhc)I)a)QxrliAh_#DXZ?cn&FdEnQ0sM` zU*=~<)X?JnR=&;X8F$C&0R*i%3yU#0CF0mn4ZIPHsEC!&C_m*?WjIFw%KbRxo5z+mT(xn2o{7m4Ni!8y|vZ ztBYqX1*TFo$%bb6KGnGz++E0)gxRNm!c&o)?W(*2jemGWJx9WXg_)i9e~_rVKu0c; zc2(vlZX+9sGo3ASR+(L9g4VtD6TB7Z5MILUCcq*?Lc&{O*7tMLnvh2`He1S^xw*mq zsStf-ewv*~xyx|GLy3A8$Mb0)X3FUOecJ-e;6*Wt+{V|zwgjANN}u%d71&aOO})c~ zF-o(K-dktd{o|B?$j!Y_6Yk!bg6qADg}Lbn!N*Kws+P;*(7k)@KXt$HKl63SRctlp!H&iikuv`c$jC%~O}xfWN_AAM%6#Lq zAx#__gUkleBCasnxfa#<M9z~Zq%267EA(xw!MNto;~+7)*@fKM3l# zyZD}-bp1K-pnL^hQZrul$jn53<)97W?LGGo0#;>W8U3$495fsHQ5N~*jL|0+zucvUtp zsZr!c`#iJ73tYu>9+RnkhMBl;UJ?1tB!WHDB%v?M2;JO<10U&2U*%6v&P}lfTnEzM zot$ax+=D!6d(95a79-LZf}w^==iUd8mc^g~CCNbXm#5N6fH|(bUT!k-UMZzq`cu@V zL9|5j2Z+p{p#(#+<9_nXCej+AbzApp{y8cNKw`5Zb-PlBi>{I!-X3N@NdQj*5SxA~ zVKOzj%t?$7&P+_NB&e_TG@S$xFW<$Q%{s_fCJJhsn+};XU*$e`&vWMenmKI~MbHm1 zcA`QE(ILha^sCb?48Vmjnip=I|AOAF4u5rr7DHH^;iP8ilpix7nh8k*f|WK{wI~;J z=EwBN!+CNLK-6CW==3E!J8O*pv8c(PcWpO=Ct2ICt#LDkdijbQJ3O|fE9_D$(sU6* zNe^?_jjb1`1LMiazu`3m+|M<(x8bl)5Q?FXw=5VHHn>Jps9VadA_K(C@>MDC0<60f zGOs|f+*d10!jK}7cYi)|L?Zj!z7AXi-vXYZ`G60RdD=DsE?pJG3aq7Eqr>rJ95X2#9yzdAu}B5hEogfmo6jOW-*DoU(gu=#TSDltaQaI zrY0Sq9WZ~tObkJx6WQDdt?eX&|J?t_sK89{tRvYjzmr48eVNj$V-VQ8+B%e8;UgBz zL4Fv0>!uUXs8{gZXw*XW*2?lBP{FhwP4E|!F%`5zI8ge%vD1q9{7r;8C`NsI!uoYE z=YF0v>qty8B1>-F0PMfnLw&$l`-+tmTj|~0inv|*J2B~8lNffW=`Lfjyq{lB8~5Y8p?ux1-= zt}tc~W~mXKg~YZ|b~N`JfKifVz?#;QuQis%Z*PgvZ$G&Q1Z!l&lcCa2GLk>^c}Joi z@Lg{x65!enQ$>L9%;eA)ZSvPsUp!g<`DKReM?}hs$P-vOWuZ|mGP;!1t75P0 zBgQO>FSE~ znN$ACLD>5mw2R(?;V#0d1NTk&=LUO#+c5IN8cLFA|La}@F~TKp9`8LE+X)|&$dX2sV>YnNUvmHpxX6HE8GXB>BWiopo=i0``p)GAa7&qQ)0jG00ZeE z6}sp^45&UP-cZjb&p9`Nh63}F9|Z-$hpq@I=MzsG_h6%Un4zDi-7MhxJEVqbFVsbg zCZpHeW-l31LK>8y#hXvNV6RwnQFB=*iLZIWcZ?yhDZtbaZp=>q_5mn??MAe*4oCX? z_wJEtSc%BPatbBM(G(iJUuTzzYoMiLqlXJQGEki#80Yd}oL21tO^z9zPSZ2EL$aRB!zCy;=R!uK3OtAM$2G{_VRPc^-?J+sAk2xn(npZzUsk|LyB!SG-N=bZ3E^E?zQC}$9xIs+2y6&lq0 zWyk~%6l;$SIS~J^F1Z?@QpSW&rR(PnTS;@3uC{^Rx^*wsCGpT+_rljAe&Mx zwdH1y;qpn>k1+Hshmx+Ct9$3+1>chkzq|ee9uM5x7xSpKKAHK5Bkeqt$_l?J{!AmH z`l|_jOVyM0VBLXcHQ_{pJQ`ifZ4cW}w$SqR<~EbMDaMQ2K@i&L3h%TyUPyJMBhNlg76iSqnLL6MWzV zl^+nCl0z&&{aaBdW!71*slt{5Pdek5MIFTfdX-Ep3gIf2b3skIHn?p?R;21G zmUDF4W^{`?goYTa(0)r)_l%Koj-hXuD|V&hil$JJoF@_Tvu%cw;kr9Z`A0Gc)9X}u zuu*lPz=Xe?hH>4Om0N#E==@o(q9R!H<@3~??OE4B+%Hej@s*jplxJ;rzNnB@&X!W? z54qw$Miz-#-T`ZUIwFiX5)!Xj(=cqnc`{E~FVUB#SDR(1BuJrY-R!Ol;m@N_=c%4PrtgU&<@eB2by=5Cl;(+(FniL-H$i$m#uPqdPTIne zj?Xn(F~xyzz61LNz~s{(Q-@No;N71F3Ly%88c65I@~WikACOW+ieI~fXz92C1{fuo zU7%j&sY&2-(<&cn;jy7l-F1=7XK8*(OAbP)g15H>7)=1mAeE^B4u7iF{=(P3w}`qF zW#1zY`MTb-C}@Jm4qiWhZyZ5W{z^O4BtMi=hOpP{`B+#-#fRY8dCq{F-zocF3{bW!Y$mHO8VL} zKve&--8wWl_g#n_0YCL`iOD0RwI(;ipBH+1tRmgpIR3>n;3c@NmQ&VC^S} znR3%9A`rMon8QY^cEu%iNOe;O#LToDwFY67kkvg=sWatr;pRgfw+YwzCr@0Y5r?`m zQqN#!O%G(bV*pYLL> zHm3!VKMOpE5!;#_c_9oM^kai+fc?W&J)UaFWbX-l-PaGgc;;9YaRzdAYqq@(BBtv6 zc|kOb+ZR#zu3JpfB6| zv?G;OjKKZ0Y65hHoC?+RkN|yT?9!K9acwY6J<115JocIoa+yIWqXf(D5qrg+SEf!DYf^a0B57_DfRrXMlgLgQz zNvz<=oj$Jzu#s&^7)9?(3lI&VC)>0VbQ5^;;aGzmxZ`?81Jj*wuXqP#erPkL3?OWL z?H5}cf+>!osa}v>b$uO+5SQ{Em8^RzRtqdr!N!~_DG90KrVBYYw>iKHKC9lImX#h< z^XF4T&(1HjJ&*E^+%J}NhZAi?_{ee?(>6}$~G)IVx6oc^_n~VqG&MTL{!b0lNya~KC;!;Q zlIYW~j%>5a_$bfj>9}1QK2A@~6P6cpvVBqNxc=DsaMUjQ#AE3z0WP2r8vFdQHjvVM zz7_Mh=6VUG#MrbOtBNI1ILqVg&`4AzL(OBEso2_n@q@H@9z(YzWR=J<$PQZ ztW2rjO6#dmnAcs~rZp$JRdSW=`)?ImM^JoU&&i?%a*<_{pl!uk)zgbJaVs#euZ!7{ zAL@E~bKw|t@e1L*E$tXeSpD8L5rJPC zX5HNjLe;3i5Ar#H@ANGfr6FV=N#51LQRm-JSfdip>g@WbyRT}LGQ>BtaEeE!((f8_J#!Za!A@l;vyxKU_PUTe!dFXw zhLjnrcIMKrADz$Bha92u&s0t~W#Mu7Mmf9tKpdnK!PJ*Tp6scXsB3mq$zRmjZJ|2N zL2kBI zA7ZCQQsbJCBO!|qo6njm$W&+EEcmV2iD|Ha}iWkQDglm5Owf$FdU-Z|5 z7nDEwCX?z^z7}deWvLS@nHWmgTD+@#8)&B=Qc7IXL41u~I6t}(`tG~uvY;hz?U%;! zJ_+$zf==PKGG*Y`JPBGmL8p3OXYNDg>$d9mFLdjuUer;W>*vHGQz6;;{&Bhqqh`>< zlvHv8Ave;N=96U?uR|1hG(a({Zy^>I4`J37;ZOzHtw&8XO7mP%LBYq$o_pU9?)2&) zle@b&q=#E}#QILo<_Hx%zKgMgWB4E$V=t``AY~_7ADVZREj{04E+jiEUtoNRd~FV} zq)zbm_PzYc!QOU{3Xv{60PtQ18M<>%nIh^MD z3;A{37-p{w-++aztA=2b5fOkP>Y&0_s$U1pB!_QxV!qD}$kkgb1*^{1HLimzLZG)2 zQ89sDV`xfzbC$Sh$4IJm=hDGtNgf8aYy zB>P;`!7J$4hqHHW&*w6yX=tAR#D{TT+O;YK<+u7q;jI5}=%QKFABBB_?rj2_WV~DV zj}{hhRwEaPhtIe}^P{$dc4lI34F7XI>Z;$GSzP){-DfltAu{mV3LJzLCZ=OG0eAW0Ic=gqkC3NmZQSVjcYM+Bvj5ZmA_kzl6c;0Vj{j1FSC#YG}e= zNa9`OEvo7sWt{4rjkH`<;fIcXZpC6y3PF5ceZw)d>;c%=Q3pC*FhW3%#@W&!c|HsPSb?i<_VF$ELZRUxXC1G`6L+Ste%ADWpwtX&}<;y$JXcM(iS$F z0sGM(<~89-avN?G*E-c4-Or>ABOv(9CJ#}qW};4mkPwIM691iVV$gZ7qelX^xy%nC zvHvn0v)g%klb(G1^Yn%(qm&7TG_F>I3F=5rA;^qXbh$q>LkXuin;VM@ zz-3|c8}L_;MxHdx$c>@GL-A@x1-4EHT{6197V)b()Nt4QulEdg^Dd9<9l0pQJm$~YuaA+|`iu-0J;4=GCl`p>_X`#pE5beG0i ze>2=>mVBNM0h9dQ)(79<_k~y%BLhesk!{D`IIE0NUrcf_3G7LY(bw#$+_ko1O>o$w z@G8ujGi4_Ki*B8%R{*e-8Kisi+j5}oUlaIQnc8AtXwF1VhA^JSuHatN8gZvD5)Nf* zN44?Hf^h&gGiWi>UP$(GshzV}mbuXBo2ARJk|2+kUJ~MNjwcD~>$ePpPOiYTOnbb} zg2{m9mwPm!0Q`Vc#m6UjYfymjLfgr|&05jt^XkRNh#s)LuaR7tmrz5dh%<(7 z7ux=}L+ZidS3+4iK#?Na`ZA t;%h$wcu7ZsC7b>;%>R`gwNI{9m8<04ix)Qf@P{g(d)H92T-_$@{{Uh@IC}s9 diff --git a/src/main/resources/assets/bloodmagic/textures/gui/bookright.png b/src/main/resources/assets/bloodmagic/textures/gui/bookright.png deleted file mode 100644 index 8c255a77cb6dfab982d0040a1480c6574eddc29f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8536 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 E7Yh?KnE(I) diff --git a/src/main/resources/assets/bloodmagic/textures/gui/crucible.png b/src/main/resources/assets/bloodmagic/textures/gui/crucible.png deleted file mode 100644 index c321fcefdd70ee5d192c8828a0a24836a419a5c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1235 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z;_6Q8AUa`8i0cAC7!;n>0-)z&-}Z! z43902*_>Y|G{=zPutCH#M#8%G+4TEU3YP8c>V{oDK{P!ka{{ z%z5^_V9wp83(S~iUOqJEc(22>rhPB?5~>-!Zd4@uy_At|v|%R3B*7CPlYq+4WY+cd zI>eW-Z`jMAnzP4nc?pm^j}cF(H!$pAQD8X0d6Of>?{l%mxp!^~854UQprLM)`dx9s z+5^wF7(6f3Hqhq+1?Yya*XCTZl=HJ@BF0#*9FVbnYY&th4@+y~BDgN`z+u_^O)$QxQe=pC!8cJLWsR_S>~!w-Wy;^t*!nZV+CKq2U$?)+&iRuI;qd{Y9GUu$Hll)Iy4iU-2{!g z|582gZg4z-q|XDvW%5k7fFZ|SEVrHM^CE^EeFx6y{Ii;KA3xlpjL%Sx25(@b%$Wd; zG86mu$2Yiq%5zxDAgR%>{I|dC^bTOKuX+9I(V@uq4C}71UhQaZ159BA0pADVS|!c9 To{uiefz*1s`njxgN@xNAYtffw diff --git a/src/main/resources/assets/bloodmagic/textures/gui/guitrap.png b/src/main/resources/assets/bloodmagic/textures/gui/guitrap.png deleted file mode 100644 index 2fdb824efcb80fa10626b46874f548ffd7e92fcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3677 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 diff --git a/src/main/resources/assets/bloodmagic/gui/jei/altar.png b/src/main/resources/assets/bloodmagic/textures/gui/jei/blood_altar.png similarity index 100% rename from src/main/resources/assets/bloodmagic/gui/jei/altar.png rename to src/main/resources/assets/bloodmagic/textures/gui/jei/blood_altar.png diff --git a/src/main/resources/assets/bloodmagic/textures/gui/masterroutingnode.png b/src/main/resources/assets/bloodmagic/textures/gui/masterroutingnode.png deleted file mode 100644 index 4039c1c44ab1bf471794885080eaa303dfbe01ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94211 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≦KDCLpblu%?g3j5BU6?x)r~TVYMOy31 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

Wn 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 E0RBDF^#A|> diff --git a/src/main/resources/assets/bloodmagic/textures/gui/soulforge.png b/src/main/resources/assets/bloodmagic/textures/gui/soulforge.png deleted file mode 100644 index 641d2cf6df2c50ae578ab3ddeb2ff5be7ac2e0f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25888 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 diff --git a/src/main/resources/assets/bloodmagic/textures/gui/buttons_compat.png b/src/main/resources/assets/bloodmagic/textures/gui/sprites.png similarity index 84% rename from src/main/resources/assets/bloodmagic/textures/gui/buttons_compat.png rename to src/main/resources/assets/bloodmagic/textures/gui/sprites.png index 811f7ac1a6c9090b13a5173817448c508848a166..4bb3d4df01c8b0932c3f49c0fbec0ce787bf9d08 100644 GIT binary patch delta 1754 zcma)*drVVj7{*&sHm86x7X}DM!LbQPdU`Jxxi}fEn<#KZL`4b(!nkB&xwMQEr|2BI zPEG~7LUB$cl*!OepcW`fHb8n|bOddsMG-n|k=CMx0cCYrj9Ip1-yiRnJbCkczxT=a z-r%BtpD*6Yg~# zhYJF6FZIpN|E^~^lYQx68i7J!5P+0a0s|m`_;i4br=$WP79>$X9G#Lvrz1ViQ9kK( zA}))|V(*X*O zf(Nh!I|hiufD8umt}F3BJo=El^{4+|1pfeem2HZv72$8#hInl#75%(n0JCzCbfFR9 z?%EDJKB9gY5nrS>s$;(7TD^MBN{dW!Bi9)9wtBbQDM$QX;pIK@2>y*zm)q858g?13 zeZwx-I;?&?6lvaj&wE2`AEO?=#HBCBW$u;ii}Am3r!q@jJ?g<^E-QXKV{{f7gpJL! zgChp)nqb}fg1OGR8QdO-)~|ZM{x_}xy{E>!cL(uLs z?Za72A(l+OS3K0$7p*_urm4+O3Y!Qq1vr>&k{Pb={Oy>p<2kp!XgheV%=i9h=3^cZ z6=rX@eiX<^ogCs{>9Db=6^LI9(VHM;Tc7@rEZtGh4aix^C+5%+4<+oE`J+SNCRB&@ zMbgCZ%reGeu@otW$#PNJkAl?2ULl0NGI40`%EQO52THL91L~YG&;SwOdQ}n zD`Y!l-aNSGrJoh(zFTLV)>Qe5OP5&I5Yv^Wh4JP^NmpB-NTr(Z9loBuq$mv5gj++4 zAjo~=M%lcVCeF^AMv99jku(!fwGWATJxY@C){rObGys1!1O@`qk z+9jIs)`efgY?}>^0_9^rlD9|2crV9~>g*NtlW}#}E!O6?tH{|+XOgx&Io!ZYwmDNz5N>XexDVF`k6m zfuz>Qz2k1r9w^~a%B2M7jeTR+Q+bC%y8WG>I#_x+o0RpttAdpLnwmpI{aBBOZiP%H zOUugIrqLGpcqX$x(0Q3dTQzYx#PM41Ep=A~4+&TQ$-l6J5xwXbCsUX_V zpgklh0Q8F5fwDDj9_9JZdnOZ_;kkM)r0*%VlY6? zUX$Xqq6J>IVM(N_SQ;_61T37<4(RK2{l+Es)RbXB_FFtnlD2GvmlzX{gP(7bs_oo)96ehpC=F~?%avY)h^;iqI_O$tz5RWAU-yEJU6DK zlE;oqT>M2V^z62;3G;E^1>gSRrUXeHlD9Fq^{1``7Y)jrkPHnAE!xPUyQsBJP8ah8 zJ4VH7ZM&HYU%mP?{pgtg{KOj>*kkj@N|}>Niuqw#c4*=DojZ3pQ1fuKs>@de)Qjyx$LZkPk9*P}9x5@eouMt1jm>3b%2JOCA-sp-o&g%Ek$E zK+x1k1QWduiH)Wq;nA!Az8zPFqZU^q-$lou*CFQU*w<=+yDh_pLlt-xCi=CtvrzU! N-L>b#=E$R8{0Zz^L3scG delta 1183 zcmZ2Kn{m?=#toCXn5@2Up33!^aqHSeY7H8JX%D zm`}dVYm8M~kq^6gI-iA#shMfAp;=0*u7!bls&0~{Nt$kAQks#jNn&DhYO+P5Nt$8G zX(_svW)`N2X+}u~2Igs#b@=U7Qj(IAj4XjB z7^Ybm>6)3Dr0OPG7$)jk8kt!D%}X;#H8Psq&wrmdg_1(1SiO`eR6qHwh}h(O!8THCSteg_lCnpL@ zXxdfe7U-p9rdYX{8JL;5m>U>am^v96x|%qeS(sQlIhwnRF;ZT^vIyZoRqX+Yy>7 zap2?gtJUdKB-NEn+jl-R5b^bWeBGzjV|Jj1;h!5G6C;{L^twtOI~52%To%e5er=iS zm2)vWM8bClOgaz{{Uz~w;JOzjC#_%IG5($_UVN~1_k%OiBv0Ft9L0v}keHFPTz5?}h(v^RGv*OxybN(A1efzTGJ?a?|+8r|?|H^7)Oe8}+~W zd^tMnR>Hg)x8!^GKlc$hwTZbxNWb59{(bu&g)&w(I?M9^Cx30<^p>G)&pz{hUSGGR zm+rPV9(-uC>tpYa7ndJjyuWk)x_g_L8!oXvSbA%hgq+k#eY@Qc_h-M)l|TQx-tLEi zUv04!ThZlH{HeSS%P)6cyj4+C_uzEQ%8*BMw;%g_>3=@0bp0Run7mg0&IK)u9UV7*-r8Mx`oQhNUH?M= zRD6wD6}CE1#Pzx@6N4(J!~auJE-pH6BjuFqvyT_){z_hUv*UziTlijq`|%c2Z@n!G z*I{As5@|U3aV>MbS-zS3G&|wm-StPd?yvJ&-2A%OrSIup?WAvx+OaF+MHn<1*Et_p z_^>l({_gvCDnDfWx%R^}&t}hbC8c$De_3vo+xp1wb6JS?)jwWuLnk*Iu_k`sf14d?EIR?!;vp+B}u)2D>IEGZ*dVAM4@3x0T z!^3{=`v=7n6+O0UZ@uEk@j}k3;+hm8YQ^5%F$ zuKPTisUb)H2OY2xnU-*;)kkyZznLfHZ!HpNocQPQqx8I4%Qhy<7P1!zHavfxzS`*; zU%Ru5i%h?}b)#SzgI=8gg9FGjEDT7Dgmv$99P3MC`R4_OhUS<_cXu+J0kWF^{r_9{ zUirojR*>?BO6&RO3+?9D|2D2*D>y9vzifAJN5}Ew$2&T@=bzrR#e?I3Zv3COt@q>J z#5*f6aUAFc@>uWX{odc^!1947K@qH@y}i9#V2j`f9|p!9f~k?mUcY|5egD<__wPUc z{P}Z#oj%8bo^poo-@o7g7xw?hkB;rzx7+{PtH5At1t3=ZN`^R6F7#*K; zuXxYZS7OLvh8~J62ZS0J7`RKm+B9rDx7Yl*%%>0+7cWg$mm2GegPjh~o)|2zR=V)8 zprfPX@y8qgB-6TN9ey+MJUk*@+;*-|X+k;!P&*R?2ZI6@h62MhU=&0ss58x+{8wh# zV;68tGx zeynEd?Ur|g8-Ffj*rI9@5`s-oMH$MPV6G1TJ Z!2WD0(FL=o#T9_mdb;|#taD0e0sv;02c7@` diff --git a/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back.jpg b/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back.jpg deleted file mode 100644 index ec52a850ff9b4bef0aa67138c4a66be6b3fc57c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73272 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 Qq_~JNC$&Aj;{R^{KbAE$=l}o! diff --git a/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back_over.png b/src/main/resources/assets/bloodmagic/textures/gui/thaumcraft/gui_research_back_over.png deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/resources/assets/bloodmagic/textures/gui/widgets.png b/src/main/resources/assets/bloodmagic/textures/gui/widgets.png deleted file mode 100644 index 4c80a03ca37d5c71d5b08430638dc66a59dac018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25852 zcmeI42Q*w=*Z8k4N=WpGXo(h#QD(H!gNRNL1Y?Zejp#i}2$G222_iy*=rw9YCt9?G z=+Q#-@}K1C-skau*H_lNzO~H4+BefBx$T6Z3(D$5ZQTp|DffcU1oj5+{d zpf521d|dRKzT|ssYa{@;eoWRd)6`g?gl$i3O5Fk5>y|xb_p` z1NBOY^*on@k4YA#;`K3n?_<=X9t+;W_az4;+#{s20SQ?Q-{d$J4Im90Flt8_PXnr4 zfDxXW zf!Ad~eHSTV5r9tw@Ti3ZvIE#2fYCc?^TJU}k{O5vAu1 zxfbhikC}{(r;ld3^Xw%6;4{j*_lOfze92b?*VpDK?TzI+*0Xp+){zt{FUGHWob*FLn~^%gzY{{E?U>Z%{_T|YVOolgxN zn~GVNyPur9Z#*^|DR)ptczi(D&(w6&xI%}6d|K_ILxfDi!wudnrUz0_*qg8Q9h*!| za_(b^O$q?7EyXZA9&K+?TrA)F4GFMPTB4 z+0lsorN0zgQ0Hqp4kOS92|E6IHS?e-`}5olx69AN>`C_E_$hDMs{PJkOTNP=gEM{% z!7vWhVUED3iVxgjd@GNAG3+WsTL`%t)2+t>@?iB)O@`a@bl+f(m_ot&vXzfT-T}P+ z2SL?x;HQ2?YOoJPCDIkop_lHd!&2U8ES`S0v?i z6m^t`<)1TLzRG{$<2mR#tov#WtV~hQZ@pouys+CuZOjV}){*CA9=sSy1|szck#2%s zz4$80wg)PkRr z@jE97bp}x0yp@%o5#4{uoXULL;?+E=^1^uZ73J6-?Y{N}x%t?6tW6gp;vkBE)(|r` znnY?mYBL%a>Q`}!*);uOG_9IEQ1DXRTs%p<-EAF?QVvgw$L|TE6{1<9X*ocexi7L` zOuQhxy>Yu;Gcwme!>d5{HlN0H?zs;!dADCAt1fBKYMAAUJP&?h_S{ZW{F(Qi!w0x` z8WkH=q@Ss!6&g-gw=fVQXo_7q8Lf!(f}H&Xnpg@uM?CLwRK*?ARfWM`*+qBrUWU}D0FtXfIT2xv|P*lOECrjtH?%iV9 z{N(&=gH`!eITvy&l%tgMQU=W$U$2+8mFAYwyq+1x9W5xeDfNPz8B>{+H5W9lMAbxj zReFUV!tjWLN6zQb>C$;Sy>TQL))Jmb=t^1<_iEmZSpb>obdz=u^G%nMwX-)_Bx@x0 z%b8J`RX7D~goHh~<=@U7E5@Bj+cN&H=8FRAyTjej?tR~r6N?iYmYS=r@{Yh=6SDY|4n#XGLrMHT-il14@95V<3daRv4^tvp|<;6C9l}c<& z%rSLZY+4jL!8>usumf6O_O7g5rO__MFmO`Zhxyp#*!{Q{$nm{~VTSdo*(SNgU`al z8oh~F1A_y#gTy23Lv$|nf@1|-ddH-lCS~?yVq_)~&A=)`uecNhIK*CXTZ(>!R`OSh zw{V-@=@`&S*12hY>#`6xM*+mvx_0tlc_Vl#d5Un_gDMX6?ykLCdRN0{U=C$2_eDtJz4n*Lz@npO z+psdwm1w*+tKvs5aqe&tluBjKYwEHMao`o1A+=5GIv>0jipfj4-nraS{C@NiG-);U zc==+(#m`Slvx07EbJ6L{*1WV7DiU>Y8zq>gz_}izh5J&pJhYUXB^XvqgtrN10=<^ThL-QD=z#7_mcaLdl4->#9)uQl;BOl)oPinnc{=Ri%6cpRZHd+-> zDqWFTCt6;O%xUZD6cN{arn#xPrwLi<8!v$m?b!CN(0WvF@qZl{)vMk<6l<#;y^V2O zX~1*_SciDb=SznwJ`B+H!8Fw)2d^*5oo}VD zJxX46;Ub0*-wsb|nPRq=ar?5ceQt953bF9Vdk;Nce#Yykzei_A2eOn(_?94>sFAR* zXRKGL(jnG6xH#c{AU8@+lEg21$4y~Fv(4h;f`5OM*|+Y8$ORV{+TLfdSn|kH1HfNaIAtN45tM2Q8%tiU|o# zi8~%H9OOuMn{>0JP#t9)wHHuPg1mPImWH}|<9gF$zr{w?*?49hF4iy6yc%t3Xt`3` z=E?^)*worze(N&kLbsYZNuu(_lfj4W*nGF}yGBpWeiThq)G;Qe}{~b3`%-a0_rDczD4KP$6!xfB+QA%gMmY1Lg!55uo7CNTo^m8heMsj#|??61wCB^Z-A3S}=00=c-jaJ%qv+c}znz(PVoARb;2 zFE1Cm2A7kYEeh_+W$VQJi<95{$RM2%ju!SP3p-neAAaG+cFrgm6Vs1|et-SiFB|*c z8?tr!l^vQQ$Q5o60(0|#{=rB|>2xz2o4>VmLfyEB{v^Nl>~9-%(sZ*&g4B^tcFv9n z@=2@Apbz(^!qkc*EGBFF^>BOzSIV2CLff)63Y zD+m`v2nq53*3h4v{YyhCjuz;=1h@WEogaNMK{qA@g}}ikCj4ATu#hpA06#w;7aBev zmw<_}DOAuH3>5$)erw`y-26*Z@)l0$Xma~gl%ZqoXXepBI{dZtH-)vu&kSM@cXUGj zn3yo8-)83TDd+c$^26rm1Q&)Qe&il8#E8b0#wS@kcTq8`4 zA$%rKV=hzE9~%@f63QjSZ_L957vO-z zHw2_)r6E!f=nW}BC`3q*SNiWA{Zjf@;C~*@(}qjb1R-o{=V${*iCNgd&5$5_TQgD6 zABBG!{~w!9Vf5;cUWwp8S6y_>{7c!%`Z_;Wack$F^`X2x=obk5q(h zpVcQ#|FFDmYk?Bu{k63d#ecH;u`?F_IjJ+H<67>5q@?R$1?|YyB$%{X_ z^grqKgs-zkP5?PwJi~Q5pA*_MTql5>E}r2!ozDsF8LksRP8ZK`ozCZk_6*kvAg7CG zxK8JDLVJem1d!9kGhC3mLT&v2apa=Lhi z>vTRRv}d?Z06ASe!*x2J6WTLeCxDzTp5Z#3&k5}rt`k5`7te5=&gX>o4A%)Dr;BH} zPUmw%dxq--kkiF8T&MFnp*_QO0?6s&8Lrd$oY0=(IsxQ#@eJ4Ld`@W3aGd~hx_E}` zbUr7vXShxPIbA%%bvmCD+A~}yfSfL#;X0kq3GErK6F^QE&v2d2=Y;kQ*9jn}i>Klu z_~XHBq%HbsY!~!n*9~CxCG;cP3-^01^~VR0I++EeqR6pXC44pGy(wOH~^rs zdt%ru3jmkz+?0{jbp7~s+~bk{Kr;Q>s?c_?N~dCE58~McBb`UDhu#@om1Md?Xh3;Q zb<4lz*86uXaYnC-CtPhP1Ew{Rd0(B?N1W}O1FfKM^<+7f?@d!Yuz5&9B>&OmJ5V#M zg9-oIiyzLPu)R4g*4;*5wz}+5D5Y^Fsz6#M08zfNyWF8c;vg92PaX@YVH`A09O(Y6}zaJv!R1i{#QP zy$YS(a1)Hc0(g|j3YHppi0;GVcH_I}E?`T3+g8Z(Z)>~xQl}8Jv9Yo3u+j#4l=$?b zLhcu_8AqA{OA6q%N!!JTk&y@^Bj87kb!^E;Uugk<249N=w7--&N%rV5Q2ybL@p9|A zwCQsFp&Q(>?bgtVi6Ue>`hk|mqGeml!==PPd|kJ*XD|tU3tzV=R({E+(J1ec4wQrK zM77(fr%TriFodH>h=0&kH|a9z1-;20mGKenq0|$@{!(2%hCmtDwY47U)JpcdSH%xL zla$>&*W^6neRXZokfhk|-9~_sCGgA~)|!w9PsG%Eq4B7ivQQH%|EYrR2C_Y) zl|BE$i$TbER@#?kgDhBl)$0Gxjxlr;@VdS?p*c?J)qrjp8eiq8{ zK*kIP^pRap-yqR%)-N?tPkf;n5hk)D>L2Ro~(Gc3;3%#VG5;~swag6^B{Y8%$p`9L*>X3GLu z=AQV^lDZRJnMR=|dh1~KT9T>}GB7c7f4_f-`)zez?D@+$5}f$b*piyL(dq@ow`|f7 zimSU~m;7w6b4R-c#5(p0igFKXrRP1rR;GtztEWXSoa-N=w_;MAdOph>r z^bMT0cSBtP=`O5Z+R$10(nJ|iw0N!NF$!cl;ZgE9f@p7d}(^7Whe_v@jXQ zKPoV)ZRiGS@m#IuSyUd)PDag8kUt&N`HMkF5Z{HMA!qOO(GK_h-J?n>DGOrg!<5yRWDr)7+aIiY z2x2b4wv!m681kShtXo@KERtCbrb`7lSFc{~mR9MN=nQw4@Vj`^p5<-S3h^@*iU(bm zK$G2+Y+AbJW>EO#a{_{FYvmrCE1a1Fw2!3f*Y5(oOeqZbs;`C;^DXnj^xi)(kphoI zMr@HO#k6%aAxe5JbHkdAi(uj*l?Oo|ZoZ}Jcz!FTdqxkjSUNaJQnk&dmxEf zl2Sv_hh5Ltt6@mL5CrFaW`DQL*+BeCKcQa&eQ6N0>~+B!26=amWiv=f*9d8vNvY{3 z1$p)o#xv4)qxZ6(D^$#HQlhMg=s>g)Dmaw4a^3u23;3BOLI|>b*)v*)L~&X-cymVk z^4)3-Td=)QAx&Eg-0X=c}Z7G*Hz zl`q_R#}*_}sMEojmp|0wTyz~j^Bj!zq4Ht0HI33rt~tvjVJ4-B7XgpKl_Y~_CJI=W z)_Y{qlFD?+0&@2ua`^a-q;P5`e9ZfBd+P_-Pj1+Q7Oo zIPB9Y5gnp-;@ID`&d*eLbUonj)^cT>3_)E{!enV?F3S0umN^Kvn0X^%IPy>z(kpC3 zMS?M95x5njX%YBrTBYs*@Tx{jSv*xIW0@|!Fs?kz4 zj%Z;6Y!J4;#0`W)uYNSEZcUPeoEgF8)=natCsc(t7%J{ld{vYT`y;qGIQ=|5Yn3k_ zT@}`r_AS3oSJpAYT_QEn{r_$Bqt=8HP;%=MaIR7tln#_wycX{3olBcr@l#pnpDPx z7ZF-@hls`nAPFZx2-GSL|h?&=l@3mdA_lBfu#xAppZ< zFfz_n22tfpKd_UUwC0&g=7&;_d z${FgpSIuy&M`bg6-|4GfwUwN9@UHIMfn<@(%F3djj`g)H33aSUsxUn8IN+;+r8)2Q z@GA*M1Tf&+Pc@z6)GsG3Sjs3Xqmm@;r~+7RKTq#J14%JuHLb1j#DEMZ++Gyj0x=%Z zU}N|*$PYrFZ5O+&8W@n?M`t_0*Za$3xhIrd*1L?kZ64ppkT46_ZRhs9hxGA#KNk<6 z6N^#8tm)*oj~+YDkTWBZA0nJlzi-3J)oYXf$x6A+D5+F^5$8^4TbZlqs-W_{i$wL; zs|=c1SB}1z);6uO@$WMA+*!h4Ad)^9aGF%MeaJF+$G0qvUbxGEVV|w*!&C`ieNqfRMl4%l zhRlne2N;`ZuIo1Pd=gY1%G)LFb)yD!mkLs&d|0PcI=^pkZwy?kB*m<^G{EH)#EQ)d z)jQhEnf_@wxy_g*n#s4VwYb0gqri8bpdxhqUWQ>aV1F0N=PiD>c9nJXY6f8%9w~Z* zKSOJlvEQxXCqpFR)HIksS~(%feyx9$aql*rsqFt9_@)Ah!6vH8*-6d-?KG< zF9`xxQb74u^dZlES+!mBuOq<(p2NUqu-G$eJDs=5Nc1;O`;!;fy zMO<$E^vSWjAPkTG;J){CICLsqL(UO)yb0Tj*sr|~e98fh<&j(w4sBcT7Ts92>&JrL z(AM)lTJYd6GHlx-q&Uv569SfT%V&l;Y8Lr|sWCU(moY>)20%-R;@_(9{Q;4>ZE;~K zh82vLdS%@DRc7>WaLKXXznAU>H1QSX2?;QRde{QR40MZeMO;?M$8|f)cc20htY!I- z_MM#`?rOKmIkoYMS4$4B?pA3TI<{RSl`?93a*b~CgU3QvEK8mE?w6?H5-aVZ=~3IN z+ayFppXPfrslA7IfqIXYJaingMThDfM^D!08BX}2lc_#;@Y|VyVV_R|)th~{;scK7 zlVcYjpCd7>KIZNCp!9*oajizUpwP<+7;M;k-g_uevKc=dyr6n2np-=Ic zWgm0f$K(O#QEeI}2SelDc%rRudxuCqFDBaFbjMnr-g*00@@wUm7b)iJ^jDTm9Zw~9|gtnSaHWVF&sg75W(ARpVEg|sm@WA~1*!co) z2IG;P3$I5$OODI43NTDNW4qpp3*yP4{_);FmEZ4F&HW^->IpuQz zGHhfv+$B3$6G_xL*lefA{5gJ0wsp+zSX~`ycD=^v0Lin9kV?yEO#_Vjvz3O+9hiYn z%y{>h0UokTfRwcj{2uJ$7oz-H3)e8rZ}@!>WWFyXn;8PWPMJThH}6W%zk{kfT* z2w`GEUQ)LwG+1yqfZk`Cq11LfNQyBMebeQ7fnJEV;Q`IF&8oVzhQkPOfQTKaQ~Mx8 z2>PTNvTl`FsRZb((-<{mkL@xw1FjnAmrx>xk_bh zQi57DqiYCDo&@6xx8XyTmo=2_TAOf_XMX;x zsg9o;-bY_w|Dd4)pRDz2^JZaTnH{rJQ6aG`;b0-<@;M5hycq;jT=|ZwTj?yrO9I;0 zJ`No#lIU+vuFd<|v?GvjF<0 zQ@&Q?V%4hb%(wRS2|aP3k;h1v#eHudu6wV{B^ledGZ9J~3EQH+Pm0beho#c-#)*$0 z=n+%0o~)&-a#@AU3aiw8kY!Az>v7f` z#`%LIv#3KK1=FgvXa$^BtUz?CITo2|bcStiZl;;N#Y8WjI6N>|;NvK6AmNQbEUgQq0Mvtrm^W7}@5)d-FYv z`ffAPIyLUjeR~Fn;jMhIpbE+!QOG_eckQOSsD3SV-Qm)z-$jv@Lxe-l zU_KG7$!#7Q*&Om)t=Ve1`v6Mrt=G54*hNHZ>!)(Dr|RaKW{lXXD})R<48-AjgPbX4 zSR1blhdCxvlA7`Cbi$AKGB1qPF!If&ZWoS+iq?mdhzq zqT9N;$yqH+XDUWgrWK%di56nrvkdb!WqemrIjn0{{e3~jY-@A^D{j0{o3s4r5>W3% zs6E}~Qiq3yMPW|HHfN2`Ug$J*Aw-k-S@%Y&<*|jz^RGr@rChEek)M{c!g|ch=S4(A z%U+U7e#%f~%h2ckJbWw^%A-kLg6+@nwQ_s}cP*;SQsNUFwR!bh;Jj{_7w)I~R}`^c zcka?odDyzXqIC1C8!IL2i*en11+pX=vkl~|Jm6MdcgfHKbYgH?9Y}*1l~XPU&h4Ui zT(+5hSbByn9Xr%x?)iurgG#*DZX2fS^O=#DfPv59cSY^ZBG#0Us!8M8D?fX(F;q>` z?0JQm)pT8ie#e>U{-xMJjPqJ@PX_DsNQ`O^M={wh_4<%ty?CxGeXiAk;eOM%X;!c< z`?OhUQ^o__sfP(Q@0w(?s5G)Jb2wA!TE%6LT!6r?5#9oEOcx&?(8Jx`F@-cTb)D5x z2hqvK#&?>Ajk3y+V|i;-yyzf%Kzp$^>4A@{2a!+J@gwTQ7l@@E)v<3&n)CC!y2m@) z6)gvs&#STkwl&|i4pU+cm32!Ht+J|lw|o1G0iX3gE$fLo`pJ)bF2ipS(1M9ty0QuP zyp&gXYg1t$mS(V+SV~f&U9B6k>E3puk4DHPNYl(;agXH=OFf*GIWQ~gTP09O-tgbvefRRm^!FNAId{Q#mn?d z)vE95tX>Vq33+akh*|0OTF?s>MU}z_Zquhlnw&X=exfa_ifD^rZFMHbmbtD@6{@=6K*Pl zFFqTzBxVl6H*~okMg_NYBoP1j{bM!XVdq>2Wl|SD8E`55(mnkWf_tRsBNetJz<$lt zEVJK1UE#x$vrbGPopwIv;=q;=K;gq%a3?NkQ1=|8Nu_Glfu1vMB7{%|6>r}`t~!=S zD%C{K9U3Xgza4$Kkt&PG%mkGmV7F7yd$6WzO6|C2#6MDMIiO%e%|g`ZyXx_%uik&; zlJ~vM<%%GBy4sB~we@;DyzlE^Dv_)+15H9x&qAj-8g8qjjaPx+;Oo5b<|NjGc|E9tK diff --git a/src/main/resources/assets/bloodmagic/textures/hud/bars.png b/src/main/resources/assets/bloodmagic/textures/hud/bars.png deleted file mode 100644 index e4e0e7840c873f8a2b351a5e55ea258a922a9f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6558 zcmXY01ymHy^FK=9kS-DA=mrI8@Mx(6Dd~^~De00H;ppyeq#Fc|qq|G`=x*uy;rIWa z_h#qq?CfV}-n^aNeG64ml*R_W1_A&8Y*`sem1pVuk1<|6x1C_a!DsQpNM2eJunpJ) zEX;I1raWsfzsYDh0svTq{}>67lJ@FZiS8t;Acc;=z$HTA{}lj~d{(`&RMT{lu(Po- zwRL*#0ss;YriMG5o7(vqlhkNV))f!xaiq^DLT>kP3e+s-3|s(ZB(t z=zOK;sS^weDTggSqQ+S4>?1-(3wICOdAp7o8;+SPAGVvWGR{#ss*eK6(VR~Pk~o~_ z`?%TS09Iy~L@19Fk*35PVxoAI<^r)K<}!d#h6_B~hERvZ$W+_CzR*n$&TWHUx|=Z` z8l<>6U5g8Lr1o^ztJSGf2#LZ02L&-DfzfBlZoS@FAuj&pi}OGnu5ft(OS~xA>*14L z&|3Ouawf+=O|EAQv~b4IOzy@A^PEU1eD!74*xs-4@ob5pmjJ!rPMiZlb*ou`q9VLM z@`^Pca~=eD57XCEgDcko{9dP&>tnm*VK?sT2gJzv8)aKx&bNkt-rs+h*j&L0>QrKW zk^F+nw_DW{O5KTGv|^~#+17{tgS?7+i6H@)nVC&YO~>=)6Khi_te0En zltNq6u(&0W!pO!xE_zE4Nq?FL?D$w|aN%TpIa_-;%QrA?1r`nXa-N437Z=x-IefJG zZQj1d(MKyv+X{?|Mx&aHL#w>KSzbGAyC{F(?Bndj$mwIPal?|uxd|W-E2gQFe!2H2 zqA^_`X^P)<6ttjKYn`3@$Hc4$<*>_Np?5Q{k~0iI`*KBY!6l=8oABl9?^b0$%Luu- zpWRMd+RWl=sXK~~}*7rY7`Wm&d)AgaFB6k^yD?-fZZJd~JPlWvG;DTfKA3hve z@)doJlGUo*o0eK;`Cqk(xO%kxNXuIMiAiuQpR^HnX^l`rt?s}ijk-ijRODAptK^u7 zo7MgtoBbkfY}FW=WGB1oqS{1DNddS4=rI-p6RXRpZu;v^rNEdpi~B9djiFL50bD*; z5GvUkl5~Oxgw*w3CQ^{YfEEQ1Yj99@$b9SUVIp1~?Nb|{)(=bnKK5^w9(RF-{%06t z@K`uB6h}scQm_-dH75B%^GwTAUVHz&B=&3#5Kg@rg#54iK~uFv?nWe?Evtb&PEdM|QI`A;l*r@9BT9zLq1w#Kw`^ zqKj~79{=iZ-^9|#*EDVwaJ`upUxpsCfuF^xhsM9CSb8by9|s;uYd|>MYTnKkq2)!_4}c+_-Pc_o@WElnQf;vfMp-|6jZpmTBx(PVA0PBA3R$z)Ls}ndYrhm)z3cCp!s%eXZ<zItnx9 zop~~v;Ok-`0oXEU6ygNFOsV3YFVDM@we6gtNWB_IeuU+L-j`!-3dGugl(TUX&rp~#rN#Waf?8?UtsZb^M+ywr&&7UBX^ zPijS9_F&mHgyXRD<_ec#9y`Tq5q2xk`CRVq598Bp3?9;uI7(T54VM2JMF9H0zv?+bqgYe+LRFIKbNQ;eCuWOw!w;t)2EjiFgT*`-~nh@~Y^hZv_$i_65 zJzX3uCim~SH-`aWLrf~Fst-0c2m0W?cjgbSJp;3RBCU1m__}-Vd7KmNmmAe2^0cLF zmC3By2Fgk9XWu3iJulE1E|}g{7H%1YlmGd$`1UsmlG?d@u3{qZ;aGMp10&$r?``)k z=<0N?9Cw$`tgOmGYHU1~cbpW|+N)m9&Y&`1MBGA<|S8AHaIH?f+b*uk*S~fC1~iF%{Q7H7M%du zWe{ZSuDmG2|2h8F$7afc`)^wv>+^B+SkI85<280Iam&;hU}yIp`92CfaI&};P^XB* zbCbr^SVpY~8i2)6sH#y?jd3&yZZSmA~$e>l(CYcTIt@I9?14+XU*%ocZYB_>q=Unuc)E+b>Gnz%T zENZFKhMBvMF3*l49P4g9_D1ON$;%k-O3@O1|1NEB48pCPX^YC?$U~HK%5*$fQYybN zB13xPGNnJ7ama&PD{bxrSD9&O#1-tT;-jeOM}Q!KKo?%`RL|rJ^P{iy-1zNjgEh*} z_^Zpp0@t&00B5v%mY=;sSc#L+{2_^8IWeP9nS#alL9usNHJ5IJ^aWf4x(F9cVM;#G z{oNT{@l_HXO@{ZRT2=Jf1&zlUI9^BGqI>_f# zONsdzOA#|stJB3w7o+=h=-E0#gzEzH(av{F`y%{d9r(L6fI7@w?~~)zmG*^z;XZMeXZS64uvcKeKatl%2q#hna^)CzWDd zPChes&Bk*8#WWVf11k~0J0D#>52uLir}qmFyn*PX)%Fhzw!57Ms;P!+Kmo%x23`nBtNC?#(3}E?ngzA-y|%B-&lWp%GwtPJ^aE z4X%ELJSs~7+3ofEAGYrAX&DiNB~b+&!;SBVTfSj^YON0K2*8?)d8CX0_P6nr_Rg&` z)p{%oiA=Qd3>{wH1PDHdV^-dX*bYBksuXH5g8NcxVvU~6l~ahL(0>PK{(Y{%uZNNJ zdCwUrU@{qAhm%ix+b!U1LKo%)Qc|A_5GK5Bb3fB+viO_&J7>#};gekh$zCi5AroAr zzTCz)NIu^N2lYDik8-5Me>mCeXoedg!cR$E2!dWr?p(gmS2)=ge!|c$g?x9ms=G=Q z_IzK6a$EiFQT~Y-pNYe%<=U~5k}vanV>q$=>^YoP!U`J<|8wJc>Yldt7<9y_wwcX! z4Ny%qqsjx!*G|Ny?-OYV<`!}cN6}2RrwJa@3C%+LRgmC)3)(!5LbPuc4$$EtWJ_+2 z+R`tucLIiw%4=56c8i72;R=5aehogF^QKxBUPqkL9+ggh()UZJDuh}FES&6oXhnME z?b*N@35eI}xcu&uBH!>+YCiy~R`PCP@xs=xV|0JsSzN}VCDzIZv%M_3Lmy-1*7fq)`)%*Yk&dl0Le6BJRMlI2LSQ!1Hbx$^CVO;~N zo(WNJb*N16j04xGypozDP+soZ;_ixv(a+11e*C)%p zmO#h-8XGeOufFw$OQKh#yU=dL@H%e%zVhVrqPY0xg&`?*nyQmgZ_j68&ND5<-ET)< z`q@++6k+-TSI3|W*UcYvikXXvei95Ll z^sa@(4fG4ARd#nipx@4uOz#%#lU!Rc15UgJ3z|1(pVcr@R0lg-E%(%4&wUlY)@pe> zFV~qjz$@SKwwhnOs_YdX9uCu#;O{X%B1_G1ngN32&`yfgq_RI1k2qi7Fgs-ha6<$c zmPrru4JYhRVHO&pk@LY`W@NM-xg!7by_mSax)Q~ngx zHjG%R35c?~*l&U-_k%-h+k>Ixf3}13Z=A~-t2(JjTAI^fKprf!@O44&TFyzLg@ zIy#3~f4Z=Z$`u{tYx}a4Wpdf}_%4uM%q@L8+MnQ*eR|NxAYZZ@oy+8-N14~#hp^8+ zZ>-(;sk`{gsTRKNk}fs$FnUC)%XlWgXc)<3{y9|7@0eA!i{`)EDIoLRepX0#YARh3zW39Mg@5h>+gX9bgZN)jdp`ff%*ATV--Jn8v7N*wBw-){7SJJk1dDJ83-47}_YV1eJe9 zW#SSN_+TZ{%vaiMeQn3IBTb&f%Y?Z*nOMw(n_bHv`K>j@p@i_W8y;nINMG=`kfD4F znyI*i`CtsJtvFiW4}N-;j8_crAQF~GWKI!AQzAZ6PfUc-hJtL0{4UbdH3pCoW*5f9s6Z-X~QRgXQ(fN3~{j8*9?lh{>I0gMI(BoHW zK;r?*m<-{~sG4d5t&V8Dlc@7D+Pr(FQAMl~5K7q1C#L}enUXxo2(vA&gA5@70~N_q z-jwh1oTu|{z+o5241stal`#L9)DCn?it{er^`?g?fc1t~ZG?iR8ipw6hjK;=2j@>o zC>N6Fh9bfZ4K{(LpeTCK|LOPtAfU_hrOT!v+%UAtD;DJ^3W zFFx-6{OKCQaR2_YC$*Bep_qG<^5Zn0~vj9 zB;_iP5MU@2I)_Yz{Z85G&+8*tG)dD?*=LBS?T?3n9p)MQ(?3niEyw>i=w)lXm{nETqhg^6i<#i+ zpcOBwY#Ni6{I=|rP>+A}XHc)G)3~2yIyW>dZ&Al@RA0QglExu)c!xIiRNh@U+t5!_ zZV);yt*mJ+R*2c5y(LlN6q8;Tu%FT$ZB?BeVcAoRjB8`mO2J}1Jo1)z28_n`oJWY; zepap10Cvuzvf}3D2`5(hy>T?*u??+<^HkOOo%rLa>4i?c@sR~HL5gL+uyWVdu|vhq zcHruvYGe9ZI1EKfdEk{gvlF{Nissv?&6fm8C-wbpVut@L|Rv)L8#odP9=yv!G( zxo#k@x1N_?*B_xZObj6XD8*2MT}6wTkx3gr0U@D){YZ~MG1khF%yxnhrQs~;Q>g)t zlC$S^l|iZ7BITBipuRDlS>%C?N{y1@c0yv$)wA?mkoyP95iv|x@i7xRAdUNM$2fk zK6CFcXSIQ2i}=Y%`QpkYzuRSBgqs&|)j`lQ<4;)D7h=X52RsbR<$`t6kprPv&DKNl zEbK_vg37+Fm53DUiTMB6q_92YgbADZXQGB?n2rCeBHraQYF*^;4Q4~ zJG(DNOeLFn@YaHRAF2E!>Jw%g{dFQ{7FQ8RAz`94bqg5O{tHm7AcxFY?QnAQz4l2} z9>+ApbUb0b4M!D4J9m;r3;cx^Se8+&gZ_C2{bWJd!-}>1I1SF{`3XN4msU_^c(+EX zu{8z*Tjfjj@BGjUq^O&RMr+w5`v*fnMr&I-D&i6tLD65J*GwXVf%9g>Y+QOe(Pp<+ zuGEEZOL-PWi7Ss?dH&=p@3FVni^K)_-i=p3@~HOJ@Uz8`8e74bh{=a02kyr{;SVQ* z85Cn%)mOc^5Tko|-r#mEwM{Z_-l6HS$b1_yt=*>>+#S%5ClnD5V=BrGBhbHZ5?Lul K$#U^8{{I6G>cqML diff --git a/src/main/resources/assets/bloodmagic/textures/items/activationcrystalawakened.png b/src/main/resources/assets/bloodmagic/textures/items/activationcrystalawakened.png deleted file mode 100644 index ef212c7f2c6a320ecb3d10746b9987b86c9a1733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15410 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 diff --git a/src/main/resources/assets/bloodmagic/textures/items/activationcrystalweak.png b/src/main/resources/assets/bloodmagic/textures/items/activationcrystalweak.png deleted file mode 100644 index 895ad35fdb293ee8d187e8e884cd704569cb3c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15408 zcmeI3X^h)M6vvHJLAw-a;X?~TVA6s(>h+O0PFyD_8)wrKqD%@c)jW z?%lqeqGa35On4LN^JU#G_G^Yc1^O$+66{S;%DI)2rf&cqJq2>66$||E+)Dx4G-82u zVwy{rk|1vm%{X9uW+bD}Y|x`d;M{nhQjuYRBJec2QY=`mT!{s$ab<{DP8K-2eg)!v@J?}z ztURU;*3&^N7RY;ENoLt{x!hk4_S;U5<)hIk%L%L?Ft7*XZn8YB!dUK#T98H@6}Y-% zmORt8Xg{ttWlwvtK)_Gbyz0+YETz-URF+$(2RX78t;F*E99t~1-8@}y473K>)zi&v zDgky3xc0Q81K52<_duzQaCG&jokyV5MqqheL%})22kMsJ(3?J`X{S&HZRjj0fFjJ} zLI!+S0HwU`*>2wMk+LaQA$Cjbnb{ryeWj-xsF*$6e5K}At*P2nD-cRLEnnc6u>7@x zYU|Vfa}BF;DD)eqAq%_~0eUvb=)tJO7$5|gXpj?`?3Au$gAp+z1*a6YXP8!1)l+pz zAw@Vo$%`TvkvN`Dg`!+45{>d=QWaAPUJ5tDx4CwN9kyIgvvg1&xd}%ejOe^5h*M02 z695yAhIB^L!(qmdw6GvZQq~ZpM(8&8j?gM_%#FYpbnIev!IU(|1%C0y0*&fzuCO}Q zYWd4%moaf!1L&H>L^L>@a3~}&Q-Yy05+BNHMmQ7+hc$)maBqzXCQxd!@n7ev!@U)~ zfurq_JBww=bUoYI)F$|Y^0$(4aQWQUhEOo)Nv_Ecu6kM1{Y@(FYLLDUrLC1L2xPb5a#Hq7j% zxiLCt%a7646O94Sb3^mAc|~dO+ZM;r<*e-#H7{-!wH#neR!(7Cjcq-f=YpKH3$_D? z1>!-4?bh7YtFc8U;8y6bQWu$3f2s$x+}zgIDsArip+rLBqH01MNDTU0awH`2iKMEE z5-$xz2I0QhyJ+UdZy!8vbc%nh`3DhP4O(^G^9tM1*7ndS z?%FP+u9JAzb{TbTd0uFlUR&X{Ij<6U4)!7!(y2ZALvt%?c<~oY{<1qaFmZGMi_T75;Y3kh+wangn z>ApdVI%4&(n#fc>K6uC5YX-C>TXwvop1B~k;+FlJuPWUB_3;Z9nI|krU7Okc(~(c6 z?|L`z;~6V&+q-m6-^H1?4s724hH};fz5S}h_@k+Xk8DZo&VTXQ;#c2N*x(xV_w+r# zgTL>4W$@}}@*`JVanw?C?8@gaP}PgJ%)Iu)u07iyf5N;j_VzhPKdyW^s-}%547g%AtGTA9?w*+b2I?_{sIFKX_;@b>PPI-UBE8cInwW zmp;5m6GIPvx$LgW^QU~E^Y`C+?1xVs{O084EAxAXK3Qye_w9Rj?X)v9^3!{CdE3{Q zy!1LaG_bR{BY4V-0FYRJDeI( JpB`Ah`CrPD+x!3k diff --git a/src/main/resources/assets/bloodmagic/textures/items/airscribetool.png b/src/main/resources/assets/bloodmagic/textures/items/airscribetool.png deleted file mode 100644 index 7bf1b9fedd285ef9226b98570f46cedb04335476..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15377 zcmeI3du$ZP9mkgjrNw|1B^8h;l;bchB;4)p-R(VA=cBd{V-wC;eiTDe@ZRp6Z^hm2 zd3SA}Es9bIaserhoP>rz0)@zlLX$up5m8Vh2#^P9735Y4srn#E<%XD&ln_E6a%b;3 zzB@Bkl|N^t^Zq>Z{r-NlpPiZAe|AS>!^+uZ_moi-HM_np*aXjan7{Ab4*xE=HZH)^ zj6~f!ouX#mW&Wm7Pw$&YQN9=DmNug;w3-*yxLuIcFt8`%38g9@A8 zs~AGkrs#{(NwRr@Ko>PRVaTdtG4l#xwaciqTFpYaBXeExL@1OirRW)YkRzQG5;SXP z=y;qi<iq7~h6beXH2LZTJjKru?Dg7@s!iAvR% z#GEJ5rNvU9C6NX(5QlYi$bc;gAQ4p!RgbEZl+1OfAeJg@$dO3^nmv=+KvJH>X7;3Q zsX3Lt)qV&i6yn!tGMxTGEU1cI=5^Hv1F*v`$rA5i1uqaIPMhfTd2AAJ0h`asaJEQT z6e3P9=k++letOb0`B{}IRicEmiVHd%)jr0{RkQ30SCy0T)>d;>K2OkH>k9g^=@DyD z+ImGd1Vsdyk;`!8P5>A;8}ZoO5vOQ#NG`@E_<&>!a{}jM9dNZso@{EwUX(frG`Sl{ zwVE1FEtrI$>A;-4mDcR+&8@Hu)ztLo<>E0#d|@|mIXyN(bVO_}&LzMx!NnSOvTh&n zI>ayle!9q>9}_I#Pj^fI@4YIr=d)*VAeUS`S?XlnP_Y^rIfa(|xboRR zP%uEAG~2>*yvxBmomtYkBxz+qj*u$Jk=}_pitm=015p;{fX{PDFoY>(LA6L8N#rA{ z78i_w92YtOolrXbbiNT$=AH|DjT%!mI4lrw`sq^5h|7E;n0q*!NJ47KuztFztx(@) zZeFpjl-}cD-~nGi;E}PS-G$b5x3;3)h1R^YRgsN=BU7!Q8F879tu%~g_^Jj1ZjN(u ze!8%^(9tL-L98t(!>5^UZX&EZ<0qHj1cnvN7fX<%c53yTO95L_q?Y)o)r5upNt3#EaL2`(%mR6uZ{G_Wzj zg++u42riTcHYT{Rh)@B+h0?&r1Q!+&Dj>K}8rYcN!XiQi1Q$vJ8xveuM5ut^LTO-Q zf(wfX6%bq~4QxzsVG*GMf(xaAjR`I+B2++dp){~D!G%SH3J5Ng1~w+Ru!v9r!G+Sm z#sn7@5h@_KP#V~n;KCw81q2sL0~-@uSVX9R;6iC&V}c8d2o(@qC=F~(aA6Ul0)h*r zfsF|+EFx4uaG^A?@hx$czYCo)wh_U9^OV#H^<@m zQ;O&>{P{1duC;%Aw08Qoi>E%fZaDboHy${9 z`N+-wUunBud+l>eVE)1PE)5-7@E>LW=#75|Ha@%Zu`^qKcWTS2#wEdp)7QT=Co($p zh4SB}pUk{5z3!`%I}aY&@Je%Q>+V&H|FtyhmQW}FuP~9^c>5FWURt)8V5B9FkDx0=g(>n zMP2v2=bBw{A?6<6`loZ{)4%om>sKq@_FUG7Mh0H^Y~$a%PuxB5=BL{6uLrK&x8?B5 zolA$`I(~EM;3w~^pY7Z8Oncwr)z6Q--M!(}QOmqp+CP6iw`S#lAbst3A3mSlz5eW9 z4?J?$4?<79KK{Mq4>cIc`1nQUSl!^>Kg?R-pLOm1tM~1CMeV%)H}1nL-QC0Y*PXt4 zW5l!Y(8*tXtY5iJX`p{NesjjaT%~>NT`KYq`MK>Qb4H&1sC;I5|F#GJxZwEi6Yq>2?u=~kMu#tcaDR0E1Fx=sY2VKBY1H7F zhc^f4zOLX{?9j6FPgKmg5?p#Sy`{@H<_%D-u~|YiZrRL zv^K+_;NbuNe|~OH{Qd1M&*t>=X)4zk)Kd6X&SD3e5m4usS9k8jB#Uf#N!zE{-7^>bP0l+XkKb>A^_ diff --git a/src/main/resources/assets/bloodmagic/textures/items/alchemic_vial.png b/src/main/resources/assets/bloodmagic/textures/items/alchemic_vial.png deleted file mode 100644 index 3062b21d8f4cfb9411f7463ccca7a95451218cac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}+JEQTFn-eEwBv%n*= zn1O*?7=#%aX3dcR3bL1Y`ns||VipsUSHD!TE)Xarn;8;O;+&tGo0?YwD3`1Dl2&>s~9#gB(Ht@)o)*HCC7s2FB7gEuYDY{ZrMuh znaea8x{KZB#FouRQ2E5re<9D*ng3xK3bzXmL*rdZaL)<*=WvW2JJ<&%N%c?E1 f*Zw?vy`J%`m-nRCvoh>~4rlOm^>bP0l+XkKWa4L% diff --git a/src/main/resources/assets/bloodmagic/textures/items/ampoulefull.png b/src/main/resources/assets/bloodmagic/textures/items/ampoulefull.png deleted file mode 100644 index 049b2d75e3b2e307514c0dc037e1bae398364eab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)35ZUNPLhcKF{cpa^Gy zM`SSr1Gg{;GcwGYBLNg-FY)wsWq-iR!6PeUy7_(=Q0Szmi(`nz>9>=t`4|I5+V*P; z1>QL1QYzefzc*6Up#(ehCV}2rv3Au_9u8z|B(W=ti%{SjzPPPckoYwoUOw7;p4A1>P zXITH8?P32`zP+Teg{ZC~U)u9ov-x&Qfxj<<`J z-28aMV>9AYSFSRvyJpR-(4{mt#QHj$yZ`>G1SJQT6YR=wvV3PPyAp3Dy`YijzU=dGevjDm zX3W{TVJwr+Jhl?uCSZ1EO8b=?KW-f|Fsc76zK_vmW=?)J#|(d95HNVU`njxgN@xNA Dz=4m9 diff --git a/src/main/resources/assets/bloodmagic/textures/items/arcaneashes.png b/src/main/resources/assets/bloodmagic/textures/items/arcaneashes.png deleted file mode 100644 index 43025e282ba9b41a6479b1ccd3b6025865d1ac91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?kEP)`HXO-~DAoV~0kcU& zK~y-)y_3IdQ&AMhKleS-AsHS7O11M6%qP{%Nfq+emI=VRU*Rw#P}C@ zQK^9nfQayDsGfI*nUM_<;r?1d=AS;6VdhVEWMh7PMP9yrEju4}C0BSTqb5>bOI%o8 zkvlVU)IT-=2m}Iby?D;n#-{q~67$arvbwm8oVvK}VLd_J1Z zCOg~P_zV-%Ft99(R4OHB1buOFzPC9%Y-5Vz*3D@`p%9Tsgnqw|X__RHNqW5=uIrwi z;6(r6ePfR?40^|1KG`;YzaQJS2?m2C5($dMBAHAEt@Urgz$?ry?!z_bUH0s oYqZvg2<38Fd2#AOf1_7^0zHq)$07*qoM6N<$f_7%WFU8GbZ8()Nlj2>E@cM*00R$6L_t(I%XO1oXp?ss z#ee_z&D*?9Ta%ivMVs1M-J-2FwpLcPRJ%H5N}V#1S#h9)4M7C)LZ%FQGsfKLC?Y80 zb}=uUURY$%6(_D;+c~u;igB)`Y1LVi^dnzy8x!;2#i*!r=juFgp2LCXIq(WT9!tp2 zQ&R5ey)FS7YCX)IW1)V#6M#*d-8k*~bG>PXG*-QV<+sPO{evbn&4glt4Y%*h$IV;B z)=S-TVnG@8xWwq72b3%@{jx#nv5WH3?wzcvtE0d^8%;<$TMn}O+8ud%#}-u8%*L}p z`FnMpNTpK$P4INVn@lAW*xfD`Ew7<&VHpek%Q*SbhqN4RB{C7EwW*nRZ*<6@-6sIn zu5_WSskF20?x5`2w~Oi;KO$GB{rq{xvaoD%1#PEJ(@<2z5}yx{Xo)zEf)wTDv^kkBBCPuz3hkJK!v9|F&Zru$KHVpjpOX&t`T}~85kTVelARG=OghbJDG;9tB zAeo9!ux@=Lx^5;OjS}eV#cH+UcRKjx!6Wt^In2cahiMA_CCz4yTwO(R*&Wf zIYWPcKjFV0kDPh!T$*T~k0jBSadf-AbM%iK+9~QC6>9L2;1{ zRaGhQy13ENK~>{=;)w(ni-qCfFlNofw_kk8o*#eUyE#jRk(wql9!CLi^>oOy&F}Np zA|ILP7@ANq;t_PSh9y6bYkyqDX|-V_3`V96rVN9~_#^;g=8SvguwC_JeCXzn-mhy zv`UsNYUpQ~j>fQA@`-5~PKXuae-q5WTWIC&{C{iP7oXzcWbC!Ne*m9-9HJipK|cTh N002ovPDHLkV1nVztb_mn diff --git a/src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_corrosive.png deleted file mode 100644 index 7fa94bb5c3d700340c184979fd146d14c61c094b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 932 zcmV;V16%xwP)WFU8GbZ8()Nlj2>E@cM*00Rg~L_t(I%YBn?Xw-E8 z#y{WhZ@=yC=We@k|GMUl8)lnsUEDEEx5TEGF)=M+9LdlKR|H127rl`JUnG)b3Q-M7 zBgjc&p)Yc#kqteOO?_d`8SGET+RoiM?$36+KihqK5fe1)dG)+_czED>9(V*@GrQGi z3;R^(zzzklVXd3$Ck@tz8~|+D=E7k!JQk6Qy)9V1VC%E z6ZyikHr^O+SC`-HV@;q5%>+N3IzwFDXM@j2&+#J!t2ffRawQVbW=gPIax^qF5Kq}C ziRJA$X4B{k1zc52_~Z8>*1y!sh1<8dpNaGQQ;kg0N3*>d4T((Z0K{T3giuJmRHw>r zMFRO$mbOisFv`rNlW7LSgE%UzG}-)|`|B6p-TMy5y3X?9$R1Tzreii~NT)T^Fk8$RhQZ*-I1}j@2lgMPtEZDsmYx%l$OO0Vq>%u@D;{;C<0SPf z>QKoAG)cI}=B6(eYF18(fhLPb>UOT#$KZi$|92z4Z zoyJyf5b*n{YqWz94^3Y@`h`y?Usbk^cSPd+Ds}pU%a{!lfz?e^xE-AM{w({y4YE~! zCH~W3d$o%#W((gXlkB>;OU+LeIsX2Sbn)&L;nagjse&T14X zviV-S%BAvH%vBWhWFU8GbZ8()Nlj2>E@cM*00Rz5L_t(I%YBnwY*Tdr z#ees6;e>z?O|Z%F8S~*60Rc$4)P9r+G1NTrl;u_i?6ky?EwO4~kJi)@82uZWqrt zPe=n_G>8?B6kGUCnvD8D)`2_#(gI-URFi1?^emxJ2&dhKE{f>?wx6#$n`mr0j=^N0 z>z$_wAB;$2V`FHVwzNTIS%GYJ29L|dy6`G0!*$dIA7syK9khMiOkz@FS92>v?`;?E z7sn-l&2=8+$3sq{eGOvYo9C$whA|tVySoQb_=`|okP}^PlvUMJy|xMjWb#H_wmVc; zSCi137^ey@ve`8A=~)~~F~iqJdGe{v3=a*H%Ot1_J_N}DoXa0MnF4Bw10|pO{{{>4JC?D*`tNNorf0Z4t=%*C4@?#yuvHb^QUCw| M07*qoM6N<$f}bm^UH||9 diff --git a/src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_steadfast.png b/src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_steadfast.png deleted file mode 100644 index 729f4fb83fb8a58e722bec472a3c8bc77d7f23f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmV;U16=%xP)WFU8GbZ8()Nlj2>E@cM*00Rd}L_t(I%XO1oXxn8N z#eeVn&p&C>W@&6bnudgot+Qp_NB6<3vuu-XrEV$~Aw`N#ab7sRQ08{g3l&7Pg`v`+ z(#}t#Lbz5;Px?TXfyJ8*+BTn7?|sun>-JWpy#~x>zWAz}*AM=z`uf9|HH|~} zC)8`dZxQ)?{=W%U71l7gFpqS3sA$~Ew)<8i>zg_8ZWj-|(uh=jPq&Y%BQduC z*mbuD)6NYwbgubcojCgx8@Fr%DoCCBgllV$(zLmWhT|t`Y_V`*WQj9C)|AC%&*Ss0 zWhPz5lq$Gb$jp;jDq*g4lAQR3+Ffl-j7KTXZk#zCcR9{KgR)A)T} zDuW(0O+(lN%#KA^v3@tgYR6);k+^h;Ybk@Xy{~fM;D_`?{30H|%CFH365xPuM7{k{ z7Y%ndqDlrPU4z^lSaq;fp+-k=d8(PuWl6^hEaY;`%+3KImd|+nnX)<+d6Zxd52NFci;u4)um6EuCWrc@*t4#eKQB(w*3!=(7bl6uCSZ0N zY*hrCn-Q)i5aOoSmp2Ya27ID@<1t+4o5j9+dWc4&41PDnV&XD5os122vu)p$x^YL` zTBZ)am;F{d9~cImk0sPxImwp;&rvECu~Ni}Wc#X002ovPDHLk FV1iugt5^U4 diff --git a/src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/basemonstersoul_vengeful.png deleted file mode 100644 index d4f1683b8cab0ce49cc1c07073e30f292dfc57d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmV;b16BNqP)WFU8GbZ8()Nlj2>E@cM*00Rz5L_t(I%XO1oOq+EW z#ee_z?Mrz(p=@obZBtei>K0rWWgECoadX5AnID*l^JB8i7%xb?Fka||F-DDMw-~p9 zb1uDUBjB2gq5ah9O91%WJU87=*Qx0L?9AT--D&((R7^PJ~goCj_};pnrn z@Xp(E>Zw)7+GhFu$S*t)4C1hCqF^eabKo-LFTWt4K6M6F zl?)y_DtG;LQ5c3%Oi(naSz9Huyo}pgL9=fwo&zoHbGv!&)6Y2h+N&fI*J|%P`&*=xOyJ_U<*ivl)4@|7K@w?r8*z*aQ%fnREY(vw_P%y!@MI1IOn=BcW3&U6O zxSUx04XCP0b%~X}KPP#j`fjXdGZu@5f97W~=I3~`r<*TddIjJ2r^L+6JXb;~6o4OH z_407zXfxX;C=kH(h z)uZpr8+XL5&(!8|(yEv7c{0hsi*Lx)g%lk_=g8-CWC|U^GS=sFyXr-^=Gx!!Z!A1)~g0R~A3~HgK5H1Pg zhE10Hw_}wic-8GJJk>CB_&6{#@GrI8*x6i{)owx?yyCBEEd56+mlEb9qhw_>fNBBUEKOfO8IfKx>WMD?)!91+2sdjkWlv zQ>14Q7uqE-#^B#H;jX0Fp3_wG-yhOK%WKQ?T>Z^o_yk{=a42!4j3xj8002ovPDHLk FV1mMck~07R diff --git a/src/main/resources/assets/bloodmagic/textures/items/blackpudding.png b/src/main/resources/assets/bloodmagic/textures/items/blackpudding.png deleted file mode 100644 index eab4ccdd9e41c7db83810d817f5fa04d88045839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 669 zcmV;O0%HA%P)ZN7+D;c zP)sm{#cqv=1~p2EsE|u+K%q&&)^@30xW-VR+?_+Uy&@R>Z7=VAzTfk7q|MBlo*GeJ_gBU6DWISPx~FzHbVjz173$^}Y0+m-6Su z#;)L1d~^;uEQb(y%C=Hb?j!i(35Mhp!#DObH8xC3pI$6rckO(%YI)pcC>}47#5}QN zlKO*(2+z%8$S!fSZjyM^CJ^gy-O%;<#2WzGnwoh(t&-9-^dD(V$tl|Xler-Rcq{#M z4H`wRQ!`=Onwlwfy9quEQKcvV7>0?7QJBGa*FMtPH||W$i_=D=Y>Z+BTWD`}33Wsa9vtYlUh3_YgY$q8 zE#$yksi0@)IJSEy^@@)`=@vdGKk&6=8xvtQ50CYn6w&ZF@da462kFAy1OZtlySB!= zM3SZLRbW|UjkP>H&@RO5&=3HThz^oX0AN><8T zaJGX0Ed#xU7Sw6AXfsj`k?6<#dOf`9TlklBIg$q}@(fIRRn3!NRLSi&V6Jw+l zAqu4pP&Gi?=}hPQbpbXEvLNy7?oIBw_ndpg7{mX-I$GSGoi!IHCunbVMm^iMnYvJ+ z*B?+BFY{vlwH%$1zZcBaYG(Xgnfv$dvb_3(EKLB=mWAVtkt7NAdIQI?c=>8Uas+qg z=FFw3^E`d>kY~^5@qC|Ru}GRGq-jDJMA(kQ&FfcKSbRsf=h9eNk&y%eqA=pa$IrxZ z%;QH7*!kIEr_;gr1NOTvy}n1Y*`hLjj&9G*dtd-B2mpxUn7zGymcB02bzLm2iK2)& zicumcrE(@JfG`X(#^4VF!Z4)W-eNcm5fq|qly-3YE}6+V{xt9SaJj&$~>#c3%q$CP(?doOLH`;ifPi745b_=a-Lo6H=IfEOHWzbBflP!o}OaV=BZcN>npg5UIl%ZRKi`x~b+aJb1cFEoQ^?RP@ z_x?Vv#+Z{888IsYf}lu!w$>z$lE522S^Ul&`I`}kSV31HEa$C4IpYRUx`j6bSnp)k z025#=6{Q_O4MES9+Vcv80>e_8<(*O{U?cT9T_PHS)Tv$Z#xa#*1>E`9TIP@UU*X zOR)1C9AIS3e3_s@L{G=B;B*-bPl!3sM4-fwVP3|C5mFp;Is^9_v-Suk@UI(Bwf5vy zxBzAX9=^=Yiuth44}!(mJzFSXD0)LLbKAwFFeO@^Epq}+&}%h_cp|mfEwqeaRDiXT zC`(dG)B@xHrASxb5qJCDYA2;js|Y_NU0>6k!Ec1%m=JNuUaa97k0+MWRZ;nv)odjFrhrWCCyb zzoElKr?5bs{HJb$TVgQ=rcb&+Ts-L`z=_S{7P}-%6Y?emg%;_x>3QC(AJ=v{qH?3Z zZAb^|l`geTXcI22*k|*i?x;ynmW4LL{%)X)3H=0C{0tHVyFr4fJbb5ZN3E$NtR>x@MGm+mll zxJ^E5Tl@7dd)V8(OQ)P_@E<&RKsGpdwl!IK|F;ojf68oKi%FMTdw<|$ys05t78m#a zzDGWD?&h;YD`_a9X=NkR&qhD2oU{Al-k7+ZC+?(79S-jkt_~0OOlo?&5Q*K;`_iYX z2GhkEicm{4^>bTQR#i8bGF79_5sw@b*=P-?M(ab z>eqAzyKK{~l~{ zRYY-BWbL&(E2gzfyMC)PVUIP+&^euUE~t5N y^*t{$ej_8>6w}gFxgZKZS~YSUdQ_7dIu-h2`)I!-Vp(+HU#{2XXqy%nZ~h0obWUIZ diff --git a/src/main/resources/assets/bloodmagic/textures/items/bloodpack.png b/src/main/resources/assets/bloodmagic/textures/items/bloodpack.png deleted file mode 100644 index a3c2b1148c5056ed08da804f650ada6308113aa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmV;v0YUzWP)>BO65~nD2T0~ zkT(!D@q@S?i=7Q$KDJPF;Bqf>XYQOiXKqX4Uu-mV%vv*R&7b<)62bEFh`39 z-=SL~PhyG*nUJUCL7kIGVnSZlnvgMBtK1R%Adhep4|jKsF(1J03i2InZTJ||58{`Ff zwX>6TG9@#zPWH&-dSI=`&xs1>TFWJz$5(7|O0##>^EG^4sL)Q$L6@|j*eJrj57r^B z43gnYzedmaR2}S07*qoM6N<$g2ht3y8r+H diff --git a/src/main/resources/assets/bloodmagic/textures/items/bouncesigil_activated.png b/src/main/resources/assets/bloodmagic/textures/items/bouncesigil_activated.png deleted file mode 100644 index 649f337b783ed14dd1c95c74aeadc914e98d2d7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)WFU8GbZ8()Nlj2>E@cM*00J>dL_t(I%dOMRYZE~j z$MNrMHk&tNY?9hk38G>_lfHod6P`r8>ZPa$4|)`=C-LITp@K;9A_xkCXF*Y_Ab1iA zX`41^D@19vR`asiolSOUJXC|R^`y^j=J1)B=lKo%V~O7v!^NT=9LQ4rwA$SZhr{G{ zW~eu8GU*ggp1u%U0;3}%I^CDz#Id8yExtzuJ^&%p#6LNM_3$vWv-4P%$+PD#MGr7G zI;wZ)`Z;_06jQNFgoHt1@Bq~tX)+f+;`tqFvJOCXqK{g=NqJ#G02sfNw%6vtqsPR; z7V&#yM9mn5iGa^H`>9Rtf~kWDA;{-*Jv}f0G|-Zg{d@P3@5{00asyv0-d#7@5sh>& zn~WroZf7&#c^+D899Ob*B}L2iSihApmEz0t@UOgH;|=PZ&I2qlg(u4 zk7vl9U&nSN{+%I0XUYI{l)q_=2Eg>I*8-q(u1w2m@n-ogm8;>OQ?O`E=8;~2QVJ<0 zhGFyq073|q(5$X}!EO6E<1^T{L$hfEV1^8uQWA|sdY)l+B_Xg(lgPynIM;?)v2BXQ zG_GusNG4f1K27TW5mp;(J?S%l4@CU#FiXo-wEBwD8dtXX{;ff+*2KJh2)4u8dab7i zU7$2SF9NM~G-8oTCDAINRH}dw2(fXd)|z-MiYvXX{{p~Bp`Za&5a26?VF=>UFiLO4 zy3ur4tW?Bbfj_Yz2oQ#WAq0U^%$3W6|5-l(-`DDx7}+i#00000NkvXXu0mjfkOVh3 diff --git a/src/main/resources/assets/bloodmagic/textures/items/bouncesigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/bouncesigil_deactivated.png deleted file mode 100644 index 8b3ceb944ab8454bcb18a5e0b561b2fd54363017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmV;o0!aOdP)WFU8GbZ8()Nlj2>E@cM*00J9HL_t(I%dL}5PZLoT zhM#+9rc=sCVW!v;(Fn33)FRQuty|r=aP7|cCtUhlT$s2v!Dz&Ug^_5Qv{0ykBtQgF zoOY(|Oxruxh1gJqm7d)>i|2g2?}2{|aXPt{&+Cb7hTZ*xUd^&Bau-}`^#IpN^J4L} zI1?~mC}?La&Ha0KSl!qnR$TxL(_}?0a?83)xx7XqVe<0TlIR0mpP$zkbK^XE_<$#i zk8#~m94Cz^PVi~y9RSjhSeA);@8Z>bD(mY4!2C^VM{S-ydybv8NN-JXq^fkXhfM7) z^v2zBid?yr!>jqdngq~5BMiAZHH~Q*Y>s@u^8%)i7Z^?2y>AQH0i- zW-DZ5a|UThZpOC}!eAp)WN>ikqz!1T{|4l;8N8ZLsazrBx|oJZ(OxEKhGh3<*&bUt zS4Ii&=Iycoi1NEMnhiRg4wsJ#Cn_Y!?#&WL3Lykx7$T+Y2LK2m=(M{WeEEuL85~Yl z2!bZQ9{^w)60J2!+wNPV2arP0?I_y$eeCii!BUEG*C92KU~qVt9p@u6^&8ac^*;BR zrwuW2Fvs@iU3C17SZi8ggCECrJkKX5XJG`6zI%N)=mAP=YeH$QlXil1dKeumN~J0Y zfe@mnKx!aKD~!(m1%SfboCb)Mq8rCZDM%$PV*Sh3b-&3*wJOd9{0UP^A*4hKfr?{R dD;2^2jGqv)-2&v_2(ADC002ovPDHLkV1jxcC~yD( diff --git a/src/main/resources/assets/bloodmagic/textures/items/boundaxe_activated.png b/src/main/resources/assets/bloodmagic/textures/items/boundaxe_activated.png deleted file mode 100644 index b51a565bacf874cf55bf532db16dcb12e4e13d46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmV+l0`>igP)8I}-Ug)!+aC0hdWc zK~y-)jgn7DRACgwf1kvRja!EbgfONNe7z}>QEcVLh!Hfwg>G6XwrCO5A|!An2({CV z;Le>$E|r3CVG)6#Gd##qWL9S6WQ+3Ydx4!6HA7G5jdS2`zI)I4&i!K~aW4F6`Nks} zd1lV!Bvp)Z-kVZ}xH7~gZ%U_mRRwg^tzoX{;Nh@d(yR<|dHxIiFK{8uwT`;g6U(xc z>|%L#jeY*QkDj~@)YVlYd%woj8_Ti~EAnQ0l@)#x;WvZ#+IaHZ3ba^JK>7i|VgC?c ziP8j|U|4>=ftAn0@!hh53Ejf+WA()50qAe|#%K2`d%!L(0E_-p>LX*OE_8Jlr_JK` zJ}$T4CO-8c?!$ZLw(nEKrHIQbZ-Dy9gsFN5cakZM zjXY9k(pKqhukb*-Uj`LecV)7znej=bueU1fgHoIsVme{zhHa5^9M*R>&3RWI5NJ!Z z%C;=BjzhMPH`IXg5ZjZMZlzMJJGq+40S7m)wFn?r*s7Ua{g7(JA5caZdNo?OZvX%Q M07*qoM6N<$f(9w+=Kufz diff --git a/src/main/resources/assets/bloodmagic/textures/items/boundpickaxe_activated.png b/src/main/resources/assets/bloodmagic/textures/items/boundpickaxe_activated.png deleted file mode 100644 index 54c2a6eacb004380b4d6aef981f81bc05faf2f6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1484 zcmbVMeN5D57(ch07zqm-I`kx4R~?Z+ukH1|S~=JqhjMNQH;yR`zk2O^T*tLNdxb0b z5d&M)AZ|JhX3Gp9GU7Hfhcipm5HNGP3Cy_<13}poHL!Ua6Sm2M>jCHXhw+a!Y2WvK z-skuHp3m;|6s|~`tDCFQXp&q7&SG^Oh`gST>F5|7;8GnGJwe4v68Y;g2s z7YuQ%4PI?>WA0EM2yg|p67bd*mN2!I49UW|IZ(DjsRno;(~!akg)pVq;3>P5x{rxb z7@AU%D{b(!Q>AVXlqX66GU-hSgBfthLh5mok;L&V$bjJliespOL~xukS}5EM%{;Km zCb531*tvX$OFh}(fGme76pch8`Us&Hr3w@$NfN~jsKJ1!8c4WCkZA=G!i(b;oFL3d zTuA0b0g73qePWetgH=zbL*PSh_d~-%cqUP5%20(4p|~DHc|I1`ly+Dy2LHP8NbPV* zO$eaHAS_l%j9L%>;y75%-Q$U3imEqMk;JJ*p@UA5sp5ekyPP&yz0tEAOBrz53K&0u zFa&8qSYQMQNnj?#?_+2`VKrGTgfDLAQFs%M5d>zoU{*7RP+lIibTuciVkDdqtI%}7 zP9SmBfL$($JT#SJihBgTpY)l5k+2{%WAGzJlaWSfQmwg z-+_)NzZ*ECOR?Cr_ZRmLc+2hRsNHrPnoO*_lIXCHoo`S^TReAe*|n8?aOu2(1LJ$o z<|Wp(Zh!rP?%0jSd+QoKmkOFYPi=|*j$O6f>&?Q6-M&?s3Dn@~y^TWo# zaqXJVU%9cMCw<(L+73T=1cUY*J;@em4^AR>V%^~tJBAmu&SA8ttu%ja`=8Grv2B)X zvC$gk!+vkenm1>Ew<@WfOuMc9aovH5`6ufV@Zn2^skeVg%t<`AvS#jEgY5T#ilk-w zu7>fuzM|aq%Xj@Xv0yB^YT3$nmfSD<$hPproo{{-NJE>}cYk~1R$uSh?2(MEjs|#iQ|PABU>=?I zVnhEXGHax1B(2r*_7n3mOS=;`=cj$0-vf1+DmT<-4qpFatml;WsrD@|JGRfSi%wjA zc1MTtjf}2^!%fA%ElE+ba}(-cLVMRd=sZ!a|8>z;Uv)$?w5N>nIMNTYmi;|v2lw{X z?K}L;^^2*9uI!G~zf{TTKK5Q>dS_R?ak%ZW?WXV3FL%oZ*M8|MZJ>PUN^t1N+2*z) p@{`r=(I68V&|%bQ^zZU*vowS4Pyf{F)p4=^t1G|IdDO9??jMSXAdLV3 diff --git a/src/main/resources/assets/bloodmagic/textures/items/boundshovel_activated.png b/src/main/resources/assets/bloodmagic/textures/items/boundshovel_activated.png deleted file mode 100644 index 05be9eff996c179c6559d800022339267d8c6bbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1478 zcmbVMdrT8|94`sd59iDxzEHtAz)fUIoMR@_>>=9#VT$ZwbXTBme-QuJC3nBq_w)ID zf8WQ|r{wQ*cOOymFk7+~N_o6T@>2p(WH7uNKz5EQ z22MaR!SW7}u24jkv#vs^(6OALc}`7*Y}5hHC!-aL^u+-mMVA5za)V;lOTu?forNKm zA>oynL*ww7K?!TC6hK~Owu`PTrEvycya-AU5HbM=Bnk>}WnPg8knkukAyy zNTnn^=2W302Qu>lfG{?bXc4VeC0nS(pjV;-DzBInX0QN}7FeIe z@?I#!NV)k6iG*cO$F9Kn9FE7tUU587a>$SXNHl#g<&3q!3FbjZ^c)`W6SXH-$N)}zv6dP+s%a?ag4)PMt%mUaUGkK>vD8#+XG z3JKN8f9fW@B^P68`nU_^#p6B#Ub%S$xl6i-b_EoQh~Mm%3|FA%-MnSCxw%Txzi+l} zur4||Be`Y0vaijyU~*Kwv*KVxAQVM0=|Q3 z%O=Ids+DVwyzxTgRg?I)$I|Ft)HQj}txGq=pZAS)CV8?J)!WWc5G4Jg<=%LsV$p${h+R_9jTwvd!QjAzioeCE8o9-HoIYfyvamu zZ?1m5;Y6@AH|1n@``MOF+Rn?l#h2ROQr`P>;8sFk?}n4LpO(b#uZlg2d;7O161u3}nw_6fMM?Mj zSAUo|GZJgMu1@KVtAMpSPMBWvRk9F~Jt^b;H#^S_KiKf&!oN0d94cq0IjYYt%x`Fq zGhf@WCU(kI`{`Npt@Jwy#M~TZ{)6>J);ZUX8O7)nEv n_Pq9c^R87RH#h(Ki6TmY^$cIWu%!G-=+A1mW?K$t7QONhksKU! diff --git a/src/main/resources/assets/bloodmagic/textures/items/boundsword_activated.png b/src/main/resources/assets/bloodmagic/textures/items/boundsword_activated.png deleted file mode 100644 index e47e75d719f482fb776e5935f629da15cefdd2fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1541 zcmbVMdrT8|9PdEgU_OYt;e+Yr5C??oJ^H+pg3xPi)gnR#%$Rb${z`AqUb#DHQQRir zJDaPDZ--^Z$6QD>#>X^bHs>ZXx9J38oNq-x?x+C-yyOAkyP%9Eop5FblpdgD0uPWFDBvmgid4V=_w!QnJiLv5;5_51xwze>pqr6^94B#IFzK_IdPB364PCV+Uw#0UcoL{{K@632U? zFeBsODO6`JYOEEf?PK*@uHjeK}I8#T*!HyykATSXXwR+X&`V_ zz-bnE57ZxGihG5;i*#s#TBSo6mT)0zjhaCiQqH+Ug=%Q?>R_6MG zj8IBz{uKg4{wK3h(^6SaW3Vw1=@LtFG zpT0nLwJWEGI&-q?di#{ymY&)-qxSl0%aXcYMRLg}PlKIvs1F{-%}Ome(Ux$wRNYG@ z#7uZpRjcLe9k=&AX`c{l&p2`a;3QXJYcPLrp#Jk?O;ctBmK4oW zw|91}To&aU_4CBUGyAv39RDbzsBuJo{H$joPQ9}|H*<5x0r6aidtJrKJKs!Q_|=9% ze+!OJp`A2Fu{XV${)0Mo-9kUc0cXv-wG1fiPL*0jhoOI~IgYJ3T&$`~ry8L(B zxq>mSB)BL$`Ep%w+xKZh>t?hyH@2@>PZ9BnlPq60H4ORiq5A6A4PaN3u{b;W@io(^ zgEye6sefHIduHYO}>{Jx#RrZmXRk1J$;tAacj-$ zyGN?4c6TkEd2CU0^w{X@Tiz)gzv{=(%8q*W{l2voQEhFDf-(N=?SDQl=1$X5`m23w zGBne*!Lc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc$WX!DQqR!T z#M01EN5ROz&{*HlK;Otx*U-?)#N5izOaTg%fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD#PU%0_}#n6BP2AO_EVu8M)o`HUDF34YC)x{-2sR(CaRb3oXS&*t9 zlviP6Vr?>OfAfflVIjx)9-9#Wa?^R;bdT8W?*RO zYT{(zX5#2%W?^Dt=4fGLYzfornO9trn3tRivpW-LH&m}9UcFY%MX8A;`9&f5`8lvu z5Rj2yl3$#WU!dUZte_E|nU|7ZUaSd&s_e0o=3{} zNPt+F5cf%^iEF1`xiUpmQ!tWS_2ji~-Fg;8o!S!_dyLENqt_qX&nY-H({ z&)>0e>cZqJ?w4A-6@x4HaJ@QdeMlnY-9JA2t^m26hvN)pn4~ia9K4$&5XWz^DlDvMu44-gYb#DG%uBchF zQ*T;7w6iFBWO3l_blbxsEiG$9Uz9`^Y}~}C-4l_P&GD&go2G)tG!>)0wi#Qm2k&0* zo3^gUCZqY8AX>$tRz3Y#&bnp^3 zX;<6qba?OID;Z@M{AbV0^7s;U%_CHF&YZc;LPx&r*jX>}{I=y%)r-l2Czh_V;B7t9 zwQ=(4?h@~n8&5shA({p2sVLb3{W7s^;Q2N!P0Ssb|goRiD_7;bK{2_8qb x$n40@QMr=5Zt{1r+1&Ln<28Q2FaIZ!z_6a_JLf>9rKhW(%Q~loCIHm25WD~Y diff --git a/src/main/resources/assets/bloodmagic/textures/items/bridgesigil_activated.png b/src/main/resources/assets/bloodmagic/textures/items/bridgesigil_activated.png deleted file mode 100644 index 057c64bdda38f105e9aecb078158ae18357165e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1585 zcmbVMeM}Q)9Il|KAc}%g49?4SQ&g^Z*K29-Mj_A^sH32zK%*{ty}pGG+AHlrt7eOc zF;-zim$?`=b;_a}h;Hf_$|4ZIn&?1L!tj%bf-T%Fa3E&_TD6-m>u>a&K7_yp` zaG^|x=^QFhY|UEd1bORn49vO`hBU*eDNwS9;t6bkqaly2)b64@N_do);^%>F6oy7k zxDq8i=9E#l3{tU90LjEMgux^@BqznVOiJQ-A|%0Z0>v>@LLxX$N#zut1dTs1ujVvc zD7`vkT#H{R;bM++P$=qlyTxuo%sPuuoFqvUlb{j_!doD&wRVp7Aa<81$e;!;#%XnM zR@M#$7-U_Sl}`#?s%DvT8?bX)wG!q}#Ad6RlHjxgFctz~ z2vUxiffOJlfyoeyiJ>ioLZ*-trXbIo@G?T8R*`9HOd*%zxJF76GE9@MA<{J(X@-;_ zf>^EH#nE;K1huWa_BdAcRxG7*0-9r;29_-iR>87jmSbJTtOHW1poBuJ-ORdOivk%M zyRaHKtrftW;bd*lXoxB68{{z(w*ZTbMu3UH5t&SiAqtEn5IJB>NwitQNTj^`V|erb z4IRomg$C;6KXnt_;)^jbecc88;&mSZJKsD`zDtHu+ouTxAq84>n!(do|9Nh1beiz& zp5IbOep*p*;!MHPkE&*=B985Dtrd#AJA~xzt96e-Yut>RPeX;-)j|WDfG?jRtGqmC z-(ExYY_0Xa-F@xGydwG1RYR4h<-2?X7ca0k2Y0!rd>ivBdSG?i`A3*?cFo?_Kbh2p zTVd0}*;gJ!CeU%jQCGbPs`GU@nyY=@vc|?w&fckrkG@{`Xro|H=ZtRY_RiSe6>U$x zd~!NevFGAtPvhjgX1nR7FVUb=K~Zf-`|#>X6>El&Eh+QEetj1|^=Qt?`hFO!SVqrK2I0l(L}zl2<^Rxhu8aeU(L*h^j9Q1;x;h@Y<<#zZTRBzA{JeRcn82ds^p zuFt>PYk6nKz`3f=RyKx&n;wRo1HFsS7!P|Zu01{9yLx7Nub`(V<(nlj9mma4v7(7P zFP#Q0H4Rgz_Sa7H`JbPUdZzvTSa)LkhD{f1(BAJJ?&Iw7tM+XqQv`kQZ@5-5eYoyc z8YR1&Md_js+%eutsOn29-RU15DfR9DY{!xg%8oVc(@ae2mlZ1ls;V^|RyLxlrC$81xsGHK)Z2SiekyA_n diff --git a/src/main/resources/assets/bloodmagic/textures/items/bridgesigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/bridgesigil_deactivated.png deleted file mode 100644 index 15f46a2c01ad7d49e5e04271da1e6050f962fdb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1593 zcmbVMZBP_-96mr%2}pU%m(* zvg^Q7C5ez;1LJfpt@AM@b%j>Cu8PL&V9rZ`Hh_x+9!8*mfXB`9ct8h^^Wx$>vJHd4 zxQS4u10On7Mw$Tw=VJh+R0+|D3<-*QMU>S0m^^(bI=l@OVk`5i!e81WF7U9H6`~Dn($ACvvZGYhJK0|GM#5Yu;Mx zWnc@#b2UC%%!gw^6fDN>$wCoB(Hp$T=Ms}bxe1Q0@i44lB6Og5BDK5hxD2H<4DFCZ zv>a1Ic1FQKm>f|;4jWB5Lgg9wAT-rdAS| zEQ&R;yg;!u6V-N!+7npg6S26#$4~<2vvQm}S_Nh&Cvd!z^8y9~kX7np?VO)~F_NK& z7bX~=YYk)1^Kl+vJjA%`G4cq8Iv9tNf*6||g_KGK0%;IT4yhU1rlRaJTBeYL6L|ao z4IL~x1xM=SKXnt`5{of1ebfcw;!z(ltk^t0u}f|o>DVff#I80GdTZdqZp*TwR4Pq( zIeY=M)NV9pRum_$Kiic%GD~TDFE3P`nOAyZ{n|I`N1i!UeWkTspPHK38I$5hHVv5b zm(7_RH)BR-_`y`rgY^Y`|2zQT7V@HrWc zSaI5w5BD7#UKzhFef6KC-IZ-s=TA(!V($AWYwXuG=av`j`D)h-EqVTi`C%Zp<<)*g z(nw(4&Di)$N%ASV;LxZ!ZPo9=^TVxV&yrK{y}Q9sAf=|}(~73JGjI02b(>WKTT)94<4t{9 zVbxE`h(dNMmLwgjMJ3M_8KvQ?b31Q_PdAUm3d)A6%C_PxXY%ahx{9WOn6uYDcDl8V z?%mI3;HrVf-*S%#CNO;I zOXOtN@yp+2sM|U`==~~kdx^DRVTyZBefq9 z@3ey(Chtj|zTgLFlMvhV;Cgsb{m;i03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00Ia}L_t(I%dL~mYEw}V z$A5E@dy^)ntxdF%Qbh&Pv`zW|;@*{rwIJwDid&z+r%><#1Wkhr7owuHf<8ggq)lmE z6hTq*b@Op=de1#BjKOGJ>8$1q!|$9q|Np>0hWvV1T3j?IW>Xw|{4}gtmPPt_l4h$- za%PI>FW<;mKrWj#Ge@VmcI7f#J9`A$2OtyM^6d>xV+96>Q??YJ&yPoE($3i!(1JNJPaYd0SNeO6c20dRYVBcG@MJkP@z zL$~MRc^=@<>mLFMh{k~U;2JQ-{0T_Urf4)BilqvvWD-z>LKYx28g-yczOXV@Mg_3( z_MHH9I$b*54$$UH{o6nVd-!|+*L6`!jRF8f1QE!uUmX-eKo`ep4?1k}h3iBkk&!Wm z03|}R)dqx17ay{>yAKGl37dE#!Hw0&fT7uHjks@^FJ&_3WFU8GbZ8()Nlj2>E@cM*00I$7L_t(I%dL}5YZFlv zhM#jYxk*!MKa$!MDcA~v_RFP+h$uzsM#P=qPW)#s1aaX)R4lD%^#>$v`a#_kp;X#V zGRb6SI`>`|siD!j(zCngz;k%d`(F6RlGBgbnHe`eR$}-2UbmOcW+|U9Qg1XVjtuhV z-IAOMn4g<-Bg2C{da%ga<_^}R0AxH5t#hPlO0~L<)*kOatVj>w+Wfq`P#)#k(Pk!a9YB@c7{*&L!NxUBZ}z8`p;ch}y?JM^pfD9OIlL zY)8a#jMg6Qssm#;oibO@3`>wbcu*_|&f z?~%{tdSr9~N`!i&Ns@%jP7kuP{f$;@k3yfOe_()xJL6azQExPQ(&wEH#MI;ju*?3w z#X860y%~-U8~A>Jr!p+uy-20H-E)I3pt8O$#yOYMS%!wr;jE!j*#eOh7dj3U`tr1+ z`0T#`FgHEz0IV^j)}oY9$Y-&x6YEA0vbnV-e+B#wGsYlFp+qp&vR11J|FeDqL1^w} T(7VC)00000NkvXXu0mjfS353x diff --git a/src/main/resources/assets/bloodmagic/textures/items/coagulant.png b/src/main/resources/assets/bloodmagic/textures/items/coagulant.png deleted file mode 100644 index 23bda1b1477b68383d3f983986ad383c88d8b3ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)35ZUNPLhcKF{cpa^Gy zM`SSr1Gg{;GcwGYBLNg-FY)wsWq-iR!K1>zzf<@fQ0Tj-i(`nz>9>=2dmRZ7XxqP7 zEl}`?tNg*+Q7@Gvp76e@F`s?(n4gGZLat(jtE04jw5l|B^UXJwlP$tBr}e%o6Z11Y z!*l=78P{-2c zJNn*BmR(cmn;GReNkwF7YUa_$1?x}e?!Uh(LCL}81iSK^EZ4 z-y`0n^M zM1;mbVFI&yk-q)E%S+x?*v0RwuZo6WU(Pvk&dF!}(pO=nlmO&;4nP=&r5{fY!%*7o zw#?^q@jOo|mCBbUuav9Rs&qOX>2|vk1cAhHEQ`fLeBXZud3w9+U@%}hof1V6*XxyL zvq_d^>~=e%D5BMBVT^e|p6nBMf&bbf6rMHmfa>;77q9}^T w`(1avUVr}&?k3h+(OQ45{2k<?_4*|K%4G*SC`9s-g`ctBa~8HZkqu3X~j<0rg&`QXMa2mze*OHRD)Uubx5+?=*hB-^dG~?AX`fcRP2=w|LTH!H+&QvAKp2McTdX|V z+Z7+beWulNNvBeHsi~N-gLYqKb9uVmHvL`~x*aiQ05Ivf;>-81tSl~3D9rHtq^GQw zr?R;`oz@AXfsZ*oB`zfqz^dD1N@aHU_h}ygVY*--goa}`$mu##%6Q!83?dQ%nkvDB zfPSYdN-+$EjD|y`l$h0p82!CkZJfm3VO@kWRCqnnAB|L3O7a?_?KYJ$nGqND zBHG4??T9ddwbfOmln6~j69O5Ag#Y!CPF!`J{{g90_uf*<_l^Jn002ovPDHLkV1m}0 BCfWc1 diff --git a/src/main/resources/assets/bloodmagic/textures/items/compressionsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/items/compressionsigil_activated.png deleted file mode 100644 index cef30337046869fb64f3a0f1dca6b33811b6d977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 747 zcmVWFU8GbZ8()Nlj2>E@cM*00K`*L_t(I%dL`4PZLoT zhMzk#oz^N;+6u*33B<&x#v0WJ?Djg3~?|y*U=%Ho1(0ITd&r9J|D5h z2)l(Mk#LBoqc6mvfOKc43^#=6zj}q)g+)Bq0YKF>bls2RILyqKGwzjueUS6i_;Uju`E@Bua$wWfdD7cVL%VCWR>#OYLmRR)msE7&+rps{jB$@enQB@!T)3TVlevP5F1WvxpgZOFg zC=Nr-O?c8{xT_oL!@TS6ty!W1VB0oQN=ju5+qS`4qfl`WLdEh2xp%3L+vAfwKAS>H zSp(1jVog!je{3>6lcA+0&e~cARrOIcOa`+bIks)^^>`iqxg1lbNlp#cDj0wHN&uK< ziPq5(${Uid(GdXdCX*EF>$#swLD}MMycI=JY5@R32!w#KGYLLaOrCW2P%M@(j3U{c z9W+%TuL}Zxf6X_l07VFP3q{&jGelG$i=RGoA`<4t+%yxH`|#^3q0KV8g+h({w1f9- zYmGCp1XB0#%rcE5&lyU0AXdJkDJqk;&BoTw->sZVCZ%8Z5en5IJ(r&wc@P32_Mb^9 z2_6Yhwru7y8Sw`IptHSQ0(h>A<9R5GAQWFU8GbZ8()Nlj2>E@cM*00KBkL_t(I%dL}3PZMDj zhM(`7=}aj#4J}tAK@7xlYtaA+Mt5#pu`vDvmoEHcF5H-a5;f|=7{j8_QVg}RfHYj& z=}c$ZnfY9hG*oe=XLn9=p7Wj?{G*A>&fM&*8X4-RvVYi#MIsS~2UFDQ4N}PjuU6N^ zm4Iv}qmq3I9dUCd-JZ7CjsWOS#@J%kmt{y@?|5( z$fplDu7_pYoSdFeE|;-iyyV{U0+wYnl}@WJ1$VMp)!&z3y!?aSxJe?OAc{|18Z=ri zjq^IkehXju{B+usQUesWw?#*R0&LeM^<;(0?KDy|sLp5jIx$KqJpn4@bm1-{+KaZd z*fm56;CUWODV(N@=Xp5wBbu!?LTC_;v44M=sm~kK=B80fbpdpM;h}yGtH?LQtzW5Tzn< zO=tI8iGfs->-hpae1K_a^f+y5^?KL!>6iC;YkZW_cc_LTq21(QbsgrW5tRdUsd3nB za&&V3=MVvM`Md~}Qc=?&k+_Bm1NNkZgDOH?)Kmil#CoDMUGM5&0LaYDD1a~s@WT)( z1+i#^P+gpL-Et`I?1;Yteuo7?fRGX?1VI?GRVWDlr~LxdefMbc{BR=x0000l z^-ebcUZ;yKMW%!juRdQ?(xkE(Y^iK!mv}E;TD?vem9SNk>f*ijl^TG$O7e61x9N5{ z$?H0^^Ye6E4G94KPX_OD%;5<(a{kBz$4nN7r0$cT27s&Xc(M1(Zs~eFLOnb z=m=dyFbsCG8Nxl?RtFx@UM8}tQY`AsTx{o<=ozZ2)@~t@ zOpz}Z3G6$_*+)G{AHI={MDdD#>ag4Pz;RI`)apsUP@SThaE5`0IlfZ7Q3wIv98{WL`Sg z#-H{Ob+HAezkEdx9%g#-Bk}83xYOB1_q{%|q~G-l8!OA?3kBlJ8U;7_UJW2Q9Bkjb zMO;qf+sTnwU9%1`mCaCkiN)DDa;n0~$S@9BMA%YfB5$MSTr9@M`YKvMvp5h2KflK#+RI_8My-65!&Lc^stfl* jbrx*33jQZp9?{M}buspHy77bG00000NkvXXu0mjfIZY%; diff --git a/src/main/resources/assets/bloodmagic/textures/items/sacrificialdagger.png b/src/main/resources/assets/bloodmagic/textures/items/dagger_self_sacrifice.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/sacrificialdagger.png rename to src/main/resources/assets/bloodmagic/textures/items/dagger_self_sacrifice.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/ceremonialdagger.png b/src/main/resources/assets/bloodmagic/textures/items/dagger_self_sacrifice_charged.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/ceremonialdagger.png rename to src/main/resources/assets/bloodmagic/textures/items/dagger_self_sacrifice_charged.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/daggerofsacrifice.png b/src/main/resources/assets/bloodmagic/textures/items/daggerofsacrifice.png deleted file mode 100644 index 9cc2efe6b8aa0399c57f63ded07d64473ffbfc41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)1y*G7NI=i&RX3BAf*t zk;M!Q+`=Ht$S`Y;1W=H@#M9T6{XQ3;hy;66bM8E#kZfj1M2T~LZf$WIpTjG_#9|(?3L-Vv_(hPEKblkI%Tf;-DnThyc6}mDbC`o`E7Z_-4)B{B?_x}HdX7L-{ybswX11SGf41dmi)Qhn=SfO zB2OeAj{YdeV6b@}!}W_x^O}lQWv>o4v0t}1%|Dv++PnNG7u4(+D%bojkzeV~3W^g? LS3j3^P61;%q`|hKHjXK^4W+0&w%JX)G}+zmZb@1J zp_GUCMjd(S;2SHbj1MRbfX_tK@|o{fRBx^g5o+(NDH` zj2rOzL$JiCUeb z&(#v@%00!pd{O3fmQ1U`M^Th6+nz~TY-W??Hl4{xSxBRuq>Kh5MN>xFWYonjy)zwH z4w?1SC9Z;4I`ChPzDiXknj}M^P-e)SDaw^3Ww+Z&qlq+`3_xK}>I9Vu8wBO1Xpqi0 zE>7{uyrlA?pwr?q6=JQLqt|PR;#cgxf>Jz@pv2e#ie#9PNGj7vrgCC^aUZEx4n&s5 z`baLo1vx=gfFG68PpT4CQK=GpNEx5*F)^r##}m(;a=pP|%G8QFVHQ9TLz>c4@zzNk zS;8q|t?c6_%mTM^Q>wdHd4HlfT_R~SJ+7S#^F6p}Gf}rlD?}^g0QXAg%N(PMvR4!X z&S;kvcOul~=SR9qmob?aSTUrGagfO_iFzlZaV|#XoS+}ApcBE5m$J}VCfaN^7;UuC z2nC5MlVW&8miO0njgjp&nQ2QFOPB4(k^DLe1&oWs|oZn!x zQ>=ltWn~*G%r?7$&1NiqtJ%gdMqdP?#{;`}3+)npwc2ipg=YU{Xvn===!r59PC6z4 zX|&b<+Y~9nbW2spE1*B?puPp&8#&8Lxtgw{of82*awbWPtZ>?n%h7jkx%eR#Kch6C z$j+r1pLUu#ecFcLSO?iXUvWNuLX?8hunM45vt;Z3vH-qsEDfPAd2W$LyXMj zR)U_mn7tm2+SM&Nyo1zE{{Y{$5Yf@D_37-`?)7wNhZ+rf0j!IO)PQo3-Nq7`qxy2K zrh(dsKHFpj7x?M}SIiZjPIjGgVOMxM*)`!gN#IqdDV8m181m9i-srJV3LX+Tr`2LH zTO4HaaI!}+ALat(E*|V(Me9n+8uLk>Na;AGCr4-^<`^v%^mQJoWONifEP&?}GX9{_ zwaD>}@IM=gJNlmk!{KlemK-w4=5)mxGxL_Jc8{8Trdr!jd39n!2*m6rh&9EE+isYfN{YzkT%AJL<9>kE|><= z#<-A(U;)Mj(?Hr77ZMRHz_?%XVQ5y1kC3#NgzF)kz`Sb%ZCG>|sNg+v4kFfNz|(#E)uh+qN61=B#<7#9)|EWo&6 z8b}-CLL!0%7#B zA-9lYaz7Y&(z-T#;}d`EXgxeUD|c|3^YSn6{r$wK{iOr)GG5AaPHk*S?>~D9wY>DL zTX%0-vwqww&rO@TZguO7-g{a@&OM<$e^UAnYd({`YhK9MIV}IpeLMEnUG?6v<6mr> zJ3MXB$OA{E6gY^sG>vbKN&c#upwjVGNLQJHPtJ(|=#KT3MQ5YCJr+;PWFp&U}7i$)0Js^s@!8f8Eg3 zRQPg9KjNIQ-Tvw)bFQuY*!6Iq{#Dhabmyi;KRi8n(Te#k8)>=uy7LcpES{$nJ<&Yo zzIV1=LS()FSHqk;w#$1P2R*;Ad0*P8vyRq%y;m#u^f`aj5$e0Pm-^wN4adtKpZ4+3 zi)#n{ZIp(0=vvlIur*ZS$8V?)4%NkSeE|dIg7q6QgIPdxGj}A7? eI%w;-p73li4frMFe(eQR!abqL^+w)|hJOIZ(V$`g diff --git a/src/main/resources/assets/bloodmagic/textures/items/corrosivecrystal.png b/src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_corrosive.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/corrosivecrystal.png rename to src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_corrosive.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/destructivecrystal.png b/src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_destructive.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/destructivecrystal.png rename to src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_destructive.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/defaultcrystal.png b/src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_raw.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/defaultcrystal.png rename to src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_raw.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/steadfastcrystal.png b/src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_steadfast.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/steadfastcrystal.png rename to src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_steadfast.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/vengefulcrystal.png b/src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_vengeful.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/vengefulcrystal.png rename to src/main/resources/assets/bloodmagic/textures/items/demon_will_crystal_vengeful.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/demonbloodshard.png b/src/main/resources/assets/bloodmagic/textures/items/demonbloodshard.png deleted file mode 100644 index 58fd68af9d95a32a95cf56e4e1307816d499b09f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmV;r0!96aP)F{Boe z6X-I^qRkA_suHXuA`)DLW$I|AIcVi=RMfmQb6SX_173RJY`*iJhjYGj5E0gj=(2mV zUT$?DBE;Qt1eoJ)I7CFmm{qnZM2ojM#cj>OXekwdow-G*t$F|wPo8CWcDb;DG=Qf5 zG5^Ch1X-L1AR*Qi05RlUBHrc{)8+eqsOGljsG|C}SZ`Khw3N#E>=JylQvjUW6TajM z(}=iGPWr_w01VZZ`8(DC+}0drtEwhA)}&hd#_^600^nKjqU&fO@yKa{#^xm>I+U1{ zBo%LSGVHKpw3Ldr+=?$$QyIt4(AC~3$8rnEYw82QQdr2}k1tW-dhE^ZOg1_JsB0ft z`2zsPrfKW!L8ccO=~d zDlLtl4UbqC@M>fXJqpbb!qeIZ0Ce5eFCjbBd diff --git a/src/main/resources/assets/bloodmagic/textures/items/demonicteleposerfocus.png b/src/main/resources/assets/bloodmagic/textures/items/demonicteleposerfocus.png deleted file mode 100644 index a9814d3d0816a288400454dd1e556187b6b5cb80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 976 zcmV;>126oEP)6HxRf7FRlOp03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00T5hL_t(I%T<$IXq$Bu z#()33N!~UgN!O%nwRHV1TZf&krDY6MwCal8V0vL4!gR%t3UfDp%x+pX+^CZwIAxY? zuvNVfRBDlll2tD{1ji6RE_9{c65G^n{aTWydGmf8FCxJnIGl5M&c(y?@E{_*dANsx zw|WqfLZ3OZqp+XsZ(oNUc<~`#>3;+fK@A??LoQ>Aa)F(-)zHaH3?F>}v23|vlqlPD zC^v44S9jFG_pfoVzY7r&<Fh%j)dTbjGNX)1O2b@X#GX^X!lOsH#s;phZU8b4C2&5+KxX=vFVO*xI)*#$eh1X?~%|YtBQO=D_ zC;&IW>DN2)7Wvs+|1`$4ImSQwkeq38Wo-+#X;SITVCEKyRF+a4sUp30g9AN{oc?AK z_1?>^=zfnB`#f~+eThq_PVrf?L1`Y3L^e0keD5~KFMNuTN~zvRTta>ivvaGMwno~_ zxW2qJWRe3LQY)9=E1) znH=+fe9!!?RRC<$WY=RmX$+S!K0QftW|mwg1Ar2xyjWxnH^nXu_kUIu>cswLh11Aa zqoa6=i%2Hs&~z_KDf+sq@w#2>{*{O@^n8mH1$^99?`P`T9EPo_i#J2Ep?VXJWwAIl z&F<1AWtg^9l>3M!R?#)Z`DiR}RaUM$FI_HbBqS}GIv%@zW6DjVz<|DEGP?l@>vlPj_%tg yNA@<$|0Datqcw$l-^2Cmu-$DD>256-5#e8&cbl$m?|?@D0000WFU8GbZ8()Nlj2>E@cM*00NImL_t(I%cYY`NYrr< z$3MSq-CbQ@8QIe;$|xbsjLM9XGRQOy+$hl~C^|$CL|uZ6I`p{IrBhk-z{=7NQ3r29 zP%cDfWt-(|b=5RqoBR0h^52F_M^?vR z^_#(sntXC?mDua*AkKpB^U~O{Py~f7t6zl!LHq%ol{<@g*U-fIx=*nTJmVUvGc!>L zIb|h0buN*6j~`KZ@iL8_3uSTPCIVWB@wR4+>JI~Bv@pZ6jB5_zc+wJ;9tt7O0a=idNq?V{8731U zO{1;(wTcedwf~?Lt}h_jY6akK<3l`YiK=4F1{vyi@xs}uaD9`cc~alf zDob;6#Q;#-(Zk5_5ZCV50nkGs-rMciySl0E=%MH97lJ+?059M45{X2xcXgxr{l6p> zRqT-sx$7_(;{bU4p`j#ywb`A-~Ah+xeNuN89 z{`a3nDKMGMjE{~{nH^DDIE=2Vsa7@_P3V4|4{zO+W^}3Vg9BW+eVei~XK{~DP?Zx@ zLlb^XMgy+lA5)E_g*7JKW-P`Cz0NVVrAO51g9k*{bxIa%$~!4c`a;Z3HIra5{;{Hn pM6;$UI|lzN%kt7=u$t~W{{(6AT?-1jW{>~?002ovPDHLkV1nBAX%qke diff --git a/src/main/resources/assets/bloodmagic/textures/items/duskscribetool.png b/src/main/resources/assets/bloodmagic/textures/items/duskscribetool.png deleted file mode 100644 index 30f3034b2f7869e095a199e65cea62096094883a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15430 zcmeI3eQXow9mlVu0^$l9MwddEm~|{GZ}#2!{jQD+@k^7grXk5_!b`^a?s0s<_8H$L zcG9jOs7SkXtIA8EG^_)4(OPMlhQu~nD5`)mgfw7~O@m2LO%tL>eOb0{EE?H!etlv) zTr~C1$CBe;p6C1f{+|0hFL(dk%gt+^oMWgp5Ck!&snOR0f2+0c?3wWIx5g%T_*0c= z>`(~eq50bP0pj4$0)k-QmD<|X_TbZ;AjizSD2ISK9ZNtpLAaktCwO5CP>mtbCB^H> z&)z>p8YQuweAXVMg9$H)NR9nT(AvMIP3Yeuup;?{$KXzL&>#j>-k6R>;|iCqCo{er zjJ0NpG-f2~mU?ovR?yfUY&Lr3Brw{|4wJwzjM2%O8N17Bv9B~*XvR*_EXB|!n&B9l zv(U!ehx8a=t#O)+F!a1B#H85~?J}jhZhXl6%y8lGF+nKDq0PC4#|1skoA(2RTw{K0z^Nnu^7! zN|}n<0*ZsIn5ne&B>>d|6uBoU04QHl*~s4uN0+Kq4ZmvJ#P}C|T&vK&(_)mBLd1)Ow~&18HfBG_5C_mRVET zsdhss!65fcQi98$kNRYxN4u^jp9glBMM>l=4DSL$*lH52tkWa{8!)j}+HMMm1U_ta z*#P4k<>EVrnsW= zaRKB;F2Rw9TuwMbAed;oQ#A36&0=C%+F^3p!mPv2hU^UM$Xg@nW!65BlzM>}NXoIy zhDq>A1!#-6p3JY_!Vb$(%`AUTDj!pr4LN|#>NN3!C2X?UZM=zR;bsk483zko79j+H zn<`5$jtLfUXS>D!cdp9Pi|%Y7rk%;KFh;#;YDF z#&-cK5$|$S#YRL~xG!*CIVvaNuz<(vrYbcfS=t>zJHz2Z;xk)@aZ_b&rTTX5@QU_i z^iFu%(lmSkfuCF|+FhF3asO1byEL_!`MtQLdMvqWCCx~dcH7FrXoZhzz~ivnt#&t6 z+FY8^ETuuT-6z4jnW7yc3_R*HIi(#H6Fa6#L^^Vb*^PocRAu&2wiQ0I!KX#4@VGd6 zixp0;uQ(`P(N}DY+TkK74c!>y(nW*{FfNpaZj5p1B0>ci7fM4n#<+A5p#qExrJ);R zT)K!*0mg;W(2X%JT|}q=<3efZ#u%3_B2<8Jp)_=3j7t|0D!{l<8oDvYrHcp^U|c8- z-5BH2MT814E|i9DjB)8ALIoHXN<%lsxO5Sr0*ni#p&Mgdx`fq8{Zd~q4)wOh{LxoQ}Ff5W7mUM;H#NNp|K@M5dC!ov3(~& z+?{~Gw+W($CWucq69jjFARd)>fB$TNAih@9JB_QN!r69XnTl)3Bpq*1+p?{fVvBwToX|)jW8) zd(MK#e$-Ig-D!XMV6|^|YVIF?IDB>0!*TZ0AAk1gxTlVc)(!o_vFkLy_9_0lhJx4!oGx5jp#7tb7B`Np9``;H%H zt7h&bNta`1Y{9Pd$<8B}m&Sjy=!)%&w0k8*IVV;rkvskk(UGCIs!!dxc>9ArC)Rb6 zug#t@V}@v1=zFpMXHb{Fx98BtiS+!pE#D?eGZ z@8$>dqyOr?^rt^wcz=W3_sMhq!_7Z6-MV>q|Nd`(z3SNEx#ppTd%k<_+`q4FI_&BA z*`3};-`()nA22JVvDo4!r{HNKIC%{%@FmSzi& diff --git a/src/main/resources/assets/bloodmagic/textures/items/earthscribetool.png b/src/main/resources/assets/bloodmagic/textures/items/earthscribetool.png deleted file mode 100644 index 619db4c9fc601b6875fb4e401b112d9d0cd56612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15411 zcmeI3eQ*@z9mf|$Cj=rwbqvwb;{fHw%kJLY-ra652gzO1#NqNrlmIg|dwb6%Ywm6@ zx0~dW(pp|(1;SLQbV`cQW*D4GDQ%G|1&z~sV~43@sanC%(twJJLPn-CYG>%P_xj}S z!jtLv=d+o+`{jAQ-{14>=Xu+Ic57q(cS?%OiYbaJsjKxg!{0mfPtk4g`~GV;MEEl^ zQoB~As9E3AKhvn8y`>bzKQFhmYOUT?f~17XMZe+$<*`r%swv93A{G&)PM{flpj{4E z7_XifF&bolg>en%WxNqL=#XpsqhNJ^eT&rJDe->e3Rkf+Ccp$CpoxZ9C>U0SScNf> zSAelzOdAaeiPl+RtkfGcw0av2ZY2r~T)E98u`Fw_^W`k(u$Z}r3}%MqXoja*#>B7! z%Lr!1kh+YnVi-B2{(#WzsYx{l|En-|Xj(*|>E7Pn@?J~15^bkhp66-COqXgBaC|elb8&f|g=<$l>Om|4*Qq=3aFS$Mn253In%TNut1 z@JV98;@}*1i_b|w6+wB5 ze&^Iwh{%Gkr5M^!-c%J)3O`K8|REy;COF}@2 zhD6OJhs1V3N5bt+I$MY+Gv|WfR)R_tb_=*HPP$Mr;?hq9eGi8dNlYvm)=B4;cO z7fJ&g6I@tCsDR)?X<%c53yTO95L_q?Y)o)r5upNt3#EaL2`(%mR6uZ{G_Wzjg++u4 z2riTcHYT{Rh)@B+h0?&rH^o()eE}1M;aiuz@byYZ!{MXw)l7p_+w7&N{>2pa!_5@+ z!YWgj8p30Wkdk22veX6;E!?zZ@1_G6 z?y4N?Jow}JL*u5svT^;H#szObu;q1!YoB}jx)*l6cVPA^^W4y|A-W*+xTSb_=k|GW z)2v%&?eh!>Ki$p!^6A+h${(z}e~7vJ%9V2}ef{;hi+(q>?yVz#yLx?f(Z-$=J3blM z|J2KM!{2}Yp_QMH9KI}c9xGFi-@83-thjGZ+`GJP_{doF_+K};-hBMnsoF(<>aafi z;;45Q^B-aTyWO`xJHL`C-4gdzn)hsZBjEm3%evDVS2R#{@BXd}AN{-Z$>%;TnlZh@ z_Vd47x@Oq==%IK1x$-UR6`r3_T^8?rB|i7;#%I6!?rRsj-oD)JH_v~~$4;XzGz<e*V>0<4vXS-ZysfY{{9PcLo=a4u5p&j~CyM9$#{3-rbJ4s1NJzs<3}bmWzL&VR72wa9s8&(0BM*|w^q nX9t6}`1RBkr*^&SN0#ivu zK~y-)rII^LQ*ji=fB$=X+k%=(AG{%fI6<*sL?cEcF2+HPadyBcqsG<6!Og@)7ek_P zaL~a=P$H-S6hWef#nK8vAZ;)TDt*)2`}jMcgx5ggH=T2m^PTTI`Gk~`|AAw5v%9HD zR+RaP&wXE+X_`iPsgGnTgU{=sr}wp3y(9i9Xby#>x5UGlQ^y&f_=;_r0H_WJPNxgg zGzo_zIGqmqUJZyf1TD?YvZ_2l=lQcd?(XG!{|}0U1!!Do+m4b(~i9i3=We> zrinzO0zd%}KtV4s`eBS)1K;p=U8U>dQBW*))z@-&%%*_k@SPES-jX#xPyi&5&F29) zw|^(bi#K%M?B`N@fcg0aE+5%O%*=7Gy#hs1Ha=0;b&A|ha!Yx1UB`Mh$WPOSK%wJ# zjNi7wCo|81ms12(C)Y~XDJU=VlSrod9FF4m`FNCG;Ks=+4s}PleXNFzZSwJ8HH*^V zeyew*h5o@I0g%n+P*oKv6{;V;CuQpxhCv>ihIdmWYy-nE*VtI8gb)Y;lao^npAO+b z(AQQ=I-TK3TO~FMi4!fjT`pFKZ-qb+f@CT~Hk%_hGs}ZIjeyTfAmFF`1Q)X}r7r*g0!B$h zK~y-)rIO7{RACgxfA4$eODTqC938O+)F`siF%ZewR0K&-xM&@;2v_|rtz1{zHW7tk ze-1KyJtJan# z(!aJ3W^T8eaC4A+p+qp?XLM{_9NrOs74*hpDsaZny`kGIrGDVp766*dg~#K?vMdsb zBp#28x9_Gz9l@2}Uey*3G5qj8FJ6t&KbgX>`6xRk6Y;YcRg>6moJiB zUKRinKmev;GXL=l*QYlaem27Pqd^85nmOMQVeoSn3mfz4IKjY~x*tdY1?bf(0HgiQ zSYtCpMkaY2KSd^!W&TEl9jnIAYn@0bk3P{b3>thM%9SdHVes|kEa{q#KoTBZpk&!> zSO$&bi?m6NZy~K-LAa%fT)xO+Vwt93kSDn%*6wyAUw>lrRu3i$Gky`>Hrecp9JMex zJtF{gy^N-5fF$#Lf{L=K)oK{3hMG(4_g0;agGva25U{%X9W@lkg<$vU1&YNI+4v=t z613hKz~}XHID7{LQV8;e61rYyYkh;&c0ZwDfKaFj_v|7PsJ&SrUnn4sOQHZe+Rw4J zo<`TpI7*RDZ=q>!L|-SB_bcpl1<3u*acmL+E_Zb)ug8twe;Vc3WU{*;1VZfHR7%m< z;G6Hw>%>bKw9003B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00Lo2L_t(I%cYY`NYrr< z$3H(^cem2qO*f0st$bj@T0XEuGK?N%v>r6dq9UY(hzJAeBq#(O(t~;k!b6c!kfA|P z7#idu!N5!tGc^-j(tK<__W9rGAZm+22M6Xb@a4nId}ox1u$~BEoe>0Rs66!FcJ5x? z7o<_kBRr_cmb9W`IvX1y%!szQz>S(N1yFk{OZ*-$E|12Z{3CQfe?wK{7X_eOCe6>d zF`2C>gjD-UW=1=yEz1HC0At#+^i&>0{hwt&SFCvEk$%)91k z@}#5re4P389gq7RQ8AIY=R=rqde`p2>k82K?J=)w?s2oWOEr1YiB3);@4`8r&c;#o zs8>yl&*ECp2vb@xpsqYy4qUoIYkfWC_j^=o@o6#bjN{kWK`y6d5owJj>BKR)^JGAc z3^|Clgme8=!qW0Ygq@L4nHx&HX{k;rERgDsc6r&~E7cwCVmn(T*4!Ks5o{K?y+4E< z;Y(T_Kv_wq#AYT^`hJi^vr_szJ1?4>3EN=g_qc;lgC3<6$dIQpCOJ;Mphy{C)~7GiY1lCBhiW)U=CDM#EYg^*TM8OXKsPlbCJcO#aj;jGDyb z^$=85ndp*8<#rH*-z{MqPj(qtkfZ0qR~2DS*=ByCf_`m|OH=F&Wrs v)U95Uh^%DA`4suP{#V*Fwgzd`df)jE7c?s&aH_M-00000NkvXXu0mjfdofQd diff --git a/src/main/resources/assets/bloodmagic/textures/items/experiencebook.png b/src/main/resources/assets/bloodmagic/textures/items/experiencebook.png deleted file mode 100644 index 4b76970fd5842d19dee15644bfa0bf7df18a97c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)VGd000McNliru-~t`>!iu)&)ar%I~m)K*id{m00IzQEp>D# zwE*I<(zrXI)90kCP1!WATQb;8<*aFX3I*^qm;prl!NyX6>UC}!^*?k;@srb%)u7?_9p| znvo}8$>jv;Opf-B0|?;QiGJE!Td-QKJRf@qfT0M;7X+%R^5E$>S1z0-uN6q9`$UcxsT85DKiI0N>DZ3oqWPaSQD40oy{MliGR-Q`kw^dl0000< KMNUMnLSTZ;FE+0L diff --git a/src/main/resources/assets/bloodmagic/textures/items/explosivepowder.png b/src/main/resources/assets/bloodmagic/textures/items/explosivepowder.png deleted file mode 100644 index 635b2a364cbe2f988b1601debd83b9ff25192bd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)_1uTNLffP0tR%xO|Y7GQ#u`i&750PfJ@By~8@EHWL*+#Io zzgP$&HsKO&{d0>m)d-GhW*2sU)#1SJ0|yTLi^%UE@>gZK{*rGaQ4~oOMPiJRR;wk( zm`dQSY8l6|)a!M!EF(=*uGcF7Rmcm_>-D7H?^CPQST2_oML`&bq-k1-JOE>ibh};g zJdeZSfaiHMn@z$nq}^^41ObD=fW>0*guEGJ#26!GSz@i_a=B0x1)WZZAPDe%pX2e! z>2w0XT1#1$XsrdHw%hIA<2VMu_kA{-4c1z2w;TKY9&0V<^O^ho&S*3uNfPorXSG_f z-EMz607@yDOeO%V*K208832ys05BX5ab1@z%NUQx%;$6G^MuFn6>(h`Yb^jtlF(>0 zUdm6vCo-K*0VvDzvCs1y;H6v{rIcu`MQbfeDN#y&|Be5+_+Rn?%$2uUQ@PMI00000 LNkvXXu0mjf6hy^@ diff --git a/src/main/resources/assets/bloodmagic/textures/items/firescribetool.png b/src/main/resources/assets/bloodmagic/textures/items/firescribetool.png deleted file mode 100644 index 4ac43b4d4bc0e72ed24ff2c53b92a3917633b8e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15837 zcmeI3eQ*?K9mh8v4H6q^6=|eZZVqBa*xR?;ds!}rA(u449_Eb_aGZ8;_qk-r-R<>u zle;jP!4^ho;u|TJmR2cMTiXtlG$i#6k!oOoYRA%sY3bPM3qwJXDo&{_iqGDAp1VAg zar%ejJUhAE{hsgh`##Tpo|k?8*?U^o+)`b&u!^Fn>Xzm}JN&-R`h2Vs{$F(Istmv8 z#+%n06!q~>S)U4O*F!ZFwL;Z8yUecOt&*Zg9kQy2fFl)+!`c+(TbYW>N-r>NA<(VG z>g*SPdB|?l)H?e*F~|nv4WLJB-jo0xo7QwHn|c+mYG3KE@}(qb5Cx`eOGP6wLrT@z z)4me?Z51r5SzGq9`>WtDUqTH_?SZCjb1`1;-3;RIYth z$>+rT5|K1$RbfB`L}5DyWWbdL5bx1V-RRM0XfiLSA(m^{)WS0Ww3HdsKuVh-%~CRH z={c1dY9E9W3`$=~XmI+=k$|rBS@+cv@I%3&YO2I@vIi((fmQ^sn^u7n&|ZNR>2OGq z!-7ZjxP_39nbD>&tFld%X`;dDN#%%b5(Tp-hD`&_gbP1#HMkdz~ytyE&&ohe9$-iy=;BJuXEM zWKYh&D1GKOl06{ihr6~5?$QXo`fj-3{F%o@ zYi`%DH8i9j3$`z;(_*TgG?wOEr>D(quk^^VZlL;^Tw<;OP4O|-&_%TW#gUuc5-u5d z^cD-VWBSN>I$2g?;mE;J{J$Bw%y>>;in(=Nx^%5wS!zfC87}EgU60IWBBCh;+yyrf zkWElnBU~pZN={x9;P#s#oj1wUL_C7Js)Yxpdz6lrDQuiH(=tiZXZ)9EUKA*qDu{WL{GqO0Y7|ll`AgFvYzGE(-&?5a(c7ld`w9h zTEEMB>_qy~_1!!RFL-o>S2nd+MpM`0Q;TIZwUD_srkQ>|+Zs|_lw}<_GB7&eAshHz zq9}+y1}#Q2TD262bOkhc4l%6lpL1n%P@!z%`k4}ogluAFp%fj5(>q|M6dtzWIiJZN z^h-9!{A1_C{86~057QO#B8?zG@FBs4=YyyO7Xkzy5?pvbh)QrFK=2{Kh3A8)1Q!AX z9}--6K8Q+iAwcjU!G-68s00@R1RoMycs__qa3MhOA;E>`gQx@-0t6otTzEc+N^l`S z@FBs4=YyyO7Xkzy5?pvbh)QrFK=2{Kh3A8)1Q!AX9}--6K8Q+iAwcjU!G-68s00@R z1RoMycs__qa3MhOA;E>`gQx@-0t6otTzEc+N^l`S@FBs4=YyyO7Xkzy5?pvbh)QrF zK=2{Kh3A8)1Q!AXA7XJ;6<(bMG5Ef0622I_asFq14PUCYDb4LcirQ35QD5IeQUAOO zzt2%rA4^f^@1Q8@eu}z5AGv+9iJ~elwFK%rQ?LB^-b1||Z8hK6eRA7@q39#@=(^Db zn?EwNWmw#@4Q#^}40syzz=_PM` zHqhAf%8{*a4UO#heDL>Y)jw{G>{;~Cg*xW!ii?-Nc)iSw>CZgdyu`kG>4v=vo}Y85 zePHLF%V$Pb1^RuDYC~^&MoyervitcH7vfzn99=WCZU2)emMvQrIz6#tb?pPYc8#Qb zjy|{POZS=c|7>n7seN2Rjb^V{=W<-r9w~m^^oh`O?Gc zslUa{r)ysO?qd^20tb&@x$>*`Z=SQEcVO^>bY%Ua!3ybvclN#eo3qy(oLu|YiG^MF z{bb^)(-o}W@3`!^_T=9A`%bm3KDv9=6Ssz?-#+%h<*n{1_S%N=+R@vdte?E=FJG;C zZHoKTt2d7w_}%Lpza77Q-Z^u__?LVCJg=##>8-Xs&$W&nyXENN(^u->dv0!JWo4&* zd(XTR7hnA7H5CIdy+psf<#Tf@x9~34#Nx*{PriNmgUK_A(f#`$?(g8oPf1sAqU1k_ Wsb@P@Xx0nZEsbje`&Qj?_kRHYEQV14 diff --git a/src/main/resources/assets/bloodmagic/textures/items/fluidrouterfilterexact.png b/src/main/resources/assets/bloodmagic/textures/items/fluidrouterfilterexact.png deleted file mode 100644 index 5de1391d03e220b1402b6f963cfaeafbda02d0e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 681 zcmV;a0#^NrP)WFU8GbZ8()Nlj2>E@cM*00Iq3L_t(I%cYawOOtUF z#y@AgvR7=*ww5e0gGEpp3Q0PQs3c6(ya*z3PWl)63%co|3p1!Ff)EA~1VRwqb=QS? z5u~~7B9Sz0nZJh4z1w=<(}iqpGAQc6_vUb(hv#|D`HHIYKjkXd6p_E`0T|^5FArT; z5s|Zf{i+CWUcQhsJ$))7vRARO7u-ECq>+G+>_9}@nop6*W-uxY?R0)Z84_19I2H!e zZ8CH45V?#+Z6JVYn%K6@ls|}NS;WGnc8p?hbOO2?cIfZwrsa4OcOKuzLGbVQQS0;b zG5((DTM8tqx~o7{iB3S*wLx`&FAIx2d>Z5R$ZhV`2S_BASz7sy;dXPPtzDxNyO@#; zdLzSnuC0UWswy7Dp783{P2y=7^8|Tx6o#kb)YUhzwzf)RdsqP}AxQ6}*x1}8xt&79 zMf~mvW1b-6uVt#sBibFK= zA?8U&(OJ1A|9_7+qMha$}1?`L4FezZa3lWbyCSqc2e8qvKHA) zmJ3b}+qO%<1z_<5XzjeH0HNjLJYR3fnExW-f P00000NkvXXu0mjf>b@?t diff --git a/src/main/resources/assets/bloodmagic/textures/items/goldsand.png b/src/main/resources/assets/bloodmagic/textures/items/goldsand.png deleted file mode 100644 index 83d376774b921b0478b90ba2912a32ad481315c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVd9WIe}c-HYa*c1wFC|&f7|Iaz+`!5&%dwK8Wz1LCu zR4;Qe3aEfk6?ns*lD-LlJYb|@rfA3$7xGTAj1hn=-ND-dWO6fw zzzP`0@{$gaCX*hmgep(`M1CfFJ?qZLR_G{sBURs(5wow=w zHxY}p@I$Ba%oZq<7XYMEs1Oz-a7axla1}}6cnU;dxDv%Nl%NnCr%5%9r$Q4CEU5_& zCvDYdO=w9gE$k9SFO8yQWo3#orGggA1iQP zk>fp3fRVBDrJ@#=Jbictx7TcbMC|cR1WF1S>Sw$tuE0>YJ8-XYYoBNZ|GM#5YoBeo z7ob+)<4Xlr%7=4K5G=*+$wC1`$s76=fs>NL6zh4m)D1kMNw0;a6NQ6w&;-tC0P9pD ztddeA4nP8gQerB^X=fRyQlrwSmG&Ud5$tgqjF_~<#)ud0i`Fr-%b{0kFMx8y$ z*AVpYz`xX#Y|AwB)6A4fd%(h>064JNec*ujjwC)&Chqm-J zZ7__xUa#%Z-q`|eulvw-l&x$N2JCu$yOp(f<$9$Z z5l07XVsMO^$@mZ?f=*%_Ojtk`*(Ro&V2lpsLx?yQlrIP36oMIE$BO*Ee_8L))JwRa|LxQ6iMs@<@jBDe0JvGVJqbc7PawFHJ`LTVMJK`|AoCJ+oGwK@`;4UImq zsK&e8WC4{mswJ+BaD^cFNfZr*LduXv$?@eVMi2z5Qln}$B3dAUDpsJw2pdR?Gf*JF z@E*V5;aDifNISWpV1z|aA6&ubx7i*Nvw_h-i6KM7v>(NkD%9tT-D|`;AQXUq-FT#R zz)|G~XaNXtL7oxw;ZBQ##n?SwC}t>nL(bdhIVW8xL&7m#(5rvH(M2+ERvuaI*71!eyEoRnf z^=iTz$L6vDfo2&H*Y=3oqgdTzv806uw7~HWj`PN=z+S-#T%dyULlz4(tJuT3xKQAQ zScV>4m;$_KC2(c&oDUiaG3j}Pyo$iwz>U)gaB46F$F(X%uOc*v4lvHyv`fvXwHkO7 z@A|)?Lq(_1Se^W*ZsJ>FF~+73yFgq#>?6R6&BKdbav)0mC6Odpaw(G|d~Q!;FFVO3 zuf2cP@OGrPXJt_xUh2&FQ_(e}Lz{cDWuc*G+c*6a~m0s-E?Tc6Mf@ICx za-6L`c&q)u!M`^Wck1qLF)i)urb@pYsw`fRSuDRZeJEhqRFb#um#SHlUmiGlskbk6 zwQQ;{_4eJHr~XJ}FLXrOhU9O#C$(Sd-k+)HAA4#!?j5{-@vDBIs9m2&PD_!%rKfN7 z-?*B6@Xd1n;IOaai1u>dr_IERX-(VGH#3Qj3~+qYa{14h(cSfIYhBSjZ1(l+3f!AG zR~lU!xf0&#d{m)teJ7_eR@M%OL1k(Ym1{{b>xG^>%ujb;60;b;Y{vaS*^`Eu)|nA<=Vn` z%?T5&r?1%$k1s1p>gcA23b!uDg^6j~zj2wdnGHF~-JQ|=OCiTpWK;Y0j;8E%p{L>L zS7uz6L24fzArpS8OHHIyNp0y38;9$IKkmPEsMKBS_Md^9=g)g`f$_VZjLz=Y2N-ER bQ=O=g$nVJpnr6!SVt?#hYd-afxvb_NhR#E~ diff --git a/src/main/resources/assets/bloodmagic/textures/items/harvestgoddesssigil_activated.png b/src/main/resources/assets/bloodmagic/textures/items/harvestgoddesssigil_activated.png deleted file mode 100644 index 50b02bcf94bf4044eb2e0fd8b39945e7c7c4275e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 755 zcmVWFU8GbZ8()Nlj2>E@cM*00LJ@L_t(I%dL|=OjA)5 z$A9x@Fs4*;p z2x5R18jwZ=3a!@mwXc2n-n$M!V*{I>>7J8&e&^)={}=u-#NSD%zhAbuHnF;vs?^+W zH*GDAfRdL<~HLW zrx|(L1@E3iT7g^xObA{?SKzzATAC#4cNm)RQU#Dev0MgV=+Xig&fnzI)HJ_zokz9H z437pWm4BlMfnk_HvKnBTCbcyhMyZTxnnX{&B-)*UO#vB`k)CmWrX2Kw#`U7VN(B|5 zt+k2NW`^0hINjZy4BpPt*&ZgH&GMvYhFht#Y;2_Pcogj2$K9tw!0(q0^@j+Bg5-6b zXJ=+G6`O3_q9EP;Tr+rRg((>p>!~#Jv6!fA03d`w2uLKB=9OAtt7co9;3O@M^<&=Yd*{!WGo-N*R4vWj#Z94YBI+KkKPMkoSRadFw2=Kgvs0P%$dvCqoEKtOslH(qZ&(y`e} zXF&*r*tsU9q^`DxQrRRHkM9Qng!}p=fMeTOj)S5I>T29La>v$r-C!}15C?vygJ8C8 lBNPQi2yDk;es}VJi$6oZ`nn&5rVIc8002ovPDHLkV1iHpOH}{> diff --git a/src/main/resources/assets/bloodmagic/textures/items/harvestgoddesssigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/harvestgoddesssigil_deactivated.png deleted file mode 100644 index 7601b9982f5bfa3c23d7432fed7f0877362024f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmVWFU8GbZ8()Nlj2>E@cM*00Kx!L_t(I%dL~WPg7AC z#((GD+fN|X@=+QfL_ov<#lb}vHxm<#F)U6_#zhBZck>VMKX5Q1Zf+(TjgV+!6ww4I z(127Lprtg@k9&K+j{|~Kang5tPjY_ed7tyV@Q)>qHlrgWGMQ*2x0ydY3j_jmcC=Ei z)M$;zc>dzGI2JILO3C=i7!%j7u(+~@@3{b|nno}f!gXC17SaTR8ZTc>AKp^{&W(-9 z?qmn|?%v|#=Xr{|yBMZLRoA(5sh?~%OJQe+ixVimC?ba8SU|QBU|ANCa1f(zVp$d=a+85x565tD^a|rGCPgd^+hs;}HvEDH(3xl> zU)W`SVTs<}9v(dVLQgV5@w?<|+-AnZc8U}HT?*It_T);Ol)6K_AkX={~OEK0djX-J=TG*Nx0dic7YL)Q(m zQqpa2u%#vuxh)Dx7frL%6l=|Yng}qTP76;;84d-B#afWQ$9BF1LLkKcn^HCtjfAP2 z*73UlkQyGA0KVtp`aX&xh=v3BazECUs=-PoBmN5b9p-r+LQznJ!1H|;mzD(ovwi^a WdISz)&LEEf00002DRWI_@k4WSUjfTA;OHeU`PyJ5350nbT2 zxW;N3ueR2z%qX_?mcc>sKxd?ts$)GWjuvZMuTiIB>9jg_gT(fS{oi^D|0P%6yk9D<+bfkbQPYydKPXeY1$ z+Fo1T12QF&h-$aBR46s)Qw-;k(IFdIz~dFs5=mxOz)LfgK!9w(>1H+X!_K2H$@Z7^ct?m;zHNNfogOpjwFU)g$kv9j zM%E|LECa&YZc%#}D}ODP((!;6INr)}RpBZqba4Xbb8%isr-P=KxLG^r_oan0^y0#L zz`H*L_8gw`Ktmy>+^>+w)VKpU6f^>CB#tN)atu*nY7$Wb#x{et6AU3I;bFY}|Ar0~ zokBx(@}Ig1Z;8bin!fA;aq+T`04p{RFLueY1(PBqk`Wf8UTY0pZMB$O(xL*|J#@9K9qe!2Bh+~}2$T=yq_wq)hAd(g%_RsX8EQBi-`(g)+)LCn10>-rz3VP@$a zVFi!AleOshypd%sM(6y@6)n27f#gq9JAzExhz$4;c`fpZDRLh?HSR|Jl)l`;UDh={ zjyYu`&d%)}fBo>LV@Lirw7!{q@|(WS>i(yR&*pr*f5MVA%ZQ|VGkb2wjg-Z9M4K;1 zo+HMd>0Rsn^#|3r#pz#HoU2H0UiU^U^C*xhlb&k(u_|b4QwnR6)&1QUP4Dd>W7AWm zzZFF7ac+<4+q>6W5rhi9f82h3`~LbIIPrG!^5PjqU)?)B;r)(XjAkT zM;E4!J%4~oF$Qn!F26-<6B3TPRkQLsO2)TfV=ts`I}+7AaDL^&uB8tim{%{NDh^WY zb+EcLqO-lNepG5^V#z$>s`VPwm2tRf_l3>Xzs!x#9VAcMijuB4%i$@b{ZQ=PE6xzLrG)OX_k*|#oF zyVX!V+k^d-tK)3xEp$_KAf;|WWO>>6{Jv@3iNVDislWDLsyMhR_E1vUzK@n4@5z8| ox2VC>@QHyN>(?9heEuhLOd>lKAJK57SqS~WjfMjKuI%#QKZoQ+`~Uy| diff --git a/src/main/resources/assets/bloodmagic/textures/items/hastesigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/hastesigil_deactivated.png deleted file mode 100644 index e87d23d1340b5c7877144409c73c0eea7b200e1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1578 zcmbVMdrT8|953Le0;2f9#~2>Rq99!Ft`GW4RM zR76pH3^#lwEQ4WmLZ)npafImwj3y(_X0>QS0farz#)xJj;mEV98ZB17_LNd3{~h59M`KfdOQ^xd0@$! zmv-sxgk{8*BpG10D0=iL>ht;JKBb)Z=A*byr$aFXs!$-31|pPjBI!psAtA^>0D-Z9%kyf8BVcw%{o7 z0MrfyzQ{{S^>8Hw!BXyCZz!NBd85zvGEz~q2CCq=rHTD4ZAbOw1|g(pmEHGyf(m{z00akEN`8B?`NC83pMZK}l- z#9BE)BsmHMZ8MVX5v&A%4OXA-1*FJ(9Xwwc?1CIOFYr*Vmb=z--JYkEmzh z8Cx$cX@6MPb=cbHPP`sD6t$dO6E*v*bz2MLG=$IGq~p3T2I)d@{H)Td1YtOHGRLIn*2vhT(l+o(CAoG z<3jTn+_a8?2Q9^eG2weQK52B^tb;3CLn`photNK%ikp{=i>+IFaPweY@~M_ma?_k$ z+q)w79k@@@7uVnE?(R{?_a)rWb)9vGuKoyhb@pzk-H2n zY)neq*obuTWaQ%A{lzDmCU4sk*3&biEM!A#?dGg$8?UVY_46=G>7)4Scd63S%AsYJ zitdD&bGFxPjBg96`oOG0G^A=&i?KAXRsUOe$6<C-% zc`tDw)}XCKYi#SBmy-K^i%s_0f#jTq+ttlT|AHRtbv$~E_DIx}xNJ>q&kvo;N`9Gj zk2rBFrLoEWb$m?K(U_39_H))9O-MvNyNitc@H97f?U~kw>ibDGG@IQ0*3$EEyk$VB nN|{*s_v(^mq0cIMLnCF^A|hAkPYszF_WFU8GbZ8()Nlj2>E@cM*00GrWL_t(I%f*vBXjDNI zhQBj+?>@4wkJyQY4-{;zY()eg;A0D0>y@Aq4W`hnAi*rCuy#=pgJ=<7hzM$FXDx_U zT38D)=I-9TGxxVxU0sq?DLgRE%$e`}^Pe*&iM51djZs+bVB+{jb(c~?5I%?y`brIm zB4hSlYO4a~ntRn~j1#&YT&WBaxlfsC-DLXZbEZzz|0YWsTA!ayNT84N=OmCoA09S- z@156~{Uwbb9?_qC``5(Rck9|(-GY2Z`f~w?$OFXHD$Yd|s#VCv{YUp`y;vN6!o_2w z8asOl1yAlX${RK#d5|OYl72Pku*hMyf{Dpug7U!jLzjpA`0{3&-Srj#U*BFQ_;lqi z^fC=D_~Zw99?0`R`2LMgPsS;f*FoCBMG@U@SPtlRa?C~j;V4#!%mE^#2~tj$EMOMl z;+RenmJd>`=8(j;gOlt$dX*hVrofC{CtF0t3VTkqDb_X-SJqQ1MFYT~3u6b$0=O{Q zBxGH{P}U=aj66#zlt(Zevv=A6+<3KQLkheXR~|oQ=2{c80t$g%vVa+sYNJGPnfC2l zOgxw$@?fCg^uAbz5j+%PD8_~Wvp(EsA}%_-7ZS|9@7WOGzx~EvMve3JEpOYO00000 LNkvXXu0mjf0SO1@ diff --git a/src/main/resources/assets/bloodmagic/textures/items/icarusscroll_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/icarusscroll_deactivated.png deleted file mode 100644 index d16e87e04373ef1e329f7359fdc428718a6b2d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmV-!0+IcRP)WFU8GbZ8()Nlj2>E@cM*00GiTL_t(I%f*wwYg2I) z#XtA^eJ^?GOInS%h<}BXi<1sc{)pn*xmZMMsxBH(gcg4hovKAF7KciyS_F0Ipp*ZC zqc|x9V(d#^-uL^iL!cVcOdY)I6k3 zVd+yUV+mFoM|5Up4&UoyiV>)iyOf2+``p>w;O3dycm-cKuIkAj-)MDORJT?E_<8IC z2S2Y-zkHEf=g(0t|AooFA-;cF)5Gy0)Mcc<+ZdGGLm0;xV+rCIa^?BUXDq(y3|pw5 zs_N{eYp8eRE+d*cfT{yE_#%#=86HebjJ$%f4;2`!`6 zwuZ}t)}b1p<5AS{fU$xV#g0`*9hIus@u+wet9DvD4r)<4+6@xhAC5n|GrQmQKF{-h z@3G~X8MDPBCX5h?L}Jq%(jttpp*K28_$Kr|r-WfVZ_MTAvktz5;($nJXKes7xu^nQ z0hHZed=jLHL_><1>|8$AoUW!>mxK!0NPI4jfEI~Tv_20-7Xlu#fda;@f&V=CJq$5+ z4ZKip#>^fAa58gBIWWI8BbzQQq*ZoUI}1wjsRaTT;3>%GDsp?(J`Fs;s}|;=Z4`zE zO!z_#{KBbRb0%b9IRMEea)ibR98#zxxLl^f@fi?-;ZhXGP(p>^xLT%A}ee9f(AmYW?mtWsc;8y$SDNaq&Om%%P>TVsicSk(6(gCPSAu*3J>D# z|2K4~;1n9FlmFCBcuOe8(DY>&2#c3}1l&UNa6*^lC@8+_fmO3GLp|QHH`QTRO?aCXLI7QAe<6G+kf!4&|;9DPD9S+aY8Mg;_@i#lG0~I!L zcVMLTtF*2))qXO#ucx;GJ#(k5ZhWEhie$v1Nk{8v_IB2J?@w!FZY}$vZK+g=MQr1z6?i&Z}*!`?u6Wv5~siE26$Vi<(yYv#dKFIspEvjITz;91>|ZnLD7An8NvC+UG$5|@28Ue!EN0gANwX8<$aRmeeM`^$c%_c_ z)jeDtv-k4Uy|(KO-F=6l;-siDW6j<#4@bkXJzoFR>BL`)yG-_T2{9X&2BY`?{6^Q= ztla6iD{m63Xg?Ld=j`NQ#y2OTL}PDe2FAr$S2^M@V3FGlTdSU}ZrPRn0I7dBNaQBO tq;E_8w5>Dcd{RF5=r$5jH0@b5CaT>vjBB}6V-5YoO~wpzk3RpCe*hGyOfCQb diff --git a/src/main/resources/assets/bloodmagic/textures/items/icesigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/icesigil_deactivated.png deleted file mode 100644 index 3855383fc5072a25f4002e0326ce935050344dfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1587 zcmbVMX;2eq7*6pRYC&m5pjdQW8SBAjcXN_8(I(lXL=D7%5~tR(+5M92K(b-8n1Hq( zbaZH~qoNKTj3Y%x>7n(QB95uxQIAovpv5bLwT{zKaS#s*?br>1?GMKv-I?9*dY|Wc zzxUV*TlROsjeol$QyMoCf<{Nbx|TXE-N-EMCeD z?0{lQi_ZY9L^7n9&2tD2>l}jSyizJ^BMo`|B3dHR&J6h}x)2DE6S!HQ4t{v#Cm3QG z9h|SUVphKqc-X8m9^{r~=h0<_w1$Ca&VaNbLL~44fr3KbB42EM1|LYzmpQ5fns z5ejwi3#S}b8)W2o04b$PgvMkzq}E7rr9y+_8ITOa&7ds19_!> zfZ9QTE8%G|AFhdmU@>;D7m6B+-VixFD<*|1B00Lm3w(lw)WPD3lwlb{hEthg~6=R z4`MC8fI#_ZFsRLn+5=eZwOGQ)14`idJdP_GtOA>d6S#nf^Fu}>G&!I3F;iG|vX6jIY#v_hlI8^ButXB$u#oz^(6w6o?84D=Q*^-% zmS0*@Dj!cNrrzGgUekU%R=u(j?-;VMp=;O|(~?&{*W22@k}jO*pHS1#QlGNasjjh^ zTH8-tsY|n8uRS>FcKQ}(Tx7|2J9Cdr?!n`peRg9>r{?bT6AJ5JIal+2!+ZPAcV19s z{dw4xlV}o3hT5h+HynF-veJ#7K0Ez)wA_>K?EQ4ndzype=`EI&##4Q&BWWX7kKS50 zVbiSELuqI3?%f8(^qs7kD{sHKqWkWJf{uIPYwnyjg#W-^QPAZU)?)dvsB^rqS#x167@_R$U%6|YVJ5?_L diff --git a/src/main/resources/assets/bloodmagic/textures/items/information.png b/src/main/resources/assets/bloodmagic/textures/items/information.png deleted file mode 100644 index 934511d225e0b6b7fe0ff630d0b70dba85ce6b0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmV;30(bq1P)VGd000McNliru-~-D5h%}_)u^I$C&H(vfN+LLp=@ZrH5XM zy%ZG)>1<;%DC`G|bhgb5Q9&XyP)AKR=5p2?-kA02Attn6^wN3#ob&md&-Z&i!2iZ& zyMP(x0g%fDt;tbT-&IL$vzoEBC1P}aFP>ewgT9ke^0u9#q{l;fj-*n9>S`H+D^g6b zUm+Q|NbSctJRgc6>Abze*S!h_cWCn_I zAP5$!{W3*OTr=*EJi_|^PDal0kaIkif)D=+RS^WiLhonCNf0b_;?NN)oM^L}Ve2>J z8jfO2a=2JLJN1H|_y*~o>lXF)_E6z~0sEzrEA0G2Y&C&+d=37wmk0#LnL=W%q6VXn zA0Y5LjPIEYJYGKlfXO?^WU>%Nv7|T;o_YP)C2PeryGAIB503B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00JOML_t(I%cYY|NK{c2 z$A9O|IBy)y&m6-rDM}E;MQSi)NJN2)D59XC?1MfaGG`mrriDbbcpD?KHsw0n71Xxu zLnFcj%`*CU6*Z>y9LM*ZIW5Lf$7T_A;BNl+{Lj7TckUHc<$uD+C5p&jX*ml-MYwXV zMMZ?JqYZlTc)f}U7Y^5JG)EEtQgiK@W^LNFn{Ibn*KTaVOU!WD@agjELQ;nsG%6z2 zqPC62W(&v*$GlLD-*+m^gsTH7(#i8$@oN^uRoKl zdh|&eBhcQLW@ls|4)lQqOgc$oub%Pdb&M4iA;RH8-hXxo2K;!gVv#=R4~Uj3Q4xwv zLGcm$F++a9M=+>Ndr1;ric~5+#>Ec_Rn1zRz}da)6yU&?8r|1gtpGckDz!65zU2Ci iBEnKVmzFh!e~sU>b__Q2Z|l~{DY`m1W^jo25R2&%&BwR@> zm&>HTekK-=^Xo^6vr>_!NR)xW5u){V9PO-AES!Se5(EKSYq2aV6iz0SxULJp&x=c% z3MZ5r!}L$j(`I#1_regBRim&=6!ab1_*p>e$Y8gg?@bMz&f zJNvY>wv#_RVeI`U06fp*ujgMWr9^8jj^oH+Pv_mdiizF(MjXcxV~i-J7mI(Op8u!00000NkvXXu0mjf6fDvs diff --git a/src/main/resources/assets/bloodmagic/textures/items/item_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/item_deactivated.png deleted file mode 100644 index d085eddde5e4a7c8c429d0f69fd8c249b45c47c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1373 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 P00000NkvXXu0mjfhGr@~ diff --git a/src/main/resources/assets/bloodmagic/textures/items/lavacrystal.png b/src/main/resources/assets/bloodmagic/textures/items/lavacrystal.png deleted file mode 100644 index a9be5d26e124818ed7fd95a3ab29b9d4d360fa2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcmbVMZA=?w9KVjmEm*R}IAM^;dFV17*L&^DUFaBV!8Op96cR}MFs^sc!3ph^>tPF1 z5jKqkj9H>4drM;^F;hbDi-ZkBg$yAw@Fiwb<4n~slP#{ki;SL6fubMCK6uI9^E`L| z-|zQ-y@7h)lLh(3`3Qm(c#gRPaNV1|ci#t}rN0^iT=whL&3c0>>oGwCNR^}p0qO|} ztsnpdsk?I?R3J!Rr_$K0H+$=NQ4Lvytc@ieia<1iR8+ty`(qd0&U8%9t||~_!`BYc9D~?%EM?yoQDJ20Z&)Rv)hHhRMRMRAx z54dYKwcyE#wds0()^{0RDAjTkB|JcLWdt z5LLT05!OR4%Yk9;?k$uxgx>IeO@T!bI^3$*6#`-1<91^3i$zi-o~8r`5M>4z8P1MN zfCV_mkXBp{ih|5ItPVR9%<*i8XRE7RG|SjYhaJ|SnsrblTjj2yI4j9m9d0g%^@O9k z5EemBTY=h}Sld0Zyh{Uuu4;{{+L7ym`ZiTpqit#gb-B=kO-fi&W6{U671{{c4K(E$ zAk}DU2whJxuWTb9vImo*k?oWJ z^iA#+Y{u+%YYO0DYmPt|4vz+>E{w=4soT=ArTtqcZW0fAaq2;X}qAA~BPE_lLP;y6|Ay zD4kh5vtqn=Y3GA4&&7SOeP{UXf2z zMHwSApKf~N#WB;+@uH$5rlp1Hg5{HD;ro5^UrW;q>84X>cIQ33Chq-vW+~Zzdk)E8 zF?tPhOsl0Lhf2t?io0INLq$_GIeC5j^^~!?$6Q(Z?T*2<$rI;N#*%7Y@EZ^8du3?h z)zLL$_QToa#o>?Bw^p7TTlOEhcD-pydi04$elGr!dA?#|us(JUhL{2K0k119s|S$~d_{4$+WXLA{hiF1)G4I~;F0}X0yWInB@ zNn_Efi?jj&{8m{qv$c`4+np8vf=S1X_$r zXqiNdXdNorY*|#y(iz3NOscqmk{h7~^Ff6h=M~s!js)E{tKEsamC%@8oR_`FFa(Z4 zxB?~g(y451I;dh;8k7hn0t&%UP%0Oq60sab<3S8TMKFrMm|TFOxLAs#3E=nx@zz+Q z3D*LntBsMrgDcaSSD8G-VPA zD3M$$Fw$aLAQvGLfyqFTCXq}clZp&JJ+I>@sMHcdB~C(QQVEKx#WI9QN|q+7MQS90 zkR=m7uEy@pUaJ%Q|D+r#K}!dqtDbQt*B_y6F*-so6^(Z-&R)9^tN>M>@#sI zmlSN?zr&DNR$Dpm$IjA<+K!qI#W1y}*=$aY_7B^2d3XC2>EP(q@RWHk=GK0@>Dq;W z2P2O_&-1>c7rzQ-_RTo|1KhMirzm<>Vx6ygu{u1k{77AIWklE9#yz=Zmb*=BO`#dx z5sg1Z-aWI$t!QHduiiN*sA&D{IW!f&cB_1GG@N%&6?{5$e$uHvV5ukWuQ+h8ZlGpx zLT6X#{^bo||44TN&?T9njc-{KrtMzW-7_`x>H5Ee9uLhdy*jwQ`1WK!y1ME&U6`yv zfBd7eHHVg@-cpt9Lu*e#QR1YDn(!}|#OHkc`=UA9YeQONrUj&* zk3HdeFW3N{YiT=`^GE%v6K5X_-;q4Nurs1k2W)-#urUh>@x$*Ed8d1`b{9@E)t2g; zH>Mqly!UxymZQ3DVQKSsN^BbPV(^Y_!q*Y!{HFmPmERXLca=Wz{>U|I9np}KSMm>k C1yeZy diff --git a/src/main/resources/assets/bloodmagic/textures/items/lifebucket.png b/src/main/resources/assets/bloodmagic/textures/items/lifebucket.png deleted file mode 100644 index 97a2999eb42f5ea5cefc1beec8f70e22548c8dea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1369 zcmbVMZA=?w9KTV;2AMND7a^G(w`qLgdT+g6d!uxvEv#lm0x10;q1U^oZd zhRTu?Yi0vvAnpNe^0pogH1^ari9PM2L&98DXl0Uz0x@6+XfoEJ=zP+NE$Z@cojWEl zbP-~-JFz9Ff`NL}qiO(UEi5jQG=*{w3&mO;6jg!JB*hRENze|QqIfIEQ#N#YV9=T- zMfe79&9W`Hb7F0V5$6dakw{n)j78O=1m$oz2$Cjf8ixp6?^X;Ui7Wc1yn+|#q9(@; zSyj-Sq7YWQ3?~LXT?!!<4+K_(6@58TFl9tih!d2BBx12#T#IPkXaN7Zu_{_`>W%}V z0qAO%Cc^uOY|4{i?(S|V2ZY}6&uKEe6rsbbid`|F7=Eu4gI_F?Eb%lY*nt>faFKCv zxCE>KcQ7Q2N5Y~IVeG7(W5Riz)%evmua$AQ?Ih>nD9UHGdpwlS#xfM;WotauzC72j z=!T$(Aa7fSwwJlwUAeqR1A?JyO{&_FuY&qE)ll^|HI8~b=#$N|BB=@esoV`M1?&Zy zyaPxzni@kFQ_Rb&nCEB_4j47Xurw~(tPCz#Z8T0vjEw~pDUv|Mmif~EO&tN9B64-| zpSsB(!D7rUSGoXhR{97iuz57tCCUfL-w3j%*Y9;VB`=5P7ZzNm$6pypRgV|I`lmm= zHxLM9Cg0k(FZJd~Yx=R{=2>lnbTL#qYVN1V`CDhk&wn|Y{qgtOzMZa}-xl9@zo&LX(r93*U2$gVjwd!JX1V!wMq}R z4;7+E=WhQso}Inn=zE4!=&{~~{q8R=4P`D)amAxEr$CVTa5(kw^?+VgbtUz2@|Q5# za%A(_?9Fr0zUM!RQdjQzrnPrLI`H1%ulJ5@zL5Rl%(@#Xv#E71%wX z;#>Xp22VJQ9hhi-VPFRN{@v=r{nJyADnEaBy8fk1L2x(6nk;DyKbXp7h3%$8<+su= zKkIspA3Qu7xey8^|J;+A9NMz=)axa6!&MXgT>11^_uKB4mZ8(*@FHC UPVZSy=6-g5U!C`Ob?DW909(`SHUIzs diff --git a/src/main/resources/assets/bloodmagic/textures/items/livingplate.png b/src/main/resources/assets/bloodmagic/textures/items/living_armor_chest.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/livingplate.png rename to src/main/resources/assets/bloodmagic/textures/items/living_armor_chest.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/livingboots.png b/src/main/resources/assets/bloodmagic/textures/items/living_armor_feet.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/livingboots.png rename to src/main/resources/assets/bloodmagic/textures/items/living_armor_feet.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/livinghelmet.png b/src/main/resources/assets/bloodmagic/textures/items/living_armor_head.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/livinghelmet.png rename to src/main/resources/assets/bloodmagic/textures/items/living_armor_head.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/livingleggings.png b/src/main/resources/assets/bloodmagic/textures/items/living_armor_legs.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/livingleggings.png rename to src/main/resources/assets/bloodmagic/textures/items/living_armor_legs.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/mailorder.png b/src/main/resources/assets/bloodmagic/textures/items/living_tome.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/mailorder.png rename to src/main/resources/assets/bloodmagic/textures/items/living_tome.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/mundanelengtheningcatalyst.png b/src/main/resources/assets/bloodmagic/textures/items/mundanelengtheningcatalyst.png deleted file mode 100644 index 6162e225c9f0b220c7808e815d1a0193116ba458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)3Hc4lul!Q9bo2P=vF< zBeIx*fm;}a85w5HkpK#^mw5WRvft+tsWZRl)t zGT`A!P+a10=6a)}kLTO{Gg@SrxtWa*uRG=C_9*7Vd->*qGVA7TYfsm2weWAd(&Et; zZJsCezUk=t_l7&FSN)&< zJLBAk-w%V?^4j8Ccm=w-k_4tt`FB2B>v)3J;$s3;35v|0o2T>qU$;MD$EE~B7 zIhujHEneF%pDA_N{@8z>|L^xFRMb8-JUsd6X^GChR{8buh8*|AlPl^Tb28gMuAeij fa92W$YAS=uIrr#Ghp&nQJ<8ze>gTe~DWM4fFFS`B diff --git a/src/main/resources/assets/bloodmagic/textures/items/mundanepowercatalyst.png b/src/main/resources/assets/bloodmagic/textures/items/mundanepowercatalyst.png deleted file mode 100644 index 80590eac7e6a4123b07fa933de4a32c7ca0931c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4$}E;1y^Tu^QRif|Tq zL>4nJa0`PlBg3pY5H=O_WNA?f=bG&ai4Yog&uplIEGl9PX6=%zdf^RLuaFt z0S`}tqFdnX-kbG&d~$4TVq$DSaBPw6?hbcQ7Px|x!WkO6mMccmd98YeRd{_7Hbiv#I_H1qS|0UDs?eAGMO)%Q)%_gJY z>rZ~`Z+r-J!S49~#xa$DXEg#r;km`?M|M8=HhViy`M*MgoZ5dAAF>H6Gk5Qh2s>*L eYj9|i5kv2PFT;{n;cr0iGI+ZBxvXJb^JA{>7I@`}E__syddA4jK7(!tR3CEFWnk-7~Sc z{^`S)rXa7sQQj^orPD84Gi=hC98h+Fy>kD~rE9a*o-d#Bvg9vs81JRi)pjw5-xah6 znk=;Ysp2WLHLTg@eBs=ukAC$WI=6CK{$AcDhUYS&=^9;48{Z53xzE5b_x+66rBfDt zxWs>hZ{{(HJ^3rIiX~5ru;*a^?Z&fL*W^Lk3+|1qc?G?B3A2F#z~JfX=d#Wzp$Pyu Chmx8A diff --git a/src/main/resources/assets/bloodmagic/textures/items/noderouter.png b/src/main/resources/assets/bloodmagic/textures/items/noderouter.png deleted file mode 100644 index 776c5fc9b711df3b798d900c5016bfa0c425c298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmVVGd000McNliru-~}7WN?HL|xjq(`#Ggl~!Y0mxyJQklAc(A*ftJtXJRD|C8`Q%+lpu%AhM*)tZ!n;s zrkIKIATEimm#BM|X_Vt|bb5vk^AsznDb{7~Cu3QmW#yWhF0p%Hklbz_2Yb6P4$ZP^ zqgzR201)Fw8joP%1yr&pG{?_E3WZS0rWpX#*RI#6fSH9wdda=Q!Py~SMo~6$HNO#z zuW(R~k<~dt!*&NX`gKj=!{Z2T?(EUZ`UY8@6VxtSyMmf}z>}JR==b9$8e#1QFaWT* iCh5IW0f1k@f1(en0H}!4E&qN10000WdP)m{e`GRsVK^aoU^hlD58fzn3{}P_K)bH^#_WQAPXn> z)LT%{TCVNa-$gw{IVdA%mNsieNw`wBX+{rGxi)uu7)oIeQTOR`;T#UQBcf z_s@;&E7tG$dxDncdzdX2(6WFmI-a(0H`pL)F(Ro!jye1))X~baeDm)Fv1o+IyDrQ{ zMO@LZkxoN0l_c`%rgV0^MKc%>fh9{9aonN*Mq-RbBe+~{>~NifIl=3PYAgz4H{^-Q9%4 zVJ1u(!}r8jDs9!HJ#g05@}}py>I2ll*O!Ru( zlvPwx?>tRQ=#q>br|_O{SMhj110Oq;H;}97L8;)&{PI|Rrlb(cS^n_gQEL% zl$MQU{Y;rZcOJV+kEzzSr}V|+1e%(#+imp4NKzQ-;HOq6YYISiQj+#;#PC^@Y^R_pl+MaZ>=ipj7tJg|vTZnUK{3>w2oi|aR z7&W2NR!vH>NhF3wcUnXc5iBJpDJYpPB14D>Ue5)VnkP&3KC|pUS|SC-CixX-90q$m znL<4d^ef+GH@eS5dPqp8p)>edO*8e%U?N59gZ|MEc)9W7Kfm)&-pw(;zw5I>00000 LNkvXXu0mjf_rzWz diff --git a/src/main/resources/assets/bloodmagic/textures/items/plantoil.png b/src/main/resources/assets/bloodmagic/textures/items/plantoil.png deleted file mode 100644 index 967c60648ea8cc59e0715c6b560fe2146602b8d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)35ZUNPLhcKF{cpa^Gy zM`SSr1Gg{;GcwGYBLNg-FY)wsWq-iR!6PoG7!;-h6#D7u;uvCa`t4*#ufqWXZTrJ# zExEB)T7N-Cc-I5oBIfcqhYx;AEavN0Pgu(yAR;cPxJ}wq$}u~u=5ySyn9^XW+;Y7? z;fK$BILmL${6FY(=iRry+plqQ{9(|Yb%4KOzK?)mhM?U1_E+u=#pm9>&3RZYm&CL0 zd0?36v4}|}4MARivrbz+Pb(CRWe_;NG5X5wtfn5n^BW%SucK>=awPs?BO`JBytIN=Z!|8-@4-#KO+PAF*3l z*={9D`b9!Gn_&MebdSw_#KMJv*}ZvhX5Kp?iT|9X_#z^C{(7>9$z%cm_?&%VG@fyE zy^r0)I{|>uIH_Z9oIm9GXgp(MWf{ZMCw#mc)=m(P_Z~_qydB*F05(@2@$zhut~Ic= zeSrIm9Rm0nmt-C>0ZDl8>Ah#a+veHun7vMu8|#X_PLnw%B+fYoK#1_o7=wPd&6}%B z_Bu_*jdO6(jW9(B@BLgsP7uI>;J5o6co9KT=*l!rr6{VkmP#ox#*_q4vMj4~AOQdR zkrJ)7gu*mUWjdYK7Hh3hnj%t~&bhgJO^%WaRfUV*jWN|CwpuMI?rp85)>`V;lGuL{ zfpZR7mND8}A~FELU@*vSFA)Ghm0bZCYX<<|MEO&bUZ_v400000NkvXXu0mjf%{9DU diff --git a/src/main/resources/assets/bloodmagic/textures/items/potionflask_overlay.png b/src/main/resources/assets/bloodmagic/textures/items/potionflask_overlay.png deleted file mode 100644 index 2d969bfb294f2202ca8dd7e5d53c060a24467743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)35ZUNPLhcKF{cpa^Gy zM`SSr1Gg{;GcwGYBLNg-FY)wsWq-gf%_+jVZ|~BdKp_WD7sn8b)5!@Ek_#3rcwm3D zjfIUZD9@v!!s2P0in@Amo=0%7@ErlQA|3%Tv9tsrm|<0_^>f`qkIxzlj2IYx=L)Q{ TZPQo+G>gI0)z4*}Q$iB}zYH@F diff --git a/src/main/resources/assets/bloodmagic/textures/items/potionflask_underlay.png b/src/main/resources/assets/bloodmagic/textures/items/potionflask_underlay.png deleted file mode 100644 index 27f2919841299d506b0aea59b9854b882f2c7e73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 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 diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagentbounce.png b/src/main/resources/assets/bloodmagic/textures/items/reagentbounce.png deleted file mode 100644 index 9bb11b7267f74b63ac51ef752a0b446727a1378d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497 zcmV`03>LW0X+Z!0e(qD zK~y-)-ILEt+Hn}iUmso5k~Z=OIZK8sHX3dOg&@{o(nS=rL#Lv4=s)nfgSY($t-}r; z#@MMHH=-a96@*2!;XzhGwziROD$ZQrxu=5=jzl}g-lykzc;2t)`F!Ak|630i0@A8S z_pf0_e9@59;*dNY9jABBC0Cp_B`>suJYRe%9*;)=9MgjW5Q#)291cs<4bHx$c()Pb z!`nDIvmSus*E7n0la9~+GP$)3TBbs2KhMvVJ=GKd;Pd%JM6eAx$x@`0FOd2El^;t7tv|6| nZns;MQmF2m>@IJq>vb>Z+LMLL5B_Vo00000NkvXXu0mjfwyoCI diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagentbridge.png b/src/main/resources/assets/bloodmagic/textures/items/reagentbridge.png deleted file mode 100644 index 17df28c6d5c5d3d2ccbc4e6b5a7702281ad2078d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 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 Rb>08~002ovPDHLkV1iEz`U3y} diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagenthaste.png b/src/main/resources/assets/bloodmagic/textures/items/reagenthaste.png deleted file mode 100644 index f6530434c534ec73c0b59b591c283b493645eef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmV+j0{8uiP)`9x$c|>Yo4r01RnV zSad^gZEa<4bN~PV006wMvY7w?0ewkCK~y-)-ILF2(s3BaUmtP)_--anf)dPqDG#EI zE(vDeh7h~hoF2xC9d}u$?h$zMujn%96i5q-E?xFRq((_}XweSCm4022C~i3B_I*0$ zNVH@0zCG}~U(fS?;DP^Jg-3>r>am?OgF0sVUT;D!KLmPINxgQiWe{h>+ZYK`KHFFbp` zqX6uK%uDy@-hLl_#D2wMF;Pn4_l>c>SyBJizx)DQVTR?#tWe(o0000< KMNUMnLSTYPuIG6G diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagentholding.png b/src/main/resources/assets/bloodmagic/textures/items/reagentholding.png deleted file mode 100644 index f6530434c534ec73c0b59b591c283b493645eef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmV+j0{8uiP)`9x$c|>Yo4r01RnV zSad^gZEa<4bN~PV006wMvY7w?0ewkCK~y-)-ILF2(s3BaUmtP)_--anf)dPqDG#EI zE(vDeh7h~hoF2xC9d}u$?h$zMujn%96i5q-E?xFRq((_}XweSCm4022C~i3B_I*0$ zNVH@0zCG}~U(fS?;DP^Jg-3>r>am?OgF0sVUT;D!KLmPINxgQiWe{h>+ZYK`KHFFbp` zqX6uK%uDy@-hLl_#D2wMF;Pn4_l>c>SyBJizx)DQVTR?#tWe(o0000< KMNUMnLSTYPuIG6G diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagentlava.png b/src/main/resources/assets/bloodmagic/textures/items/reagentlava.png deleted file mode 100644 index 9dbc6600d993bf8f3b2e679b623d418061cd5910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmV-20?qx2P)_F9kOwLpcBd0l!H^ zK~y-)#gku1Q*ji>KW7cS)Kb@AxZzCt2ZGT>?Sj~-D2QTR_7s@!(Oc+)gb&hlMK4Vs zEP5&m>ZO+`5DNNZ5y1?DNhzYHven3T*|4dnm%C7A5s3JO^YlCC%kO+Y98py^A`ctX z<{Bg}n0iU%{|yqorgn86Re;1rQ=_rt0S&i|$ zS+4+BKF&y1l_GH4wlo~9#a9z%$!m}rdCUDL!%}9@ErJdB-G_%AjS8^5qMR_J7}Zt0 z8gsC!Qrvwv$(?7DvL-|?unQ32# zr8xi=-C72+c@GB~>PY2tRAzS)nN57UH1Gd(>U!LwmcbD$VK8%WfQrCiQ`03>LW0X+Z!0e(qD zK~y-)-ILEt+Hn}iUmso5k~Z=OIZK8sHX3dOg&@{o(nS=rL#Lv4=s)nfgSY($t-}r; z#@MMHH=-a96@*2!;XzhGwziROD$ZQrxu=5=jzl}g-lykzc;2t)`F!Ak|630i0@A8S z_pf0_e9@59;*dNY9jABBC0Cp_B`>suJYRe%9*;)=9MgjW5Q#)291cs<4bHx$c()Pb z!`nDIvmSus*E7n0la9~+GP$)3TBbs2KhMvVJ=GKd;Pd%JM6eAx$x@`0FOd2El^;t7tv|6| nZns;MQmF2m>@IJq>vb>Z+LMLL5B_Vo00000NkvXXu0mjfwyoCI diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagentseverance.png b/src/main/resources/assets/bloodmagic/textures/items/reagentseverance.png deleted file mode 100644 index ccf83f681d926005d211e2ed133a2d6f97f5099c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dKcP)`DIV(CM`Qp103B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00DAIL_t(I%iWXDE5mUZ z$6ueZhRKhuk@-=y{P^09rr9KJn$|9Eii7{a)xk~t0ouXAVM!@hC6t4yg(6YXYNjDG zgv|_(gVM?xM|t1gPtWsue$)g1TbkyVpK^5BrdRWe+cho#cFixoz8>n@$K+St+?rqJ zr!q1O5O=B4VTRBZnLzph)!<;AQ}rOfMm)AdxyjJ)a@(y8J6RolY^E&6q4UGHD~H;eKx7TfC*CJUxbq z->$2?005WEB_e{Qs)P77JSOjmMy^OCR)0QXw(NGhD5X%kY7X|-)ZhA-5BZ6Mp!yvI Q`2YX_07*qoM6N<$f`Bn{iic=rGR0q03X zK~y-)&5_?rQ*ju^Ki_j!=eRYC4b7ZUP9qS!3c9g5Y%M0cC?V=*T^%o??)nG1@TNb( zi!Qnrq;e=Npu*MQUu?|{_8!(Auk>WQIwjV{6n82M zT)#JlVHoOAeoZ3RE~)YHadBOjbULkmZSJX=B_}|3^dq+=OF;KCkUEdw?^llF5Lnk~ z>L42WRoCcVF_KI82C)ADx0Pj1# zDa*20Diqkb`A7iTM2K~FW14$-xc-jI+Ht&XU*yK(q}m3EL?T$0g|6$oeKIM5!+y@K zhuPJ%$v(rSy+vnpw1J9LIO5w&qPbJL3C*o;KfyFjY}=+&GI_~^@PJS}Bew9Dix zD?Io-uXa3QG#bS)40?KcD3{CRaybzZjy1Kz@+vE9U-__DV4^gm>i$Aay}i9CwKdW- ojbgDVN-6d$FZW;P6#tce0OLisWFwXV`2YX_07*qoM6N<$f}^+!l>h($ diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagentsuppression.png b/src/main/resources/assets/bloodmagic/textures/items/reagentsuppression.png deleted file mode 100644 index 5cf01d099b13189cd5118d1da5e54d66e072028a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmV+)0^t3LP)`6B5S8)iwYC03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00DzZL_t(I%iWXDYtnHT z$6ufCcg5O|FQSMtJ!mutkwGpD(;b9$Sb~#X8>>Tq!Oo+$lh8TB!@?b0bci}_5bZZK z#tt2Xu*r8Dl!(E!h)hxD(=CKVcZ}Y*_rvqNo*(eQ|E;IKl=RBc+D*!rl=;ZK06g=h zBpSWJjQgQns9VbSM4HK>yk1z5U@#~Evm^HeAdyH&JRX;>6XcpzGH*=MZ`T;stN>(+ zs|vvK%gR-^msl+J7euw2yCbs#uwKmki9fhGCl05Z0oNd{D@~5}^SnHKp*jNE^?3A= z0G!J?fr&|mjehoOyM(h5UKP?T7oIBsy;Jf1sX5UM#huI3jCnm+EiP`khdA9akX8*{ z>h$TC7R{=;)Yl16)+>y;^W`kh=lUnKR-^k0p-@O{HX9!6 zHH_vUw~wP7l;2Zo6ga7xY*n^ZR{%gb92OBFU>}DwsQmoS*FuTS^1I$gY?t5f7o`+- hymr%BjLTA<-Ba)LdoT6E|JJNEAV1Y;ZZmHU$#ke&0OqVg=`(8? zGh5_W-R7+!x$Rw$&G3|T8I=MsYBmYLc%V(b0%az+upc88G0D{V( z+8fCL-BNBd;%^kCR3->85$KQ#y^sRU#1@C0^c735J1Q%{t(j0<033vVe=WIM4r{4X zYV-(;iR}zT%NCvtc8Y`02ual6dzY2q}Z(k2`McCp=2~eucOZm53)qOfSN#JT&`C*+`vpZ9j4He#d(HOnnOg z=*fwRBSO2coHu#r-brw2KeC!S`T2-$wff2gAgl#hNgk=c^)H_khIq`}nADX30000< KMNUMnLSTX~s=@>S diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagenttransposition.png b/src/main/resources/assets/bloodmagic/textures/items/reagenttransposition.png deleted file mode 100644 index 556a63b668a22f8cc1c4eefe6819e15e9dad7be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPNlc1?EtQc+(Q?L$!fd1Y*VPP8<0jSSVR*d}~$A6U$t|XAa?0UH!N57!;?Qv#4oK4F6}Q zY9tsJ{OI!Dd3%al<2d%I9@?hG^``Yeapb3oLizV&PxLc1Gz-`;{#FF)d3J8M^<%9) oVjC{>tzzEdQjyj2zil6bsZF+l6@w`sFyI(GUHx3vIVCg!01MlnXaE2J diff --git a/src/main/resources/assets/bloodmagic/textures/items/reagentvoid.png b/src/main/resources/assets/bloodmagic/textures/items/reagentvoid.png deleted file mode 100644 index 4f090836e3df219dc5c70506c580d6374aac7b6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)`6C;-x)eHat03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00F~EL_t(I%f*vDYg2I) zho2L3O)nPhO|&sZOrs*cMe7UqQiviBW{8BKi$ewx1ktZxK7ilBMR4vE!BKDspDGs>;*5FLe6NoW6SbT5a1_fY`-^rqgLssgx#@N$vI8 zw%wnTo`pp0nMO|9eEBg&S2qZa`Nc2{+U+*l_UTwSz});S*=%;;CfTm>`lWjcaN(*Y zuItk6c4=17U?_w?cm%JZ6sC*3dp{+6X7I82R?bh1NVD0bvpAw#%SZL#rp4LFB&SAi z(Ahk|wG%1sTzSyn>fM=YtJT8e`gG`+%lP3Kqn3#|?8gpA_&oCy*WDmwg_$^gQ$Njq zkX-=NG^y2Uj7QGU?v$x}hgg_tQ2M@%Wtx_EHq8m5WoNc03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00G!ZL_t(I%f*w=OOpW@ z$3Ks@wKiHKS&< zGFt{kEYU{ITJv=+W4=$PjcgtQiN42&=lSqF&-ZymRoRLf*rNU|AaW(H0U7ywK;&Xv zPn{o9fXJn|9`6t1IGxad+^OY+LZOWWRYg_lzkE$cGaq#L_Lv%mp}ov;@YoqW#B*Y? zm`0;ft>zkrQLC$U@V&guWa0sn_r|ficVMFh`}D9tg^JBZr*A)lgM(_CCdp*7)`0wO zW6#N`0yw6wi-n2BPdo#+bobs4cD1!&$KvU1hQ!2OvDs|(fPjqPrVooEO=rgxK&^Gc z11E4dJNZ1HCht7JtEma*?vD$=wm-M3l<}Rrsj}UTE7*sp$%(7Im3`fQUVizCRVd@> z@X>WRtnZ&alsdpFGgv=X@OO2yR$9W2gG|=sUG^hRagtliVis~}gVc{u9RpzJkx}(} zy|j1wu^Jt$w)L<$pQg0@iEp_D7BWv{!yQ!pbrIyP4v~L+K?;QeZ)Ve!Op}$@(?~H# zF~7u~W|d7{2!%qd&D`LH9<9ZC`F*ho3M^OL(0fk9K zK~y-)-IGmd(s3BaKR-2HX#OWomRcFqSgn7D#t_7y!`LAN@i3x7F$Kzp*q!A!-10yL6ecBE#H`XIs{=P+Hv%~JrB?K^SrMTY3WvD z_`{G)%W&eZ0Jvt-GI}nEmbfkd*6l%B?q@~rJbWsCzh40C(YOFaA`uCP!_sjAvE`XD zy=D2;JmPWyP<}M607|ZYyr<6)3WffHsMf$9zbOFa>4o2UJrgXUgz?B zSeRFB0j=u0H~FhubDzuCuArH1sLUcS#;#LJO;MUlDF9F|zml8=t@I uP6HwQb^s%ZcK03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00PKKL_t(I%cYWkNYr;2 z$6ufC_j~7$Q}4{vwYEI_b=X0Ml{X`zV#_AA=pPdsvhtq@jEEwrh@hbVHk>WjFBUW! z+c?6120=7}h={9=S%ziZ>8Y975ov53I;v!z#E>27w_kX5)nQov=0@2 z*t2Y!d~#ov{4c=IM^+2K=|k00{#B5c#tLcqu0m!9N;q|3l>i)XS~3HsrbcKx6qKsE zZwdeYD`_#9>@%qjG;rh0SqQq&yc!No$2&KVp2sFfFZ`!wIB+;~a21r0G;O}9Zy>Pc zQ^H*#sLH{=eh#yJ1z47V;UqQjdfI_8C6cdF1Qs-4?Y6ku+REhkI3c}~OtwW`xC;%N z;?MHQ`ou@VjLqD^sRPRevH7>_A~(*pu)pn&3P~m2azE=DxACXx=kPC`s^`%duVPWM zb&XxM3j{zreXv@5E9S9mYdzOmTWS9OA63y%C!VrWUOeh%M`aMVZ!Z4Y8aeUD19dOl z$LD3UnB_KT-aKE7<0o&coy+e4?Og20u)hs5mc=(4zGhKTF@Hz88S5V)l}rL~{dQEj zhI;{M@3b-YHde~Q)qV_Rl7DNEMTJT^*KOuT1r)U2E*Ny9;| zLt~>S_4bTEHZPI*XoiwG9!BHioDX#Smdq5V~tReC6KHU%FICSAse-U;%O>N!~N>dbhvUr(DGBlRq^38rVvm$L((k^qD@!5hXlT4lnDljwuxV`* zB~ciTn8bP$OjsFSTQ;`+9>B3nU1}gQ!inGRE7MHlE_D&QdY0$&bv&i{q=3-Pr)qF` ug1_z#scC|Uyf>THm&ufF{L&{M>U#scI!ZvChQ`4F0000 diff --git a/src/main/resources/assets/bloodmagic/textures/items/ritual_dismantler.png b/src/main/resources/assets/bloodmagic/textures/items/ritual_dismantler.png deleted file mode 100644 index 4451a808fc7a5c52f46ebdd726062720ba90384b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693 zcmV;m0!safP)WFU8GbZ8()Nlj2>E@cM*00J3FL_t(I%cYZFOH@%5 z#ee(WQ5i#_VX8?hr6$T!NX;zCCNP}9iII%Lf*zyyzC!Q41bv8JtVS>-MSGCKn#h`h z%Bu~7R%#P8{+oNx?!gqziHbJthjZ3GYp=7{IijlkPgv_0Mg${*NDP1*=l1I5=1Tn) zFGyfSu-<}o3p{!eiBanJ;e46fgs&%&)hiegEWHCP7;9x+)*_)i!12K1Nc@M2}SI;PVVQlb8Bx8^7OX^xZPgKDdQvFgEG()gRaS zoJ(>%%1|5Bo`K+xHC zMQxu276iPz;(5yA_n=N?vq)ux!9hz7@9LwdtVIEmsbSfqpmCp%qx*|lSnzNcgIaf> zoQES0TWjO=^yCDfc26H;lfSVsSP|EZZysl=So5C2adHg3KO+@8cW}IEQ2}0kJPSZW zO=P9Bs-mj2pFFQCYC5>k7}A^9PU|Wbk6zMab#28mm@5iaJ{#_-AOs2$4kvx8>kt{jP!cL6Ky^0E8hs}WsI7z@R+D16+G(l9tBu-Emfny|%5(Hy+F@zIdc@Wc@ zDn^+mu71UqdGa7JT~9C=mP{sXNy?_EZ5Tn*G=`HHNunkK)w*S!Poc6_p4Y$uO;DwT zE-5mc)5u4ZF5QEeo-T(FPx$?-ie+sjQD(}p6raEd8;-@}xww|ln%)Hdbz@Dm7V1s_ ztO;mJmnxX`h?eKcX7289Cr||fYKE1K%)_Xk5X=j+eJn4de-9GsXDH%rk2CqZk!~1gV^xExS%IP9%O+lXP zlQo@}1(3HbnYLHB-urSHuL^iwQA3K-k?(?FOwkoBrX*mm7k+fNB#TN?dn{L><$yV$ zN_&A=uPSkPDaDMmhIxlT;7*a^QHmDrC{Ek$C@=67D!Lp54FurA-8izs7yobSFw-e4 z*C+q!o4m+u#@u#w3e3am90A!J9@U(ZvhMcH5LED-kE;o#eu~^P47RA^h2kOcbmp@0 zTV`M1JA>Z`swY0~Uq4jv%+X5AT7nBV>n^ci zzTv(ep3gD4u+uHD(N-FmKQY)BZ`Q zQc5N-^#+_fOC|^9M(b=Tk!8PrC4GHy&;C!34-b|#yz5(32CmF2nRD5p6MO&a73u!& zQs>nt&OH6=qOmZ;_AkthkySyhO}yy{hcABg;?#MAD?AOKof;2^Po2eY&6ZED+v6hf zqlG(%r&()g{7`nw)`JaV+VGd000McNliru-wF>CG6EoRB-sD}0ftFL zK~y-)t&+VI%5wSyQ5s4B}BC)uHhJcXclnkl)!v5e)hv$LwdtZ29RJEn1TX-Ee z5;{J|KR=7{<%dc}BlQV1-NI!*m6n!f?0YHt+U+c#9Vtz>D3{y|15CZ16iv4%PWc|d zR!!2;{)kn}D_e6rno^D28`2om3l(XI`?|0wzqdwy@Jv!y#M%_d_Lb0{9keh10aWH{?MRD00000NkvXXu0mjfH+I|; diff --git a/src/main/resources/assets/bloodmagic/textures/items/sacrificeplate.png b/src/main/resources/assets/bloodmagic/textures/items/sacrificeplate.png deleted file mode 100644 index 04a7d531e2e2d66feaf5a562866b2f8f10bec637..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)w^xJjqtX26%FDB2I;B#vUI zgoaLq(oI1`9V}`Q6D5d>H=)#MGsM^Dbnsriw@D`d+jIUe=Wq^>s47o^^?$*(ENrW+ zT(vIV1TN`~BLI#uelEa!oaHw^SLIbW>=*i>eX2z68>$!TMe7???tl+NL%j5fyzp^V zdVpJa-~&6@1@b^kcQ*wf{3y~kRZ^}lCxTOD2db)!0Ih?Ad`={Y0rkKSpdVNP)v}4klBv245Wb&&J6R64;{ddG&7$z|KHbUEbdd{85D55NQpu-}G@m{KVBamx6ixR&m=azS^Y0mLVTb_0cO7+OErx= b^*jFqMtHYOdpp2O00000NkvXXu0mjf_+jKq diff --git a/src/main/resources/assets/bloodmagic/textures/items/saltpeter.png b/src/main/resources/assets/bloodmagic/textures/items/saltpeter.png deleted file mode 100644 index f1cf832f3f31054cb5d1098c4d6836c3b670d990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmV;P0b%}$P)vep6dxjkc?01-MP}z@%~;ySL2z=^LFnXGq=I8j>oacMl?cU}3CXqbfm(Zt(F-FFdk*wEmWoWZ8vRK?zkl}DxK`si_ zTFcYp1FO|biPr0Ne7^%gn!W;%Wf|65wAKPp3&W5kNdWM?HnZ6+0KVU0xxA;T((P$in zD?ot^1_J=BwdH%U@?rR7DWybfEm~_)N{LcRe*ArZ9sHB}0KP2DBBt^31ONa407*qo IM6N<$f<3CSI{*Lx diff --git a/src/main/resources/assets/bloodmagic/textures/items/sanguinebook.png b/src/main/resources/assets/bloodmagic/textures/items/sanguinebook.png deleted file mode 100644 index b2f07bf0edc78634d4abd76a1b0a97818acb6c7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmV;o0!aOdP)WFU8GbZ8()Nlj2>E@cM*00J9HL_t(I%cYXNYg2I) zhM#lOdwY`@8&pyv#!};8;v#hlsGFc2#1CA=K{^QiBiw}QB$h5kT3T9Z(Ltd?l@2-t zad55OiYOFp1#c6Z-ml+14#i?>{la%T!+Brc!+Ati`5$%sX`wqO>ZG>jkDkh32Nd>* zs=|2Gjfjw_Qp$_&43V8D9L$S`F-*rr1VKcYHXB?`*$Bd5=W1J%?FOa1s7YX?wI8*V zX5u3jJSD~!!A-eDNyNkWXj>EMJz#4TMNCCUXlR41mBo)Y2~0#TmBrV9wC(aN4hYq7 z+0NpJK7*O9CKkYL`xw6XtOo(c#CXXjkwB0HSYk05u490UlE%TobzH9a1xk6*?Grww z_tHy-(1dhJnuvsE5|dY#YpD#XO00%QaRV=DQM-4C<8yOZ0D%cO`SLOEvo;^HE&!G) zp@x8BjA1fvF`Kj)cs)=5#3+4zePl8jI@Z=B{LYBQ#YIjm%u+vd0mpJcA=i;(#x!UV za_+$}wOWm(r6tPcGGnLDv%r_FH|8ACA@>lasSzrb3a@JYyxV93aO2GjmY0_)6bh`Y ztT2E5CS6u1W65ee2U$n-mR+ECe3)vrO1)mEQmNp19>rpj;ZtYXmvWg%*0ve?38aiI zdOuetKRQHDPY<5w@%+*NUroSF^102}40U%BbB^fU^kLrm9$ d{x;xW^bN4X1!?}x#N+?~002ovPDHLkV1i2UD6aqj diff --git a/src/main/resources/assets/bloodmagic/textures/items/seersigil.png b/src/main/resources/assets/bloodmagic/textures/items/seersigil.png deleted file mode 100644 index ff99c09a509a856b509c41b7a18c182f99900dae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693 zcmV;m0!safP)`BO#_xg3|y10zyed zK~y-)rIJf)6Hyq3pEHx0OhS{`q}qy&cwf}iw1Nu}qzgB$Du}o$ZlwMLxBdm)`3D5u zxD&6KLIsOpK~2*(trAU(vDP+|WRjW8<+$jD)^t(u-F+XN=l#yhE2NbCk3u_#bAyBO zaBmOg<;wO>(=_@Hr7&v^Qpp6*Uc3=I--xXXhO$|i>`rif^eQv+UkQ8<05uds*TZ<8 zM?POb*F(H~ofEqN!$U*zNZ&!mZ;vtZFb5cb4S*eJlv{N|io%nN{Y<>eQ8nunW@p9r z7X;9D+Dv_z=5eyc*o|xCiv{lFiaf|BSg(U=)sdwVsbn`*v%Wh630U@qW7}&pQdr{B zWD(O9j89jo*bT~#Nr1wmex)-+$8m@lI?a}i<2c+8*16^B+)LZ2n!t56DixntEP`xX zoq)dH9xA_9`I4U{oj%6z5F6%lBfytXQ(GkBalS7X5qmXJ04I*8`BqxO zvMd4uo_8&xY9WMx{;I~@=MrYE%AQRGI6E*P!@5Qy5km$(E5Fx42!z=1lu{Cn7_@AM znLc)*zv;X$ bz<%@>fr1HUy})9F00000NkvXXu0mjfeU&eI diff --git a/src/main/resources/assets/bloodmagic/textures/items/selfsacrificeplate.png b/src/main/resources/assets/bloodmagic/textures/items/selfsacrificeplate.png deleted file mode 100644 index 098aca58bba630f92802ba9469539dee0d1ed10d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)FdzGvIP=uN)i-E+>p_dEA{CW(Iu@6W`%=P~b1 zq-W;MO%Q`_90LfWD2-)shk0pnQDU`FNE6ecmlBWf8_E@RrS(+e7x1c5p_C%I;@c7{ zz)wi?1gPhvcat7PmT$a-%9t^L>gi*we8M$~fU*GL=HogTQ zCvjs&7)1=P#!U6V9e3AuwVZVC1iq$m?Z5wxe;aq3`0gRCl%*d40000 CkKUO8 diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_activated.png b/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_activated.png deleted file mode 100644 index 1728e89eeb71a434c0ee8ee7ddb2406c8fd343ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`e*P)KX;hRqAf#|B=adj1Z^}3im*T#q4dy8iD+dI1a9`wlk^bLOCUts zB;QI5Mr1FBVSnhshk{rSJrsyg7P-KjvRTUJw%fz+Uc2}1UN>zv==bv5{q5f0J>Snc zzjMx&WLc(|!?u;1dy_G|$yo6W&>CVjO7eLyQ0mmJ`x2P?&2LB2UI$8@x|f^nXWOWP zhORr7_xTdpYk^W{mH_R3Qm!D>TCFPo-g6FsrMUR7tgH-xeGi7zd!>A-<|LphXu2?1 z5T6@~NU|(j`dYK03=r?T20%;qWdPoc1OeFIdEBuohy&-umv8vx8LrvRv~tPn~*hIeYa<~{+Co)rZ6xd6cY zt49EMrbAgI{z)xZkA!J0nEg5fz}Vm|;mb$_fM_%-GT_n@0DTiL0l0beFaW7kN;jv| zY27s$hax*pQ3s{yEKKMz1MCaO$zg;;+dS=1@7?H>l9vr+tif9$y+ z5EbNpya?%)YYZq30gVev4244SCS%l$gk*rXT^#_dHnj>u%fhGf?2OL0C-w_P_eP%p zuzQ!t6H|(EHTs_&=#bRkmO-eL-7OiO>5wi9t{I@d&~N|K+4vHyk$Bg79DqG7XT`ko z3xF>Qfu|F~=ar5f0DK%4r^hojt|)KIQf?XpTIH%S1yMdVo>c>M1pIdMc1k7TnjDY; zUb{urbGn*!=R7n2O(-85H~73wQYqx@2mE$()qg|6GaVvmt0QQu%iRy;>RgmHS&3!< z78gZ6C@(L!jP@XI-F}w+Kt6SRqtR}Brk8Mj{eTq(BMD<}H!9C(KWQ`HhP{Mki{c_} vgw&=}u~N?^Y;iGX9Ae(YkpAnh<9x<%r#5RqPbhTC00000NkvXXu0mjf2q~B> diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_corrosive_activated.png b/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_corrosive_activated.png deleted file mode 100644 index acfb68fa3250bcbc3c13c7c2c4c6d0f7580ec585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 951 zcmV;o14#UdP)l6p7sC#TK`%{ z8HT}lF2`tI?umx+M8o43fHjb0D{U|@`kiiV|GZIbt6Q1!DeG^))2;ov-F=RsA}HMN zOM1>5N!;^0-3b7!_o;!B&>FRg{KKIi0Ca^r0m#V60ATf<832^HbS6@q^$POnHYWf}v*!Tt;?i>fBF7{L(tD(+I?7uCINPuUfUU}}lCj`O zrcL1i|A_g36>%lYH3@91ARc+=HaSzgVv7VfaUK9W*B=MKeQUO$k>m7zl6nkQ2E-p4 zS0yl!)CcD8yD@5xXl25df%rNA4dO<2CYl1^K5J0FX67x?=NnDYMd+A^PVIyy; zOXvZb1Qjm(ajH!Dls5ur8$1TU`IRpuo7ZM(b>7!5+1~uPDN*y5x|H)k+CYdaTu^5W zNAm((Cp3ddOJ$Yjp{>fVPS8YIqg3$8f_kkALXU$fv)y`Md_!^!rH>Ca+vDFckq-)z(vR&O^Q&WhabJ-dDNFW-iBhQ~I5C+eUY3RC|afF_UGSo-aC%mVl?zK#d8 Z{s1& zusS>vfSUU^0r1S;pYTioFg7Chqu)mWSf3LkpX+KCI$bjkheKJEz?-YbgVuKEBQY-l z=fGD0Oy{jWZg;!gKFTL2CjscH?2y$kJ?(S#dc8jTNHrcvEUOM0flqCf>Ii6KWW8sU zBm=N^FcyF)%}N<)KoYrAC6yPP+y_8$ZZ-f7ZIayh@E8CNYrpzF@czn)pb?1Me@bN^ z@UBn*ZZ|y?0Gf<-0E~=905Ifo`o(ySK?0(3_SYaxAK5LN&$2_od6gf9tJ?8k>h$QK2Q04x5=+qVFCI} jS*qrw{Qo!n=M(r1hCK)lo2fze00000NkvXXu0mjfB$j-o diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_deactivated.png deleted file mode 100644 index 0418084169fd108398792788cb09e551349a875e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)ATTfxfLe2v z;x__urZVD8Wt=h{op(=^>9YR_#F@(2wxUk}q@BnCptY(3fbg9M0C?R{<1vW^3B=}> z6PsI(HfpCe66-5CBt+H6p?InC@3E71acyGmD7MEaKvsOrI5-h-2qHBM?K6sJYg|>AZXZ z>=Tm!1P28HP|@}b0Ea_*VQNCo6ZUbre{>XpwXu?zqqAD*bk$fa7G*&K?<&vwt?bT4 zVom}dhX(VY1NREl5zwv+ zmtHt{1c24HF#tk-xqV=82!JPLmjFmPnFqlB9Wq-g>zV+Vw99jr_9pdpp#RP}zY*Aw zman=FC;+XMw*-J@OFRJMVG{s+8L_&(ZCqr8RBpa6vn3=HfS&p$xBFD5VXe6efb@*x zK2h${r}Lrys#m>00eIj3NB~6cPL_w9Kimj3Hn&Nygh-!vR^MDuxvFkhYp%jdw%5vM zbSYRYmU-2y?uNgWylJiz0PD9J-ST{LT-JxTEe}*HR~^7}b1IMuK!Q+d=V2js4>chs2hXCU|qTJ6~z~d3rTF*7-Gcd!std# zX$iV8kqwQBx)MTkftt85VdEo!un~hKs3o*DDwT3w+}<+NPN!9i=-o6knV$Lo|D5xm zGeSzqY#zr<2KUAzc;k`T17HM_?G)wn$AHsqx-a`1Eb}H-`-Sm3;B=c_ZWYh*s|?m2 z@@IX{H<5WS;B;pYFvb(PiqME!Ge2@=1b}EH20(FfF#zo+mZ+eWts-Alb1I-2lpk#= zNY2w05mL&mxlZN$X}tvS-TMkaW9=pYuH1eNz_A@u09IIJpcr$u&x0s! zEO_;6AgL}$uU2EVzib3wi(*V_rbGL0-`P; zG;`z2O$wyvX6@lX!F<5@(jXP46j=Iz>~D~7&Va8)G22tEa=W2?9{{eBbpV9JPXJh{ zQqFkn2LQ+SDln+Sp9f0?r7XUCiuCA-Mx&SD<+6BOXg%W>d7Ub-L^fNT{0e~idx2f90 z;joE$&z)KTR_#&+J2^R${G9|Kkw}=XnLjl<(=g*qm1I$1G!DSBrHhr3>{B`Y_FZ+u ziqd%ijE%iAF~5InApoVzYXErg_#Obm9~I-!-A^ih%<+#X;D}l)ASzphHy)vV@p%bQ zbEy{q&lWXj6Y?7Xz3=8GbF19bT~eiHz$3+cZqm>~cL!AUpWd#!L3jp3_6teC>1L+3 zM9*Nz$O>Z{73248d=6_YaYMYv!swTd~wF2)|&YwI}%;ziu;Og~0#r*O% z#k?t#xupWWiD?kcE()fE=WPc;%CZA!c3H1eT8Zw1UTO69%FS+5pAUaf)&8)v&z$q7 zF5!9GVY?5c6wu7m&z~rva$aWXgc?MVomJ|GL|s6fq=y$tEZW<(!#(UAv#oYxy!3%o zl*_X#o@ qKTcDO^k7Na>t6%#Uwj?sbAAGUvv=6DPB!=e00004!k`8 diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_destructive_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_destructive_deactivated.png deleted file mode 100644 index b8c33e0299e81be7dd51d86fad7dc6580ff01618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmV-m1E2hfP)v)fsE{yx@DFB) z)I*fb7B(!EOiN;-Boal?zeQ!`405SkTGOr5!zFQ`c()ur*hx&?r3%nm?6KmY)Gy;1TR z0gbK}jjonsx`T7BiPM$&j(|p2OIlE$063bL1;8bJ4*)s4BLKK=eBm*Pc?l#I*O6FU zM^xN)#i};xDiA`TM4Z2p4buaA1%tip(1ZXmW*-5-VzB`5_4_0Md(t8S7&0`8jLasw z9(7Az6Hph`pf0K*G&aR+hpY0={u_bJ(0;*SKPj7Km!~K11t2OS8UU-+06=7zJpVBv zzn8Nw4gf<_i%3mvp|9_$q?kZ_K_&48m7G6buwY>mbLfm`1XBEa#NFy1%1Vv^Fg`H` zKww}X09}200PJ=-2S)9(2duWA0DQB`>r=O_2B5v8QK(dnn9XKsUIMQgN_-Z(vyqsU zz`(#D02k_8-P~@qTHTa891Z}^UF-zF>2$h1T`rf~JXnbbVhbyLM&QHkQe_0zu89KR zaP~$3hHY~HM}!0c@NV!60Hx&}0Gv80cgL>8odDeGXa-%>V{YFzE;=57Yb~&<7=XO2g0Xf()e zmY<)yAj(|{xx8;K_dE&zl4!gCMgU}G#sVT9Vv@TcICvERSFW1oRj%kXG#d0+ z(0Z+WO0^%e**vFu#i!wvYqEH0bFW?W1?G0Xy6!z)>00002N14>Cm zK~z}7)t6sLQ*ji>KX>Yu4?0AtG>RY?nPHJ)L_~$u3h^Z)%CJy^z?v1P1-&Ko2ZYis z&3Z_JTKLdIC7Kl!B!StB_F}$R*ecR=&Ob~xZx27O?ry)iW&WYx%jI5vJ3HrdzUTbT zPf=Bs%O<0ljm)JjiLm;+l^-3pUdnS{x*V) zqMES#%Dkc9>_&4)0D<*F*F6BBu*RfBOEn?^ErKn@ zw-+Sm!9)~QRm0|5TaV6pRe<-y7Xa9Cs1$&AFX{l;l$;Mh`=`b^Nt~q<00-G}4ahvt zEV;Ab>en36X+TCn%lWh6GXQKf=8DqEOaq|h^$h?HD#ZXy#rgnfa@7Kmx9tr8<@VX? z2&P~Nmz#_e_66$$fe|~%)}=sN1;LT0`}P5_{$!STZcPE;bb%Fsk_}Y=O!y~+fw6A@ zH1;(BaAapk2#K(LApQ8wMeB%xB%}m_>-<>7RRBi%M* b|nA<_xb?1(s2ra%H(d#?n?lEdWBY;znTS+&>~nS0)`Pefx;S-Vw-eRT=7^1xc^oV*rn_hs*V#m zjPdsCa%;#<0N_Xc69D2;l11d*%{uirv|1EvuXFB!#BMax#^TJ0)?TNs3(h#84HC7c z*~zBN3&oX!#I?>n02Hh`48VB8ppJmMNz}P9EeU{IU80$lT6+MflSD4nK;T59IkO;< z_cVu`0XhP;Ciys}k;p55qXIl=&jDb!IY(FL{Zrooc;4mI<-D%dqF8&Hqnih6P4cM! zg@m=&iNj#QVX#D=2O>=_XX#|UElZtNGXO(FLjWWtC52VHgKV9>VB4{gdbYOFK{nM< zR)6~{**_|>$md$hd@rXnLedVF>Gry0 f4*VCl<7n0&mtJ=k@1o~p00000NkvXXu0mjfg37fM diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_steadfast_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_steadfast_deactivated.png deleted file mode 100644 index b29a3b7c9dc2e255d40a9db851486c0e49dd4415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmV-h1El~5=#<@$}S}; zyA=Phc-5+Q>hlmnphldhnhg)wdjzH)b_B!#FlMm=V6j*L2v>#yh~Jt3z))wENZN1Y z#p{=f%LH^;#ptq%@eSSUvct6}a{i4#l425=OoVKRmP#{H00`Q)34r?sNkT;W$`|av z0Z0u`2B7+Vt%!?l zFz{^<0AtBb2e(_TRtM#ilal}x*U5D=GcyiPyWQ?E_fg}4(2P8{5$LbJu8u&Ue;@$6 z;?iVMgWqMfetz<-`v;`*+S>q}KYSU0fTJ=8dW*^du#JxZP;YKlp97!EFS(7t_9Iu+ z5tvx(p#ZcP%LG7-MhCz;jlcB3&{v1E^@x`2j zDGWB1EKdRR$Bc(m_WVb3fh1ZI~M=|002ovPDHLkV1hiMb3p(A diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_vengeful_activated.png b/src/main/resources/assets/bloodmagic/textures/items/sentientarmourgem_vengeful_activated.png deleted file mode 100644 index e1e8f4a7013f225e1c43feb54e98ffb86415c0ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 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 Z_#0cM2e2=gWQPC%002ovPDHLkV1gdRDiZ(z diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientboots_steadfast.png b/src/main/resources/assets/bloodmagic/textures/items/sentientboots_steadfast.png deleted file mode 100644 index cd5720af122ac44af5cd0c0cb50acb64b34531a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 zcmV;q0!ICbP)Q?i@mSVMg{>sFT?XQA*7aXst2E(9(Wa z#B*@Jj&lEI8h1cO03Tko)`aUYcpdr7WZ zP9PA#T1#m%$@ZhQY-p_I&5P#*0)aoo&Tj&MikjU#yWS4tLSNrU)(tu6BF*bJZ+UR~ zDuKK(<&~BEoS1;nbO<7XF$QZb%?&5y<>x_p_dO$r4m3(E7DGfhT;C+Aj3@nLo*b;I zlRMvr5fMaWiokIkthE%Cm(bOA4?IiX`%gHIgNV@6-OKF@H?Tv)l<(Tgv9%>s_xGc< zp31=YeG-WTuby_YxuJ%#+A5ZnEX5du@B6G=wVWMIb!)5m^~sCYO)2N-SI;+R-8+GfRxljnL8k2&FWm z-WWwo63TU59LFIvFI)K{EXt45@#GfOWjp^YQHcn}3l>XyWN^9_7&or^*KBh_*?&DR f3aYG0!2wg zK~y-)#na78RACqe@bli@#*Z0CwC>DYg|J$bQ4}qL%2ia96r?FZn3Ihddd|G-1oE?N`!VUI)A|7_rQ4sNvtFW zR+tqRNC41U!!Qb6H?May5-CQ`(U@#)5f|iI^z~e2k>8JCxkRG*gt$~3fe>OzU>F9J zQWzY#!Bwup+{6Oz^*=&BpNC->cs%$5?sOWHaT}pq57?EPg4Vh~APLX&KoZRd4{(0= zJ#%v(c`kOEUAZZEo`=p@l-bM>GpScR)!4vp#|BA|ES&I%fBfWO-06J@I$4Z<8O82t z38Tuu@TXz)Ubzo{upIUEbx1f4;KPzYDFv-HF2>F<{qqgg;s`sUEewT1Ac@ZQHhS)N z=AALN9zDW=RC>8UN(rqsw(i=3hqvECyDq*ZzCua~l8ApELEp8zNYBjRP{Tf)-%*RE z@$rJ3B=Y$@EXzW)v4IP-ANXV9DbL2*XqqOJQs``NqccCmU#ZvZXl|luny@SjBq2y5 z91df9q=I%jgAE%uVvd>%0 ex-VP8EM1(*fKp+snl3ye@2ZzPs?G;_ujd}I9A6?h6i%WD} zN7r=`k&uAj??*(i$eJ zhku&w)B}VB0NTA?01EbOBfauCHM{a?i{BuX+O%4?zm$%Olg#$H=^yfi{;sKo0m!^>QpciPvdRY?kU8SkVbTx8PCtJ4W*y)IU>z zEY7sZm-|&}c6|o1GvA4vo`k_6lC!dyX=`P3OtP^|1Mv9zjOSb3-E>?(rxJ6EnRw&k zMZ-hPiEHQ|>mzDr3N1X0M|*9!JzeuD43CY4qI7r5vRbDyA3D!O>vLvfOlX5Wj7BUX zA=S*_%O(a&%1OCYf%D?|d4ZIbD*$NNn5L}mZkFD55*-XM8T`rOa1)~+KBD?RF|le zK~y-)m6BUXlu;CgzcWpaQI?~jWZCu4d@wA^N{B8L&2*6p3sfp}#D^j*!ZHwIQVSz0 zs@FmqF9a1dh?O9OW@?~auo^KdvCNFrZlgKP{JRJ7H;KRw?6>o+wOM;95n(*f?noN* zv9I$pgI~Rv{{=X&xoE7pVL*k>OzJ&v`P4taqUbR4)6di1-mVM*UDq+0Ok>;%^D}9D z*}?3{X{2sAI>w;%#(lMC_j(W!M1(*fKp+snma$FTy;r5+b*^ZdW=!LYE;LP}QqLAm z)6g_cL}XaN@Ao4j*fO?BkKQB&uXAPok_84d0#xeRa>iB8L1{7=H4>uTktAm>Wl`~| zp5o-2BqnT94Gs0oJ#m}}OE3xcYI*Y{O{tX@qD$I1wl@`EIK<>$FTh{$m8NC@o~T1o zSG7?^*u`^508rcV0)Rc+*AjQmN$KWY6q$46nD4C0OSACIxgQlYi7sChR`Ya} zNdXLR05BtLs&S%l>vW3DIWq7xL*?lfJXK}HY){7;v5+YXsrUo?_}=`0 zUm;dZ-R<-TO(0@^Jlzj#`H*#-IYmxfr%#Rw#70{IxE^yy*;_6$t<1#~J%CsL$>fPv z`a9pDy593KZH`fUqxuOOR{dF38L9Sohq&d7MMTgvjsJy3gx@Lpe9RV`onQa}002ov JPDHLkV1m)3U@QOt diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientbow_corrosive_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/items/sentientbow_corrosive_pulling_0.png deleted file mode 100644 index 7227a2c4e42219ca38ff03812d928e60d548e459..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XJcP)_|cY+C{pNd+L{TZi8u8inrAl0Ia{vDzi{( zL}}JK7jFn0clH8s&Hg|=E#HuKkx_d@b+y0#`B@{D=E%a8fP^an8So5B-dvTXR75&D zSlik@upr?|K!T2_3Ob@{cc(-;w}HFgMZ1U%;Hz1txhg==5mn8i3;Lq)aDoMW@n8#& xGcnOLP3q)sXx~WcadqndpKwGo+xN^&eYo%0zGkV<{XHz ztsxs?wYFJ_mY(7dq(3CaQk3ag=EA0J>3-n+aYg0)cAJWK+p+WMkE3fwKJfhU!1I3d zen0O=RFzYa{rde=KU0Q)qPI7HD4FA4!g(j92Y}r-4&#~hDgezt{=~L@ZoD~Lk^p~AqrBj9 zQRy$DzPC_Ia<(fVs4BgW0=l5wtydnL&;s9LT~O}UlGs`;i(6XW(}ytzV~iSOs0$pX z`O!x85C4U#;sof{Rsg=~zd$%-lSVotgAra&oli%`Zq3`ZQ^+(jHhQ1QGmmMDtWF-= z0kD6dK{i#*BKXA*96Gs?aLDHR)(G!UZ<4sgS?7uB@a^j`Ef)ZdW$~#q6#!9H78ZN7 zVOJR=sW<2wy2klm{nEO=NYgUXvEyHg%YB47zTb74L}`)LqOmMGoaYESmL(Jb1Us*? zB&U{G%02u!SM*HFSqX=1(o>3cAn4^!#|jC@6^&)#I&=bY$iEf<#;1(|;7)Uqw2yqt zqR;AhZD&)GBrEonwmH`bK-ZAXqJz=AjU zowoTKl6JDE?q$Y{nE;f(>rE(V>%Ij*S!o4;j9<5sim7L%@aawZmIidz=|%~MY>s^L zi@urvoHj4@(%IDwkcjb*a0Gy^n+c+d(m|!PkkN4s+_njJUd26S5?pRnYe$tN334a8 z0Ju9iNPTbNV>u5seaHQgVP=%PC$(0+vaf_%s~%s^dK?Z1q!APaMzz8=c zf;_PziHcWG;PH550l>N7e!b~_6dQ?@*q!QFxPk8WCR`Oxx_=!d<&j0axUn?O(aJT? z3xKF9z0LY}I_0)) zg)^~l`d+8UJdj~$tJdq)nZq*Ingt+Gx>xO!FH=&UNynKk8m|}O_xkXZ1$lq}E(uGR zlAI}(gb@HFVT8Vj_dWoi!`)AD`j?zKn#)k=Ct9z4Cw{Mwhpl;fHUDjCk~CQwX;ObU z+Ok+A9l+fl8~>_Xw0jah1p z(an4JVT@5@3)BEr8sm&>u} zIb@|0+r zhNfvEBJ%=sb90CYPG_3vzIGXH%$N1+Vh!jwpjV!f%T=|Uly-x$0GQ2YTrP)H79Yj; zqJllek4V^(rgE|~SXFkBaBCp7K@TXhWh=GCN_2G(<|D}f^8#64rU(IiAD$X;TU#p? z?HvH5wiHU%_jDDxeJ!Ck>%bCd?92oZQk*4MJ?GeZ;xRYwG^@6@RuW6y^ndOmwg0s2 z9Y|1-X*=-N-eW8*m~V4GNu_Qf0f4vrH2}GpDI{L=P?LTTTc2AdR$ozTVywLO6rh$Y zWoRZ6yJb1bqyXj<0N8CI#)-o0%dz#j<;=8GmFQNyjkk%{>w`*YszVT52dg?Red~32w zD$HZDqnX)YJEq}Y#+H}~k4<9u*;76pKS#_Z4^?Fs76ewVhz1~je}i&#UMJ*s6*k?^ zl>URD06SxYA5cRd8Oez;YHw73_pVKUR#kpi`(KBR$%!H&Xqv|V!Xm;ik_dH#>3D_0 P00000NkvXXu0mjf3A|TI diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientbow_destructive_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/items/sentientbow_destructive_pulling_0.png deleted file mode 100644 index a73cdcd8a50343f5e339cee006b454ac91a04fca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~OrP)Ao0pUqR zK~y-)m6A=N0Qf5}DSJNj?PTriceaF%voyOEqd%_N|qNi->Ke)F=1VEQk zvMJfJVp8$uMNga($vqZ;Hjxd;Mm;E&^6b0)8hP^+falo-RrdUKE4$a&RA5K@Q5fwUHf7m1_Tlm@SFsHO+y2=8*qFf#VmN=y-4{yk=1%Ku zY>0SbtgRN}T%Aako-qxQ=np{@g-!n$q@%6e*Bf5*zEViJ+or*OFz@k?qjN<*@WAti z&-=~${d_(jQB~BAD(RcZD~E+Alx5ZGQtTvC%*@Op>2Efx{ahXZzLj^N;BDl^?GiZ| z!x`w$lJpddKXJU%kGCS6CA56pCo4Q2A}w1O z@2FGnC;Jo-RF(AQn6|xFsp+wP_4{iw^YB(p|7vMlJb^I=V~iSO=#KT1J|5DR`AJk2 zHvprT0Z82$#7U;0U^$C_{K?b4db%DQQs?u}ghC^^v-kPv#&;UBnuLXnGZ(^LhF*B=u!O@HaE&L?ld8*2d2g(7<0IRJ>NVp+A?6KTg2Pe5Xr z_NuU44{Xwx3YIha@RWEePjjK-cjf9FA*)Grp@>oU0E4b~G7bRj_z2!$7cBlw_tek& z!}%-XBvX_;wN0l68wq(Egk_89LJ^*Ce?(mJI0ArY+4BG#&2JXHevS>%Zr1f2&5HD1 zI;NopO91S-du%v0n~C7}*JxxSKE0DipH2{B2Pcz<8 zr%Q=*UtHz>;yk6h-k0WJpPu+~C(Xe=;_+5oE*Df+m8&sEYc~0_uWhGZLskE`jWN0u qQ&#$_sw(A`RTyLbIrKz<|MnyM?Sg2To0}E@0000(*1 zK~y-)jgo&z)OQ%iUyn)6vL7NMBwDQxSLa%;rSwOnP>jj?Il_o#9=l*N!)s%W6$?~Y zas8rYe_Vw2!+u#z+SnYa+`>6?FgCErZ=UDeeFr0|J9BGXn%%QMZeAVrM-P19;rV>t zFW#T$c|=utnQ*&HlOEck2qPm=QYQ*(`IOjg%4E_$bNI{K6FiAgYSC z`E*xHGy4x6qp#yM0M7hT9P8Q>f^*+=3S%(<8r#0(TEk%l;tseI1R(sg4`+Tc09M~G z1iHS!v0{$^l&>#QKmY=}-%$t1z`#Jf2jV&`-n_HA>tX}mkBixM@C;e0QM|9-Bk*;x zzBjm5m}?|6`Zuy{3Y=`Bbf6i46o8H4f8oXt07U-$5jzy&-gp}0f89mWmU3Z^Uq?eh zShA4%lTBJ(ULzA`;Wt7NM}NOwbrDZ$?!n4*?*P zhv<#jPXPc{e=m*$-{UQ-fWGTox!NUmD8k}NTeav&t$1=AQXjaiq>slTDUuAxNS_IS zqsl9cKVY`%mcRK%NkLg`^(*9tu3WBf^wvc-)P0%vYheE?Ei4w(}vfsw=tqXf`*k z+W_$~Mn>)@ZCOE89rfLnO2Jh8bSeHWTs8Z}uKP?c-?^bye=p1T)ky-7la&j=sc%~e z9ABw)SK?Xqf#}%01at<_V-I8X_u^boKzGMcUH;Y%Vb#haHOA=Mo8QM6qsADvkA~Sk z8b(#0JH{COsr^ee#;B@7;nGF={{_aF7m8j4naKYGVhUf-D1ojo00000NkvXXu0mjf Dwt9A- diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientbow_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/items/sentientbow_pulling_0.png deleted file mode 100644 index ff44e3831b04f659c81bededb505d9d01a96373b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP)KOH{6%At4E*%Uc@YLPYni~y5AvRIE^bZK_vRqId z>R_i;bO`Dq*bme)Jj51X_ARG1A(l>ybV~MgC`G@zQE&Lb=ktO0`*}al`%%|kCIsNq z(GxiL4>C2_ujm1n+avAoVm?dtdl^gY(F2x3Ay(o^)`81ak(&cbnMn)2AZxh|w#p?A z9XLoRcnQNWlm#GSeB|8mV*n)HCb?f1xi>Y#!u(a%G8sl~HoVgpIvg2>@yF?1`5+E| zK%RUpip%X0hd&_G-|8~+qam86wN5+PC#lw-CCV27Vufvr`79$qWv9gXeZ$yN@3=lZ zpa3*Y6T>i+Pf~J2o#~uYp!!-I{(wXpS($V=rP=$H@{UC6zq+dT8Zx(KUFNF^IXr%< zLj)jLX~>>rm)j%p)lHeLy^TqaZEH#6K}21 sJEp%dZzRpQdiDR$7@s)(|D-nj1{O*Tkg&pRe*gdg07*qoM6N<$f=Yr1^8f$< diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientbow_pulling_1.png b/src/main/resources/assets/bloodmagic/textures/items/sentientbow_pulling_1.png deleted file mode 100644 index 89e04f1e62b7cb2d493f247a17def946409d618e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846 zcmV-U1F`&xP)m8ZG4^t-yA5lTcRvn)Q1AYcy3?N^H|JG#h3jm(j7Lhk?Dy8uj*?Yl5OVf>5 zldHnb{l|}ZKG07}ViI-kuSv_y7R!pbiFkhhjbn9n{Q74r9l&z!C!Br-xnSE}RcQ%U`Wzd(PopY>PEG_aB#8Rx5j*n*lqgz4|-5MTIx33dp48|BW#!&0|nF?)F=Ws8o ziUr^r{{Yb3+ea|qCjodh)X$nvX5dRq*39n@3Mocr4u*K*m>iw_MsWZyd(*|Se7Rb;qW!;?i3HfY;}v*0z>V+z89(Pt>bdE=w@r=hH~F z_T4PuRlHYp#EM2zvHo}oiIaB$3Dc(oU~e3jrq@p?JXy=i!v|v!jijnf=o5hUp&kk^ z4gw(g#bxTMtiidtkhIKf>1_K$0m;2vuTxkl5`UZ4T(>49&!uNlt)!) U)0C#Cg z)Iodqqv*F))&R(yZC}!yUM3QMTLE=6*GVwo=Xmvhx@z9%+PJ=id+iSZqGx>G-_Ll^ zQdf~KbrmuGTz!GZczr%H7A$}(*LB;s-$-l+bLS*61}f-i7~8Y}44t^ezelcO-&HP$ z+~s(EJ`TCd866#slCyI1)EJ}r#bvQ?tI#%7^@CxI(eXJ;GVH3VWaZ>xj2SEXDB%70 YA6Vi| zK~y-)jgoyx6lNU9Kfm+sG88N$GsxVYODBaKZrB)`&_7*`kg*MPGb+ zFe?@cy{w$GHfS)Ez2cVn0vjr9SxBdLN7u=AV>8cF(K~PIZ+~2#JLVsI;DLwV^ZS1I zKF{wfs>=Uaj?#lMjeeh(;PfQ%ONCEoX7sjL`6xL~0N!r7LSK7#R8&<_gLCvgW0L_k zug{>q=2hHox5NXyGV9dLThpWf2W*e&j+A8j+PkSbdJLz>!@9II%J=VyarEfpPYZyk zDor7mUa7l8V|_he_VxqtprDZJ+iX$6XJ7RQ;Y9$Ne)yKI%V!jbI2ewf0^oD^J&JO- z0MPeqKkqnQoXE2Yz~15_1q8t1x~5!4TrO9{0YD4)^polf)E+-hL&ci}H>UH*Tkm6u zi(|IqYhkltZEy-HOaf3q8Y#d6@cj4;o%{(v&-es>pO;m?KVUW#U^@$JEOO|a*A4bu z0M&4|EIrKvFjG;fWzH-L-+Ph1k1uefs~Nw~%jDr&E|vvkUW6AM#VUy&03^}F?Zwe$ z0KmY=2yNS5;^ot?@k{s*ZghMvexH~0aIOASIVHUbHzhe}S6xVpKr9jqSd*Fxz=yV7 zGG$rd$ArK1sk5h|kluZpm|Zm>ELzcpG@iX0i~t;^2es7lN zGGHtah)G%gp_8b^uhzIc@}AqR8qU_-ck9IO^Rm|+(vprYz52n)WkA-33;>$H`Hr1; z`c*A{l|+v`42}Sjx;>u>-zWnkBiM6tIN#P43D6VI>`-Hj?kqWgF-DCsl+TS*J~xi4 z{%0Fw^jvGF8e>#dVXM7BA6{ULSy8kSWa<15J%VR1kO*Yo00000NkvXXu0mjf0ql50 diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientbow_steadfast.png b/src/main/resources/assets/bloodmagic/textures/items/sentientbow_steadfast.png deleted file mode 100644 index cb5bcd4835d8522ddf88b733ebb6e15fb806943e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 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 IM6N<$f-~e~KL7v# diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientbow_vengeful_pulling_0.png b/src/main/resources/assets/bloodmagic/textures/items/sentientbow_vengeful_pulling_0.png deleted file mode 100644 index 082aa7fee2b54b08d9ddeb467347f6918f9a7324..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)JRIi+^}-MT|HJ!z@B4nA%Jg*$ zz`=!YY&&}r=c$W|DhT+zVt*SsljYT4sLocm+)9ixH4+El*wP}7JNH#3>E>{dnbcRz zd6Rt&ySZ@n9=fh8C&1j`1V_#v2jFe|J>}F>2@b{>7;a-WWw2-OcHC!fY*3`@`d_8x z*N>&M)h(+Z6B6)wrL)y7YnS~}3I#>eH0#*O<@O%y&ndCb0Q`88!N{4gYbQU=0`=!k zGqanSYwQ_Q7iFK>qCJztNX(orRVdPA@)|T1oyQEa9MET8x zY>-?F#bCe4hqwS#7O6#ctY4;+Sq{H? z#P8@V058+;l#w&7QI@2xw)}w4E1xpsRAu5YF0T$;?>|Fs|(TK7a^>>WP z!`oNzcZ_YeF!g*?G)o2j0q6uSZqAOY(=ce0eEx%3a(9R!Vr`O!mAIC0>_Q3PU1E2Sc z_rv@1h^i9#`kX#85G0}L1K}Z6Ra&4cXFC*TZXtp!RC{z}?IHj_91&3o|Hq&0Ch0HUf?l@_S~ z%rTNK+bs4?(s;-zmn(Mbn$#46PjpMN<1^0NlPa^1;_?@ZMl%T}_A_9W#vA|y2S>@S zZ6aY#@J6m`Z~u2H9_rj>vaFAx(M*y*`2w-zpA`U}N>2jdY|&P^*Kv)a zQ(iW9d=!WHYJ2oZ>ka`JTb!n-I}!s_l@_R{)O8oT<@|`Hf8}gq z-OwqqLtze2{KWA7HB7agX3MH);_+GlqnB&|jvhGPdvJFz(X$3-c0;_?^AZ)1FFhTz~Rxi758bHT4$J#L8u zGS;U7Ff}{NtwN`+6fSlQGJkK0XX_41MSZ(|++0gVeLFW_eI3iPVEgl%)fl5YcUQ)L zTdn?xs{U^qV|3+AUhW1}RW>_b!Wi@5(L(|M?Y{w(1c+pbi#|Z#DcGnrp8YWEnAC?ZT)3QjpC8YC&Jk7R zd)AtiN zG&eU(2*5}CZ`v@v3x0Q$+}i!7 z8Ky;3;;7cm2ewGx*K7bI?Wx*X5Jzt8d`{HWakKDOtX3~OdfJJXf6$#cK5u(~+TdD}Th1yHr#^qyBJyDfa~cYf_RmugK1#bZ4Md zpg%=^kk3b-@hN&56KjtJA%&ThnjT>jdIvKg1J8Zy%NY^EhO)I}j~v*tU!R|U5rnL7 zdCZv2>uBiufrb|^`!jgg;vFz$Q#a;PxIJ45gX=XOrN)EZnJ-q>4s~@r(t5XtguGk{ z0wN}j1)!|@D$kRaD%-Q!b|h7_XF?D<0;qfYo_e>3nAwxKS5>SDOB}-d_!(-9(WK?8 zF~+DdhE3gVZ0c@9RlnNC7;D%RW4 zK~y-))ssC-TTvLte<$XRyfw+aI@wf0Xd)yiIQRt|qeBt;1%wtlh%Ti|JG6A|((Pu; zQo7yTd;kT%LKaa$aS`7_J&>jFcQPbb?vyTl;2F+==XZY3InObYm?dJ&82=W~vwr~u zC|`D!D>>tQ+W&oHqXDDQh)%B$z{A}QuUc!o`}qrde+xjT*C!SWNlO}MuH@+L=O6O? zK$0{V4D{{rNRs6FfmSv)6;C8JSrZGxuFp@|*=hrDF#N;Ga0tN8R-1St`TP?~<7QK4|KleE zP#D Q0RR9107*qoM6N<$g1jNg#Q*>R diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentienthelmet_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/sentienthelmet_corrosive.png deleted file mode 100644 index a52612ffc3da06bdefbd22c76cbafd719878a93a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmV;>0WbcEP)zN^cOhQ95~b%C`33{OO1ik`5&B7W7|n% zjr{>ZMT>}eL#1TH!M8yay|~Gi9(acLf#>sl-d}iCW1qHTkt92vdtTg~ zlO%1&;^t0?awN>z9?1{uKfj?;t^xpVI}dnye*yqh%2mjb@b5#IrNy0%UrW(; zEP9^HP&gE9F#jqE#ZUl0WbcEP)yRY7oeu9> zMS{+J4{yl{0G(EFCxou1lJx2*< zB7^&9w3`haU!3FN@g1$7{^rgBDwR9{;Pd4zo*1evQebCRR2q0KjhjM96YRC<#OCAD#*T$dzqqT3W;p zQP<(Q4%gPQv~3%uQVGRk5te14kT>bM4h_SY@reKbnZ5ym@8&RD*da6k0000_Ls8pJurCV!;~AT9ochc&X-O}f;eO}4hjZ_DKP1r##&fx* z=R0U2p1gg>!u)(wt|fu;>Iwieb4%Qwc<3ja*pehg!+R77^?2BbS1T@KS!?qare{k4 zI6uB%?(gTu$PDG5Up;Q=@xQy7OvWz|>x!r{x9EwCK7T-^BkC0|jOVy?ty}iuQ_|@) ziDc5>LL}6q%SX?9cBk&X)Y!RaUOsG|Qd=OXe6dKrSVU5zfFxN3TUNpL3hVQ>Kv4BH zf%+Dfzd20LmbgEfW%=_*;1K{LXHSyqGXePY+ui&Xc6aVlxmuM~u$73#)!h+RS9@6T zXs@h-t#Y-h;La@^NWwqVXv0nz#ukf|*w<(D$9e(y&M)J`+NuYD!M$-R>wkO_o&z&E zKq_^FgU5%NymFCahleaGj>FZddyS4HVI~L2UN3R$W}4UU-vDqY|AN}O zORzJ9YBe$!hMMpB#xMpC9HP~qSr6m?!EHDG0{BUHNvp(F`2YX_07*qoM6N<$g4o9Z AjsO4v diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentienthelmet_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/sentienthelmet_vengeful.png deleted file mode 100644 index 6ecbf405ed1e75aba27aac00e8e9f058e2a29475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJQCP)u&*9t#1Gz04Aal zs*2p}?%Zs&yaDZY8&$Ic0I=UbvA#Tui=zS>A01KEtU!`nrb+f%Rb-Y6JG2a)Bw4p_ zcw0IrNm_=^?Ts}C1Ag{vBsc8g)kZE~1OPl;-=SHn0RVFOB7#Bxa0vahcx1e{Ti1nq z?RGGLtT!J~H7htiE#vaKI3IJg5@J#rX2@#B`V*jKh0AN0;L5aqM zcZl&gEJNqg^d!^iG_u(&GMNlCO~Ya;LCesos_KA7{QuAN149MmcXoRN%K!iX07*qo IM6N<$g44Ufj{pDw diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientleggings.png b/src/main/resources/assets/bloodmagic/textures/items/sentientleggings.png deleted file mode 100644 index 1d8fbcc516dfd853367e610872feb8963233258b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmV+l0`>igP)xS*kdKfo^n zfk+gI6fwrc5HrliyPla#Va3Ea!8~p^(#+A^?>kCF_@4<6AFQ?9dGuIpno_CNSh~1K zzn`>toE;D*5xq}4oH=z;RV%aVTf5Ea`U>J?IzV?j^tB$<+G@1`=ygAm z_tWWsv30!1d;eRJ3e!vrg5d7~$!vA>1Lqt7weyRA2ADs$fV26qW2I1P*jQ!^NqKHM zpuO>S6qfg%FdW+6`LKa=g9*TxNO9?ei2MxgK$s{gkM(z~iT^S`00C^oRi)?#SO5S3 M07*qoM6N<$g3_@~ diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientleggings_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/sentientleggings_corrosive.png deleted file mode 100644 index ab2b93931cdccfa4288fb828a7a83dd4bf49c411..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536 zcmV+z0_XjSP)KJq zKRL$S+$^0F!?&+rC|63DIN{or>+1f^8>b=>$e+k}1RUSTH25WI}nV+Ab)(Y5Z?qds z@M~ACu|$E!ExPDXqeG43Kon@K(F0Q$03@-&Eh^fzLoQ5BtMRI@j++6~S7#6@3~Ed; aFYz4`J>-*7^SsRf0000(tFE&~v=CQGA?ODXt9*_$A{JI5LWqiJA*S5M*3wT9NMU0u zf~c(^Qv{;yDC?iNJNw3+nfLCsSRH30?y9-)iVN@jxbL3x1T*7*%8WNkDXgu0VXvXk zXXWv6qzGU6u}{00000NkvXXu0mjfhFF#A7JO6-2hQCm95 zB(q2^%tN&t+!jlSMJ-6>W8(cg_GNXYS42d?TVLCt^9HBFjZMct&gi6|=(&ea((x2U zjY!bhx2=8P?hXe>`5;Gl0xh@wG~mPBGJgHJhT}PC`}Y6~B(t5}$r2ay^LxaCcV zdmhMIsZ;;}Rl5PlYmWx>ht?We>t~G=8s#*@F#a8ovc`iBlbm;AEe4;{U`0 Xk$K~X+rq+$00000NkvXXu0mjf)HvY( diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientleggings_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/sentientleggings_vengeful.png deleted file mode 100644 index 4f0c4022f1a2786ca0e06aff5df46c6b3bc5a6f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmV+m0`&cfP)>}({g{0=)IVMB<8uSi%Dzd&N^hgjJl=?W1W zUnQl|>9o_CJ9o~pC}T>rK2CBMC%NyFbIET8xg{}EHwv|F>B7uRSUf5-Y ztMeC6W*Ae z;jl)8pU}}3=bhCRkWYZFV|XNm+_jB|+dLvf;A9fZn_I9PSG;R#0PU?U9M!a7vhB5X z6wCs4_x6H2B`Hy^)B%hQ_Twh^0$WN{Tn_*ci#DOfFrYxV&zm)X$mgvpB3P~q!_ZNZ z5+y022@RI(LP`4K!WV$2d>9cO_jwatsczAlXcv#gA_jZXV8M+6PX!Al#|doBX0rf* zhbI%ZBO3$4MMNN?x5fOB~`du#XasfD8H9<i<+m#MU{wGB N002ovPDHLkV1gkT;oblM diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientplate.png b/src/main/resources/assets/bloodmagic/textures/items/sentientplate.png deleted file mode 100644 index d61fdaa5052e1202049a186936093d94edaab59c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 735 zcmV<50wDc~P)0&Gb{ zK~y-)t&>YgRB;r>fB*lz(~L8AXC|y5Xps;-7g0hWfl>R~rCOUB(2LRi)J$vir4qVsuau5+jgrF6XpcRqjB^5HiaES!1h_qk3;rWWT z)=1IT8p*}AUhY6dFabj0sPqrL2B5UG1Z5ar=NzVO8^h-#7q@2RQfa8&rj&@#cBM-O zUOWTfVEqBA>h=II`m7ItCF{yjT9JsyXo<%FSiiQI>dMW^1nB9x&Hb)!>`WSfkFN$$ z+F)_<27G=$V=tZ~BDBO~B;s*Qe*in3rn+)-_K0O=8D+S|{N`k7+erY$t? zty8Y+l1wJEEC4u;LvQaxwv<;eF!~NxKxu`zLe!egf`toNy{M2oeUC5<1EtiT2^_~k zM2Hm3lS55S)NZfgdn(QKo1HjHQBhjKg1K`@bam2l_%L}sLnV{R>?#1JX_Cog065)z z65H^R`8CO|9kpnsNOa%8Z)##knzHiM+MB>zL2J#awhQXe{@v1g>}Xa<0^z(oV#iN- z*AMx9N^9*2%mkR8oPKoy0M0iz|MNIjFrXaA;qL R46y(J002ovPDHLkV1kVfNf`hD diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientplate_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/sentientplate_corrosive.png deleted file mode 100644 index f94aa59f65fb3f53879a92ba7d56c1024cbbc18f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 735 zcmV<50wDc~P)eiRACf`pYPr~(>Pbh5re=&Xc1CDt6B_HP(xrSE}|c@s3ZtNh&Cb=gOx=@ zk(r7~Rs005D4mWg__sfOQ+HQ99n_JY3sF_vz&8R+ev)`h7c<5)p1Z zZj-lfMgVATJW6!`VF1PxqX1NFTZ>XK(0z^Ag-!r!q7kaL)F}gCFrHvA{tP>ln>hP^ z3Z-kTimt}D#7A;y5)mPGp_87DI~V~2J7ZI|r7kC8bn8Clq#ek@(AY5PRE9vPfG;Dn z%zT)_2pFX178!W@8~`Wn5Wn?EdB2d!WB}NGXcwc2PfSd`WMO(9!>!Tso!uGwD)I=ln zUw^1v*Zu7S0LO6{j3=n6-i+V$krhFyT&_5{l;tbRsM}G^gC_}eT}RjT-#)Ny8_Ti? zhD|xu+9Y$Sk1{_0LQY;eA&spKGCUKPuc>#^)ESdt*p$-JQqN2VfMFO|mIc7&^H;EZ zHg3w|_>tXcN~gWIj{@x@EvK*M*48xCuk{Si)0)P`j@zoC{-Cs<=>Wh|Hlc!ITFYKix(lqboIRe*p(KHPaArvT5Khlc=&~>i+ufquiij?Cx{7Inx%QgNBegX~z95_Bh RaAE)e002ovPDHLkV1nWeMYsR} diff --git a/src/main/resources/assets/bloodmagic/textures/items/sentientplate_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/sentientplate_destructive.png deleted file mode 100644 index dde01e168832b2627e5456d9f7c17ae1fc2335ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 732 zcmV<20wev2P)YgRB;r>fB$>$=xu~~5Gp0Li4cOI#6=q^D$^hdF)B49f+Ul6MS(#`3_TEp za>NocVuV6V%@Q-TQizH~K|v~Xky?u}j5513b7xMAVQ#gyZ+V{IIo~--L|6$lfK(9? z!SBxyzdu8Q?VZ@R4L~dwbL>r_4ibrklY@vLBKUl6@%h|RT(n7YbF;G5~s>jPR&$fQXgsI5swq zt}Ax!+(>%5i+7`+5D@~+tpsniW10q$NQ}bLs^k*$_Eaj%vPlShoEc^5r-jF3GBNpu z@$os#bc2P3CHe>Z0kABawotEfRER_(03542$neMq=Et5hJGV%h%fRC?nVnl?VQPr! z>95pQSE7`{Fbn`xN{*I$U93-=mB&xtlDXQ;`Re23!%arcj&yka7 zR3ece91bT{0I+SFo@XQMD=ud0{RF543WXqeyO5eVK@b+t#O{z@=Oj~H&ZhfCL*ob9_@ z8A{VM=fDhrcs!1#X^04>=~0&TT>t_Nt^YiZX?m1x+x%TX{g-cC34Q}ckr7#M$P8Hk O0000YgRZ$d%zrD{t9>d5-K?V_(rDOx88cCxbL_%St14$!O zDnu&KGz@xZam#`p6cI&|W>EAnlLogpKJM`x&uVbFryAQo+8Z9fwOzvVJOEtR4c;4DJMn!#$U#I95$u$Z*eM}dyEtF6GZ%`T5|T3)uLOVF zmT!`6%Qs0puCcWf5y1pVPqpRlhd}^}bCzK!Gw2+LJL!>Nn8f397tEK6(juiqgj46Q z%J9P{0Bot=&!PNc0Peqg48WS~RVbx77(Pd5Wi0>;H?F3fC&1&daal#s~NkG+Tpot3pTwKZXxNo;o=D9nqAxU{HHMLh=}pEu727>SOMW=*H> z^8me{USgRRUq-$W4tE0(^&HN2ol}7ej^hAOwzZu5uOD&e-5^8Xhehzz2s(P0dV>GE4r$WF*Y{JiXFuq zC@WFE?-PkcVlDu9o=0EzZI+d6;Kzf0L^@20E@|7zRqIKMXw2 zLqwQuXUM^QM_9MJoS#3(dDzkpu3|~)dgjcT$<4+K)YKioNH$d@5{ZohV45Zq6EO$s zk5{8S6We3%oCeiRACf`pYPr~<2W`A(`OJy?5rcn7r27-sL&xd(Zja^ByH4Yz7*@ zI*Evoo#B)044-uLJixYX04&RL;_cmiB$G+!4I+Yw5b%2?;P*;-;SMRt-zovWS2}wK zoLqHDkyMuy$$DLTcON2x0g#>Hlli$30QT%Wg07U)c^#IWz-8#H*X8Ezm%89Fr9^}$ zyv zbPiop9N4v;G`EYlU#Affn(HHU^z`6y8N@A%;?mlbh=mnF6|-!Tz?aE)tj1zwdOduY zUf_Ln7LUtdX=Rn+7sCL=EStN7kCd~8csvfksme-5CqFYgH^R))GH$~l)9YboX_)s>l;3>EDO^# z3HZGdZfcaZUlX$O{kgP+8YFz_qAW)HW$ou1x!rhK0)DULLUOE002ovPDHLkV1l+&Q!fAj diff --git a/src/main/resources/assets/bloodmagic/textures/items/set_area.png b/src/main/resources/assets/bloodmagic/textures/items/set_area.png deleted file mode 100644 index f43368b6f8d3b77bdfe3e94bda0d8c21d58cba24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmVVGd000McNliru-~I%5wSyQ5s4B}BC)uHhJcXclnkl)!v5e)hv$LwdtZ29RJEn1TX-Ee z5;{J|KR=7{<%dc}BlQV1-NI!*m6n!f?0YHt+U+c#9Vtz>D3{y|15CZ16iv4%PWc|d zR!!2;{)kn}D_e6rno^D28`2om3l(XI`?|0wzqdwy@Jv!y#M%_d_Lb0{9keh10aWH{?MRD00000NkvXXu0mjfjm_La diff --git a/src/main/resources/assets/bloodmagic/textures/items/set_will_types.png b/src/main/resources/assets/bloodmagic/textures/items/set_will_types.png deleted file mode 100644 index b50ff47d5d4552afa94854843975923b59593eb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0VGd000McNliru-~966G0rsf76eklEnJe;z6r!l1glY(Q0EbB|WI1msUv9vItU&AO(@$ym%5k zD4v9ZM0?4t;7LIjtZM>|2TQ5FwWLM-h?*5zw$e@1j;DmsWJNE&%M8Q(-v2Rg1b?A{ z=vgiV{BkC5i1Eo3|D;6xqP*K5m(^#MgG|EvRZt-Wa>e?R(?QPQPWXJtCBSrz;n$ zAGXFoRbz5&beP=IJ0d+NC=|XirzLGaSlt94K7J;jFYx%uGc;{VY>sM|K$H`h=65X1 fLer)M|5LvKJj=Di-X(BZ00000NkvXXu0mjfx@ipn diff --git a/src/main/resources/assets/bloodmagic/textures/items/sheatheditem.png b/src/main/resources/assets/bloodmagic/textures/items/sheatheditem.png deleted file mode 100644 index b12e6d87eb776dfb9e7d442ebaebd22f496ee405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1373 zcmbVMTTC2P7#@N^rAq{@c4?zb2b)mi-1aiNGuahzmz7Oe#ARcN+PJebXJK6C!py)f z*aQj@+K7En$;&tsxPuA*NP?4~j-xt+b67glZt+GM)t%eIR{sl9_Y+ zzVH9ff0;u~jSrO+?n!1F8;CH{r$w%0Z(ZmZ04(mZtAV9Te>(X^M2PI8Add4@WcT`h!7hx|rmm z!O*%bxbkCdrm1lxnNFvPw3ATvR+45}mZTh{!+}EtZgeXqpTQNQGN%v(hM-HDDX9vY zRpb+Dr|HL_r)yV`wMb+`STWWE1w%$=c#Wh9ij?K-y;jkN83q5ku_@Y!b!&i(0z>W8 z1(=UyWsVGEcXLBoAoPZNSeIZ@`1YVGbjm<6!$Cg=PY6*GIS0*qfsl0Kf|K>&B5(nm zby99TnGpD-)9dznoQa&yW_+g3#XwAu@-j3{*STt46vMhHr#HaXh8(p_jvH1ClUD?g zvn@f}>)gOixm-X8ys7FjRc+5zK~tM*sz#ftp@9HewO3L^HErz4W@zogL7+=rKn&@s zjIM^5lQuD*WD^W9 z&ZKQcw^a<*9|*_or5{@>Y3u#iu-SfSP#FkGBlK0)PQmGXE!dT`|o;^A|dT#!@QAPpg zmDhs8ooB2Mr>1P%i6;xYkIgQ9w6khrWOk7_I9<)z8XEd-zVF{VNKws`E9y(Hf2RF0 zS66s9UJ_!G$>A%u;*QekpMMt?=4bp**{|(+W4VYIK!mEWUk$$6)PKFtj+DlcQOW*G TtbS-N`@;*@H3r{&Fy8+U4&>{g diff --git a/src/main/resources/assets/bloodmagic/textures/items/airsigil.png b/src/main/resources/assets/bloodmagic/textures/items/sigil/air.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/airsigil.png rename to src/main/resources/assets/bloodmagic/textures/items/sigil/air.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/divinationsigil.png b/src/main/resources/assets/bloodmagic/textures/items/sigil/divination.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/divinationsigil.png rename to src/main/resources/assets/bloodmagic/textures/items/sigil/divination.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/miningsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/sigil/fast_miner.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/miningsigil_deactivated.png rename to src/main/resources/assets/bloodmagic/textures/items/sigil/fast_miner.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/miningsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/items/sigil/fast_miner_toggled.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/miningsigil_activated.png rename to src/main/resources/assets/bloodmagic/textures/items/sigil/fast_miner_toggled.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/sigilofholding.png b/src/main/resources/assets/bloodmagic/textures/items/sigilofholding.png deleted file mode 100644 index 55056c4b0b3148fdd129bb2457086e8aca4eb05b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1605 zcmbVMdr%a09KZ2FK{6ns`9jwd^>Db`+k0@2xQKfR+8rkxdMKiMyT5}KZuhudxPvSQ zOFbkXWhx|u5T-(+AY+BrO&TJBAlW1#6&0CjLgjmgq&?)UKOFyPXLf(D@8|RR{=Sbb zHW`-$2h9xPa5%w<3EE_K4E4Rw2C(0`w?G36cSd z7v#2qSPo}=E@8GX7Q@R*jIs+*pN+t6cd%#^iXm2MSxlvl~lecLb>8Z}|E zRoq8TSqvsfLpcE?6-fD*P=r7-g#eLC6bKRxiG+w4Muf0P!AB6KM5aVyps|O`syT6+ zGFhu1(_&XDZWhBhlrZdaxdbk;fO2NSh(e)&g(6ra;u?l2f06O;5ZB`7miRDtcOluNMw8z6^Z#`DeI9?jsVOGxMO(y z|Ar1`oq~OJ@}Ii#Z?VPbn?CLWcJa860LeCwlkJk31*vm6oN?=?W@X!Ool+IJheeIMxe?HW8u*Fs54eC|TtE=u?LjCZXv2xq;^S_oqsHmUO z8FzTmzV@nGGK~UmZHvaXr1aPTllQopan-&*Yp7j=v9@ z%Zm($GEa2&uV|fcZ|II=UQg2Hvq8pl8`AsA2YO$MXp9UDODW$rbxP?6ZM9(``i1S? zi@@*elXl61t2(;&?B!jGD)}yB>c%qlR~6WVgQW-bk(K4cpJ(QIwrnZP@Q%E3vP&&) zOn=zpSu$K)To#$JX5s#Zvj$VRm0Ih?mR=4{7d)T&df=Sk&WmXgxgy2v>3CN&@8*}G z7qq)T0TB}UV^Z{%t=?{f$EqfMAi7(Gbj;QwB59!*o3LK>xIFr*GJ_Ix!(7QJ4S#0zpYc zK~y-)rIJreR8bhlf9Kq}GvmN`b7su3(9CLMV`HnL0yjZKixzEbmqid11wo5GK@b!{ zU!bob7=;Q_n2{|SXHupd)FB-~=Z|-sJ9F+mEi!S`h0wD)=fL}WpZC0v&|339^6k8w z>F?K_9WfU3%iC|JX%asirBvP^8nGB2`5<=Ih<^?Sl1UwDv$%2nDl@Y`@mvLf;q&45 z2T)3pN~Q7peY|@=CYk_e2L|-fcsqA)-{Qf=e3Qj<52yI_yo2+PS2%T|hq3XG6iXG- znT!CC00O8xbtb2#x$tP3H(z?V|F(fdaI&`>!#u|47jbgA1)`C*rUnu~19q(jK)umm zZEc;`H%$~ag~BR>Prjm-DtMlYlyWb?aU8VPR5xolj>EGnWk7NHX%-<(q~WKLDd1_3 z-CL6Y@s1e9QiboS46$gG#N7#ClaV3G@I5dLAJhd()p55zw+S#hJ|O^XyNY2L1cLz* zL(^P(S;bwkF$@FkdMKr6G*r_V+b1CeLcrWymez2XP^g8`!3|Wl$nx(3T5BR44wFvchQ3rLejVLXhjKf#=ba4-sk!vRQMO zNvFjg06;R4&;Xw6qC5{N1)-pcr~k&fT&eP7c2?}`V7HQqgmzsQAth1>T+bu5)%iex agXj-xIROE7`Ey?Y0000_Iyo=?*{T2l0zgSb zK~y-)rIOE16Hye#fA>yjS{h2FEl>zZAesmk3yCqo#Em=Mu;3M3y6_o%0iVEykHEr2 zqX82!A%tj@Qf&i5ia;4`>AxwRc4n>%v7x|%#BX))N$&4{=bTR{rT8ED&R*_JO{u|w z7`uDA*0nV);aMrI4obpX(OJ`BT;<2a;J zX$-^1+jmQChy<9Ko>s$y{XBd6gjajsB!B{}MgxFmt3|PR z%)-ne#ndlM^N3puC7Q(=p64Q^ya=#u8>JNWlLoeJ^Kx{ZS~gE|*+WPjsTtJsRXpW! zerpmSJ`kf+uCku`PAnRw`$Z0+OFj)1Sswn4rup#o7&uN7_jI@&fW;3V1%PGM(KL-f zz|YV^mE>j+0vej8;Z&M9jzg>EbhObv2_X;yve`{~LLq{|F4jg$H1;dx4@{KZA`%J{ z@cTR3Xal4Wlq)qXt4?lvhb8kH56n0cL8R{*_ypl_kaDGhxGaeR7#|zq=k_j^Ri{^J z?2=<_UuRG5qed00Uow=+RW3~;!0pLNq+zp> zPKyfwfMg<}06f>l@jRpy1Oqyr`Wx#?wa$-BMqKLPypoB8a$Of8B~l1n&m(pE^OXQs Z(H~GA0zBeOfZPB8002ovPDHLkV1o5yE(QPq diff --git a/src/main/resources/assets/bloodmagic/textures/items/sigilofseverance_activated.png b/src/main/resources/assets/bloodmagic/textures/items/sigilofseverance_activated.png deleted file mode 100644 index 828bda85217bdaca710d63310d04b63c2d07a420..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1599 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 aMZoLsm7QMeU2)K)0Vlgf^nB{7P5%MBxa4~P diff --git a/src/main/resources/assets/bloodmagic/textures/items/blankslate.png b/src/main/resources/assets/bloodmagic/textures/items/slate_blank.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/blankslate.png rename to src/main/resources/assets/bloodmagic/textures/items/slate_blank.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/demonslate.png b/src/main/resources/assets/bloodmagic/textures/items/slate_demonic.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/demonslate.png rename to src/main/resources/assets/bloodmagic/textures/items/slate_demonic.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/etherealslate.png b/src/main/resources/assets/bloodmagic/textures/items/slate_ethereal.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/etherealslate.png rename to src/main/resources/assets/bloodmagic/textures/items/slate_ethereal.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/infusedslate.png b/src/main/resources/assets/bloodmagic/textures/items/slate_imbued.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/infusedslate.png rename to src/main/resources/assets/bloodmagic/textures/items/slate_imbued.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/reinforcedslate.png b/src/main/resources/assets/bloodmagic/textures/items/slate_reinforced.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/items/reinforcedslate.png rename to src/main/resources/assets/bloodmagic/textures/items/slate_reinforced.png diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulaxe.png b/src/main/resources/assets/bloodmagic/textures/items/soulaxe.png deleted file mode 100644 index 9de970d90e50dbc97f4a32f6bfb30c035bc53584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 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 DupzQN diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon.png deleted file mode 100644 index 01b03fee95fd0bb339272736d36d55bdb4131dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)1co6|6oJ;^ZXQ)ATsqfT z(5L_aaO1&aXluoy8>p&^KJ!(kWtxyGgk1}7f+zsGuA?Xly+b1uds~S`qAbLsD1m@% zYN(~{Kr^Z|%XK5OQK;*B9-yk~->5Vw`Tj#jRPaROvb?l}Lyig(OHnNGFmswFb!l+Z z_h_R=0XXw}jo$k{Dy!Y{aIJ^t@Upb+D5cWntp4n`q z{)bOk$z*u*`lU>-uTtN4ODv5&#pAAH-Cjv{Y69)zW!%?$81CyS{Ds^UR+EX2qbG%K z=&X&u$6_iY8VDk^Uxd2c8_jao7hC;Cg)Qn2pm7caQK&1700000NkvXXu0mjfjpR+; diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_corrosive.png deleted file mode 100644 index 406bba2ad0809736066e8effdae095c84f44ce18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmV;`0xJE9P)$n)InN#miKbbJ(qi~kW#V{B>b<@ z)YguQz%(U_BG8UGxtm=DfN7d2iUNR$Iaph~(%waCRRz&dh+sI(jIQJOHjXM3&ezw* z4T=*0xYqFqD$7VVOjK1RVf=|SB2j**`-MZBStp_Z7>0qOC^WZqkyufN?(;LD`$_%% zOjZ`}=G2i=Y)ZdeGM86~hGDD2NM#`f$iCg+Cn1p*x2yOXoWs~P<0mTOm5 z0HoClfF4>RGo_dl2g=#wEFcsKVH%QY-y9i^RBqjNvoPsrAsVKFp4BrxwOhEVs?6rp zh#Rk4WnD=X*2E-CT{7nN@M3U~>Fz%S^A8F~b~aKv%v)!$slB+<_MGkQ51`SQ6+v zSRfxOlx+FP39e<9|= zZn02a-6#yxVDbF`$(D5dKfMU;7gKe4E5l;Z7aRRXg$?2_@6`_q(A7w?00000NkvXX Hu0mjf++s%! diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_destructive.png deleted file mode 100644 index 1f9cc2667ee83ade02fe2795f20c4fabe391f163..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?{6P)9Q(J^BqFiL)CbCVNXc4v27G;G{ z5J5Z9F)PflD56M%3N7tH8JVIb<*4Z7B#!fRzOP02LRxv2_j1oU_j0b#TC)~}{jX8m z*n~u&l*TXwj(v&TOezCFDTQGe0Eh(#%ZnGATCkQCGw<`^_4{$o%wQWFMhb&7Rh27* zRuBMOZoUJ13yBITq?GJ<)1rgEAP+htDcr{WT;a|McRnYE@6Bw$dt!Q#MdV} zq!m}}w-;v&fWyD%INxCBfOSf5&dR5H;JLPjTS!Ta!!y*w%(RQ_v<%7%OL4rg>*XsO z0NQK@An2VXYEv%Tw-ynXoP|H&C!h>mvopl4w{Wegh4E1r?s-4OJXpHHeT#`YDS5W5 zLIhiCb#C5%V$2e!$6#!1gx8vl2Od5?_LEIhUZ=HI==QGJ%wOSLpzs9pIB z3oa}s6PbrjijWF1*ZqnpQ!K8ZzYva5CXS{qiY-K6to0iW)`-8EQx98|$}vR%0000< KMNUMnLSTY@&O?|0 diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_steadfast.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_steadfast.png deleted file mode 100644 index 47803fec48a42a1e7bec9fd30a370282c6dd253b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)VPFzS6t%Jtf~Y^hMYOVUkw!$D zBDyR>EhCbkiwP12hDeqbWtc%?>ZF$AIO8}s=X>84FtIheuC%nAUclxUg;fJi7o*@s{y8IqG=lSO|2xCm*JoB z@x$*!cK%fPWrdU;E5+GqQ6agoSZJE&5TRy+sZJ;aN!a zk<{T)2^EPN4dA$Up8C5jq_Iuysw|+WFQ`(}?PR%}d>HXF;|<^{Eg<{kA;wyJRbt#l zfU;Nsi2jaHlx1W8;hp3aIf;a0D9vPU(#z(Jo9McFjZxnO!FZH%o-6?#TMaC_PVk6R z+^Fj$Fc%?NOGfH(hKEL(e%3?Bg$BmT?ZP;{M<}Hbn)t^SEbGAMq3`KOhQ}w#$h5Lv zx#%5wOW0j4?CE)I$SYB^U;|paeEXI~=B{&tKyX`sGYfm9-D+Lpi zWS5i>d*9D)Yxc@DCJYqc=MV#rZsYs#3Ex0B?RV~>*VTw(XD*)E5mI7dG$V=jqt$#K z{JPqSSMEP#Zef8hx7t-O79y>wQT*y^V|&gHLJk-4cW>~VIZw_dH_aE_D{mp8!fF`g zpRE$6G@0*xO{!tXH#&y!j5B#6XR%qr`eLousIkWQ16Otp>z;pLg8%>k07*qoM6N<$ Eg2psOqyPW_ diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemcommon_vengeful.png deleted file mode 100644 index 43789d7505403cae4723fb4b94f50b414f81091e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmV;{0xA88P)4OO5-I=y0%J); zK~y-)rITGqlVKFcf6x1FOP%wR{1}2+igaN^fzkW!*)8USKtgSEwL?pET9oh&ad5)6g#&drfL{2g6rT&gTz zXS5CgP}}kViuPhPB)YDX_u`QXEf~CX>=MZy?*@noz%UGSU8lOSh4=&en4Iz9MRI(w zSLK%EVzI_yy4|U|b9V}xzJ;|j8i20r|8PoD(9@x2bU60utxC+Y5trp;KH$R_9Y<7G zmok*(Msr(aMgurHy}*^mW)7NsDz9`mCkJ{|Qd$h@+tOK>>}Pgr7KhW$;S>Auv^A@> zCu;!8VgVp99>SWOPkvb;>5d(QgFz&cY0o@KDGA)FZD)MOkAFFYlc%eICpI${U8lFK zRJ^LHBOLHy(V_?|#m_IJyy@t}b-sZSr$floWkM;1(8MZWMbZ+D$LFR0;UMEtE60&1i{Nv|Y>pLn=-6VLS zQZPP2MnM5f10UIA%ZQk2KqNr^!Xi=M-pN4!6t4%oxEtCCS6vj2)GR!+KZsfiqM1!R zKT^);p|2Z*RCm9f`EZ!wyLVJz$-vfhPfT_{COb2iKyn((ANuf|xlCq_3-?vm`d?Vt z!e%y;bM~Atq`|`bUaaOsd}F^5p5IJVWJb(ZqAxc4jT)QOU%3$ukwIll(f|Me07*qo IM6N<$g3HTD+yDRo diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemgrand.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemgrand.png deleted file mode 100644 index fbb41c8dda5bf2fea1129c27412eae5664e7207a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 757 zcmVE@eFxA$}*Zb)|31Lx*B{QjKtKj$bB;eVd( zUx~9fZ=q3S>*{4nO%h*hs?No&09clVVHf}yvw&q;Ik@B29m;&IDDMVoT(yjy_4TC2 zYUHB7dj>LcSYBXOq$BuF)V5~EV^JwDu;FtRF&&Ok9vR~CL_&PmuFmOMi3r(j7OgcM z!FRHKNi|PHBQ$!JGVOGd%uJK&A7tT*T2j#%Y172t-NUo<7nIg|rUI=s0CBRca~HG6 zQ^S|&4@875b{DN{>ao6l#a*_DuIrs7M}~8Z4Pf6-leK*TD%-ZJ6QAD7k!lZ4yOTQQ zU?BE`LYs|mp%8cP1=zLTtK7DNoRJ2AI2-^Jxe5VDX0oJ9ikZ@o(u&WcAyTG^T`3Z! zZYDBmw$ht7G2pi2(3;4%5zNsDnM?-f_bAHzMb=eFZPgOQ?qK|Tn9;~EB7!p1-&5%S zJS592s`xn`r$}G|A@0z8D6rvi7X$F-;Zy1V9b>nDGVg(9S!ktbh^N%cLFjG=I!T6V9Qt4@Wo;;vzWtHmcxlK#^8P(+7q#pJ5 z(6V}?@^_q@D_|G~`y1A)?)$xD7MAil_>s1)JCw&>LQ`|InhL%me5i(+n-7&`S^3o$ nk-wtp*GK^}7iWx$pz(N#@kXp0}3US$@2n-4$ zkg$bhY9B^qODhtAtGHjw`8oPC4v1SBegKqG7={6Wu?Q%o5^#O%eY^obo}ELwEN?57#Q_Yv zSzm2?umBkeY)N2Iq@lZBi~T;-#2vk9RT@R^0O83f8@{jSZS=N2+89{Yv(Q@OI1W-u z8oKLsd9IHqU*6!~T#PamVJFP+$1qvBX^ceBKnA|bH27|((?^oi3Iq(t2G_6}j%Zk~5_ zQsJ-STHSR_%VJO2egJydu4U#-Y?rI6=4Bj&oh7^%*})ACg)rIuD- nYyDUF>UQXV<^L68rRV$y`h_$!66~1500000NkvXXu0mjfwO?4j diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemgrand_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemgrand_destructive.png deleted file mode 100644 index aad55d4bb39e99d1fb3f3542195c68281f5e7e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmVE)j=_M6m6j{(?)1p>l3u&WBg+UaQ zVL_Q%LRd0IL=S?ZS`-Fiq=x8N`Ak12ozWSmnR{9cP6@T@z#lI6p8GrZ{JBSo2>%m~ ze;riRH(;VDncpUni7*!ncdOdWLIAYZ7={r`6cI#(XfzsMpQ*pYm4N{U9-R{1(ImR( znT*^klIn)0c+RYhKdWl3@p{TdZ7g8N`^%D$v!mVv(-)0 z#Oo;+_lgbleSV2MHxFegWZFl!*GJBB7q&e?AQ0xd$3xY%*UB`_*b7Y4jL||ixC?Nv z*@gYB8$?6)CUWwN_%ay9u^gI_kqHKdy@&|PP`?4Q zk^lI#WG&9dH|9gEWQYV%Q9o9wgY<<+PPuacAvUR0m z+?R}!9QObK0)I(F zK~y-)rISlYRACgyf8V_`*U@Q8%Q7v>2C}FOdP-4YsL+F26hawM5N%2#$ZA<2xlr0< zWD)e3#9cydYSp5GD25Q9f#?|dN=LJCUO9KZ(?WcqtvYZP=YKe_|2apA2>&CFe>rYH z_hF()3*?KQu<0rvQx9{B0nl1w7zO}ps)N~Jm9K#%#f2oFgd}(OY8Gc&wBG$r^pIcO zID2|dA!D|owWg-3S=7OOM4tu4mE)qQ#7!hQLM-bC_{OBVq;Ag4N<>H|lbEJSO;xk( zIqBuo%Wm@bd$Ge7(O)*h6P>K^cnL*=#OxS>$MsZys8ptDPIh3L=47@}*p}y}=v*G% ztwV?iyN|gjIlh^wdyvIxnKa$6qbJlm9peBvITB&(>qZt;6sZRnTVzLhE-5Z28w(t? zw~vy#$jL}&7aa}tWS4JOc@Eb!X9j>+769(lGyuj&6Qss6NF)@|QRr;%LywK4oQhw| zJcR8(6!L0@#72)3%QP7r=tV{Pux*=&XBb;eAkh@oZ(4geUgrNkfSeRGaP8GF_pqT5>k#=9g;Bj@@Gv5 ze;|o=^`jEmWW~0Tf8JnAIL@2uTA{L3O(&Q-prQLsvbOXBdg(avZ*7noq3yMw&8Lca zRCApa%cAh$VE|e>zRkbHYXvuDb=e7YydUWa^Zwmi;+HoltF}!tpI%b7|1&@DeUVjX zwkqG9+jBWE41??|+f{EvBg$UNz}Hs16$jKhX9k`tyVOLppZ>D7*e#7pYmL@=GEhY3 k>D8STvJk$Is{eiGzp150p?kJ|2mk;807*qoM6N<$fJr-l_Ux&OXz?gox`B0h)zU_WJ(Z4P-I<%;Ej;5DArYE zWfvWE%b-9(>7tvuD1r_`rj}t@l5X0;!|JYw-G9I7V%b%}t{Qk@m~ZBt`Cev}i10t= z_}4>Ots4`?fu1h0$KX~`j=H&MCjeS&48sT~iU=Y?C=`nN<+XKO^LXfRxn#VhUV`7B zO6Rcxx#WHj&56L6-c@T&Yel7~?Ky0%aZ5tx0%Edu;q%8KYVY4>e$i>Q#1R`6(f|<40w6wa4gkU7Q4+^OC>?~6F?!y0 zF)|oHIUNioC*rdw*+wHkn4lriiDjDf_x0lOk6;IF2ICBD9l#2~lI#qe65^-Vho}D= zB7!p16hXw+UM!ciW$6s{3}MWVMJD~2y ziMxAU+0Cz+xOz_#3iFh^ylkchhGCFebV1eEJ!F9$q`jq?)Z#O0sWS=V{Bad%ZRSTo xIsP#Xhl)xQw6N*85BxeF?> z&?&VRK}HW;w1^0$T@NCVv>bIbb;h|q?u>JPzZNk*uvVVkIS0Pyd%ov;gi?yFgyVmW zmacAe1X3zAO)y@c$=$s^0Hl;?ng)PKFj!x_-rd6vUk!1~A{q#)7#8~Iq|k-NrRJs$ zgS7RDl#;gY9z^X?>{tvr7gFV=1^B#P0>#D3R+5|k-pv5EZKG)#tzA7N73Zt@xeziK zRJ)U1RHyAE8k{9CKI>d$o_a8mLFkI9%occ@I>EPw*CbHYEZg%3W z$4_`M_(4@yR$y3B`d;;uRa+?vb4qyI*{Kd4^NI0`m&v)&Lie?njlYm!(RjE@^bYi^ zmBj_>Pc(|5fNR);05FSh!P8e5D%tv(D0(JGd;00000NkvXXu0mjf D52Zsh diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_corrosive.png deleted file mode 100644 index 9213631a7f84ccf539c262da0378115878150234..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmV;`0xJE9P)fB$>OOM`C`Ei*^SaZ)2&hzk)J%P@){un41|LN_gm#Q4Bkd3NU<_|A8}^Bp0jWHVv< zU!%F(fr`K|B#I)KJ-D5F*);$dhJm6e0Ejq)wZ&FPFR3+lV&O2-`AUjdgy3YpP=&(f zGxh5RDQgqMFlcl1BC0FVBN5D=*Rr;xgcIdexQjkWT^h9aJlhDM>pF^}(9+#YhHXK5 zm)w{a`ej~nI=fTsc-?-|U1^LizFZMZ*Y#BmR8<8ar+85wEiPy9+pw%IE=H=75#JEg zvu?_4R*H65xbJu<0TEwC0jT@6OiNb}KHW=J(mv|;+8LjpB1_Aq&|FGJVj>w^Q|ah@ zOkmElvhE6i)HDDROD>5U@2}&Jcqq%>!*~BU?%*8GB_G$?I-sIKl%BdO0F#6PZ}nQ_niiN<2YLQ%ZJ zk0pB>UYCd9=&(%Bw31{kWi0%YBR!#25e>sY6#~!4R++zZ7olJnEoBRe5G;!T4QEf| zUj9w@-8-@%bWW6K=B;;P+(6+#1aq1Rm&b=II>OAC09{WWplKSFwFmxEPB8K2SUtII zO>f`{@hbe(IF=vMSWDM&HnL(yC920*j5$kD8=y|9LUncm>O?W*j%0*Z)GCMQ!;7 zG4QTk#+IX09KI+*u?X(zA6O4Hin-%CE5qW}7n}V?g-ymE8Ql$yuswIm00000NkvXX Hu0mjf)m=Yq diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_destructive.png deleted file mode 100644 index 2ade6647c2de0037e065f4470e7fc665eecb151b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)qg({lrWTbI6j_ZkYU0PJGtT&&_x>$pCdFELclTbn_ndpq6;eu; z6PEuqYMY&?2uxF=C<4#!WNxJt17MmailP7@!Uz@?FFD(YFD@Vy3{vpES%!Q%&t$ex zg~HjRRf`rW3lq~csdu&^3U^}YIwgIra`XCZw&xa67TqHaY0}WrzI1?L7$}NDU2_}z zR`$!u@d=9FwMwgXH5SJneoxKf_S(=scSH_m7{+1>0DYYoq$4w*Z(m=L<;X@=CC1Do zpFDmNV=VXrI=8#KNGhlnVJZs1fiXXIO)Z!~FWQDYw&d($(CvbR4AkUYtkJR95@NXS zY-iBzjnIv#ATzwYsVc)mZUFQ-A5kkL0Yk;*>Zj|)W8T;@#oW)2c!qx#=A1Y{8etBmJ zg+ffvNHlYtq~sJvM!dxL_R0jCgBZtFz63`pZ3+CPV45bX5ae{%NqcGD@fDbn`qG*C8dS)kfSU- z-Csp|ea%uQUcL8#f#;2K$F_U|MDwJp1Alp?$gpq3eWgamRU8+d>T}pH*W$cbyZ9Hv zDAI~giJton(mykY{qSiK2;ea4FCWD diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_steadfast.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemgreater_steadfast.png deleted file mode 100644 index 1415d67fe644f3fe5604010ffd5ab8ff1c3813f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmV;^0xbQBP)^hBGxrX_M&~W@=dyh)yM@XcR;cqzj3lMQN)jf@Vjx(cW~_2nIBFI#G>NJJvU`+ZWz5+rh_g-$5k zINz|Qkh1!qX&P}5EOYSOm;5kQRaXRbIvoI(V7@FrT}0-)h%BxsB+F{$)oVXf zV?MUq3)p(D7I)W2+3xB~<|qJX=R>q~xlrd-N^EAT>klw7K1+693dMF4Y1`6BH>ES& z(aDbmPqN*lfHWEbFkRax9$tS>AQ0tX*$%#sF5>$cWXUtn+uQeWH`+zEqfP`9QL1>k zBJjd&z^K#V^SS{D24axVBMouJzquLj9^jLGQN$-lnej~^r9>#=A5$=Hf+a8Ugi2h5 z33?zaCllYo9QuB@OwY*2lwZQv$S+R0!Yd$YnubmY%&j9*>!R9BV7>(4_ocL?mpl9$*137KY z>q)%d^Nh*I!*X|JDHtQXc{+sFbV%&66)<+QM_Mmeh?z^bu-$dwY;~;Ng=H7HjYq`D zgCQA=hbX*yQiKyR{8Q6pUO6T_b-R+qmeCg*-A08C#vd633)*J4@T&j-002ovPDHLk FV1gfB$>O3zm;08=6Wj(#ninWHE%Iq7h+>C?OPFB$ycyJ?ODZDN`&Y zkV=pcXJ{%iGs;%A)D{tiE?h~EnNgXvahj(ybML=Jj1R1pXLrtl?|kPw-w{$uRuiWG zHJbZus0a*0q9_9QAq(A`DgiJI14U5)5D5lLi??kK(ksh|MEfp$dho zbv4TdDN7T>Fle(m5aq?_(I_Qv2j$+QyRg<iP*oLxs*p$SsV;*4_p;zfKB|-iKE1*1 znq_xsHrYiR>Fw%~9Uu~`C;%sBgS7P8iT@0dY~DvcBe z$HC-WaADmA0I6vJj9xq^hA-bF7V@(BU;)92al$?~Gp+!)E#=A6L+lnexvOkH(qT z=fM-el54>;_nY+o5t(7mBPFkp@yHBS_VA*JhGC!zL4Iqyv~1r-I20z;l#CPt;SEvW zbQ1q;jQjVxWwfzI958QP?!<(F0?`QTG!tI8pNR7dpPfPM-F7rBiNh7ee<>%K7&=x% zcH51WPQ3g08P1*uvZ$n-h-TvL(|&@D$38EkYJJ3 za8|tQ?3BS+oSX|yA{>w6{oy3#e4UuA-m)+(VSTaMZ&X-i`~gu!4LhIFwJQJs002ov JPDHLkV1f#eM92UD diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemlesser.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemlesser.png deleted file mode 100644 index 060fca6704386ba0e713641bd68222f67fdec5f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmV;=0xBB+cgMQdS;idF_e8)@$%YL%NZsy`qq zl4jBf!fqHXLPCQwGJ?E2W~GB)HWwvF=lZ@aV!U9jJiBua=bY!9=Q%U&=0q6K6y3n|AwrSlU zZLK4vq|M!ls5?Y57Q;L0VbB-cF;H?ELOCed}B%k2-ysXxqIFoYjT zRd8NaR+VE8O7%6K5Ox{I(9>93qXFo;{A9yALW< zS+;^ARbv4-9SF1gc^BD@4K&6RWRHxhT@__0UFT_UFO@q=D9(4`x#w1n1N((xNng2{ z2B2&<05a_v6c{-K;t@=LfaPcmyOBkX)5)E?w+Wdugq#M8i72%^TSd@iSZULB%-IGG~cyH-v7>!)H$6u;d~%@edYkb^@~|pC`T87Q>{uT#OF% z6FzoOl$|(-Bd?UK(rQK`evW&VR~twv(S^X?_nv5YiQM!wCWeN%biSE-cZW!ehGEvE zu%?FCrvdgEh3j>Y5)eY*9U8_vK2CdwhdpgK#M@UdsNPzPZ~hzUv1K%?h3=D0d>I+t zsKlEckN6#r)6@M#mA15qnBicq=P@NkfB*lTnP${GGB}to8U!C0q>HF96^tyXhytOgh}uN^h-hhxG9n0C zL@g>DOAAD>Qd(353KeJ+hA))NW|+y>IM#KX$G!g+F+QkPe!FuH=Q|&K-w{eFHUiuK z22Cw~Gz6BVkWvubm(SgT1^_I}LP`mMNGn*|yykBsyP=-c@-ne_oY`oUoUsWsA-Qz= z#JWRrZDCm!&HgsTo?6UA0-N1Ve(<##o%q6Bp%+tG+-Pn8o4_an7LfStnTs_9Bug3MO8tnr#&*2}2{3WVxLfMw~kjI;h;$D0G{X zi>HnwrTn8nIUE3Fx-uxxvza!2GBxvqrNk1t+lklf=GN^;EQTUPa&&&B;?&c%YGbEv zr&-eohXNR*UFz_T?JOjtgah-m_q=5$G=s6FL~p-xD+96uR9E^anV9<_dNG z9o4oZCGEal{p>i%oA6(4TK@}a z6}sI{&B61+92&>4mdUhxh)jJ)1OtRm`c{smqc1l4jgk%GH}rxFM5xEIPyhe`07*qo IM6N<$f-f9CdH?_b diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemlesser_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemlesser_destructive.png deleted file mode 100644 index 02b5f0a530c008af3a326ecd71f9e1f3a333f7a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 727 zcmV;|0x127P)rc3Z)dgf#rXL zidq*M0@GATDR7@T$itK(08G1rUpsF1MV&w3!hyw69{w=py!xpld0 z+adXPVVWjYt_H-Z0*qh~i`B}B{AViEkk-o7h%5PSZ z*VHDW0;}MeAuT_j;O9P$>uK9D#9-qirQfL*LEXV@XA>FDY}S$v5bo{4ef2iZ>Iz)7lbz60%A!- zK~y-)rISlYlyMZrfB*kCFLS1G@>Oby;G?2+Bg%w?ku9P{MT@WqL}<~jMMO(mlpzJR z2!e3oh(=I?g%S}hGDyQBdTHgOY^HBe$7$42=kb027BZSxE6?uU%RTqNIaes9*a$5D z8#J}~&=8oWLP|m4&^GSm)d66dCQ?cOL`uQm&8xmn+;z1imzG$J#h8vn$ox8rCL|Zn z)UP=t|1M0^q}kVrI8cKTk7Kb~arOt)m(h=e^0P3MNlW{^^#q1tAf@DTTPOC~8X_}c zeni5^z6rI{Th9J(d1^9|WWh|VEEVlT~U$R5lSgegrbx`>cV;WAR>{(@nTHvuHFMmGB)xRd%Bx=be>nYTgg39EnF4{ z7fzoI7=!RTAJoa`{F8rX_{z4kk;3aibZj4ck^rTH8;;SP}%Df z_E;43AO&78@wacNauuw#F%=+$U})qsp||hozU!l?wOPD;@|cR;A_Bj^Gu6xAL@{7jc(|$>$F!E-Ygqb1TWg0Rm?)QFyHh-<77dzmQVl zvRc{OcvKjlM~IqBq+30NCw?LVeuAe8SB|BkFE;v(k`3YyeN_rt>N_1%00000NkvXX Hu0mjfYf4C_ diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgemlesser_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/soulgemlesser_vengeful.png deleted file mode 100644 index 703888adb39f71a9630f3609a88b42687cf2024d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmV;^0xbQBP)Kh!f=)u^1Msm7~LN)%es`0y!BN%A~2iYb$|a7)U9(-P(!0qMW70ATvur z4u9~dL*<2BpPW^5@dPVod~MM%jCBG{(^k96q_@A1MGekR3@BHw&W=6DS+=K=-|P$hIr3O8yl zA*EbZplmh((j2K|>rR$u!Ys`CiLI>Q)a|(4P98Kq$G5ml(5>?)5v2mpx{cksl}1g& z@0%s-WsfSYIY?}N8LvNpr*#0|+&nX-dxfw$kpAzuEExzX{^5enfiDo?bKfKpt0YrT zV`%gn;n{1rb`_9bP{L?rfivylbpq2g(S*R!|B+BMj4LmV!9gE2SMO2M+av7J z5cvG$mX#43{zR#syV=HMfDnR_sY!+g7kJX#MNUhzc>kt{lFWR(zotovg^^YZug_KU zWpr$767P3B<99sHNXuiTH#LZu?qcrU3-;yhXT`mn#Lyt#x?AMkt*7ly{pMdts?e=g zifZeGF)~TWjF4t^5&ZEJ;hn{QIdAP)GWue>-zeE8{sNhe2}Wd8NSpuw002ovPDHLk FV1gnGNRj{m diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgempetty.png b/src/main/resources/assets/bloodmagic/textures/items/soulgempetty.png deleted file mode 100644 index 06c8e124e30be16ae6dd8504dcb7f4ae0c8c0286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmV;z0zLhSP)WcQgL?x{b`t2ij-n{^^$$|o(T*02^IePc zOVfD$;wfELrwr%vB#m6LQP=fN0##N2W~IT~sc~W|gw~=2;xT&ao8*y02WUxVWxT~* zR8iNXO6CRe#s0b80;y9TgUi?Q^j_^O^P4FiAaIT(?Ld&1L{B zW#!abZIIlc`pcX=+~TIDu9lI>N%WjfAQmI;u(FZQ(80@1f?=x(v#JtW3GiTi44WP& zo=LH~7A2L*Ff{TCpNxu}f0khA8&XPyBK~m&a~aL{avb(b{EI#kn#R}ZX?$}txVw6= zS2a=5)XIE1!kK~8rjZQ8Kox?rsSk)oC%*TiR4hbrS}hC@Kd0vUCBaIF`nEPA6Yn@) z)v*1H1p^@jd7(n71>5$NMQwR%6n-+uOFQz)hq-kj@Zc79=}6YoDBVm+55 z+}uD0LDp&~Jn@W1S2Ib6ll-TT1h3x2b+;Gqt={dwP*7ntnUD*9bVDa$q_LRn#DDxm o1OtRFx{AXJ))%||MulDC4{g#5@}Ki3W&i*H07*qoM6N<$f&fWA(*OVf diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulgempetty_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/soulgempetty_corrosive.png deleted file mode 100644 index e792af92ec22a9b107edebbaf5ec1f7dfd1e577f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 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 diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulpickaxe_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/soulpickaxe_corrosive.png deleted file mode 100644 index a70bbe96680b77e5220e5da927478c438dba7ff3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmV;d15^BoP)Ofj~4tBF02x42DJafnD6#HN`Di0)u2KUYe$5ZP)eY`~Lk<+w<|{JSWe2 zp7V%Oib5%+5E1sPcZhIn^WO?_qNHiKHo6XYaJgofJ8yKpZD$*|d<~~YP3Cpnrp3VnI z=ox+(d&o}f zu}!o+-OA#>fbkDn;e=Or?P2B>5diynucSM}?1&wb=(k(tSmOX5kB9emeu7;u<(b`0 z-26;qWA2>N91aIgrxVLEIeze9UV7cY@qIup|9FuvKR=+h_4V7 zE^VlXtc!8uWm&5$v=ZToqYgUclo*<(QR#6jZ@@=W>sBTwC)l#7O(v$NQMoMsm)=1{ zxU`|3Q@1+QcYEXPJhFxk>CFeE%2Q8eO{KaR{z5%e=Ta}e_7*kXCUjj#L|9*4i`(rc z5{VFrL^z+@rOM08F-BK17;4*Rz^AzW1Z7U@akA`xS)~CaV5 O0000Xf9H7~t{@I{=v`a146X?Q(N*x?OHtfL)-)|?t8lBeT5hdC=7&}b z4b7Qu8KJqF`Nig9we_L3u?Aa8czFxBy*QQuTMKNl%k6r(@^T-1p3?_}^YLuw?0?Sx z{}WYZrBoFWLH{_o+H}Sh(rFbLew29@{<%R}*}a(AcVk(Z*r~ty z;_Ep+zi^4cBWUxvNx9Yd99ANcz_x9?i4!`ZehMXuGqWtay~9PBB6%~#{yq8B*KVMH zWE;WbKk)OLPig~*;kquSX)?Y3T`80(jhoxV^a<^Ko2U=Pcwy5G4s4m_i5FXmSy_D4 zSiv*9!rZQqZIpNiYL+m~&0&r?DAoZabBX@lut;vTa)Y652o1cAkA7ZWXaPUBg zkNXW;J1?q{mzRgv>&0~)P9HnA{0q~f?OIqmzx$qVT3a+2+Cg;WSB6{maJGF6#bkOW z2_{%84j6_>Dw$%exf#x%0U#3cX($w;r@M#B@IHYhots}E6^oIR?OApYz;#{DU;K(A zCk}J;(A)6oX`+vpYUPdqmoIlyUbRcQx;g<6!zA%vjJf$VICmC^2qJ(z2OfjSrO$M0 zaS8o>{cNv(TCQ|oVf=Vl-|t`GXfTUEC+AsAF9Kk#WFUX7Fg33{TV1Tdsz>O(`V;p* zR3nkdRrdbYLsQ0te8QIs5cws6C&R*;yraM{45p{2se80o1Hnq7BLkF&o|56=Av~Gc zbQD#9T|iUa%VH*!3{yB2&O=^1E0$px_{$45Toa(Cri#IVL5jB5%D~VNx@7a%OK%|} zbQD!E@!oEI=h`eMOLLIAGs}Q%^;b|*T&OeS7qq|wy`_Zh}JKc1(iWJ4(cmpNVM<`i%jkdP^ES3Mofxubn z!_Tsj6|l^p6;F7j@fcsG-V=bEJ37Q0Z=kFtEt$|S@?E4Fzu(X2?>C^Y(Rs4=ZRWMJ zR5kjPR#sMq!{NX*4bGfAS+HKWFkX9Ex-WO}^JibE>YY1@jSTbhp%@dl&STh2;;C75 zz*0;=({$3QG`CNjfD7#a^lhzDyLMG`?b>yMhxQ2ymC0tvPG?zf+fYakz%)%R{BVg+ zPJK+vvEy+546#6s3WkDQ?d`$0e~&~W-35Uzq~iC;EN3u^3q%AFAeRA~M&GwTs!C5K z0|Nu>c;;#8>FuF;Z%oZ)KgGVTh5Y?nEH7mN5dK&H+*cgl9#FwhkpAEL*t|O+Lqkyx z4)>z0cW^aTDS)Ya#}Pw#_@TA}fu?E9&d&1O_Mi#{gTw}J;@h`dhK8cp)|PO^9e|vZ z$@XDcQ94$!@<>@LAABWZ(KHQzg-?Y;b=1}D;l_e!N3DuzMIwHd6En9K9TqF_+5{U%o z8uO~Wyd1+Y3eQ)u#lyzDO{KC6ls;I>JUO{LKDO%18?6_~<#L>U{RKn>(=-W(!;FoM z70h>e{b1zLY-?Fcr`Y6h5c|D{W4#{u{km26v=1~4vk00000NkvXX Hu0mjf{`tH~ diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulpickaxe_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/soulpickaxe_vengeful.png deleted file mode 100644 index 6be3b218064e5daa191e898de1e5c123d6f42340..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939 zcmV;c162HpP)VuHpGK&KLn zjYvhM+JI>jOGOQo7+tuKm5{K2#1?7`g|>rK>w7(=hF2>foyt(J* z+;i>`tu;%fwMInH@4WSYGqVPYA^@~?_KKE&Ko%gk8VaV7TrLNIQVOj#wC~g7UN1%W z6qC#($)L!lQ_R~7?2JYsvxZ|Wm2z|YW&{`JG7zABpPu&BA(<2fzx;~Vvf%!;u(B9# zPjf1j<%=_?7-z3OF!Qyf+MdIV$K%+xjk~)`Py6by!V~||&T#tA8FVDVTqeV7rK@$9ZgEcjL zT9}}3&l#=C%F1xN-8fE;p2LUpS{Nq1{-B)y;Vj>GeW(M0jfAiN%=M>2d=iP`D3j>l z31AU($pNJdl8GcYJ38RRF#v{ZE#1`I#L%T78n^5e7SZYXc`~yR?k#ZT-2-qOhZEm? z$DywG`DlMTeBMLYzd<(!{0t0Ur1ps|a^b>x0K_ne&&`saUjWSf0uez3u+!jD44?c` zS5{YZ%5e{Ed%IFE<>AtepkGT>63XBH>O(^Gt(R2Oi$U$j~L$ zHMPj_@K0>NF+^y^E$Mp$4KR>M<1$PzJ$VL7DWcIR&o+9s-``01+9qLKZ(W5BHu-7U)Xde+n9;*G#7>0p}@ZkClSe8XB z79$pm;q2|v<>lq%a=Co?D%MxC%CU7KJx^"dur{+OCv4&&~lC$VjtBd@n2A~=pi zFc@TVaxyQz^^gy8cTuiFvdILi-EP8{N0x_|H1c>nh{!Utsi`Rd{skojQo!o=D24z4 N002ovPDHLkV1mw$!A1Z8 diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulshovel.png b/src/main/resources/assets/bloodmagic/textures/items/soulshovel.png deleted file mode 100644 index e3fd8d62c5a57bfa5984ca51761fe2ecca858a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmV;Z16TZsP)Pl{H8{N%PXueFAJ$%!k$Hc$A<5Yg^-wjHPxtuC4E0$EpZCoqiNmd+}+B!N@JdmK3>Nt0}?s^(#Lss3bcS(iLosh=#bqug7MVHk)ArJn7$-ERDTKYqWT z54zSVDk{P>O|;h7?!}{IWan~XM?DWX9L(Jf@#od+8!l{lshdP1fn`~U2%X0Q^bF)6 zk|Yp!MHRU*As7qc%y$yWfNMWpK}4`DYs0B7mkSZuAe)|^2H;=)24MW2>rhw#0000< KMNUMnLSTX{MW}uN diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulshovel_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/soulshovel_corrosive.png deleted file mode 100644 index f5b51e2639056d9eb6aff1a11adc68d98cd5b04e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 945 zcmV;i15W&jP)mStI9c;Bao?b39Plg!L- zX8wQCT9XW|H6p^5ga74{akI5i17t5~Qk6}>Y7^2PB9>(Vpp-&u&DBPDT-`^;Gb?dj zC}ns}J2Qv-b>8{4L?UsrbJIb=+|EZlmQO{r*8iJ4x#t0Mp&8cR+RVM8A5rh!&_<`1 zx;OSR78@ZNkI_B)2T$)zQCJ_v5e|njO_QOMZYK9Uz|~QL3mEdW6M4U1XMX=YO>ggG zB-TSv&+zl*KJs_DneT}u$ZgxkFbv9$OyKG$0pR||OGKLcb>??#XxdlH?eKNR;~_3y z>LLG?XE8%ID>HJ)GX#~~y|$qVfT8EwnX2p3>pFexe{%_Myq& z2TqA2`2nR2a_hz^JG&QvK=W=nH~6Bitn|~>b%isX$LJ1>B6m|Ls-I=7p;cChMgiEi z%~#*H({l1CIs5VqiLhuY-P>=7(TG!PL) z0CNsf71u6&qc^=!!SKj1IdhqkX9%HNQPwxiGuCigv^vj1d>#NtQi+}w!jqV0+ty<3 zf5}g8UoUB4heWd!mzPe+u0t(4aIjTS@K?B-R7V=qI1&U(DJCW+sHra1m6cog?M`2! zI75+|o=Im(1-~pFmxrGXvZM`CB!ztECp5PSqLjj0R;bOm$;;cfGBh+u)>MW}XDJpU z)4W#Olu+rHA5p*icP1l;ab%g25ocV35-di+DU9EXzV`jbmwHp7h)d4pg4N>0ZUSImcN4-DMZnywiwjn%K6D zi160YFlVpjAd(;uUs*Z1aUl|)#l6~1EFA`Vdk_(9+g^66*Xu<@mdQp(M*;W;r=nrw TwnG|l00000NkvXXu0mjfdGWSR diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulshovel_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/soulshovel_destructive.png deleted file mode 100644 index 42c62019ed8dc8e9f0aa4bc512adcf205b4fd244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmV;b16BNqP)- zJff6hSxPBHg!8Zd8(Y?{7wZ*3#G}xnCJozLgq7EjSS$vBrfDdpxKIz1J1>*6b`92! zLWVNic=(QX!e11%J_*3_t5tI9%6-b|bkcdDlXLBjjE{^nJYk_WKgh9j&9X`q8h~k< zeD-A`^b^jD+?mR-EKT;6~*vbMkZlr9|?I-Ex9w@7w&HnCU?r4&gwBMW4tC9|#aZEV(brUD@*`i2v}R6bWvG#bS;O+^5lN7Zj*bHG51}+=l*g+YsQ>@~ M07*qoM6N<$f^}K9egFUf diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulshovel_steadfast.png b/src/main/resources/assets/bloodmagic/textures/items/soulshovel_steadfast.png deleted file mode 100644 index da2e7f16b9fb001143be5615c8dc8b7eb0639030..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmV;S177@zP)n_xb<;11?EK zK~y-)Rg+&#TLl!xf9Kx90H;N|c8eBu31y$EuG`#5(p6hs)i@gyR|4K7`sR!T2Mi!kp zq%fb9m>8?Ozu49RK=_Uj_l-WOllS+qb8jY}~Me_`)1h?z7z}dqbQiKYjcq2t{sA-dIv!TUwd#Ojm=wPB z2Z0mK08BZyy#H;3*4Ni@?%Y=#eETdnhJS{fD-+9KXDz8EB_)W+8rk^xH~@bGXh&aDnY%4W00000NkvXXu0mjf DtP!nm diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulshovel_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/soulshovel_vengeful.png deleted file mode 100644 index 11c5263abca95089c85cbdfdff771409c55ced87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmV;d15^BoP)wn zyc1oF6S*M9EJkC}CB|%K8zZskFm7%u$_6N)!LXT4+(;=DTV4u%|6Wuup3CRroag+` zc|$G*fBchc0-{k3?<0NP1C_Y!mFJ)g68W~ilD+<}M zdk<=00K-TzJ~6>LBSp)M3q2l>lTN1@>hLnXa~#jf03Kk-7v{jVs5(~UVQ=%(sI%X| z>@25-F7u?rNyIb(7n*6BSS%K*+Hc}H8315x(`gReimLG1b?kZmMHYK|$lSWgiNOIL z&&egGDV%vO(AT4_?EYNqegKB<2-EgkpXx0xVednYuxN1qdxwckPSRv|5KGPTSH>i1 zEM(ca-EO>IFQ%D=Dd=<-HOgbdlW_bCY9856Fc_r0rw60N&zx?h-)86F!rgqzKG9b$ zplKEgUig!$qq_mMJ$QD)KP)}c^kN(#W^6S_r(OefTGkJ7dn#Cy!4Zt)_KK?As zTOEhUfA$8a?mR;H`^~B(P{G;$?-+UXC8n=lR}ul<*WZ-M`F1jpZ6G3u0O=&y zGzLHaL~Y($%g@8ZSj;>@Ur(&{sau=M=7|6uY*Rt9u%PT)KFH zCBrJoT#dFPyQFJB>O*U@08GWtW7F3#i_R*8si`S;)ZV4)8|wKndXXi=Dt|jPZ1x<^ z1Zq%Y1A^@e#jRVhij~{lZxiYgbWPK!D)Xytb+t4;a35EG8iZw+qzg4vVwP=BwICv# z3Dod%)9*|t-oWE}mr$2vLsC&)LwV5#wfs@1sxB{4_ik)pV_gu7#e#@XR=J7N(o$lv z7_nH44_cS-`FvzD8I)4!%Zm%Ropve@cj7H9p)7YswpspgfWkIotKmyE?@Wo5y3Rg)uj6Uene!|+34sf0RI5LGEVqz2@-Mu O0000Y diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsnare.png b/src/main/resources/assets/bloodmagic/textures/items/soulsnare.png deleted file mode 100644 index 37de2c13ae0853e26032a858163c04539e323c37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmVLRA0&0e?wE zK~y-)ol-qWLSYm=Ul{%DP8F0S6-1HnK%t?j93p559EB(Zp(Q91$_k`GjDE%-aS#N9 zf{JGik|60&RJ1jQi-eSgyM2upIZGo=%_>@L0OhH zXSx<-G8q6sIGLtD9AVY)j}my9f8qS*c3F-AI;*Lr2Xf&RHw};Fp3CK;AXyW%7r$Ws z`33o>M=Z}c;qiD->4n{HugxGDzvA5F1d7EX6h%QUmlFUWNfJw*I2;b4sW*CdOOwe& zJ>L9k>>Q`d;OW&3&TfXdw7XAT3qo@08|)3RwY`Jw<}P;kTeuWF&|FgG!Mpg1#guoQ zN4pz%Qwq4xW(5HBNmi=r2UncqqGk>{`vw>|OtP)RM5EDI^<%GOqc3v$i$(d2=6(yU zRvS{ObGUumhy}Nxswy6`StyDE*Ww!7V?*NSwG1WjLhJ;-kzw3jUkU&qK($yvePc6J os&J1E3e9_0($^bnO$q<4PffwF)2PD7lK=n!07*qoM6N<$g5TfJkpKVy diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsnare_corrosive.png b/src/main/resources/assets/bloodmagic/textures/items/soulsnare_corrosive.png deleted file mode 100644 index a279a8f03396201a14ebebf4f9c546e70b9def2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVt6r>0f0$F zK~y-)l~Tbg!*LvaUnYeAfMS^@Ma^X#+$1^3U*IrVldQ#Iv>CZ<*^l{0VRcqFc3JOu%R*7)Rk2^V>-I+`#3X&yBf$$DvuWyJ( z1+_#`REWmMHvAT7%< pb{CTKs@$y8P-(4m=g%f8!51c#nx6r-xQ74$002ovPDHLkV1hWs)UN;l diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsnare_destructive.png b/src/main/resources/assets/bloodmagic/textures/items/soulsnare_destructive.png deleted file mode 100644 index ba6bff2f3f806799f2d699b8b5b65200ede47255..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVz|V9d2+ZxX8TbA1zRSjxnH28g^{3h{k#wnAnAg-xxKo*GoaNDCzzr#5XO2 zm)8vXhv(t*`S3Ffx7%HOf`^MRdpxtqX0y;V4e4}R06>S+$?r`1JRV`{_wg!3Ns?$K zn}Wh^%x{p@)lr6npGM6K}dly8}JCK{|czra_TB(Y5yFKs6_BJPDk(q)ij5W42*VEPJ z!s*E=Hq{|4tsNt$6RBhhnx;XW8$fHo9bxwtW7Qa7hkjBv4=u6#S7|Q43;NWZH$b`-OEmCqs&0!=_ zRt~l#CQfP&oHmV%ebf5B$3goT-|FL6Z*Tp6J!0I=7$5SqpjcdwB5A2d}raAob3RplbBR%_0SZFQ|&oDcrmLQkQ&rjd4g zE5hLj2FCn23#>w=hD0I`MN!Z<>Vf3!5Pqg*$%19~F{URwae03w001>o%_t}=Dh5>* nlCxbf%=`QLX1}$eg#XqDPl2}3p;S#900000NkvXXu0mjfr`FVK diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsnare_vengeful.png b/src/main/resources/assets/bloodmagic/textures/items/soulsnare_vengeful.png deleted file mode 100644 index 251d1850a36b6cee87833a61da9133a3d2fa8533..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 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 diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsword_corrosive_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/soulsword_corrosive_deactivated.png deleted file mode 100644 index e0bd985f61ed278c36c652e2ec8c0aded535e033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmV-k1EKthP)sf40_#ac zK~y-)m6K0sTy+q~Kl6LLv;}J*X%}MOTHJl3L|Zf^6$+))3SvM!cn}Lxgeq1OSQTttBb&`jtnOyJFYo=vLz|7_$$`1d zFvHAuJ|n8i|FPHg7zTsIl2b*ZC<4G3!*VkbK}4EGBElYB&o=uMYtL=am@xpJ6F}IVC8W*`8Q&l?c0a`C6b@yXA0M1T)!8&7!Ei5b$1OblYpsGAKG^ky}?J_#B zpK#48RvY2ekfrrvQhRo8?MFy#3YFKX9tyL@xR;oFI?xWB#1 z$=~+Taz3dKK9r=g<_15R8Ro|W?tY;vkH{D?V+>&!a`@GwN@5iji?+<@sY5%Zd|J8l z{080Co248rPz+1Vf6$<3;7{pX9D^8`wzf7Bi3A!&OdNlMD=*Jz_sCt6KLa;DbamJM zEWa=LT%P|P|LjeYeSgW;`a4aL&GH4rai}i-(G;}xLQ?njZsA%m$JhQe^-05y!J71j zW2h>}*QQn)SZjH2{1X{`?QO>1e2MCa)ra?PrXDr;k?Yhy6*l(OWb4gQtc5*ytmCp) z0f?>K9i$c^2Chy|Q(W9at))TbOr1nuP4+fMu_#Zrv@^v#g8Y}V(xQ^?^7O(F?`!_> z4$buBbR;M+5)??M)9QI1leU1WHoZwP8f!W o2-e!BMyXT^5ot~~H8lmm-!YwH!#phE7XSbN07*qoM6N<$f{R&`wg3PC diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsword_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/soulsword_deactivated.png deleted file mode 100644 index 0bcaf3d9994f275fd3087d2ec6f7c8ae81780617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15220 zcmeI3e^eCL700L6sKHu^v1&9YZWbY_>F(?gcVWk6fv`&<%_2no{^W*CNHlTwn+>EJtD{7e`J{?6{{C&AbK?&NG9 z!zMl`etv|#Sv~{9V&*UzSwfceX@X*%O47#W&`Ph<4b&KBjPtrlY6UIGa_C&f6)XRD z{b9L`vBk9wK?dTOX`bR3x4^J2nHZPMVe^Gpxm-*XyaM;-bO#f;_y9XV5%-dAT&+~$ zBRScqppQGBbNH5Kqj1_mJ874|13&eMe(pS0VEH_Dl$62gQ4@ojSgpa_Bd*u!95FR7 zSXKc90i+{(@)-qg8c(NrHlL$t%PMdy5hLBbz}N?iGbEBYGwRxDFEfgpIOBKowSvDw zMsTl0B1e+~%Vn^v!{qO>v;l;(|L$sW&STsGFj|J;a&x(wEPFdA(p1=vs$xx{Xt&W(dgJVF-&=_F<*hqo=PElYj z6vsvpc9wIJf{AgGxis!}}s86Na!0o1pkdwplwLVD%U(SZpE<2#ew zB*)X@j*FEKY`Nee7CfUwAK%U;NJ>1-Oq94GXqyoqGCH`dpl861`F{)Oj}N(zp2L$z zyY982{GoiR(Sz`;UGR_`osbK9;=Am1f7GFFq2Z0Vc=|h-p@r~|4z15X#}2QjQ9RTL z&X~ zFBSB2?yIDK6g(_|=M+5npfa?`!Hw_(8-sWB0|$n~p(HR3NgLskL<9>EE|`X-jc`dK zf&~Z{OheK}xFiw50)z{uA!#FAl89gd!UfZiv=J^zM6dwif@w(F2$v)xSb%WBG$d_= zOA-+*K)7HUk~YF6i3k=TTrdqu8{v{f1Pc%@n1-Z{a7iM91qc^RL()dLBoV;^gbSu2 zX(L>ch+qN21=EnU5iUtYumItLX-L`#mn0%sfN;SyByEIC5)mvwxL_KRHo_%|2o@k* zFbzo?;gUoI3lJ`thNO*fNg{#;2p3F4(nh!>5y1k43#K7y-xF8Z;H!VM3%u{=0WbDl zZk!YaUJ8^^$>~-MD~!ajwZF%(Z~MXbbqvc_Vc3mlF^nj~u<7i!XPS~QY|M!ib3%sq z)3;t;w*HkxGn&`57I?Z6-zsUkuP)r46nXGwqGw6f#r5&iFMrh#-Vna*QBJ=p{KMy! zbJB#!xf3fQCmvK*D7)&{O;{Sy^s~5kv%8*rE;o-qbpF)kc27s|?fNqN;y)E#Z7=^v zd5^KRzc(&wL;r);jv}m_Z=0>vo~&MZ{Nz8+=A=%&*?sKb-##BR{>aXnCDqq&ZtN&3 z-xs-ypG@|DnbO&FczI{d>1#K-o|$}PazsSkPv5Sry#HvaY(nXWHyg)~y*R)AzZ<@K zZ)5$Ace>79d-z+f>P+K;uZzx(;V$lo7@H73)zY>4T4_V?7v-OQaC+DE<=o4A<7%#U zZ+K+y&VrZDG;X|g_P&ggN!q{gr?Beus&LB#msWi_ZQ_yxpLT!Uap^+e$7(^p=g)Vo zuRM@x%!qsFQEjO@#n^Dl-O|!hTU&dz_~h0*egElrVhi=-8N~L}duH`LeyeQbwST=Z zd-h}6(s%xP0NbB>aJF%ySwzz6R&+^sj9fJ|JAzQmOUq0U%Fj=yk-44WAf{Yq$$>(_TRb3 zO^bh&}{qMK6O>HdR-gfR>%NyEC!>zyPu8t#4e6%30qOdWo@@RW| zIkvsLygGlmr}M;?x*ONCo2wR5x78~@*|zVIU)TMHzO&_ZwKnO>{P-C!mc5Z8-_?3y zQ*A}@=FXV6>-$z7JC=IpQeW+|#?@Q*Wk#JWYAtEL^4bSWHkFjjiZ3dfZ`ZSZZ8sJd zs}{9^*iX%w;#nP~{cK(0(VsNjRW{{pO|LTVPWxkBUES_=doK}|rA>xr_VCho&GLk) wmd$hXH*foBjy)-SY}rGfIHs*#Gaegre)%`4OP{ic@5QEAQqB9HeD?YO0g?41Pyhe` diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsword_destructive_activated.png b/src/main/resources/assets/bloodmagic/textures/items/soulsword_destructive_activated.png deleted file mode 100644 index f522b9057f3f6f4c4eea571f665d788d94017fe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmV-o1D*VdP)GH!T9Vx+Xe1_iJu;LLa@?r$Xjyxl3QFF!`p2K7L#7hhAmZ#nm;@#C^2e z4kS@g^4Sd5){IK>%v_#fWA#C*?{*ALRPy?sWwMD8!-?l=!eqFHvCT<2vg=|`b5ws# zq;%wPyAsI;xwGAJXS)@RMiq<2aHD;aL@CP@&d<-&-qxs|?w8cs64PSlq()Lll}I)y z2m-k?U2>y+ibNucL?UIttYl+bYl9NWM;ZTloQuEBTGOsTTU%T7zx6cc86OP%NG_Md z%uEv5Y!N1FZ)=n*h($07*qoM6N<$f(2oovj6}9 diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsword_destructive_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/soulsword_destructive_deactivated.png deleted file mode 100644 index d1f84dc5e93b0cc78748c25d5482e3ce7b9cd94a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmV-V1F-ywP)S-P+1mGcWPQWLQ4cyPoFjR(Ge+ zIfv(Y0POc7*gt2II5+bGXD^2J;_gQP7(I6p)}XFfEK(|!@O>Xi93Sr0$-bziQ~N02 zeHRU$vF)(q>~vVq?A!+W4b}?PujL!67JT2QTrM*_a#Sb#qPBm;=hf3wJQlu9_`Byh zGxdC@_${;NGI$#nhK7!)nujB3`dMQy?;-r*Ud~KDpq?jVG&Zcl z?dxQ|tuWBEWQC_jH}WwgaqwWbJ{dc~vA5qMJzHj`ov{DQ7%c-z>cDGVlo8#tej?XUNM{3K8%|4w$67Sv>lB3*absER;C{MnE0U<&>>ZYuje5$=T$^Ea z>0ui0b)3r9^V+VW6%u3M#DS(TIc{Rue<>@hh+S<_{gO@V$l)#}k}Yx<`f(TfiAJM} z#bUVeK_u07jl#LPIl4MqHPC-Z9qlnK5Li-I7KJKu*JA0!fqC=!X(0JDu6 zJ3CsGNIuTQ_Y+*cnztR>1Ff&GGj!}(%rj05e?zHM!puw(g+di3>*{QktCUG36J#f{ zv_G-WKFXx=eIMr>kH%yAYgJ57Pa8m6TU!;ve7=f(e0x;uKYXCBj%I~Ip??jNnK3Xj z&MU`9Sy)(LadDCP`FY~;_@;%9_LxegY7UpKT(eLpM7dnX%(!z>gCM}n@O>XMBbUno Z@HY`hWy1|i?wSAq002ovPDHLkV1iQjjiLYm diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsword_steadfast_activated.png b/src/main/resources/assets/bloodmagic/textures/items/soulsword_steadfast_activated.png deleted file mode 100644 index 465921dc84be418c81d8149a4c8cb7801ca81e1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmV-v1D5=WP)KwH3%JZf<2xF9feF))`|UhM1TLm;r9YKbI!+ z#zZ%8L6->V60*gp3^YcG2{&FCrdBQpWo-pbOuH_VZlRN{6uy3Yj~DeTaFTOzPI6A3 z^E}THRmBfgMMUbgwH6V%r+2PTRUA+Y8C3$-S^yl!xo64ULn1<4AL7kJ|LEkpFHtc7 zY{Fb@=$>!5+>FfsJ()VNBv<`t%sf6pg7-LXXK6ve2 zjfYP#eDHbkmfy!RM@UzO^m6kVnp>Wxk_jMFHFR?(SUbTOgXeh+?(5fh_ynIUyd$rl z{FSY17Ma}jr>54QV#CJm$kYnVv?1$`(6G3l^brxqKjG~?htyh&T6pBzf*yZ$8)tX^ zp_d*$MYJserR7womdM^3fg1-&3>Z;WoW{mRnwpweQf2?>5I_F4j~$WEc^{094sRZS`$9%d($vKOZ-{6HK z0Z~;xYzQ&D3`9gwRi?^H|4XlE&#^&%9{QRsFYm=&gz|5e!tJkES?(b*5D-;(c10ui zi{XMT67Y2vfwH)$8m?s1tj<QT6FVDuqI!X7kwQ4z=DAU0qKwG4Ts+@$E8tY#3t<)>EC>D!EqtW`0NPDDBT|6Ae zA$2t+!C(;2^AHj4{?t$?got2_K}5)8G64Jsshw{P?O>9u00000NkvXXu0mjf_uiTn diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsword_steadfast_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/soulsword_steadfast_deactivated.png deleted file mode 100644 index ade2c703399956000b07f4ce375aa695d240424e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 867 zcmV-p1DyPcP)i6Q_10`N&h zK~y-)m6Kg;(`6LKf9HMM_(A5>#StO_)>a@ZxVe=%y%4;zSZ55;7-B-ghuOf5_;G16 zZ%mXS3yKlYC1i_H8E6a|6K=RLOs!rR%GL!XG3~m{bqgJArS9MV-s45>z6$`++>~j*h zz0o;`F$RDRvl{v5PgUvZo@BJ)jBal00N~QOA#OTDpin5_c^=kURF!vjzp3%?NjY}l z8T`BM;7%iqmHN5da8?@{pP-ZuAQP4CW^J%?g0&Xk_vzc$tMTwj`C$GHUOx3BTUISF z`oiy|)}GdN>$f2jE3lK6ac_W{g)Zs(PzV@f@O_`x_Z-xE?m-el1%ZTO$>8y0SZi_4u_@B1C0!($ObS3#QxgE0Or~P{ zXgI3Fr)D&^zD0w<;J?BoBJA%QVDH->F*7s6?CdQ0e4c1Dx||Vdi8QN+k1>YSZz%}| tgZRFWh;VySL!l5Ng0&VAA)QVG@HZX5V&O>|T>bz6002ovPDHLkV1jf_mcal3 diff --git a/src/main/resources/assets/bloodmagic/textures/items/soulsword_vengeful_activated.png b/src/main/resources/assets/bloodmagic/textures/items/soulsword_vengeful_activated.png deleted file mode 100644 index 0bd8bf57c126dbe81143038a60121e40ee9aab52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmV-y1C#uTP)hkkv~y321vAVLr|xpgv4>^#CB#7$F?(X-uteLaR%`w-{QMB z=jP;`dqh=fl&T^k&A+u45xJ$Odv+2>p6Hr(S+cCsuUg znEGt%)jW~^0rywzf9f+uI34Wpw;4cIU2e$n`kA9R1?1 z2oLsmQTx3};cSMZl?p>QmT+x!pEQIv4F?=Ys8mZ$K|k+|v-N>Aezw5uHUFw>x~+p&Mz=jcE}%mMX<`F%kCgU3E}3QG%Gi++}D-V zpU;lz;D%mZw<@Ln@Lu(Y_i8ekRL}FU!*8mp(stW_I@s$zrYVyf0G_Bp|x6#7q)Fe zL^v?<6~6ByBBH9~a=AL~-ky7Ob;{EnPd%>pdUxxS+jjxrI1VDhs?y<$ZG0000Yt&*4+(*#S5Vj5Hu68VU-F+hTi8-h9&B_xiIPHbleacn#D=Dq)QF?P_n@+Nn4 zZ_drhIroUF@_$PA?gnGPTC~!EL{S8QF@}X>B7%rCKq5k)-o~jHA7y-HhdQRd+jcE4 zv3~-swHRXn*lJwl@0qId#S0H}Jdx0cwsZk7cH}(9HX)@_i697Y90yh9;GU=SosN{` z<^#g!MKl?q-CB+(61r)LJ&Y(<|WfJ7fAlUnjL+ zixkdgIa;YOcyozdAKBj!*(^BVI6|dbY6$vSM?$yVpCQNfe{Xj?&VO$YX9amcD{oB*5?euV7W!6hF`&2=v%s+3H=j**e%~- zwkC)QlRr-~_d_==H*0({H_u?%k^EaPfmI$^b~{;02=d=A^XHU%J5&1O*-;(X*rV%L zr!^SbM=-RHR4S#O=V6ClM^zgw3mW9}dHOeQ(B9s)OnfuJsbjBl;^T9C^wl|jo2@aq zWxK?si91dlRzPyOT%GyCC$8;E>$-LKapC+0zPt8|bbCpy)oMJqeKR7$!SOE%f&dW_ zRmJ!HI_;kByLC<4)16N~ruTSv=@UD41K>CgBEstQD)l^1i^U?vViDJMab1@vit3JK zyp-NJb69)2IyD}T|0_%)!j9n&c>2Km%*@PCC={5Uo+gvYG%_M<(w+vkuEXUkKS?|u sCk#VG1Z!<0smWv#5os{XX0rhN1qx$eP0-^W_W%F@07*qoM6N<$f)25fXaE2J diff --git a/src/main/resources/assets/bloodmagic/textures/items/sulfur.png b/src/main/resources/assets/bloodmagic/textures/items/sulfur.png deleted file mode 100644 index 46f1cc46b1408b6ce2d161e67dac851938e9cc99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)}ZDNSwh&!T6$9M12acX`0Sm*Y6(I1WwoW7CXWHc8_k zMNy=0ZLOBm)V#`*@4r(no1|PeNnbUIg#AIETFoLA@*DK{a7zB5KNT`FTCrMA)7Iu1 zJgMWT3M-F?CyH}ULI@H<5a*mY=k(+6`|IGJ=mRIdw86Ft=NSM1002ovPDHLkV1gji Bx3K^K diff --git a/src/main/resources/assets/bloodmagic/textures/items/teleposerfocus.png b/src/main/resources/assets/bloodmagic/textures/items/teleposerfocus.png deleted file mode 100644 index d66e2d67559268fb0023c23552ded9babc79eb22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E&kP)6HXw(^E<*qS03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00Ixs56iN&&Au7odGohj$gd*s&f+UIxx`0m^mNcOtA}B;CtW2{Y zU!+3P7t<_p7D%O=L=oC_+v#Btq*)I_=j|MRJ`Vr+kEklMDFd^tSp$rJ8rB?JtrAh1 z?{`V7PpLkTrAjQ7-d8eJD^oqFJF`|-m6j41>Y)4aTbP_+X>Jk*o0HzAXPmm(BQpYO zkLT&Sy@zSNe2MTxkosUY;mJwL&Am*hfdz>sMn=Y{y3;4qJh*-~UkmqnXuIa6@@kjV z2eYxeoD}ZaMZ>s@3%9yu)E^|pk;swa4E+t@Jzb!#O=Uds*5bMNTvqNZSF0n1z`K4b za&obxF2Px}K|5abN?*?ia}!J)-R6u!R27E>&K1OvVU6}H%1X4ly-gpyd9Bs$ZJM=X zyQUVnRaMDa2q*FkB+rX#jQ}S-ZnY-GaWHe3Wi}CW;a2W7He!m8XA4FEi%gP;t8Em*q3~ zvYUZHKM{=BEV0C!!+iZR&XwjN`D>5>JSFL>5ux^Bbj|%mX&N6R)HM12oy7nCOg{nq WE8<9cY1;(=0000c*jgAf=Fp*x-2S!D1w5ZplH)dw1{xgu4UU6EevYc z#y=q?yBHl zN^Ag*Mhe9e?72w*HOAL=q;@B1d zn#+aT?ZL7vVzD@Gw~O@RvKWX)0gwQZa9Hhatm9r+C;idyoS1E=WR$s_zD+ul=KR!6 z=2I!|1|O2o7bzKr+L%BB2w=6m%9n40n5N0~?l4`o_Zf;j=X9=bWo{5%9HKf{ z1;8%99{?AC0*ZzKz|m|6FM4|zFbBChdW)RTreda@H^E0pAqb2|fL|0!r9Xgjxs1>2 zM#L`Ct39UU?E_Z)pXt%Narxbtrb&J_PyNCv(oF+2O`hBu;<>YD)ZF|cjSY3Qv^0~> zEOD%Shnd_s9?gd)CCN+-d2j+_#UlB0n)t|w*v#PlhmQiFSS+Dw8eXr5e*Gy+&3&X+ zGn5W}#o3?4vMfx~LQ2V&5CMb`2m#~c6YQ?6#P9cEB_b5+`bd1Lz@xjS4;!c7 z0+2$G%@rsXOXP<`O#VoaHB!{p)?h1z$E}fw2Fd1fh@C__(%P!_wKS1PPN5u!CjA1c zCW@x%2q`e84q)yXVmX^%Q-3{!O@LC0w$@hVaq9#El_o2=mg69$!0**@)SA}0e2LMqF|lohzwO$PB-GZXY}-aii4+3cafq$I dyd&U$>NhLdD7cU++*SYp002ovPDHLkV1ks4Rzm;) diff --git a/src/main/resources/assets/bloodmagic/textures/items/transpositionsigil.png b/src/main/resources/assets/bloodmagic/textures/items/transpositionsigil.png deleted file mode 100644 index e637b0c4d7f7d61b991ce48308930852186754a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmV<80v-K{P)L3b>%;Fn=RD65N+|#$cT524ZfxUU zN~{BpG&PZP993Oe#?0(OzQO17QB_e&BAKQ%6y#~|3$Z1jv7teQN`jm{eS)EpaXi;q z1K+&GP{%zS$6;_Vg5R$bTaJql0|UPSO^uCeS5-OfZC7~G)r)Ca1OfqE*THoivY8w{ zzn?<~_R-h>hIk@HWO!Hr=l}x9WpliH{}J1^x!!t#`RD?lYQo%o{tRb%iObmxQ&ZEF zhDwMhQWO~mY0E+aD8S5Q0La-kJw_SrW3!|lc5*E?$5q>8s6LGU%sHf#0HiGoU=5JX zW>HFEt!C&xdW@ZK`)T_TMIh;jnMln~^{YOt$B*bTiZ-~Q15{O(u@GJ6%iu7VQfY2m zStv4Su`;x7H_$YloCsaG)WFU8GbZ8()Nlj2>E@cM*00Oy5L_t(I%XO1&OwC~! z#(&TGcM_c(r0CG9BPvv;dCOa5YsVKGv-!Zx3~OwCiqIBo%w|oN?TqAYW@BE~Qmtrg z#K=p-C>#9?MaQX5oK)xK_93w&?oapg?A~wJ?(4pki14q0?1o<~$h^!D1<|oI|_rp!ftQZoL zWBJ(OAbR{1s!DQYuYNW_MbL1gp-3tWR~Ov1G9xOC_b(hQUz@?l51;V)eK?&xL|dj& zQFd7J^fPLNf?U0f8G1G-NKQ>*(W+E#+^#2e?i@7DfTQ;lE$vNob-t(M;7)06Z5?t! z*L47znwn^+JSCgg+PHc39<@(jBASLZE}R&11PN&gc>CR?FI`Bn{XAQDA5#EYb8|EC z@$mq(yncKj+%yhLOe9MdB+~Y^n;n~Mn8%y2S}lwX3qkyT8lJzR>{7+S%F0TD(yHq@ z4&>zI;Oceb@%ngB*FaRGKGW5drI-C(_B7R#h?tJx4xt9N(}`&*HLV7PR6gurt`AcW_jLr6iFK)OU-BdA;F zDDskY?dYWp6p9##DP(H8rE|``d$;#}I#dItn}@!a2cC!L`+Rx$ennL|4lIrd`)DH? z32Pk+AOLo~`8!g8^{t=sPX)22h&D$f+T9rDj99gWbVrZaWJKa z2wG!NRfP*iX)PRZB^Ib%=+EVA)%2X=<)w2>o=$LnpjT@Ip64@S9D<$)z}U$G0JABF z=UZCBzKo=9c>qG#(kN{ z6m_OwX|35vsE(hn0g655Ed0ibY(v zinW#95!bDf6PwAP&%5miiIU45%jl=F%3dKX;~Aq9{NfZ8{YW8Vq}?WPj$x2FUK@B^n89MTFi+ zn1n6Nms}F{HoF+W$2JBZSauvD0@++%0OV+xTAHJ(zF)JlTdmfttiDn#Iftw)|2>Vr Y06IqhsH`LeLI3~&07*qoM6N<$f|xZixBvhE diff --git a/src/main/resources/assets/bloodmagic/textures/items/voidsigil.png b/src/main/resources/assets/bloodmagic/textures/items/voidsigil.png deleted file mode 100644 index c25365e6ad19e2af6ff40190742c158c39d35337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmV;r0!96aP)VK?j(@^4Yu`$EQDBN~lTHOhPxC}jIV<_;@ZT3!|a zjfM@0Cxn6_iuywWgRimO3bE0*M2B;Do=5koEu@r(2>^r;fFhIqM5OyTZt*(sud}(iDUMX|Hzp^N%J==Bd5{vX g?eAayCxU;$58aar{pQl@D*ylh07*qoM6N<$f{eg7A^-pY diff --git a/src/main/resources/assets/bloodmagic/textures/items/warriorsigil_activated.png b/src/main/resources/assets/bloodmagic/textures/items/warriorsigil_activated.png deleted file mode 100644 index 2c031b41725aa9bbe546a62017f20151212f5ff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1583 zcmbVMeNfYO7_NAzuqjp14gAWgbHXi6(hu6i7J;UfibbpyaUzf=DGku1Hi5RBIL4TQ zhnrtF-I#bD$T+96c}^6!6YKYwPQAG~Hx;MMsRJkCPebwaw3S4`&@33Es^ME_}m0pNDF|S&SzM??DqZxGJv7< zvIS}jY;hZCCzD$0q34yR+sM*F5~XA_5&@kL69rtfKma~h5zAvfy{ums6W76GNCxyn zghIXSiBnmY48Xv7Xh1DjgCwj#01YZf)G8D~-UJjdqJ$6_QlKD$U@8rUBme`COtj{q z9GDe14cHQQdYMxY+!zFTy60tC+!o7IVU`~Vlo&F|N4OzG4nrtx$#UiZ}Yop z$V&5Ev4<4%;g}pEi?MsYp&(H72Akty#H0{KI7b${XjU-edYSk|PB9dwKnN{OI+P%( zL^U8qt7s5a!fMcACkcmAtJZ3i_K?oA_$Zp7Q5dvFSgT1u5ThyuP0<(-lh&A^O))0m zc!+Ced4XU_I%Jy>Z4Yqq=W;QFhb9EhW8=7@P!(i2If3JyoEtD0fN2XDmg2m8TrfjV zE{xM2ri7+U9?k{yhZtj?VP37G)DA?2fJy>}L6u#l1ql?Tf`bZHqX{ZnLCOaB)Qg4= z5}ksAb@IQu2_1>W7+gN>0&(-Sk7!nG9*@{1T{}huB$6bgl zqKX>5XiCH$|MjW+`Y`YJt5u7mbui3te6Z_$VlVwIc@Df zCZ8Rwz1mk;e~QT7Upn%7W8*uvunl9oleS39POO@Wn*-HXk4dvjS9IB9);QNEYfW1| zi_?73b7k_M@l{8tSLcMa!2WN-TW(D=na1zlRViQw`sI7RHc4w$LH)r|uhb<5emeMQ z@12gs--b>&-r3WXIm@XYmoYzl{IPq3sfEksTQj-O9|d|MyZ7n#_Aq0jj(yePi|Dk* zY-_Y%Z$`@3Va>N5j#?RTeEI96oB7$fxrY|78?L;g*6pdWR+Xcx^6PpBU6O-J!?ts= zzPc4>oNaxpEZ>e@mRC2fEqiPE!ano0o5j1|>Y5m{2?Z)ohabLr8BXkWoU+BMf7yNx zsgF5*ZP}Ig{F7>IDJ?Z4R@OJ)BhKtU-f%W`sl|T2;9%FgCF2{THh(lM?32{n>yt`q zas7?h=@nFbI}pEP?Ma8U!zg_}sl%5oX9GFsO*z;8eq-(jC#oY(0@ZMBR8oEJhwa>r z3mbKRUF_Y-v{jWFOxjVel}YqVCq|_;t*qFy&3b6qY}1;O-u&%pov}ZV$gaYn(+w-) sqVc9%turITm;aM_X>=ZRXHoeeNvvgvLG$p`$H8B?*_e*+Ov$VG7q3iBiU0rr diff --git a/src/main/resources/assets/bloodmagic/textures/items/warriorsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/warriorsigil_deactivated.png deleted file mode 100644 index adcc645ffa63fdce3ac66fe804a69807fa210bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1580 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 diff --git a/src/main/resources/assets/bloodmagic/textures/items/weakbloodshard.png b/src/main/resources/assets/bloodmagic/textures/items/weakbloodshard.png deleted file mode 100644 index 0bd62181e70c7a563ad7cf436f3953af503b3d35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^rMvH zyd`|!i2aISvmfr&NXlT7Q(5&Odo8iPe&+ACh5C%>yn6W(1WG{EyVU#m_7LXN?(*jNG_Jjp-f=-;n3Dd z)FC&hG{d&&or2?}D4(3qFD)(Qm5O)-S;U8680HIve4!Ae5um>er;q@M`=>?}RG8mR zx_p$2z=5zLVk3$v1&8+Z^%cB6z5b0b?jH^m9Ws6Z@$n&^fbaE&?=^(>QwHo`H{Oc& zo639`-+=jvV$x3M!!b2NrepVRLt!B8jeH*IqLYGnRD`|Qi{X?`rQpzCc&H1N3n4^? z*&QO#E`p^Xiit5076~Mv!)8YuBAG-c71<&>Z{sV~QVFb5O9e7%CIqR)Ff7VZ&XKCb zDv?^F%z-0Z9qy+P+>S+TyJ*|P+{|}!2Jd-_cBP}IcTAtKpx`vM$k9Eb4zJ$~m=dg&6B?SI)VEag8h~c)!L+*d4;=9t ztZJ1FDNq%T@E*RjzeAt;>fnuzo}Mmqe_8GM{fn83Cn>iEp0u`w24C%6(_K7ykd+Ic z?Y+?`^?ao+e|%s^P&V#)G0rU_eJ#5K&&#)16Z%4bQ09%Sbot8a_S(y)Rd>Ps8J^6U z6Vy3r+p>gz5&a>c>917HdAq8rSko{aDu7n%?%K>BsX^U4@ diff --git a/src/main/resources/assets/bloodmagic/textures/items/windsigil_deactivated.png b/src/main/resources/assets/bloodmagic/textures/items/windsigil_deactivated.png deleted file mode 100644 index 7ebc64768fd3fd9d93d7a04b4e5c84ea23a1be27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1574 zcmbVMdr;GM9FK4}2U_Jo2UD0?WSpXHn)I0*ozSMxZWgiDQRg#FQmE11~*@u3a6r0Zl0*)n7VnQP7%D@;e$@*&~whENZtPM{A0Px@0HKz^Zow5 zk5uI4=15}4#R32zF`EdhILC$G*IyII3H{GVae7lQ+J#xHQ}B^I17y*xg8|KMvVgHN zBwf0+jmZFj=%p^3U9elG;}q+bkztI?@8(1{0Ax(_b0oEd5kLo1;PU98zN04~&_(N@ ze3eCR;S5Zn%T&fQv&wR9RM`>=qoHZHXP$g4IDLIOO8cc?$lo*0c1yMPofDt*2Vp0Ubl^PsTgF_D_TH|Ra zZY8pZY>7J^R451>4#Pg5Pv%p|SiS&8Fbsp`D2$>~5h3-KdIZuh^>`;n6bQyk@h(nq zu^uq2NIKYJK?jMRKEHySvshjTd%Qz|5<>?2Ne)J2a@g$--)j)<6|Bs^ZoCxjwUu%V zY-PM`F;9v4a88Vn#n`>tP#7qBgU{eyVp7N=f~AVxj7KmNI!OE?qg^zPBBYj~oC+zW zz%){tQ8H3YAy-MA4vKUtv?{Ge;fUzGj8AA03{|PKTEL#+*g1kajV7-Mb2O13Eq$ zFv0My5{Ay^SvNQsV%+r-^C~5+aw1AZsvzZZsnVg;N=Xc(!-G<;!qiFzrJx}`{eMFT zi%!AeI{8oCM2^H_3@=}Ffw+0mM~p{o9$xGcoGi@&fT;J)M3&9pxpRYMM#9W7fg77j zIxmN&XV3H~>!CJA|zWVm} z7sdqjpDvr{#20S=C>YQurf#RxeC^ksY#lf@U^?vXUVf_dFRGC1xZis>^Z5QNXC|*+ zY0|EG%8w1M7~P%Fx2wBg=knNF2WnG7PeP#uQT6oUbpiR=3EW7(<$+~m5Lr0p|%+-88v*A+Qy}qU` zKyv=&-df8iKiu0Bwcwq)tQK!d)zPP>hYv|va_}3di*Z(ThU)%Y(Y?4aJ-&E;4vMY4 zbPa8vJ@8ep`u^EBM)l&^x?H(aJ*+&+a`9x#qT!A96K7a(2Wm~D&R-4uK0nYlZ&;1H zt7lJ4X8G0|SNGk_DI1m&1lyNC4rmz3?A`iZzudq0Y<=E}%5PgU(59GB*TqWi&<7N! zO@1`}y}+C~MI8;hVy+mQcC6acQ5^l3iy&Ip@FkH|l8yr%W+g>-!oI4vuewWXMa>&M^+ViRFh`rvb=~26@ h((7WlnnzPk0v{iXm&|XNpbG!F&Bk0}uYS?We*lF6Sl<8u diff --git a/src/main/resources/assets/bloodmagic/textures/misc/beam2.png b/src/main/resources/assets/bloodmagic/textures/misc/beam2.png deleted file mode 100644 index aa338d92659bf9f77ef2208fa8d8d55b80445326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 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 RgH}HRz{42N>O&D%{swym(og^Z diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t1.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t1.png deleted file mode 100644 index fa546bfbaa2b1344b167b1f27fad705bd8e175a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21644 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 b?7GUookLqb^un4;00000NkvXXu0mjfUmeC4 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t2.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t2.png deleted file mode 100644 index 896d122dd03cae1575517661f466bf0cb5458f09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37659 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%0D4{0Ba_Nk){u0l)a#1vlo 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t5.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t5.png deleted file mode 100644 index ee7da23f0f16828095a62a4c3f95505b1a72fbd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63113 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 z 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

GaoMAJ-$L-JVQ3!%nA#PR^O<B~~^;uOWRi&!6 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%0Ac{tsfN~(qVbD?z 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 KMNUMnLSTX(WuHX= diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t6.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/altars/t6.png deleted file mode 100644 index 09382a54e1531f31a13d092ac9ae869a548997fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72385 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring1.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/demons/ring1.png deleted file mode 100644 index 8c4f9c8744ff60beb66262f67b60923f85b82569..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21567 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/animalgrowth.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/animalgrowth.png deleted file mode 100644 index 4923dcc77cc8ca7ba13e0cb28d295df214728f2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38609 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 K=Q_uu7yb`-P4a>O diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/beatinganvil.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/beatinganvil.png deleted file mode 100644 index 4f33c6517a0bd772fa08e06745e5fc7c6c2446c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57210 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 Xb0@y7NXqTn2LIqa2WP6xJY)V3#+H|6 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/binding.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/binding.png deleted file mode 100644 index f9491698ef0565ec7e81ab57067ce346a29584b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91100 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%0A^D-h(#PkA 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/containment.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/containment.png deleted file mode 100644 index ead4ad6b166a4352b34506f2121584ceb283978f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38720 zcmWJsbyU<(5C;iq@aS&1qf@$%xTBAf6qExg>5}fQ<9l>-fV8B9pfnr^KUzWzIFJw( zkW%31AN$_!&hEV3H#?u5ot;TBG18?ZVOkfqxB* ziGjH`!b8gZxr~XMq^Y}EE-!_Vi-Z6lpMkTu92*%gH@E&1vE1G} zh@c?CL%MwU&dN_#*It;P6(kE`5`jR>yrdsWODoFBmAt(Z6Bf1vLHFIMaZ#|b zuyAv*SB>6ja#Ki(i76{6Xxj+o^xVN7i^{N&)|Y!*`p9bYQff)E)sElQPu}Ifxl`sK zmk<#t9K16VqHdqPQ-JemSb(*xAkEWvz8-KTLp~D~J~u~oyAXxU?mK6=kg~kIp&*sI znc(Aa#nLQCaV8QKV}4m}uI~9eCujA|8q~%aDMvK-o~bN{Xk~*cR)Qwp=~KU`;N0~>kR0kkx~L{^%j_ps&3laD zh4F@^$5Nt}dmaLTWvt-u?jR6AuCRv9uIOxm>6xtW^6`OJ7y0nsWLUt7RSc_;&dqr>p=F*WW8RWgrCY3z>!-+j=x zWvXGQY9L81Nu+z?NXYa#TC5*ik=+NMIqBI%WiJC3Rho@Us{y{ijZiZpFDCp(dM#?v zy4wxQdKJ`BEDuU>3b9HM;SEh40q^V#-Su^i_E1|gZ;E4vq}{Ex_Rmdw z;LlCg3{MimqM}+Wclu1oAbb(R`qk88M7WO{EKov<`52J54ZqyfDFRgevZ_SCHoe}7 zg)o>b#Wcv4KdQ%utrbMw_xlR0&)*ffd{$cG!5;M=IdDPhhB|JtomvP~|M>z;028|6MMGPDJq;t51cu>3GbtUf%|qlrbz|puGorDUBGge|W^mciv1jwi-!vqw~xy z&~Gt&0Uim9lYy8TMQVpqTs8RSinJ_LNc|JjS>suFJB5~FmQpMs4x@y`X(Oh42O{Xe zru#y&U{gkTr#-I7>gxQOfzzZaEJg;4s4WpuTl!iU+sYVq95RqT`Qsuh$xI8+u8Z8&MT@KSK)|!HerJAMQ<2mzqsHv-z8nxzujDDZi4?29s7#G9r885V7n+h0Wo(CP5Fq4>%iQP@*IF`BjvH_AC~6{eLk>tH1a! zw7#2Vz7^`{*312}f1oxmL|a7>hIqoJ7BVyCZL;nTrtPN70Q&P8UQ~=d;BN=a@!*eQ z+uK=VWSGG>b!*NjzPd-aSORqq_@kAU1#864WLIT)Jn~`Y;6XpWp2>p1&Dx?kSo^n- zB$fe~_2VkC>Mh3Mb$C`#bOWm3;yyn;T4bSd&eCXWg@Gahg}XPgRo4EIfFb>PUVF~T zS`^a2~lHzY!|xXQVWJ z4n)$`-(7h#l`=291jq83E~vp!qFSaf>#!Ri#;Lghf{3--6@PY|d5zf`bpOpmO>$9A z`ILuZQ=$suA(4^c6mOi~ zi!2RCh|^l1aGVTW17VHL9wEY{w*S4JFGlg#{X0MI+6rggfb)J#yX`80TU7}Hl1Ip| zvvwK%u^H3>h+1An7FmcXnZ78yI||j1Xb0xsJ}&*E#%=hAr;2atfoWnM!jM{=%c61f zqpAe<7FY~uIJZh+u}X2b3{_{Q;a@F1{mQMuyaRBX)>at!;zKG8vQ-ww_U^r=hQy1h znFd$*PuO`TeQlt*4%JW)&CLlnT7&6}7$b zehVi`krEkVF!lQBjS~DNA5@huJkm&2U-=sl zIw#(iLc}MT-CI57ES-8(&04~I))avTO#&vde5{|}0W~H%6It5WALPJzktjs`0!Vd- z00SmLuH|QbgX{}b#YD!W6evyWYfGK{CTBRAZ>>qBDvY#t=^JZReBCCdq~D%rz!~yG z;aD-Y)C#y-<^rRI!kNwL{iu{F}Ihwuwl>@bqOBWR62;lzco znfd`M+0^{(w$F!p)iCUUb4-N#z9(np-|!s2cC?EucJXH*W)nz-w4dD={eH2}-T zBg#eiGjat#VBK4_%ykwoTRO&v6~e0_PgAnTgY08i`Qs5vQ+D)=wu+Cb)=Z+#f3jZd zORZvy{MA0<3qz(W29QvD|Lo23g?MVs!o7qi@QCUoV(b%otP}bH zKd!hkMCZ;q7UjL?pEsnY6PGop1`as2|GD?*YB>*N_7J*e1HZQyX5&_6d2jOD03G4f z;UdeoGR#pO_{#oy;zHQ2KqThu8TP(Dorqh4)LEX4SEgP)(fglEXCJiq&9HOY0XmcX?3i9Hp68CqD z7>I!6Q0%jrw;{*V6izZ0dyAw7$&6p@{*C+WUjsZu5U1gLZ~*k+`+h|5(iR33@GEm2 zeel6#ODV4tx*zXHjm<{5^i}HrLy||0Cgay&WMqn8)J(P*|4D2?);~QI+Yy0CJ&ikZ zpVhgX?vdM^{t#K#W9U*_M7So4F3@vhh07CHcIHD)ot0MKPS_NKn5#w`Gs{iZ^_Uy5 z);~1dG!(>y&2IIFMj>jiB*q@Zu4ltTqkf18Mov&@x_Nn94ZAs8JvT1A2(D=Z{ITur zb)U@I#c)|c#DlQx^=wk)gQ#gCc2nX?=Vc6r{(eDmAo5|g@M$DG9voarg9QP!9Z#${ z?mS%@*}oS^)dFQ;;i|K2!Wun?3TNi#Z|{bZR!)ho2(D5n5IXUK@vEl~34k>w?C_UU zTN0e6(G{OkYC44)D}%$Tiv5*-pPwoQ!BTUk>84?QZo)GFTo;8Sv5<~|H@xC{nC1s2 zJme5rGcaVK^3m~Z>}h6tu=ymgP-3PzZ;P?hOqu8k$btwWJ)pI;7dY|J}tEo&Nn zZNB^9*FUf)((uj1{u4YnwgDiyEW#f<1v6?2@grguNRUL>DkyOgul4s<*Nnf~*7*p| zNgdOo-2=^uI+~R_5fAJbDj*+8(?-GVu$$a7!Yu<3nX*(isaqS=jv9GHgRWSw(igaM zPU6i=0;Ye)zVQtikZ#>lI!WL3`35lvHGywOguDtOfR_gHvep_1Kie(-l^?AeFyn`uOmo?Gm1Vbf!X6qyCs zm=0Ne-;|p<+(s^EDAk`8v3RwRF6V0dPxM3FHuIPY3xvs5`jV}QB{}510#5k(Y7KBd z45GFhXmeI45~X7uD`ik^aL5eF^`k0(p`*MqQW_iw$SxFS^NFqKxn{1j#^&V=ETPf zJ2CO4#jbqeSAS=v{*?8owW*lB_J5XoVj=LikFg}L`7_~eh<}`^M}R9$_*9~OJrHwT z;8$l~7$R0NI(4N0_>>s$+raY?3~v5S`d3&vs=V$)IGkj5oxtpx{u~YAH(E8SCENkQ z7fqi0_!8gljOD2@AS)6i!Y%9L-pu>mLI-&l(D$(Wl@uOks+~Ys<DQSBMD2}m;5`YjAqMEJfxt1^ zy?Ti8URmEK@0sA^+*^NiJ#7~0V$=#m(@Pty@57ntAe3e(sZZ5!dhz&kkKxYm-$eH5?92ELY5P!qmPTaZT5cdR%AZB6kRsFOa(4v2(`izb_&}Y_$fu0m(sYp0S zyVlV1%4<_C3)PXl2&576_aPpiH9zF4aUyBpMqZM@IUN7Y+q3FkQR?TPT%_uAK%^1y zzY_dXQ0rx0@DI5#d&sJVAT| z_s3wT!TkJLHO@=zX@%XLvw14hO8?9vNq>Yp zyb*}py`ib0)&j&yvHZOVpp#AaYICB~8Y6@0#K@o^;6rZgFZ-+fLZxS3bje@w1_cR* zqU%z5_^DXn-1(b~?E`0YF+^E0H(UdRnsy(=2ktIh%BTf(O2tHO^qYs=40k6A<_CA> z^HC?t>|G_#S7kOyfKroM-{K5JpBuSiP|}ftU!}Eg_d_exd#dCaYGfk8=rfbI;`~Gl zCS(^io@xMM+e`ooOE+qtY(L%}VP*2j)Zj3?r3!5=c`bvVcgUYtaRh+;Q*GJQtwk&8 zhPkkO`x09@sU5m!uShisA1N`s{WfZO3J9~ z`ThGiC0+2|eHX1SqIaPZC{@F`hn3*=E<&UtCjCwhCuH*;VKXC?-2S$D>l_HB!Zz(x z+}DYnAI>D_mP-sf3n0Uo8z@tb$sAJVNlhYHV^I#SF@f$7+bmGxXsn#3E@>`V8|{iP z*ZkMR4D4zcR<4#$RJ{RH?!Q=|y0@$RKqo};3ed<)-XF116jPBx8bJEu&?!>*NOG)V zyx$=dXs_OkN10=OhMj+k!ayI9#e0`lk5WI)(6T@IOF1zcGE4uRCQOh+x_}4})t9OX zc3GraV(*rgqXKp2W*eUZr;D7bMG&=&-bxxI*}u2DY^@4@^~qz1Z`V~pJ1gRN7(#2( za;4eGk1YW=?-cSYT%fuI^+jg&hcXNmqTkeoD~M&5-X#ZOJ*ini?75 zut;v6Ci80Gee7`K=N&cnAN+Xh8*;7F$fQhSo|<7sir0Td9h8NvxT~c~q%5$)rd1bF zc|sV}cDC#Nsd;v?tL&4>G<}j<@A}D`YShe?g0mz=8}>>ginBglff0E{e4S*rQyzUP%$-v z<3TA`6F_3dlM9aW)==PubLcY|xCPm{Ltw-^BJ#P(EJgPSS!^KY(0MLt?HZ)UQ;uuUNUU%%)rN z{OptAZ<#PTFY2WV?APIJejBk(d#CPigeE+eZfjrRd5!MN{W1JvvdBVy?d?rt!qEpz z(jc7x+%lLEV2|Zon&}a~y70W*EHNh+TiG0HYo zQxh&h4|1f7bJlgp{==x&$$~_`#De22rqUd1{gWhIp1t(dH>na!0zasNDgwAV#EBNh zam4E^ECDrW82RQqou^lM@=h$+m9CvEiHo9UE#%BIGr~TCd(GtQBo^Rdw!%3sSfn&l zvPfrK6(9o|qdM&Ik&*aFH=u4Y-?X*?!Iy$k=qUskKxxo%Hj2{cd;^Hb6%&B-qs1cb zRf8+nXg`}A;<|gIuF673c@;C;-JpJ32fqP@jZ-d#IM9$fXvjwHL&Ep^l=&uTY3>I( zR$mrmSqru)bmOTK$9LKXdZTlsljDo(E1D_vUhXy)o&VvV2X3XBWeOf2DGJDaa=A*U zw)gzZY-{s9G8@z@hRft}<#-mMqkhFTbTQe}zW-y~VhZrNU&Harg@rZb5e$oV|r(s3?(RaT5)oG{o^>!9ruZVJ{b4dV`Cn zFqv`N@~PFk#mZ3&OFJun`K`wW`(@mdbN>@ygD$F32@zTNOfIgYm1r3i!50PmN! zUCOG2=5uEFC6E)z=TX1tG-}(5_aw-H08o}(`mxdasGEZr)63w_pd0|RHPtSl^3?-1)d*Qj*1j1S zxG~pvPQ&OFY`z4&kE$Crht}9B;UF3*oTIG-qqdQQHKqr%9|EdfgO@x%CC<1)FL5W=t7s4(Sh8$Q2!i!8t?`o*gocQfgnbt%Qp?o8Do;oJxs~ayh_pOpVyvR2Go^jx9`C7ZySk9TXbjTlwAoEF2SXI`OsT3BwrzHr}foCQ}K{9?n>845b6B$ z7+;j-H{Tmk282#CSmeZfqW_Ud|V`Um1O7azhpO&7sD42zmHG! zt`@-qa(kz>I_THcb>O;2l(&*r*rB*Fr>}0SjdqghF!M`=+sHL@Jd{6=r^Jj1(ik zuk%zvTXb)my-8~214kLkhap$t(~8=46o{l)cpfBaG)SM57A#s(V%wr?QyY(K1IoQr z05Px%v_8F?&HfuvzLgC?)evabJnjua(zjjh{Uoi-lZ%!*3PL( z!cOb8eFYF7|BB$jb>X3IqXmIv`l6AJj>|^mqy~Bm43C8 zVrulCEc?!*-^Y84B5pD*Lq$Qc`BS@J6bIEGMrpj&0j9UX9p|$~9_OVx+Rb;mwlpSN zM zQ@zkE-G~OgUyB!i9vwbE{F7p_54cy4)kQ+xmXklb$^Sl2<dj1I{O5{FCv*9 ze+_+D_-VA{z0rm`T|$4=lK0eXg^m zoYV*j-`q1+JrSks$;ZcCu1CEcz6{gQej10;43ckF9A?56v-&Z2WA(cPFB2Pu3L(qq zDsT5K=Z<1K#(RG!{QR3J-todEYLNW7xzue_8hDxT8`aNpDD^Ga4{BnC8G2;n~zd=kNv2#k_!` z=U_-p((YRIoLujoS2o-Gw32A3(AziqH3BvbWlgEOhWQ0B4z%u+ju0aQI(zt=@BRh@ zny7<7PbCrSQ)@%%B*FtHvfblku6NvaFq>bsH&+eIeLG=3E0C>A@ZseIs0nF_=VHq9 zekboGTkwll^2?iY7HI&S^e9Yx=rbahM3~MzR^N%e25&`o=lWo#^_4B%)bGT%QzSKllO~^>(cTdX&ElrYHkP)}ISW-=7@x zZaCT}#86SPnk=KITXFT;)LFa%TNR~f{?z41#kZ_lpZz~6I! zIq{@6ft`V0icua_j3tUBC`-M~e5pKWZnMPPbU^M7>mWC}%sHiiPM2)iJi;Hbu53=NP@)fFf_~s{W`6Ts1wLULy zjgL!e-@O9NN3>+OanTq0@ONUNRqcWFuBK}f9vG#@fOac+t`N;5clHO4oC;UWt;sVD zRWu2Gk?{y8t@F$zSe>|grlt}OJ-ki=Ncx>-qCf;Hu=90 zz%!ryZHjwpsqo$*r3w^XxakQzCc;sE$bNt(n#gS^#s;!X5BnE|)T}EHMl)-PIB75q zFWu{IoNpuDcvTG#i%?Y!+E*!g`=Z&xQx^1Bo%$cM2k7nVUEa&1hL`5leoh*YEU@x1 zrhO+Hp^xU&M+ZPEc7sp+_MtZ3TD~oTk}B)}8BW!x2`*=w2sC!Soyk!x$)b37qJC(% zk<9sPq#n+pR49}!_iuetkmv-1=K(J^qqL*l5u?6KysyIW;eA)| zSr!tKv6`AvZ0rV+!tgvE&l_I}U>2at35=fTj2;z^9^QG0Mb+6hH$u<8r(Q=SUV}|T zA=PlGWMTC0L7$-rU3<`zuMNGt5kh+b3w`%yk6Jzr1e!8;UGKi6f9`~ePjtvLS-YX0 zL@|7R@Nz19lI2iHzYIxF?fk_lI$#KD&#0DMTGV1{;dh3f z2UXG@xK3*eNKzQO;{6$Wo9QQ;tI(*|TT$$6?V;d5yzGHtfimARiHKFGUpBq!wD1sh z*QlT&RBgT;7vpf(+P}ZagGnqr>K^v$)T9zI9c4n*LQ1}iUXhQ_v@+@>h=tG9n!AK{ ztWlIm&P_>_lcV|U8keMOR07e{x`zZpqHovN-G7q=i9K|j%=y5dv;Os9RWJ$T?LM30 z|1OKX`e5?gXOpMU$g#Hf0dkp;RrYb8N`!wfJ=$9<40!&q!=hzvm)VTL=GH4SdGt$J z-p~up_0~bz2bY1?n=j%00QP-^<2SdPXU|NgqMzv8_&DxzZ8n5Y6LU+uMYwd#AX&e)4XR{p%N7v&BI*G{U5A@Locr ziZyL#wHgsiUdfE75;N5x^wqro-4&3kW!volB2>z(P{V}dV4n{bhfHymz>~iU3dOSn zO=W~)rB7EbJimagK3zgHsgh_t z!iO$=tEGQ+QGHPyFDgCmHti&or0!yPRVpi1-&FZNs3WiR(dAL`k|-~;yw0ekQAJy0 z>PmVf^%Dagf2;M3>4d+zp6MRuv-_})HJ+d-_krnio6DMkOjD*rCoshYosD8pmhyeY z9l}J4!v39m19v8BjUOb*GUNVpg-fG{=Xj@nj~_uUPQDfx8K(RZFfI0TQy%8b(z4RG zF8v^Sx_HL)HT8FnMYnN-`lTn-)=?%yr|ruA-!OV*J(l5A@;A01HY?cWy#XxqJu3NtW#ft4 zLV7JQlTCgpG@f1@9Ss z=wLic@(1FY|0)GXrrq2W^v1EpYjBZ`I8?2Mv_Bb|ZB8jHmHT{a<>P4cOo~AQJ%7i) z4z-FLGR*B8$xBd2sG#w9>cFHuXwV*iNSQm^N?9-U$06x)maOwOhHM8t(|^>P7A}t+ zqj&3O#{T|~oBuYL-_uq0O#`gxHh`hV;qE!Vc4qtce*WZc*U3$(S<5+L*m?{T$D3{T-~~SmNdZ&1szASX&AF-er|>=%*7m)SFcuWD*l)lPE@q^`>EO3=BkH zYJl-y=t5o#dl=N8;xudAx{eEpvwq8PS38VuwvolDQ$&B6(w#J;Q{3{Q{*N0(II$6N zXZ6gCb|Z}?j_rDkwuCK`ii(hSF0~fOj;rnL2gSpz>4^Dsjmqqd|1536lpc$(t)YSu z2a;Vz3gO@8G%k%Afqsc`aj@09l$GFJH~i3>!rD;Y=QV@^oCbu2K&dI)Q1|KRn8)j^ zh(V)Ud#7(duk}(T1Tf+1^Q`+{+^R*Uvoru8YJ}@*8dHo5Qh65gRKM$XY@m( zh)UDsNwkS0B@v**kHc%+11E>9$AHQ3coy`C|6@8O(zNrH|7i*f9d{wpS|^BI!TZn= z#+IbPMKOXl?vNt^-FNI7OU26AVhZoMH5^?9CzCRHmvE*L@C$9GsT*+NRJIse(=))M648d z5S$b%ksRy%-3<7%;iyr6jA(e2eUuFX;HldmnEAo}C&u+u5RH0&3-AN*gZZoJMSbvu z|0gpw@ivKHyJTR>|izG){dKjlr%%{K(%0LfV4Qj-twv_d+ z)}leK{JDFqfRWe_PE6-%fT`tQ%H_II>!~&b>hGH`WVn-u>m?vFNO>c$lXh(SupF*z z<%i*`E!=U24Ve7%vZjQ>nECb!gn=MNAX(lFBsdkvWR&OEY~64&umdezvHIPb)!qP1 z;#iNK2vOhbefB|`zt05GBZcgHyK5i^6u_T6M5qdH?~ceca^QXi0`kIz>6|m4OIT6P z$)~DHGqz!pkPPoSXjD_NB-uMI3T^LYtsTMzT4x$5^B*dX z^0xJEj|MB9-w`_deY5<;AeP3#$cSj}7~^Cs@EnTBQG5-@J^kMFrC&yUsB&oRHN{FI4ZL(RZH{*2E*1~@ zrwfChdIK7Vf6WY!jFOGof9W4|c;M8szR4=;+7Hn4IX#?8mTAXsC&v|u?VPL;e%;n#PB%j5$mOk()8-Hx`BobJhE2w1? z!ao2@-wB5&JnBX(T`}j*79XTIv7BdL$U3=_?i&mnI!?K`$-#R&;!ni1S`8>xvl^E4 z{gf61tiSQU*XAjRbgStU7L|h&?0<((O+~7Tkb+~7jFCoD{Ma8BONM3NGK}|u>ym=y zOpSfOW<7)sUMF%`x}fjfHJ%JsxS~F9F@3CnJixNYEkJsE0{)Sgh%3)#?Me}^FaFJ3 zx2raHzIk~vY+9~>ybalr0E~LyuuD*D?~AtHB%IipU_DT#;8N7b1K{L%h!;VP>4qmCA%@sUO!z z35LOye#0Tg#TP&%twu0_$?iA$fJ%DJV3vpq6Xv&Ldo%t$N`Tp80A~|jY~b~D=Hrt* zb1V_H$??!5dQr|JXDDm25yotCisdOmpojeY=^h4H1!{KMjNIlxS@AlBpPz9_P^)_= ziz^*R&?EPuC*#0trq)EM*M`1IS<|d8nXR-nW%TO8 z@Yrz!cj=66(_*vh;6Xk!sI-$8vrBEV$#c%+&O#iw8{h9Og`{S-C`o^2v>cEB-#mWptdI8)HyS! z`{^pC$I+#{w1B0*FP!A$(}|uwp=8Q!7E$9O%d?=n3$Kj0BZt3ycu|{TL&|0g+fw$o zd(MBcbgz>IQZ;AiZRt5o>35b;AD_NZ-|1gp65)Kqc9KU61H^=E7{F+Ez zn51LzU9GDUS$RrdC_hEsup3G}cb|5zV&Zq$J6ff~6dm_$)K2HCx77mzyWe(Sss&_? z{)-9P3JY;i?(v!nesgPx)Ub=Iq^Z`Y*XP*m4)&}+*J9Ko)$jZchXo@q{%VKR2{w;& zI&>-Pa#(*S?YvYLDxX#wNWOlaFZ0+g7WZ`^cNJ)tPdN7f#rCxvPnqm69yH}X_&eQJG48|VF+Rp`+sYya0=Th^ngnq!Hfr0Iwx);V|0t!+jBcd&key=M}hq>{KKv{Ahf zZ79#rw*Y{sMl!dma}3bX)Cs%yb1w588}qZ*9-V3_2KeFkTy=kH(L|TWil5cO;0vR4 zL$TR3{`K&yhTZ=x>fZ<92@X&{i&VqkWW@Wl7#6_V#b!d_L6Gw+@~yW8vuOAFj3Poc zKRxcMY6bhQiR6~7`##sAs&jf?hUCv@q+KL~!UX#qO9{5o8=jm6z@@WCqY*^^krsSC z^--*mUPKkwd%M4S$*oBhdkyx7UTb=SgcU69EkZQ~WZe<=evL4gEh9xV$y~IaE1B+d zUV#e3kpFTvX6Ai2kqx7=lfO2a=Ap1QbGW5H1U5D0mHYH`-x&NyKj8;gzT?DHx@t!E z-<#1@*1vts`fjCiLdiemc}F$&MGO9*c&^My-8`Yn1Io#I(!!-qw=)vY`=IcTe?LeF z#HJz!1rfwO>PD5Xz(`%1CjKJTvc9WyO`FpnS;emWm4p`>nkTnE?BH**M!&~8vypsa z%jjJz{G&k+<@;m(P7CXpEmag5hCsEW4rI-<+?#*u z=DNGW_C0jR{aH#P=V1ZxM4+ZVR2&W?J#@VeU3Mw!r6c6tegRh>5_kZ+ zhzVsVG{cC8tdRN9%Y4t7R%H6Y6@l?wOUIbU0U(p?_7^M)uMXak6lRBi1{>)W;OUIK z+92d*aekWoZF^g5IGSfsg44Q4dta#kOxKwri+CwFzL0Am_;uHpJw=fkrjn3fz9BbO zw?zI4!N&8FE7V%u1V}xvt?rrR^e=K*e69>SGYVQc^Z!YP-sfa+?A-WXtJTK* zi8!m-%1dH5SV@M-dopsO){O#v{wfKmFZ!AdNK717zfI5H7&l?ldlxe7rK2FaYyG0X z^X&0k&kqU@mGav|gBC{6ux$Ua_ZJ=_D}yiZ%NoK-NRlwXaDbJnse#Hv(rLjwBZiI) z3BuU-(vKvr0$7qLB|?e%bskR2a$7JwPai_Mq*^Qf&U(=|qdnp%fv@;j{V7%Y`3}VC z(1rYH>?qO-vdo19{+lUOEtY=-mYV4K9`=ZzT;pMgJo_`KU^k#g*?N`D4O$&~p z8GPA{w2rD5A5J7Mc4+Ep%rrIe)DS)N-@h|dNaPAiBz*f|^o2jcD$!5>&$u<&i&Wxo zgjj!af`DjL=(`7g-@d8imA(r&bAi(dTmjN z2PO}Es^~V7yn%c?|80md7uI8L)2kPbn@!Q8T14Z<@O&jkopN%iiuRrqb^DSH46C1Z zLeB0XxpCX{R9}-`cmE<2Ot`Ju=(S^{e|`9m-Z-qTqB(Fu_JGBW<6vO;tobOM!6cIJ zKe*BPkcDcuLFC8;CceO1{^v{7Tl+{ja736vb~y3tdW6&j6q5oTh<#D1?8;fWXF%4> z&n~C#w?Ip^`18LU#J6{qHrs7!M_M?(;zd&f+9Z2>$DG+yPm^yimj((70rA7wbvv^S z3*6ox0sg#9)>m*JKN)zgyqc(aj z+Z{6Dk}vSPXbGP!C>z3WK3|n1on$L_u3Ido$VX>0-V}tS{2CtNVJCi1W0cjEV&7k% z(u>=H`-9B{x1yTtG(0xoG?r{yro-fvwU(1N^!N0|D|MX?P_~-u`dl(h<(?Hyc=n?B zIYpzN)oxsZES1XA`IdhQcr}Gr+kcPz)FjiO!OHjo^#PWG?Nh z0IDQeB!y1f9#sIAer5c$qOWgQ7;5uD>I=L_zV1MsYG4 zW0^ZCSWeE4rxik%>?;>xvoCWVO?(-h`-Qc9#-4=EDeGF~-N)gJI}(aYs>CnS*pwnY zaTBbL0q`p4WYB)bdjYz>{Ss8@tV@#;U~dRGY03(N9yU8mibl#9q(wPPQ`k?`9!C!aCO-WCugv`w9S%!hb9Dq*%_Cc?H>F5!fJx7Yfzf*Ds zfDTCb^So4~t8F5nqNiZ|Bg|C2=;o0gGa@jp`GJXYB!Hcwl#L{fjz-KtVh!FDA+aqEM z6DTkkVM%i98cG&^#J4C!L|e%04n>@}?|cjxy-@p?(^NxlQCq|x%}FN)nDVMV+e)o< zvV;*f8y>}1|7K`+E=n5L`n61S@ii*&nkd7>#pP#%<2wbpQ_X=~)EKlR9@-ev$zy$@lH<@tXoOr(iz*l$5-hQDH_urY6-`=!FuCur%eb8YVhsIZlJRA)9^wuaq-~(s#k7#+)>>vjR#|rmuF|>ta?F?G21?UY~xI$8@8{W zN|Dw}a4jmoKA$U}E8lzhq{zi_#WFB~*SeX*iBBRcn4e;7B%WPyD4HjY&$I=iPao92ngdj^(jqGs;dN@ z-m2;;l%DIsDl6fgU!L)tBP|4Z&E!lwobEllRamgfgL1OJ1qBo>$s;U$TJ> z6^M%3_Vd3_S&VP@$j@ej8|nS(S=P&8t#1&E7iR~>VI%g>-|kM@TZA1mJQVJ5r`n`n zJd{KlUXn{aDG%c{rpvkC>c6X!oSU?fJ$*sU@Pl3`_>PY=x4rWrlwsUdb?##po3-6$ z@&R$vC+T8R>gPj#L2>$7V{g1Y)v=lCPO<$jvp$T>FLMObE-c+w{WaO~*;Pzxul`S; z5A^+Bncj~N0PJM<78KmU9!RhobZGZH)poexb?FmA*#PEk6~=E0L8o4 z7uPaRf-wMH>}+`kDJAnOC(=;~QbnQdYp5@43X0X;-e#n9R9&#O90a-N5&T+6@vfB+E*sN;q(` z!|P`KIa{LWr`j`k(#EoTg4Viojs80wyRCSGoBK??&QxC_qcefm^NI0EG3k1iu+P|8n^!=_+^61(2YOf82A{UJ2BY4- z5lJ0xHuUJ|6A`7?rLlW%utvNmQj*I43M9lR7~=y0)~$OCAoX`ACl4Q|*Slvct=?1>@V2ze)TWrp zrVwOUiJix?z`@FgN*`7GfJqlvct1KziFV6>^JP%Vmc0@cG`*pw>u=d?H1aOd3>N{c zr3=R(Qn-8GY0fI^_*yz3wf`}8#;s|jTNob`NuyH-g9fAMB`caBBmfa%OQ3R-&0oR0 z(qLd|2^;8bA)x{H0&7_VB$;X;U-~}JbKaRzHOroDNA>79bAHb`?|I+R?(=i0bXm%? zKKF}7OnAE8tt}PJAV8eNi?X1rU@o67_=J+KB3<ZwDPzG-9v((G4o-h#@=_N4jdWV5@wt({Y zIrE~>&d=_bX|2-P!t7f%E2S(-#-AA5TvT z89jQ|p<{zvqF7I0{#U1Z9!(O>xY@VMV&9Kj#o8(HGdm9wOfz>8W+u7b_ z7AVK#Fbpx%ebf;?JiO2z9v(P=j_>g~+M92NeJuftTywVE>APv9Y&I(a(#FgLX57Ip zpj;Vs(OOL;q2&aKCuRf~%pG*WVx*?he9Q4G6!;iXVZ;z-Mob|?m=H0A40f-OAt^8O z7!!bTeVzH{Yd-4)f>JGCrK0x4Iu!n=U0AZ~2_*XMEe^oiFT9n*tPT!>W-00S>p+RY z5-7{%GEnlU?(ZLH5lWgvNhnMN9Dw2#N5}zV{c*lHdJ#;|E68i=r=>~C&v?%gpYHU~?-mE~fEGI`fUC{00Fw{pM&KmtOLp(BM*OZ+rLNsCa@ z3}ycEGM@>IAes$bnzx;2xEuH!ws_zzzu`DrO5KTbHGw&UayBu&$43m?x3N`1Ek+eA=(vaE6u(&s z9l*!_K>8v+`J_wN&wER{MC4)g$!Weq+H=9HR;!zvip=IFHX9q$DYC($Wp;XskX`0W zy*zf4yb*h1LG-DNZnxiu4=6iVSCfe}aDR`~{PYZk5GC$E)4t)kPkyVlwdMP1`#Lw@ zm~nGbJYC=JUH0;mGEs`6+X$tennk&$M(Yd)nX<9&!!Rfj8}|q^U*zPkY0@^&h0M{N z@&9Znl)ZVB_*PG}5}UwWU0`uuP$>-{C(SS%TYlMmHkzyOf@Q2NIX&l0(P^Tb6`m!Z zM6YCKVS#haoG>}T*X3+UC~3Tr`h{{9CgyS3{ADkzZ*8$fQS6xe2oEu8QVB)9ymUIK zfuwge9%F;DeTN4ii~F>zZ@9%v?UzKz4xWWdEyI0w*7xcND^RwZP4H{u24W+_kfxi5 z2W9!2H`t#c@pQr-j)>z2rL7r{=3z<=e$bknmacTakWLE<6MKE1R$PwcE;;EJ{#4ClZQ^{ zidLfm8`g4#w8m%T>2$yWAyqC%?}RC^OnYP{Yzl@*z-m<}CzHcN2y7KfYh5+?5+QcP z)8=7l&kL!#*lD z@|^84vNGH2O(K--HWw!*jYgR!qI-MzAff#0uR_5qFx4>IVa+m1sM97{^@i-PIp2|! z1QA~6gaPH}_Xg8wtwu?hvQ;R*n~f%u!C)|HLUKGk(o(ijQd;ZUagtKlq&In;-t4DB z#FMBI8+nP=q^g<{hmErbn^gp!*KW62#|-6sA#*6Hexb|}mxY{f)&9C&RSO=9=OI}t z74=I(Syt0?auO0Bo)JnsJsv|2dMnzund(hq`v~rXY8-MHZ7r7bMjb<)S}gy!lF?5&`ZsE88w)P+Rlh6 zUWoa|22*QKD4~AZ#s-KAB?F^bQMc>+XD|;u)d<_y-SJ`-*iHxKv_r!)N>P~=SXNjZ zx(8#y@qJd5w0#?b8s%77$Ca)XD8sPPz$2o3aVXga6G)-JqmlfzGy&5ZrPd~Fabj)G ztC-O{1k0gNM(xjb)czPsk#*KHlnYt;W%N84Oh=cm~ppbUxug{<)pP-c5TiT5%W@m|;r4#Wy7?{-m?0m{)kIXS7- zkd;bN?5)#zWYgZ!tq)DKbgjg$?)3Zn`$2$_eSLkq{;w=iPN$7Vqg}0pxH*ihVYau2 zy*C;!F9#l4fr9|%=8kO3c>V-Mjm>-E_G7P`Uk{O$#}^kuiHV7gnT9g4*M9vY^S+M; zu+eCc&sV2m8Rcyf<-HO=O*R&8FDeU(mruxTUa2sVp=mUcp}b_kkdZUp8G2jI<^&OI zSBP&zX5FkJrx~WyudJ-ICUd3)1Y9VvxUt{zyzA>!5QZwF_aG{((R8Z~st_o4I#32c zW-?YYw35ER@B3_|e80F||4$AD_EIP*^2UM*B~(L{{cbl1ibd-LC=VWx%vQv>azT)5 z6b?U+wQYV~135Va%JXxfJSIxo;x}Ud4kaK~^ZC&TB&*YM6BVTyCw(9oTU%lEKq`F1t`hz6_mX!P$J&z9>N_*jIm)pDxjIc zpmW;Mn5NX;tJTmjAu($;&_jbKlq$P8Y8LonvDM=54qGrD+diK7P~WcCp&ZUD8(~P4 zyOYW8Zl$uv`;)i@+T9I9;^G^v2V@v1EmWdDOdSJk#!cp+9=j2T;gALP;`}369@Bu5 zW+=td%t)?Ana^gkD6l|@&Zm@b4wUemIoOKiY`oU{Fvg2+P>=uA5!4h512#byWMH$K&K~dG0Nt+%}XAL%HivR>BZ>c|S&}btaw+ zgFvc0MK<)BJg1l3_U(TQid)(MNoM88^YiHcntze}!-Vr+A$T1nNS2tDNJx;(4+d5X z;$o1XNLa-F%!0mlR;rWWyR0#@;^pNg8;Y@Cd^%JfhC~Sp%)|s`g(j3}DuI#^5rJay zppdb(2F8Z_XO3l1U>6J=K~-he8S)k=p8_)E-y-@b60qH%&VKlbD0|szwE>i6;@fRD zg_8K1yf2bRN7JcE%9?csi`}#do#PPOJoX7Y3&4tx zLfoh+u&-t%%uqI~B|ex%vDQyJZLJg+3+C&7-{%?8zwE}6AkQRdSupXjyVl{qjuN%f zPzJ%feO_F2JCwYww_@i4LWWKY16uyZV?2vN@`p2cwOrYH_b!v+2+2g`h{8t{$v#mc zklA*-0Ru;Eg>o=BI@*m4C?^we% zBue$NGLdvJ3HEnd^6!Jpqs(SGT9$ZY%3>!FmjQ)eOPr9_l3#z#A1PD9+}e^0Ncpt= zgq>L}Wd=Lx3_!S8VgjzfG|Yr@I#ttX1E!U^oKPy(x^iWguAU!pmj+ljvfG<~V*k6r zd+q5PgV@3&u$ za(0lpgMF5fAt>U89gs^*qLeM6{PmAnlqD2cAj~2sfpVnv9iJag(X-@$fB^2iUL*Re zWJxhfmWga(Ef%vKBoXG7ts++=Q#(NEls<=&wz=78Ae{GOb}Tg9l4BI|4owSk_;V{m zPYzPmDn#0BatSFP;d#c`BF6|xAW=J~Zs1^Bd*_o7w?dBs~@u+}(u zwS-deuy2HXFtEf##+GSFFTCtU>j;0&qbh0jseJ zO_Z{uBcd!D%F>io7RiDLg9spMQQXDb1$?aOB5H6=^Z(nMTkN4;C%HwGd?*0Os&e>n zb7P5(ti(Q4PPviQoIT6%EOrf)Frvhs-@YyJ@N&>g5NJXRv%$s3^r`^k3e*|RgV~tH z1mOslyukcudd`XRx8Ke+U=vI1JhI-__PFv z?6XK~>!RJEA=ozUx9>t^X#?3rX7Je9B`ATHX-SkQrG`?UWP8ISq$MwQ$^>;D< zM@QJS+btM^*2jtOq-;GTt#3GxuEr=&MsloH@zGVOE8}6&p#U~FGAJwSh1qjMMTe5GVPL*=e5p<=U{mb zl7#twh%Oc+iSyVQNXq^WC2|rZ(eUJivThV~5ObV>K|%x1L}#-?+liF87Auj*&Enj* zSJ0cLBm)pdqX3fZXa7&x8T~YJC2QQ+yx7JTh?Wc^5)EiGEj#SXSSz}<$d)qA#fX&_ zZW_%-j`qr06yzIe6z;>#l`?rqW&|V6KYhRNt2*6nd(3QVz_`tsw)^}})u~fer^zz( z5V}V4T#mldUC${%N&D(jnmy}w>u`V6{PrX5s}bZA!2`&ZYGsy1QIde>=HAX`yU8>-)bz}I&6jh22fZW|-ilk6}RiNZdxh((u@V$Clu{rd)iY1wZ{7BDqyR~g% zPV9}O;K(OF%XR+yN3dr>7n2;yRF|ph-^}eXLyMKCiYQ;+42PU1aptWp4Uxg%;UP^^ zMU46iH`E&#p=skuc_&V(ni7K{U7SuB?NRy9z) z&aP2E17xo!tsD*kve#n)o+|Kyi&A#>+Y%)Dh$SCmt~>m{`JT(gZ9MNEG8ui1Oe7D50C= zS)c?obSpECo^q`8wG#OxsmcJT2zXN~<=;Gw5*!Z>7)a0=T)x0RiBc-QXk9e1zi*k) z!0zwkEQ7(pL6+cJh$d#9g_5TIF1o3)L5U(QHdR1V4HqlDrY8N-h$yF1(@V(pch@7J z{HvmQFt($LVj}arB>zK{T0?_kiw5>*xITw1|1_k@xeRaLk5XnLU^?nmQ&Fp!3ej?7 zf{acSSrdKIE7b~kK`n-doFlvgqk#D&%ZOem-K8i|LO@Mn0T=6A%U&rg{;E1*qA}=b zAu}v&tVIV3J+)Val77#xK=~@56iHjOV%dXZbGbe!v}X>HlcYR8!f+EMG%=&+L!BhI zT?>lQ`B&b|qL#3~HZdt)Yyo2i?ieu}-Gk-ydP<^~_xGllV5`*EEws|tB@S~Ld_RGMmMlU_{1Y_@OQ-j(3lv z$fr}DJx!A=J3Z~R1_N|Bh|-h5j7f2lLix_-Op6v&l=Qt71fY|V?7$N^u!hOB&sHVX zLp zKnf-N5iK^H4)EXHhZV|Kve7)3q^kceh$UGJ0&gXh zy@2xke0v*L*Q{rWZcfG0U=3c{u08e%7XY&vy8^b03v=ltEf%BK)^Bgf@*Y|V0ZNEj zS!JYYUq_0w8_LTit+Yz6+9AC>pgcN+O5!Kp72_?d@=Rz6d z5>mQ)9G(%q1r2L(Stz3KdBOyu^=+ranc}A;?=<7XTdI2S<-cL<0ugTH^21&qJ;5N_tW>$qFz&`xiwfW{9?W=qUP#n7+$aNFp{qz zKmnAvqGFaT&8dZc@K{C31PV}M6u?P#mH{OT4>&C=$cwkZqgj9+M;+Dsz){lM!DLBw zWJLWeN%l74ShI^_&K8xHM?rF27R=Zq+HJ}nLXJx?3zk4Rb(nb09456AFrPxHB_%B^ zAa0ZD5r$Vxmi&0AlvL!2GdUwPNHQCxMxYe&WmypWg%E0sc^Gz0%Z2s(XwqzZjZd25 zvMKc@227)VczAw}kD)Lrt*qv|tr8_Vm?YWF>`g21_zQd%MZHnu?N6Xwkg zQ5s3D=(JvcA(Y58i{ui@S40Vt6sot-dAI-^O)Et}DN6_r-0xWxkITA*(66JEoDaa! zv=UBFmPD+GNYgxzxg?7)GilEv)|m{Qa7q-ydR^F+BqB_e#N9HKekYXBO=#taC^ci^ zHw^x$AWsH%x)!BoN_}(I1XLORDAM8r6CBya0IDOnrGO;Mph~f-^&n8~FPK}@HICuu zQfO$PvG910>wKARk9?*$ot&O-)+VPXCyugZC=qY(;g zkToc8mQZr7YT-c7zd&qPttHOz_)hkmg$g2R^5vJ?+wJzn$q9MFNz4+)?a*1r$68i0 z%6>-GW4NnsZUttg`CPFR8Z>&aw`6&D$2BCBk}wVBB~X&`2qfjqx>g4H7v+B`{}M{T zgb1Y+G|MKFNs=U(DFIQ?IG3vyjYrL379yDrvmG0y?GQP9dDNavfQhB98SGz7 zHx~V$r1(KCjSLcg5R#l}-|kOLam8|sDWJ|FnPl*d=nMm(;>}Uiu$Uw#nkG?-rPGx5 zSpBM#tfEvQkD)Y@Hrz3*4d}iR^24tpuFp9ihrV zH3#szEPD9P=sr@AHf!-eK29cz5hMvFoUT~P`%4l; z8>!3&?Z({f#@OtJKDLvb&3KOSmFl!HM0B}Hk}+F}x4780iWCp9nXf`_=upuUM{U?Z z2TPz9=xIFSivj>>MwAeuln`A3Qp7c}mMo!fCCX>ZC?$aS?3;k{T@|IAt4E;3gqOw{ zC64o)1Dduhf+)C>=WVV(=5yH8E<}b_aTULt`_x!c?v3Tt;su2H#>BO93YO~)tf9mc zk=#BxIkD>U-O1#5cMpts2#umJWyRXnW@$9ySpF*qT11aYxlFGOQls77*?g8_61lP* zB^|f%WCClQ=P4b9C=yEcjD8r_0_8`M6iOUBP4uN6gK#PF_E$XlOSRh71;11@K1k`y z2<3yLge;-lca+Zxl<$ZVpLsIL^Ss-=xS;7ui89Xdw9glzpjm>dQTEepK392#B?0Nh zLS)i3oX3>f)LBZzl2JUeRBTpi3B{yV(!Q=i`ExL^fC-YYvvJOWm2tLg)}ccXKAfGU zsn#T3_|UDI3_90tGQfB|_9YX;u2?zi9CCV;Z8nlAE*Hw*R%g%{;SDF0EIT>L!I$ue zl7*~}@;7#{Xzs6~e2-RmjX|KY@(Nqpk(F)CW=5zj$*BNWGQ2Jrx)54ya23IU)4tIaEWeT!e@0BrBqql6SF-~I5tP(lJq zJ4K0;vo%pVOMQp}B}3zN8kLh1xjVS%Bso3BMI;cFD=9(}Sh5diw!A}Azp)N3v(Zp+ zv`Lhgl?ih+!m+Uw%IU}^%@>C4)cHby|5Ol!t~AYY~t{ zFA7TpTY*nSQ&HOes;y9FqhHtx-Aw3=BBfhw7B>56R5qA@KHf+ZsNQ4(uykWH4e$xX zNjggOVbDi@2b8@MB^cNPNUov`lj7pq)E!x?-BS?Xk|s7`^W-Xqe#HAdLg3q)Is+wR z_q+Vy6FTc!x1~&pfaT6kp6fGD| zX(y73&0i&{q6hr87=n7RhzD0C8pqs#wLyAG%n?1A0RQQ!{uh3)aNk9NvZuJXp+p}` zgmQS`D1i<%-b*|l1c9Ua7D93mFWB=MJrfVAc8F3ejpQoIXGHnVw2~-cxHLIL+@OdH zjOi=NJVg|CTC4}gytvJczANvzgx|~2QI&;&v*#`Y%S)oX21&@2(SU2Q47S!-{@0@X zLt-dtU;$Dt2RakWghpW`#-))Mr#}-qU zIp;gKPft?_ub*$qdPkz{6(}`Bq6m_OkkCRL8_Ip6e7S=1ixTDUri73slxmE;_m(2S znjmq0q)N3U*#}A{R;=~}Q6Nm1I5lk+9oQ=^E9Cn{5mCZO3FU-+h(;<9W*{`y{$}|0 z3hP;wBD6!^K7iiYs)It5Q=$BhuXzsh()9A4CU!l_LkLl7g1WfqQb+PWrQNKU2-*nM z{FsTLjfhGcq0(7TZ~EPtm)q^sZ@2 zRiFe%_CdRX5*uy`gZI8bY5o2P(J_i`kUFWN4CKlZJ+IO8dP~*O@x>CQMh8^>`TGJT zWS?7AN|fr20m7^RUI7-z`c^Lqxy)df#5OOS0;#n0X#86rl zP_-IG;%+l`k8QTy;PgBF=%WU~XT}YdE;biJTNlINc@<0oj z-jbpooF$?@h{#?_JT1LeE5-7JLZ!eg0PBX{*9W7WkJ4BL4skH_Pmol>u4k!Nt;jA8 zX>DU(4o-^fbe3WMR6#8cZ8kLn)Rht2`*RQtz|C5-RB^-~JlM^5^m#M5J}nLdAEGzfuxcETN6^^TZJI z7fXSOl*hLIR*D25&{Rx^ zV`$!_NEbaoMNymC45(Huh?CSE>p>DILm;6^lqxXEG7Mc6iojily~nQ&WiOz7sqX@# z9taSVn^2w)Zvbu4-w9q0%g-T8(R8dgS^EJY$`10=G}{pHBxKE%H0{tz%ai;`>KR4y z2g#6z6&Is8q|{R@M*T54gQi(WERzM6gxL-GK~lPd03|U3X5XIQ9^hqlomu1jrpvAhf{f09D-$XVVMEDIyM z4&})ybP->QU^i-;3DMUW){Rd`po{RBVr{?lw(H+#W9%4{lk^&PM*r&hIt2< zi*AXhQ?aD?1GUr(it^D=_5#Y`O@UG%7f}B4G)lEm0LW4P4p~OI zg*U~qdq5t|S2!3*88Sw1XcH7LHELox79p9~z!HmYv1CAuqDJTyW%I8n_RFb-T!E4- zr(y{=R&(c_XQWHTEcq!@X;OQgq!&&S8HvdRs+m}kR+Mn9fL_P3n*%QzBR`N5VIvAW zT0_!+Yy`_;q`hg|o5tQ0{BTUwZpz(h0%g0c4$}EFHy`v2Jpq*e5pK26az>} z6(vL{ouptcvHYhh&LQsic#YVWvy_4D0j0!I>X9gAw!DOAhQ8a?4k!7rs`B<-ifsYL zh0AoA{%MKgi|#Ue&!CRtbU#t1*Tgub$PMzmR{^smxuBJ=Ut=A~_y99b@^a9Jn|mA0 zIv!TddX?nZ@Qe$RXgX8VD}8DWO8q68O`KBVyC!y3vc=KM6$|D_3{^buvUd>C^N4gl zycsT$Bul>!Plcpw<(Ik{i!U_3@gisly_@fS=K#cudJ2>fp%lvi^JNv~0~Hey3gky% zh7pqOJ4-qZVu=Y~-dq60q1G4BOG(@UTfOTnB9rleHNuqs)Hvfq9E z+U7u@3vB7Chl(tjFg{YwLX}0O z%tCb*FsH0u7Rqa)ymP&D8#{8n9I1rs>ryHxXZ#=TCt_YXx`E9PCWr?%^Qw1BB($_|{^!^1y}(x%Tvl;?($ELTy! ze`ec>ycnxZl-cpFv7FE5U3zR0GxOCVi)xvL*I6*;tU?QGD=oZslvA=q8G*x;bE^t2 zWie@D*Pv9k`GQ&e$oy7I7)JPj%mII%PPe4fRNIZUvxK9}Z8+}K+HG_~Ls0^iW+v*I z%}pH3&N|9oK&d`sfZi(n~E8urtSpixBv-L|L-L3%3-Y6w9?J2{Mpmnyfn8N~~?!xVB_iK$0kpq)>_^|3;{zr01cXj3r8s2jH1@MzHHU zLfLYZWP`6igwk$UNt7L;1k0XSVywW9gQ-vsOO%4tRa!T*DvPqr;;LE-)8437S~P4* zRnXJ^&a$^Pw-v~MQd$Umzb2%8LiGmndQ^x!6TizvZz zTP!spmneq?N-oxfGAdc3^UU%vkAme&xg0r4On z=Sv(q%6qYt{3A#;)rEB>>!X;Z?5iAWg9#AD@#4?h3DGe)pKCl`X`HAG4;smq+}V(+ zTN2tRHbPUlJwo|a73DTa7AQOLT#2&vNtAs4NtB|gALh<#OONkAs_a^UR&Gfa@?IEV zd4pwjRx)#Z#xQ5{z&Zs_f@+6@mlM5}e1_!*vHZ?iLf``l<~5Im(uI1t2BoqgS!yI1 zOJu!#AUW3LU0R8as+EwLa4R7*A)8Wdtk%|e)uxD~*RbRD|L5%fU)tExFn}wS*rrJd zScncm8mSG*y#lP1CQvBUWm_qfn{s8ZWL;=sS74!p{2B$+VP^mAeV+HrIWx&5=I-OY zF*ebT^XZv6bLKrWKztD?`yx5a^NiQe^>SC92*L1qODSbS+#w$sJbwLpgQSReY{Gr_ zbk*@?KIhB!wfvdg(o!hp2sKdFBjqc#{EJYcmdwlQtgh}kD3>koOO{Sqi_v?w@onBN zozg7j3!$6@%Rj0qSsFfMQKy~O(ql|Cuwb)Rk~mS)%kV<=mX>d!&u{TxkH4ya?QMk( z0K609PnsNlIE; z0n~Ap;)S=xVDc^=m;)q5c9~isyS1X_wOLMtavUu$NvW3Om6TZf7}YsH=XMr%JZ4eK zXv769Z|%!AT3c5vuCsTOW z_8%9*iK{o196{13u{O2twG~#XZD8x(L4jdiW0VI-kup^KL`vIj)pldJlxryQuc$r1;rarMy@z`JeO#TZG}B+{&TX zLxDl4Esm6f0_7oUu}hR4TjY8= zo54$3B?s6mEZ0%W$djBp<)}Wcp%`jiHElGK7% zt9Z5dZ!Ecr@;H67zk^d-+zat=Xw+}Fl(IugMO4Wp%4QRkS3+5xEY@KpZ1-KwPB6$XJCWDe)mQk4c#|-n>M5oKMTDnBfpcGRa3NM=hU|V`l9F<4m(yUmhO#92>#`)9Vk~!Mv?%twR=oP4?4o43QMzP_ z(gs9WszFtj&?ThQ!F9|Q8V<2uLD_~O(hijR42@DKWme=eC7-tur?mKUKfWwbb_?p6-@_5>2b8k6B&Alst)OfwWqp~l?)@C&yFn7Sb zQ!3;KDRYye>OCuV^=elyNA}8PuNct2t9}Dlh@352lH^B}l$0s)R2wBE8_AO=F3DYH zq-+%_+j<%id&#DxuB#uE#|W+P>LMk{)==IeXp;++b)#&dJS5MJlEs_79!lEK%V3`# ztBn=TSh6N5b6P5;TOy>CuFnIKAT%T+NVSj62VXcIlT4xL?GmEiE-|~Zk`mn>E)C3d z){4MH$o|HXSS9SY5i&^11sxDU!$6O)a`Z(?r96IvoeNT?C}oxlZtUX`<2_Be-UGS7 zhsFrBfi@TT3FXnBp-d6JoFja`K>4lMDi4LS-ufhzDD~lw$}*>frOay~Wv@UvKnaUg z!FwP`M1-Fn%rZ4g^ncDOEVc8amSeH}qU~~wgtL?}?7`whsrJP%G|&%K%U+E9!V8zZ zaygbR_nwDu@ZCf3aY^d2?a9z9+bAF*iIgObGHv7{$x(R(Wt|n2pOmt$lvwqQQ=TIK zKjqccSIwbBs}$lviHDR}Je=t5sc2s=ia|;aE0WSJ%b?LRaZ3ih*{4gEXqD3`C7~#i zv}DjIFIP~OBws8@K3OlxZ$L!ypOk!9kQ68!eM3_AiIAKNWgzzh&FrF~l%JjQ-TAv- zq|`~Q%|HoM8A7*QF|k#45O+Ia$~RB<+#w$kJf$coEd@$H#MELxK9cgiEud^@`~5&! zCuK*5@O9u<_JT5SCo^4cEYwOEzM}@o1BMIHMsh?fK?p}XU80uPmn&Q4wocI9+1H|S zuPP5^<%*`Hy-AY6P_lab!eAOjMIUpteO1pv~I~C73T<3|!%XLjr(jv1v zkRqk=k@GeGdx{Us8zeyjWweZx!O}y@KEl}&m}$>T53*Ptid|Bo!+SwXqoidLEN`kU zk!8!N7W`O1NlO-rtfKsN4}0$|k^H`a>vzn5YM+`UILdk3Q*db|>VE!eZ!KrVSq{OWbBV`lhLK!VTuD0Za zv=j-JcSsw_kSRk-<@~~c68Xi?Z=L4+O*lbe|xA{1&DN6sHr|w>&OsSArBy z-U^nCa^{K1DI%|QGHjU+8re&XJmF+^U#~`a9w-MUSxtE*)gTzFIbEitpo#t~7{1bc zL?FreeksC(N)E$z-BKuzv)nCtePBGpv|E|Qg@a0DsO6q7jj~S43*R9ox5yoG=9Zxt z#HQVYQY}xUSuR-lKdLE!V+{hq_0)oC%;NM+6aw&Xot_S zPWXw<&l_rnSpR}?$|IrVKtX{L)v&o+b`UumI)5*gkrHV-rCcoBE$43emXu=YE9((U z#{^~3at$Rbr+jvRO(lqP3FO|rJEbWC9GP7!iKI-BWFUD9NF7g?Hp#2*dZTp8K^8^` z@QA+}zpP5ONokVJ0%gl7<(RO`FX$GHUOQ!i1YM-`HgA>i6Upw6A3y$%oR`CH4*v8r zFEuvW(|Nr*;DZ-H*_4GFH0o@YZfTTyt0E6Kya!ATd5WCyK}vnRADc3?B;^;iG)%Eu zrYuSJN|IY!)soMB3etW_^5F*I^;M)%&XMqP@(~kfe2*!3|3y-#)Vm>Nprm9q<*`z7 zZ5byVtx+oFx9&Hm%n>m{Y?}+nB>WLlLHR$q4Qg0SYt;ki@kE{-=A+xmWj7WGgm3nTch&ZCw9+CHd2L zm3fsCU$UGGCX8kCdv|M;IVn4uaEEiw6T~iAh+qDM z)~-pUv}lPhxd+Q{KA*fm3CW;jYP(GJY9aGTNk_jOT_MwfE;EMjBmBYrp`EEm-Z96c z5h;r-?_|7e%&c(BpuF5^`Bj_cbsR^6p~u}JntY|F4Q7Qjx3KFH zwun&{&nQ2Z|zD$I(Els!=LybNcjpb%q2i`R>T z>#R*E;*~6g$k$Y$T;&LPlQLbfWr55PKHSg_N=G!$axz!-6Omig;n3ec7#jGGUL!oE z3Boc(K-nQ>hm?6y_(UJK{2)tY@sj1gw_0Kl50Y;A!wZz(P~~8&sa7RX;#E$RSZ9(^l@WugC{>l7%CJWH zX8vX#DJ_$dmUf^+H`^qDk^|S;^2^#OI|csYHp>r-RkFNGmY0>~<%VT%n=xN|81d!%`VA*)+7;=JY{0sO=QfPOB^`YY97>RwcenNX5lm9<>aUpB(bl|#zihl z=#bKyXs4u9MuuskLXDJBNv~ zejAdEBpFEtB_(;MPC3pq9rxhp85vFOP@mgezF^p(5-;M1wEprtWdxFkr1Uf?{Ubjq zxflmM_5URP1SKtf=}I4#aG!(5SbKb&qbx~@*gTTuELrkBy55>|eNEUSHcx zyca0jB|lZ|S4fK_k|dG)swPEw+gg;8w3A}1Ri7t#v;H_IA>v zH?(_OVjCM13)(3Kxmz;z(!D>fBz2T3%0RR)CJgN%u9f5y5|rK5VNmu#`46z!SQuX^ z89F6_DSWKW2q+aEd6*6lJpH+GKh8k|p35*P0|k%uPz&Id~=+ty-y93&GN>XxG9WNs2NgMX4mo z2r<7zQSwxDNIrH~ng)fbt)N8jE7S%?c^s6gO|!&H4vMJY!u%W@>jx+N)PndhV|oD!A@>u<%_cr>#>E*Z)4^W(o5VRJ7Tt4}$U zL3y`q`Gqm0^p3me)MBgFZb@x6zO|pnJR)mGWHEy|&HeZlF-hi}c|=f@q8u}%L^X1V z0Iv`?qzGOo|E&*L#~msD5^)5|vf5ATJ3=p7?L&z;B^UXy>6zl3sTb&le*6%O_SBJf6p-YN#D8*>k zLPM9m(U>I3)Fe@OJfkJbCzlM$kPONmsxouR>6DT|IYB5XN?GDB6t7UJQI#xFE&7%- z5*GkAHd3a?@MZsqQO;&6KgWzwb-zCW(1Kl_Lsb0r<&ZaD7)Id^m0)4#~n~&t^$JM zBc2~z+i2_v!SISc4e*b)YM`|PUEU8$F*%suZBq8*0m}@rvE5RUq>0+~Q>M1H9UwmN zW3#jDn*GC3MoL+7+v=3EOm*34qxGyA%@>Oq>nSlCiNx5((z1>6Z%fAJ^-fqaO$Vko zNE(UNst`VBv_#6R-#f#1qs&1`Nl_A2l0nIVbviN=4xM4WQI4eGTh2(L5@qy*AyQ_% zDiOo-&=7$qg-MA!v?ir2Idw&pvOLMgxyq8$d-@$xp3!o-Aj0PCyT50t$y?uV=0}8s zD$#SNrn~66Q`=qYyTj{>-zM=XYO>4RF?Go=F3E(X`qovfS_;XPQ_e)0MO9wl00(|{ z@m!tUHQVZHvs{!FsgD9tmWy-S!g`#t#Er_bEae{naXl;+F~ij{Vna}IV78uzvD}kdr2ac#A1@<*~X9zN|)TP zD3{$s8lLsFs|4jZBh`SCo0Jo$91UTKk0U5dWuOggi3}>E0`cX3tcne6Q1*}-rN~hB zN{Oi0<;Zg%?uZq<2S8BLawtpondF%$XEUdiB@S;GC){F*y%MD7dIzo6G zl(xw8-N>j^e6XqXd&Sm!uS061xnsf644+YC}HU*Nwkg4nv|CMRNDG& z7Xcyf76`;HkaD6gufB2~mZFyBu~AM*i8y6nlqaMtNXeO&*jZyYB$K9PP&O@}+|qZU zo(B^D$^4)BU&>E*a{wsy!6H~vCv3FBsuvciB$;z@=x<1-?38@?i?g%$NhAovINl`| zz-}l^_PiLAB{>O1EUtk~upl8BsII}zVr?kyx@*rXI7ChSr|)@Y-uc)a1@t$-4k9e^ z$2(v9F0RN=!U$=0t;(iRsfViWvyOMN6z~%rVh9 zSEmxlkeDV%Mx~e(sM0W#xn<7)m1tfAm4gn~>iPfsC^BN-vGWE`iEZQd6n#uE`5atkUZ=k+5A+WjQVDBFnOI zn90ja#^mmx4BC5L3qM(LE5Xr5s4}rCY0|6g1DfD;r9yh zN^VIx1+ZzjBCJRbRsm!r3xln+m40!jH6QV-!S8Dwchua+UH4vMF5$O{JcQfKX)tg2^Sb?R++atyWaReo-Lt zv>504IaR`C)2d_({`k;tU#!o_ka$DYyIy7F5jVuEghrOBsQit>N^DZjPp_J6Ft@|1 zB#ib*r6W@Lf`S(aRVGHIvMQBUIa&gm^eT%tRWf35-orvTSS7cjG6M>5+ZTUi4uUwe zM@UgPPvJM{N^*!%*$|bADzQ(fMCHXrMurZr(p9|5p~Jak5tYv&aNB7eZ+6;#rtL}f{?g9cWT2+%?9GI>&I?c?Ttw@SJ+G7-wscQaQ0vvvnRjT=!I zz+Dz;g^?pyiOB8>SrCzpf=VtNl1Pb=R;*AZ+U^0^YcD-;s8n&?-NUvBD)pc4_q};< z#vYr2vi-b}q^@z|U*3#8F@{CSUHB4|)mb?#tDGPIZ6bO!LNJc6BehYq2IXMFFV1c)~HTMs9-7np@MuX2+yYDIYNm-I|DU{1VIeC!MHs+LF z*GJAVO6>hSgVJ3mg2U(t+f?n3H;@IQgTl5at!wYmGEib=j`C0_$Ky8T@tE0Vyxpx& zcqktQf5P-9^OBK!t|IY$wqDOfQSM~hIyN>z`g)}SO>!_O1iZZQ%YOSa@6yPXt_j` zl9u*X<7yq{2$Y4R%&|`F10ctjyW>Mp9y5*+>7sniG%3F_pBSZ_Im%ysfJjIEmenOc z^gjg2SCG6m$>}iF+^5@nw)H}Jf=*Zl>N!hDYvQL$d z=txMI3R4u5Wp8FV?4o4XNVMKm2BR-Dl+{>k;F=0S9}Mc0c_Cc~2MIWYSEm#}PkF~Y zPWe}(Ds`_10U)Qf)65!@{S(C37Y@!#49OWQ2OBsN5G0G*P-RX3I74MUB)TX?TDdpi1 zc_JkSY-38v+Bu>&DVoW6`VYtlWV?3J2;@ZnJSwtG_uMH;N^)Xhh6cZAP*&A`H3Vhp zi*leN0djDJfX`}lsiC2YUbtVX5=u>glH{5W#y}~_vdk!_i24~NvqCV(o&#sKDN9lg zh4Ma0dBD8(@v?83FP|+(3}LT)e&W~8&d${i!wW{7G$c>t{JW`1B9vShWxKggcinN{ zJ*!a`q~t62l)0Q=$CdLr@h~n;+4GbaZAy$Hg;-TyA~rmL8#^v}jcCEIH2To|E)ewM zQiDisFL#2ha!_Jl>kJ{~NH3{26v{CpWI5yC^TAGk69MtE@+b_RIZEttUNy60$=WqZ z$pIerk?U)BR_y!tiJm*rb;o^oqbkpYvI>+rC`HmJVX2ghn39r#Qky{AO*OX;O6#jG zF+tTR?-8gNC4aWIp~9(@uMitFL{7uG4udvj2})Q#hcawQPwA@i%R`j7$#BI8gn*>m z(#wCGKoXYhFBeNnzVGh2t?Pa!W2-+!tSQwh z$bl8 zbJTY;q#V^LOQBTBCzpm%{up5djTob?!2ul^ifb=@npj#XIglrmumt6ZlsF{P(GR}D z@io>kOwJGPvfO|i>0T2R5f0ASowqN4nIjKixFGc!c!g!W!QMT zOt}1BM|e5Kkhe@kxyCeGHz$B*4@$l;$vz~XO&PTkT9&kIQI=&@js+vynrRGcNSdsKJl-!<3SepsYxV9t)g{hb$tD zW?2Obgtt>0=)Y%n;iU_e{N5xtyyS$>{+RhTN+zPLl(JIFgvI1(7U{+D>6u3M?hrf9;O&Hq zca>$Da*n(}3cLbRRzg`pG#{RIQ0gYyQ!VfJ+d(_;7?I@Cp@EgY@|W}T^R-X*M9D>( zlFuii?CiYX9{4vGD088#gtExXsxZoK3ZYC}APGul3u!ODTD?NZWX<^s@lCvjeglM_ z+lUSIG$<>+D5WffvK)3$?j2ydWA>OgtUbT!I(8-Z7+DfUICG_V9#IBKyCx6PcYhgu zgJ14xYV(dh2Hna@gjR*hANIH#^FOpc}q$A?_(xa zl{c;`cR)!;N!B4bSt4@MjElVbZc4&fj`RZMsm_~K=_#ve4?M>}mJQ5eUgvNxDo zvea(PR;x&{S|KFF1-T&-h#RCW(yrkm=^N}NZ-L5d_xxx49fp}n1N2J^PDrfcU(OuI zai+{U59NH`Cq?-piFH8%C4Dp5+2y+iX%VZu#Kj6@FaBN15lYH(F+kb%!%(3t$j&}T z$&ykxoe}1Be&j)c>WmRpVPEXnT@; z6Q#~g2PiyqD06ro(uN zNe|J6e@D16UBiA@!}L!u%Y7&l%P=tL zs3K+SPd|+YX6cmnju-Rui!uv31!cb^f$WTItbsm|hAasuf`q*P?^$M5$+9S~w^C|g zS5+>n&AaU0Lo>9kbxJ4)QC?hVGeY@l2#Zr{;n2bzSdME*PV~_Jj0OOm!{A2<8Mf0M zXs66Ab4oNDD@!QbucY@l?DMz0dXiCcO_W`voFGj!qYO{FJ4>9+cPi4mDbv}pCs$WJ zsrKZIa^u6qODRVv`$+jslu`1qfUtn{4u={9;r3w7J$>)Zq8@rKOE7AbZpj@oN?BGZ zu{6ptQko@_HOerjP^45Ulz)@INJGL^D@udoYewmkq$;_cGWKo{18lu{S1DU44HC+B z?2i<-VjR;FhaAF7sz%8sc1r2^8c3Z|tEf@RvY;faTdz%^9E`G!lyfL0nN1*l_9n{G z@lU7RF6l)n$}GasfM0LkU*df-%BEddQ3lF3rKA}~%1}~?11TH?p?mG53|QLkk~$)i zVl5o#bwciy9wYP-UPqUlQkLTwDZ3}ij`W@|n^%Q0X#I*3$ID8-&ya*N_N42(@IQ*j zwsSyqx=%?ds~wbNT2lAkkXDonD7#J@^Tvx3%34X44x%J9dCNy7eIxRk==~{87QaVy z0H57g9sR0P$}*>vrBinE4$8SvE-g=#9XZ3YAxotrk&HOyBWVba)-hN9q?b>#Y4SQr z-bKk(E_wV!S?}Gunzy=lr|#W03p$A?v+*_hT&E7skUJc^gXQ2?l;=cmsc025f<-(R zU6hF>L+M(U8Ko?9${|o1S4PMNMltC%d=68sGxlGn)1!w(3aes%-V zYfVvF=$7peC>xSc60g9bDm7y*c_c02S^{}$Ur)KP_-W>n79>Apl2G#N7nH;xwHxLs zDeK)E$~ICC8RaUcT>l28n(3NQJ|~t?K{D94uzY9- zd6ZI?73GzXGI%2m6-DHW?YV#oO1<6X&kv4#QJQ=|cS>10r7WFNmXWdvFm%m9vq!&* zlEnQZ60UNu+uPgI+cf{%AIs&;Bu^@mD<7LC$@3-2cf&}HQfII;;#Y=z(zYX%L!{(6 z6JLEyC(ihbIF9PLf*71q3{}dH+bKy-dF_-dD6w2cN=K@Xu!QoLCzRvRHll1dmiI&| oT2gw_kzz92vyxKzHx<4735!b04xz*%Pyhe`07*qoM6N<$f)mw9LjV8( diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/convocation.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/convocation.png deleted file mode 100644 index c2283d2e8f026f7a42dd1016ccafe84489c90e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99654 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

uQYECg*sb)nDi_XF_ znkTs;nJq(h!5umH{w`9PCgSpBQWrH?Cf*6Yf7bPV3!?iJEOVES?8#UNYQ(j2sI^%T zXl8{JC&M?a94DGg)LI!;GO9LH&tKhcmBFQTaE=Nr{7j0(w#%UMgTCW*ds&j|m0mbm zNKsI&N5mJ=&VI}xIXp@opJpJ%F-MWI11hTe;6EIed-sUW-MQoYlOC{U$Z58jvL&^Q zuT!_#+1Htu6Gr3$e)9z5)oeVmWHpk2qltB>kQFqt?MXk6cyPNM3xOCcN{ zjmJ6jVaj7t?Z`r8q8l5Lk;s@|e1U;q^a=+zlgba5K5WsRf4@Z=ZFsi$1ZUY4qC2P^ z2|$z00L{?*z%}a`*EA@v$#Vo%&UK?;%Jhe>I*Il;-#Ww3!BijJ1hU7Y1D|4l$ zXH%wUPi>XCgJX&uI*fTD^E{60x?tD+0N%#+a1`iWPs@UoOi2i3q%~42mF{!B}7P zxGvJ%(GpYCgR)LjUIzgJ4e+}q1@e7L&+=*ALE2L{<=o6dFwyNW`P*sow6=`u4OGDa zLjSB$;r$dg5~63F3U1d8AdFs*1nyyCknjj$NaP#AHLdqt^Aw22AvGL`rZTnG<)xVp z5tWHLf@DfXGF!Qmrk@z4&dZ``aaJ@7MG;*(rZF+i$wHo+aKH32$jEiuhWUw0bDoO2 z4Wb2>$tguEb0KmuD16{nnUsd`RNa6|+Tj7LTf2Ious7c2Jel$w<#ddaoiR{-6ga)4 z@F}}F8AWyA`ZBf={_f6%oG4g?7{iyYkk3)NDOLq9o7-HCHi@;Q>5V@57HnAv&=79 zzwdZ)Z;3IzU%QQ7Dhkdn$x(3TEI0yTXm)EUJSn_wnDDmwK8xiSJE35M3 zoZW4kI%a3n0t@o9ot;D7U67Iuggw);HpL)mfSf{Xe*DD zu|;)sQRLPSXhDTq<#gMId^M{wnRBT^mZshHLnBU-Sh*$8EQ~o@qo~}Hu1wX5w|yRq z5Ft5og4j>P#Pm7S7i_z7D&6ho%&9>p8y1G;crKOe0$# zV;apfJ}E7V$x_ASHmIX-Gw6R^FuQILASQ!50w75bEYr4~p;(Za?=$GP#4_{Cp{ZD= zJ7__Qt-)h1nQi9-E0=k@%~@c#aeRbmsBYlDb9MlAr~~a_C=AVxABS?m@TC;7?}~=8 z(4Xjl749@x(8rL(T_c(8)FYK($M=&ciuy4$8Je-o;#hSdtJAVUr{#T>$=p-!)STC0 zV8@b5n1C({fHQZWTMiKhmO? zNd)qXNsBrqS*wLE4_*_4G(2;FfuR4tpoVj;$%kbn+B51{Awda-2;(6nTO|z)sVS1u z;D;cfY0o2bL3XG0tky&XpYXCAwyk#Ak~j)N+bpHOdpFZwV z|Ins>cDVTKuLm&Y>iHS`I*6y!5FI6X(WC_x%^I1g7&~>*tZQV0$Vduh%Y&68HBb@) zx1Mp9^^$>3Ea0{anPwWi&+r~Ub#=~rN#YNjsEQ5IcYu}1mbfwd^tgVnAGzqoCBy?$ zhB3}Z5GR=c{7K5dukB03ntUimxTi$pXzuQQWl*j^2=)W!KqD|9q#x7n%P%@q0EWFe zYj|MFS%nYb9#pO1A&{lE%xn?HQd%_9MDJUl46iF%Cf!=Cw5)6Rl(ZHIs+b;eO%7DU z1x!V#W_*Kckjx-W&%L3JHBm>EpagZ)BqbCQ7^xYF=FnakmoY0w}cEHm~=Ylzdh{|a z<53)U8Nxi*&3?ofEt=^iG_68n@(XAOp0|C;4(PeNdKBuF#s+zhP@k00sRF;jsj?W; zS`N-b*KwRRs^%R8# zUX;iJH)^|W@|=}J60oR4_%>sQXV#{EM$_t1DT!z7AYd}Mnxv@^QIz;yD>9@6&=0LJ zzt*cl1{Q#&564_N55u_Y2Zj-wP;%VKBvhy6qXh44sKFP%K7AT4FyBnG)Qx(yOQ09k zJs6KBHucDcyzlqoxSx#TkZP^g6F#MlzEpZ9jMgZLrY*~spXjDnYidI#dQZwuNc48q3MJ0a%#=tZ

iv`bDw`OfEyba10- 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 KMNUMnLSTY(zDvIV diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/crusher.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/crusher.png deleted file mode 100644 index 67d0e505d21f85cfd961a339a22ae7e9dc32810d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78450 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
  • aoX)7NNJkF1%@9d(%USMyxvPwTTT_ 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

    w#!QhC_bmB>$ZYFt*z4_?;EUb~5eirimoQt66e& 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 ohF~ulbZ0B}Ff#-T(jq07*qoM6N<$f=yM8x&QzG diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/evaporation.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/evaporation.png deleted file mode 100644 index 041ace21dad4a8495a4eb6c64fdf350c9a9c0356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70654 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

    x`4;gT@u0A61>uWKY;?kPl4Sfi!XvAY14NZCyJ9 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

    s8GwHqB790i`^?>~6> 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/greengrove.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/greengrove.png deleted file mode 100644 index 7a0e8adf3652f98f1227496d07ad218dbf0a79d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38966 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

    !CC_BNH4qq1jF{3BZk_zMYz8K4;^)))JX8YDM;{ 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/harvest.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/harvest.png deleted file mode 100644 index 81b3415b36ae0321452e1eb65bc6d3dda03ae0b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73476 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 D=RJ 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%0D?NbCChn$?q9vEy}mMwIY4j>{`e=n&)d6xY`>= zp{T!+n!IOoZkpiDb_Pg?Ky<&MC#K@!v7Wh&7e1a!M0tC7`ThI)<}H84vb)l&OL;B4 zx;p-G^E7Lk=4aMupRxtr-ab$2=)}tI z&1Snjiso&e#l7Nt)LZj+ue_>gSa7#i7;v*|9jqg?_XP|*&^i%{s{RH_ks2I{vpPw~cIGbLc^fa*v#wY3@;9vir9Xb7)A1XAw6KQnd|sIP5tt5#{I5Cu zkJTzmsOzpfUg9T_sLOkC+qOL@loy#ECXeT{UYh6ct7dpWD_+pL*+(hXW&eg&^OV*u zd_&b~GZuEOb9D~Zfq}z;8(KGOa0G@z(OCq{(+Q&^n%BM{`X@nmMk{4cickJX}s}PjY)G zMd5Ie+>2FYwMxC-4VB=6H?IMadEh-DNIFeDsELO}WG)^Vy^4*OulC_r@A!8gQM~@U z^|EiXES{ez`TaX1kGDBoa%9!Mw446*fl!IQem%~@tP-{Blzy&<3Dg}mJ}R-g3~Oe^ zbu7i&|G3O1Wt>%yRpI+O{95hHxDE>3m2bd06N>g=wALPD|)vu3ADu2 zpoABt5>67)$|Ry~tY)eay`mA7%|E9fGen}dtkkya)ha*OezW@AkB8Mi$3J{ti&yzW z98{v0K_&X5D$#3}iLM8kXw`@7_M5)lY^*o?edr%U%O9%i-aGv@brsZsmA|n*V z2#elrpnk|Yl%f+_hf=f`si;LNDq4ZML!u!jh=kAR-8{JslTZXLT_W14L=;Q*t}Ime z6cUkZL}uaz?7a$+D8flU^UuaAO9JbrX>;jH*EMr0(W-4T*4?W_&7cy6Ow`bB7WHN~ zWxv@?Rrju6R&Rb;?SG+s$2M|lRh+ABRVj)YM)`K$MqDb2z5tk_RQ#0Pp?5<>Dv}UL zBuoNKq)S9%;e{LP8WF!`u--M1XtxoL=;)BF^RulVpN1C%LM3Vnm8dzXL>GraLAbvU zm1ubE==0ESb~L|+XYH=(H=Dn#qT);dNrZ1sD?=nrDOy#PqV+Juv@O8N{t@jbg_#fx z;-`$5KaA-k9%|(@F`+5WbD-SEUH9 zA4t-`{vSw1>?5HSt;!T;I_U+mmJzc&>D_GDS1t9kVZ}a_Ok@*#nTA(fBZ{;o6wy>9 zy6k_-w8kksyq{|WiBf(HVo-^WU#*i$w9o(SQCip^hw%3-6J^IGgCkFaOq4&$RlG&^ z@NkG{?f5NQJgpRvtP+xrNUBn_0_+EpoRIxUMJyz+{VXJ#k7=_$SZu{|mYpGyNJKM3Zg|e#&M!A_IxCiI=iU)SXnKUM9-xNy;kG%T35cHz%1W>qLh?`GNe~ zk4^W_P*nGPlbh-|tyUf=m)mMPdt2eZ8zLzNe3aHT;=sF9^dY1om?E?yOslLFB?BUj zh%AxFSg@b(m5Gd~<(EI9_GvFh6l1VqBNDM;i%7IPSUbi~1&L}TQTujMiPm`uJbdb9 zqT`2{Wukt*4>Hkl&*@K~yN^fTiw6qLeP6t-+<#X>a{jo2ku*qBq@pgQqRbSz(1{Vj6-%xt6lvKN9*q`^h+=5vh#Vx^UY709r=K#)H`k-$ zcb65vK_)s%es_1Vu4SR;`%xzPoqOu8D5{IwYHGg|C=Un2{r6_pfJZ69ffq({29o>| zQc+$>Vkb$oKNL`rP(|r0Z{XAO6YF*SkVT6yNMsnXLY9O^gcE!7Ha0lr{W?SSHF)^TB!5-?f*QqfYc`oi*xp*zb8N zDIR$>cU-vvPnV52@OE82aa|!5ow^^i{9%}6>?Eocsc)6W?OL&tQ-|=tl|<7IKCFTz zk(v!7me_3U*O$6qPpw!uqV85n@9f2D(oCaf$V8DfyVJ1Q^K&l~{l4lIzt4kC^eNXN z_Q-Sp9q%)&>vgBcRrJ`9I8y_jwz|H`W>dYcNYdu>ijc-6rJ*qmO!(?jvKx)7y%|?& z@GXKWiNvg8B~c>Gb}c^a{*KhF8L^GzW`mCE~-zO2&45*HCa0A`!va!ikOO>`lL3 zn-%+AqGrF;i&ZmL(q{LQxLMo$%sNqC?(Vy;S+()fWYgW;6xUVKA{(m)kZu6Zt6v+d z$bG`Xm_}(=o#ZsQuP$-nPjTAPxeBT%){>QFH6(mwPzlBbR7uT-{fZAOWn5>CSaD*l z<$EVq>>g;p{~^PReVn)#n6Vd>0`xQKN8cu&b)x*U`tjpaR1Ug-LF8;DnKSPO*gfE2 zc?fPkuwkQDO?T^# z-5MWOh*YFRKQ63(GkK8Bs$XA)ECZn{^pKYH3z`&uSgSezesn6-H}2 z=7l5&wcP>tLMn+SWEc$(5+Cfy58_`4>Z(8mJrAP#iGy*wxSC9hk0Hb;^ys9~J9hM!44*B5IsE@-Jyy|2DmO9)z^Fp6*?_C@hiEKJ*Qk^IsD$&W@{A;U_|5BowY z9+Y$isGvgf?r}6Q9w$8yz^*tLw^AgzyqhQ?7Qm}UZ>U~N%X>Ax#kaz@koPB8tV`pf zsP-1Y?-IeUfWpenS`@##QSlQjjO5@Il3!_Fti}WD8=7C~UOWmKR@xT;6=pWRPh`)mQfY&-%e5(P;fyKA*-&{_!cYlJ`&L7Uj10#t3R+;M+&<4)1T^!-`(TM zQU4H*`mE%4UB)kHmqPOsG>n3&?OjFmgQ%dnx{6e^_cKgIUH03tofuVNx*zQse~TANxsOr0GuM z5fQK;FlFI_DqHoIt$IfA167u_+7&;IUeIamk{`9klD?>Ge&jDCfZ?Ja&DEpox7xx~ zXd5Vn9Y7T>`$gAOyo<$yBMbY9^t052zqga{moz^XPP&$-VWqQFh1Rjw(1B-*jl_tzuh zho4Ril$H(*bu>R-O`@oyB$gdnhFK;Jit5L`47FU7{fdCQCfos+Ihc)H{tCK`@VB&~ zr0}1}u|p|Wob(-0c6Mq7mEB8!h&cPWR5vJo1*nN#ZO2cRkqm7(8aw6{Js34cQm=#?-EFqZGF?j7S0w8?{6M z%}M83n9)jaKln6SH?St4-wM^QFro;A zBKvVM6Qhb86~$rbem%I%$sCYOEGcPrN!j_5qBnEuu+eG23;&6Qx~z;c1Bxi%W^WD@ zieGzB3yS6_LHu?i`R#A5JqpM#U3iM-kGfD`eia+)bv&3WJ`|*%T+FXxMA5vWtlwS7 z$&Btdp3FR1N0cgXKeAM@r4%Ps)Oun-(M#YC6#1D$5PqWt z1>#47runE58p>Aa8K2gzkfNb*1<}uPG@}hgu$LrFT+Gz2M5#Q83`P{qD?9)MBoj^) zFV+bq)9pv$kDHmo0-geblPQ3|=30;D6zeqh6SHWD0pdT=O2AW$?9+jqvrn4?W%(Jm zpuSTb|xlnL^^EOmWqj?{Sli7?YAQ^L_>}IB3o;4*PbP5aLWX7YJ z%7XRjXoi$Yft#EC1Q22Vlg*-QGoXSwr@K-ds9_dCotp(!45K?dD29=RdKpGkjgPV3 z$IjVv&C%ShW=`hM^^=*V0)=F(tH7Kn!DQG|f2^!7F`*4jt3RMW_VDe3Dsai6({q(oy<0jB--mYb2R9L57k1+ zM2F6JG>Z{MEDjBqrvidO=dl34nsrk-jM=ys-&E3FOPX`UAE5ou1rA;f7g*UKzY zW|N!QT`1~vIGT60quC@}^1Ts@t6j|?=$4El8aID7k9YH{(wp>8Bye+~A$$^HKgA@1 zhY<1B5}gt0M7^CEMX!Sc#VC5zQRGz<0Y#98Iw6}fi=JUN>G3-^i(dLui~bz2O(fi< ztNE!z!==)XWSpMO&Tj5}SE=94;G4-{h@nk6Xb7J~jzj1qy3$EB3q&{(q4F(A1Wgn3 zqsWoXh(p0_>e1|hsGv3}T9#R45^j_&(>fuw6BBZiw07H0&t_d#+J(CrdNZ0zahj71 zqJSZ&m!Mw)8X^xOt|Gx9GzGOhiLP}LDG?!2DA8|uvIZu?DoJe=Ikc%)bEj7`L2V>l z;Wp{>le5`0T#6?Y-K^iuZNQtTxN$cty-8E)csQqW5H&i8=$FtzBs4@jhM>S9xQZ$z z6Xc-cDzZtWWo|l&6p0{1uqfc_)x1l8Gm2)`15mA3cnVU}{%@9NuN}0`HGKpwGQU#YB z0fr)HvrD+qg+x}{HC(7CLpMdlG6=buCEEI0yUr!>=W`f!#;riWdQ3A~pOb_R$+TjfMM4Z4?+^q%* z%FG4x*}pOAXSzgnRd>hN5b?IEs2WN0z`vTrOt^pHOijpR`Cs zWn5#Q()<{5A94O7qK!}DY@`P&@~z|tZWs02c){VLn~DFyAVR{$PZa8@wIo4Z!}ZJA zMO@MZPClXHD*EIyF7;*sKc(d{w0_qZ(li@!HZG$7b`E_}Gg0|lbrXFMEgjB2h~_n1 z<({e{ZvAwoMFbTW^eM{CV4qyZCGXh7Pl+I#*@)eiduZY#E{~zAd>ior8bd_CO;!C? zy~MwtLv}b{KashwNVtAEyM~LQ2!(6llRJuVxD=s_iW^nv&OWtO88=wmpq~;`$j>2X zS`=zozJ~~cfVI4T3<0(fX~Rp5p5UsP_+QPT=(KV_v3pVqR}DoapOnK5^hs4**e6Kb zF@J9|?(Py6mk56PKTRQrT4)DGzFoM7M891cLm#gt4FcIB04{lu|7Z@Wp9qDE3ZjN$ z#6pC_jqtsyxX~S~Brfoi%eczoMuTv_wIp0bAzJ3IA@dOz&mpH;a1tGBAqyf_BKYm~ z9bn7C7=pm%&GC?MH4zdFu0}#M6B1Q08VboGE*LI`qH?$qz84jjV2F^obvy*Yv|ukA+m||zYqrb{~SZoXw^z41Q|p^AzB8bZ7}3k1;nM& z-bq}dtKDjL10}s0wJ-yXo8CKw>=*)RarySGkz69ZivPtF3a%wOpNBC-JTcl6@))A_ zSyhm~A4B(HCk~Gu5(;_w6J;=w3W+utjfD_gB^P2OF4yzf6_oU<##i&=l7eS3y3%hU zEh3|dj8x*^4LzNrUP)sZ*$F zA%oh(A*5sy33(cPh{$sZnIl}EL3?6}=d}2E-fd+wD8%?E^C@9!8$xZ+)Y!u3hR_p3 z$c*7xj;;GlC}hSO7O0vkg+!M^mO_MOn}^vJH2GE9)WD?q5#(snZcyS$^k_(a-V$z& zq{b7TpFu!5w0MeqsO|=(UOk%_?=Uqp$kh1R8FW?&c~vC@J>HRO z1bLA{mKAxlkh&xf&88`zx)>5XTha*xBU|@_3CNov>~|23u(C-$f>_zhBLgNg=jB^OY(5gVhiAK#v&0uEm=p>=URi#t)t_Ts&&Lo5C)~ zGlHa?$w$z6Ed)Wnabp;$8ZpG2;pW~Xc~e7ZY8o5b(d2y>RZ%`g%YpE*o%EZ6CD{O? zjtMCqL-?!~4;5b%<9X!BCXm2MorX*?g^}YmX1c6}(9iVv;DWq}A*RSv(u5*EuZCDN z#uwM*O%9Q=CK2V+$qfdNJ-r2j9n1it8?fRBZ>c)40VD;1?g)d$nzu7q4o3G;B#i3o_mZkmrRNK&FN~ z%&8#=^1H3^@w0LWXrj~_uUpte(L;a}O_Mh|5kaK7k6vA++;AWX;bHu6%#zIdqT}aU zx@sevMO!U?u%)wh7SCe-5EVv^$K8jFr`H5Do{Sc3yz23q(qaH@q}>ETo}iYIi4Mrq zw^h?a-iVe1Cl;Ms6HWfr1d%?lg(8xsib%3t7PqWMgvkgqerVPrn`PlF>S}4%BAx|e z1{a^_kDB|C@fH^TNLrX?6Fgzyc)CqUX_a*RZB-7z;V%nLKoikJU=vM}2ToK*{?P>y z@I=XLsUq@-A_Ab8t|FIJlvNPSx|&9W*(8W&p~cf!!T2f5wHQBTJPS46z<3xl$ar)2 zLE~ZLb^eeSMh+n`OiW93LkOzB`o|IYbDR0SS8|}1oRO6{UW9n z2EXRCZYzR_ls`sY4HmyBB6q5YP!tf)CNwwl?lY1IJ1Je&vXi39?-GYBY}t&j4_p?* z$1d3pXMZw%F7Q=4to;?%KHffLyb)%Y`~CP?595cJ1LFsKKgJLCKCO>+e?JU<9!uC^ z@W*or*SITE{wRGlZP+XNXu|kvf;0t8ssakul-8PYDg97tBGd(>($?pWrEhrZ>u*~- zWYySDRcD_|wkRGRjTNeg-P>1ZCHfvQ_jwdm+L-#+Q9!kpM8GEiDK$%zdVhxceG(K#-TF8lny;BBQxNS&bU}xGTKiGjaHDu=tBt ze5kCUDgb|_*F>}|z_-$-8}u!j$3qlJdd99fV?oO%6=}kj*&U0oLS?5r`(dnL?OVuU zi)jg)u_Rby@JCJYuZ=VSm5D_!~^|l9(e#aJ-?SGarGCjSVDIA`tGY>?E4v8 zarW6Gu=dqi(X5?WE1Q@$*BW$iZv}Us;CI;jEE1H}XxPEh4uYDhz2Xl4w~D_aPhjYq zk>7a*Lo*L$=%JlBEa^vAJz_QK4J63y`7_CSPr}~c)Yy-07-OYxkjB|pXT_p+3)TwH zFEMIX6nh1OKlCl$VL$mRynrE3GIfo-#;&}n1E)AFJj$Lf(hpA9 zvg>Yg!@lVa8?XP-IU>HkAF-OVn|D^C_6}!-3f9x?q4|!W1KvK~3VQ_Re!HJFSKino zV)%r+LfV1qp`v@}fW9Sp2cb>fU!nQI4VLXB^Kjl_q5dI32-*qD77-_`)!oSryO$f* zj1@ZX%vp&wf_DJ1R$eRCiaZ9mn|Lc1lhPrHI=Hz)Yy6zMg1sO13dt4xeWOk5{z|QY zXlk&mHS<6lo;xh9Ag76h9bw5yT5@NIASbLfuez~9<=r`FB_Iu){nA>2(!kpP)>ge0 zLMy$wvOZ_7sJ_(}U91RPxGT~N{v831`EG&8dRJ5*E2th8` zRxVgtz%4Q9kYE`5P=XqoyfsWvW0RJfjL`$8;pU1)Ctcvu@Fe!io7gKTT$Z17e}w{~ zIfG@Ip_CA%rYL)SnC*0r#gg(8A@?g`Nd*L_amgSA>CokXCADwP${uH>SR&Ri8cqo+ zCirRMtq@wFKg!G%Vk>YO;jZK@0(XVriYHgFSBS1ycEu&GNKo!>Nv{Yz9LT9^T+e7+ z8eq}&w6s{dRN{dVmNY&?@7Jx|ucNU7p+RcD<$xu&4ju}P;iFjwBh zTp>AWxfQaLC|s6YsYO>llU>1I35g4hYu8I$b&bpFr1EEp!y*9|L@p|&%KbF$6wjbO zSNRNfi0|wWROoWQ$__zlUl2hM4Na_AWTn1DbQ)TL($Lfjn8v!mG%PwvaD^?xk}Dcr zaZ&?+(DwmddNP-1|*k!K71`&8hQapnqci}U% zL3akwfY4xth-W$DT~0+b?m#rEj0QUd30MY?><~_A%wifd8rN6RxC&6CDM5|8$dx}! zL@rUe;*lZGuMl7XAYPEU6d_JRXMktu2I1WctPmWpRX~IOg{`j;{oIiiLNhB>Mk98J zm9#Jrft4PHvWTIR9YQdTo6xxQX`zb9rJzPDBA1XFkD_upKMX*8rvPzX=E|QXGFPc{ zVV9+W&Y*aK=7pIJV(lA5CmVzT8qtRw{R_M##8W~vFt9=d?YSve2~bf^wcwLOBIJ zCHe~KselIIR|pMQPvWlvds0W)VUv|B#I>yuR>J_Lfl)>)<)oG}c8LB-2Rgw_<=U&t z^{nNT>1sjdqM(v2QeEdF4_kDzP|i}?WvN&oHoiavo}ns4HTjB3Mi1rtHi%EQK`5dj z6%2GRz-Uz3!1j%1U|(&8&=jnzTsu@Q;WV(yrZQJ&G8grfQVm8yrRZE#RN|H)bOjD> zLKi%Ex*gm2p*-sg#8Y*Fz$6pUlkBUJp2N2Zmuz{10MT%t?0`>JM37>I2&0S)5|l=D zg(zOs~KsviY)QvI0DMRK8r_5z8vC5XbGL6Ev=v*pvL4(h`Wonl_ zVV9ZGHTY$zx<5c?xCTLylVG0CdAds$fQBy+nnk+6EW<71^+I@Xx69~y zBabxk%hI4gP-snqhV2i4Ht*jbg3nOYCTubXJ*m=w^!(QgMBOQ)U{rOkuVR%2af8qW zapOW4$c>w25o=zRI5=(@MQ<%`nb~D4Bf?`-MeFLnp5^**KeIjn+H4%Oi4qNK(fI5A zL4C4^nomXq$!Hs2Ant8}kUTT>Zf2Ef(>0N1yfSJ=p}|M93>=)AH)74WWt5Eqgo|B9 z->4(u?w6$!vtfO>Pyxc%2M2A8v?(4u))=$z5AFH=!C@PWG7mE!cJ7qX?sj&8;Ki>I zxWOw!=_1o?$c?3%g$J(#;Tml2TGhIK2@-C8*=Ce2(^P*b63jd=31{Q$!){@Hz$T*+ zWonZZJ{hcy?GG34+#hht?tOnStBeP~&@8tAHy&vg;zmNvj@%%10fe8lF5EJ+%SblU zwKFi`JicO3ctU<)dngjj3;Kht4{P4ZfV5d!A0$f#YlBh7`e3llpL4X0?GIX5ZoG|o zWgT7_k!GYWcyP?JDRT3fSTm1*Nw7@qGQ=*8mf@EHg-f_B(Mw*Xm+47oT*_GL4!GvqH zY&G@E3M!m%SsK*`dSMN-smTxChT_|UlQ!_WQc_-DA0T!g)AIUo$@jPD>o+v9KWvi)IR&4zBwzw+D@rS)NRvZA)wqFZK1| zW^R3;t&dQdr^-B52HYRS4V`@i%dpD=3a7TOB3$B^bs8=sUB>B=LVF;Ketl+n_$6ud zh2;TS*ZNSvbt94vuj|``vo@sC=eCE(&JtxFDbr~By~vjEHu#<3WnRN9$Nu}HN z@X5A^;HG?gAel}yolMzghi(aP13EQLrxQPULHu4(K|1$C$+!y{;FPNq|-;Y4B*C$PviShE~x-Uy7Y{C8B#A8f1XA9 zBG<>SR9zjQYzF4~Te&*CPLv06Jm0@NcqCmi>EOC}o@RPVHt_uNKY|zh(9gB8dBex_i5T?T3Q_db?H>ADi1iGJY1v5lv|$d`mc5eOi$`< zh^2p-=F%;g{-Jf-(}l~r?@2)1O6^uY6b9&b_wHu-urCdgz`_KJ6y6kl&izf zf4e#~SBI`#9V{7WrssdQJ3N)UgZZ9xFKYQB z?TaE^Iyz;}=liwG{d>gAdGqr%&ErzaOIfdg08`FfJ9O>H6rQIuQyvZ6Z6q6r>!}R` zj!j{EDmUf3!=iMl#^*db^;NV>x(2X5m&HrGPfrR`hJ|{WVsQYMGT{2JH;0{W4(fSs z-nlxwEUykuO<{Y!iS0=~aA9{aaLSC&W$luutro>g%L&e^mu`NVe3=B7GSxw<@r<}$ z+#Hm-p7%VRy2kV*8wfNdt|vuBY=LHbO2+`tL74CPYi&K6kW(*<&Zmo)ZhbDQm)eE3 eEMG=u<9`8+ea||>$eU;Y0000)htV19RXbqPUM4O@5*WrYh!UsZ23QfxC%XE0D`FvzaS#&mDdpTcxI!0V8U3oZQemi7?Jw#b5Xoo*RRwzSPDQO*02><|+Y)M2x zRCr#Tn+cZdxQ;}*ACj6UPg(u{{uk8<1Syb|oLSvEmB%lAAzLCs0Rr!pTi12p_eBnQ z2_d}YkQeX$`UMTcP#_7spn=D69NV^aa)k5vf1x#@UXZI0zsoCf39Ty$kO!KkeIIZK zLJ=-kEqs>4Pm}leNKf`H3bO17+Vx39`e2|@8j{1-|rEboL?jFeT7^& zxOR*RGY{qt$T>HGH7H!rpGh8w<~gHasOx}sqJ7UOc%0SYEi62a26ZJ`-(-?Gq;v3o z!qNAVEhx zqa5-lyvV(5WJDv;V#xdZB==Y!=Oot^+KGBa6R$?dIA(1qnx=G`e5sy>RXz?NCku~2 zpb=;%0-L}r%YM?OM3&@=WdD|LhXsch7%w#{_Y zbqA1hAq;q{IF0Q6o}8wV;!p{UfluFi5+-(|zr`p_kT6|pAh4t<2**=6d{ilpb*6AU z8Q!FD=wO0OZ-T&T;fUd+G-D+*3ua;8e2QpafbLEMs!wzH6BCwJz7Pc8w@msJj1+>k z0$9kf&WQ~Li+~aV!itd#)zWn_8VkyH*vGn%QB!=(Vke=rB~=G9H9|N*1>49*u$hck zz|&m7L%1O7G@On)hj512h>DD&B8z0mm^zM?oWgN{z)Wz)t|k_4Osw_3w)o}K9JBR& zK7(XZF3b{XN!~Td|B88^nfJ=D4p|F4Z;r8G>kXUdZ4(6FfV*oVA{}*y&?%0FiT!1^ zwoDLiUB5{(3R&y7V{a$_f$g|@WnGt800tsk7O+{BGeSAPscJS=HC9DtwF(T+tJSf# z#0jGNT`i7AIfkIAWFnu{_9>_%%=10N`H4NAJK1rb2j+QRdiE$dP-VVh>q@pJJHbkA zxLJIa9>Z#Eo)hzl4P*=1whCJ{1KuYwcilj?%$mji7j~#s3}n&o-=(vzn&H-~j5R)X zZ%AfV3k@ld4P?=n8DOOk(}26*bg$Tur>872d`j0TqYlA_Aa4RHTN)OWiLAk}P-Mf0 zwvS7eLkl&&cg7z+A7#fu7BZX3-eiEtrZxoQDBt(_JfD)*<3K$-xJSs$E9<&mm>gt# zW*=e5eUgVH53zp9+SxW-IN2`j7hM_K&01=G#7IXPl`%WUu2$9*tl@hxbBDX%SKFSu z>eZNDGAH*~?$uW^fnb2Bb2vjEVwH#YMVChgC~gF(3{X!bgGff|O4kwV-07BN)pZi( zDgzYz1f&$nmdph5MAo)x5;5bVKA)c2(L4bPqwSb>D$$VzWzc}=gWe)MM)f2J%Y#+E zLr>c2Nr9e32myp8mn*q3CIs_QC?tFh`@G~5E&AP7eFwDU~&iygfWgA`rQNPBWuEN9pXoW zz-ht2C!XS&*H$1yr%;#~4>|xLWU;0 z45tKfBCRK8>+$#2(|Q(R$dHB76hhx%y=!Wki{);c4Og?Jo<}Z?bz=r4(UiQvDM9@W z4TQ+vTdzi_o`mzZ`GiB?zh3vS8wf=y8kz*M?|r{4@(y<{VXxu)y)2$k-acU<6cVuz zGZoVJF+QJf77*_>l_!J_?{t@?MG;{A={=MWy=N>SIN^6=@;eY$Q5BL37q>8gxvCi~ zM^H}p)7FaFhT3|ucDFqeTC1KrE_P~Y)qqae_uE!N0i^4ipbHZ;fcuIOj~Dc=l6X8s zZd-=IAjE~ujB_XKP)AT_U~E|g+khRob_QEgNCh8+jeH0Pg|&S4EFbEpfuVq>GX)R1 zgrE@qjbnXW-A5sP`>bmUy;tAzzJ@kwM0(s{JECT*y|bli+O5UY-44)c0#xl2f((RO z*JBh&x~^DCgmw5`h#YbSwqC_Za@1c+^k-_w{Rr*nJ38nJXVcs_m)0zFeGXw=plcWSe3AI3lwm{Kh zn(F29e)+IAz3kKHIYUrDXryk_(5J~s){a8}P>8nphy?8vl2TkjDWTG+kQ*c*T+P|a zYd3+#M*&QfPdEsmQV|g}5tI^U6~HW@R__Odz$Ki^P$}Us%0bvj4-_iEl8AsdvzV?k ziy>?&pjnr}kv7ZnRT>adT}~QF^LPfdu6%CdR+@>A@$AvOX9@-S)G2qI4KR~zw(vbT z1R6#1Ai8uFncAt4NY_yWs2`d!cnqjO{KC{I#7eHKKr9a_p;A==QpSssui~8|5lJF= zzzGv2Ocd~>r3#h-k7?2f@{~1V0{SX1@42}(84Tt?*`B}&69p{kJcHu905_8XE0_%w zAri;dr0LS>#mQb%A0{x-zR!JF*@)@D5h~#Qu^ZR6b8lO9QbMI_W}lW)1u+gLAgEd; z5<;RwK>>v_{X&QUPFSY@FqgDFO+0Et2YQJuiAJn6EK;-r?g=k7x*0~5)2N`X;* zH63TJmu@dYVM27M)1v&pqp460rUN-P$K7t#5am`XA}aS;mrk5iu+Vi)^hN~(dU0#U zfsNvE7L2V3DL#53-8O0>_2aZUyzzL5tfAAB4n}2Xh?-qfuc;Ea=21_Q0Y!ov5RoXQ zNPsgv4xxJ~Fe(gGWiZi6k_@;kcRtg1AXkqv2V3h(70ODb2Wea7I8$^@8;)nD>ceBy ze#jbeuA%shPs_qevF}0^2P_+x1PC|YgT7uU3PG?=AG?l2VSN4Lp$)grdOPms@tP=B z%OxC3iv61h#r}^n(D^5lbR4uZZgGXin5g2uFDbFnb*(g%bpVyL8uF#WOk#x%!H4=* z2O~#@{aX4E7fdNJD;WoIS%gY`A(N~FS2WtzX$NbS?)z{y;v$Yj*VUTscW$=VShwQK zLTXs4)@x!8rn*k)P8s0qR0iV+CwafA638pl0+-YS54v;x4$Egy?q*95eh>T_o zjiEYb9pu!~OXxJ&Y6@z&u_^l0f^zhGwIVi}u%^U?d^eNevWvpAYR&Xuop#x3d#|*? zq!s>r6jKHvKnBp%IgsJ?X8d@-f|TO4jE{r(sZ=qx;CQO%`SW>zAp^+iaSTJk_%xx4 zANOkSiHoN41V%ThQIRm4=Uqyy`f;Y1CyU|odZUDF6zpMBGX z12>)aa5mGp5$r{&18ucGpB4j21Xd8(`x=AJESWLF7XJBX9I1mCM_j^ui$T9&p|uV^ zAADns5W<~Il1{EFGLg}1C`O*!&*VJa))1o zvo2f9ckY!(>y^u9+3+lwjdqOAA&~jM^x+Witq%I_^@{QRzQ^zPwtd3~g|P3c16Cn6 z76>~O|NJBzLW$=Y&2q-$m~bnE5KbY4-*hs3#a!ckZ``IbqZN2HtR>4EW=SKy)~t4Z z?AR$=kL2qvsKtHA%`)C>bkO&PjT6TR%#p}A0^^Z{AyWvNL49a9z^s#uyYA$MkK+al z4-^7SZ{M>JIFHh8265uwWYnB4pKUrZKf!HKC>=Qcro!e%S381GtY{4^OP8uu)iii> zgA;euYuyT`Hkz(~50GDl}(82$|FBn3Abg< z6>W0cCpWDyZmgW91mYNhSxoocI9{=o;KM+UY~z}#gd_x>0K^~S5RR|>@hCVReh7i{ z+ZanBtSh|%SMdk8^9A1u#f0QN){;C%6Pj^4PQo-KbDZBR(-&@qE90)KrQoVQxNVcM zcGg4}cnbWR=t2n1IHl#sfd%=MJMZyK;8H-RX`ZtZR0zblh!}~FBjH<)2gf<)9Gfxv zP;QC%&jL8#HjY(!Jnpy&sj-x8GfRo_Z_ByzVSo%Mg|hgx#R;{kEL|D1w7JV9CB|x$ z(saqsC-^vi=gY#I&*PLBO$oRY?;F0{aWt^xi*UJQslQMHmYH(~D8aeopc49qFUvib zG#VeX6mTclakf(UCKXfKmH%xj^rU+p@2gi;o?w%O7Ur3IJ68-+>Pbp74QYoZ_%!ma zYq@iocU{dtpAWtnQh>d&jq;w4ETmBL7)u@__&Aa;%gKLmi~Pp}kOUuW#6t@6{PW{| z=6Gc~9yM>zZ>8|BrPTKqZl?6bbaHv3Dana#z_0Zy?Nr>iLCVb} zs1*j>i;3LCMlG1F{N+2wC*$~%ipLL<{g)VA-QaT6@qJ?Uv`LBaW|T5bIUq(FYdbYF zEy#gW7=V))(Dx0$4Ukl0A^-UY*B=5T#c{P3e`;Y_5D+5+etxFO0?5k`z$e^_+Dr5Pr2$@*wBG%njxmfI1oVB;bm}K9YIZ947&O9d}!_UtT*0t0^j0nK; z;65{tF}4B!{qH<8)kp_cIBCH-D41DW77M7j1>na5;GiJX!s~Tlw)6AjT-E|aTm^uC zoCSKAqq-rvv6Gy*f|95By0z++}* z0mEPcAvj!9-^0uQ=YLEL$ezLw5ZeZ<>%fRMU|ls}-w`{{r5KilVtD`OKU9MRv}&p4 z(#mQ7#apZpF~ABD0;b;ry5H2`)J0kTzKp|c;AH_{Ct@h#<;ZNFg=?xim^M}(H;p>; zda>PEvlyJq0eCzmni1E49Puf0-Qj>5-tWg_+u-n@9AFX1Y!28Yp#2Db!V&J}Qt1f^ zw1AM!1p&4DSVXG^+7ALMHCP0TnFTEMWRs|%4Mv~g8_`VxCsa4Ib%I@)v)V2;;(!PwFRq?t*@WUJO)%PN zm#iHlei(sN=Uj7UhjJ9rPwQOTikApYMs7SVITx#xX8 zHF3FMjiV*I*}dfLi;K;ui}Q&en}xN*uy)$jjKe~DP=$vhAA$%Zo7pxwP!CxSria#H z7=e(&VGzOyBzsxPY=_?TkSbDLl0sdyLQ}MIS&I(2sfHWxW>8g4HJe%2JlAv2Vj6~x zGC~kBO9Y4iG~px|C=1)nBp7J2mIEUgViBAAG$R-yEt@Qzw!lrYu_J&Su$$KqM!>@u zk|Pje5!HwEwPNHuO);&3FvKhd9%B*aLWn>}*JRsj(oj?_hS*=@FeFFh!sa-+sODHU z$Z{@LQ_pgeB}%ffCQfh&L2-gRrw~Rss)7+YM3cQE*$AQ>mj7k#+?JcijUbHF*52mE zk6~FdLy5FZ>R`S9LxnwqVFMgN5M`?>TS@)jPanG315Gp9VZe+Cp~Va9Um&o*Aw~>? z5im6nB?K|C=?A<&mmlSN#bCs!QA7zMAg=h$N5>FR;zU2}sJ2UxMiN9bCXb=51=XDx zD$N{GGnq;>1l(iCm|#n)bW4@2vAD;A*6C8yzPtFKp_P_6C<B}I zkRdXb3;`ia5}911ytOg4kC=8L*eN9|?RrJ<1@*q*Ml;)DanB|1b%E$klS|EfX*tYm zPgF04YzoNt0vV+tIAVQIUBnX2DmT9SWnjsc5;&LD{h-@$&k6kvHJmO9vDz_TK4l02QC|gmrO}2u< z`xqcU*kak5t5rlkB4;7CdO~hZc~6@mU_8RrXwxY2IU!$XQ(F)SCSs4H8Uj0)F9hZS zX_|;!E;DjI&xnT2=Uqbt8sgn~rfjR}mdTul5Me^7+B$dU5NTVVGY-MR8@V0QZd^ByU-9HT{SECC^$#DyVX6j4ShATS7ofB&8St0GO) zfzii>uh0a;17b@j*!L}7W(Y8X$iBu9Fdi9aWVfT*-&7lpfFa-rL*|?b^i>>9f_Ur6 z+|i(c+LYT59w3-J9AAcPIKFm7K7z?@hn0C-$@LQ#RNPQ?T?Yn{!Hs6J(gXtpVnc0i zxM69iZHAC2+h&H4rdN^ccB{yCt4uFGk4Q;vGXxwVYsyiX&F1Y*R8eFABM2BnzyMLX zX&R_aN60>F;fNh#L=hQKhJfL45~OW8Rwy?sH+F6;<&J(jEiPk-SR(8Ji4fc^ZMdy; z>q_gKfd~VHJ5Oaci6Nl2#?(dChD-O@hC~Ek5lCc02w((p43O>;)$XZwh-$+T&}M6n zz{4Wu2r{A{&gHE!y)uH(5qmm9JnK56+$WR9(+ZoJzY-^p`*@}A@CIk!~WR<<$ID+Yn=_7-eGOaSV zuh|juRIxtU6diH9P5AkYQ8su6n>A(5#stS~)DmpZ4udW5s56un$Z^1o@tHQ8Iy0XyADhvYU}%Ev5Kgza?1cf zGRgfK8N4nRGT7KJn2j=${E&P4jh)Z9(WDX^2FXYK;gk;eM`W&7Fu|C{m~UfRy-sGE zD0d6F3n@`al8=XpWP?NJkLumI83k`E1IV9Rg03>LV~k5iE}i%KJgxlX=^_%77YuS% zm?>g~QAq0U$N*~F4$wGCzMuw~)W%EI4mcXiPD`2I7=Z#HWg25fW6}#Ha)*W7BYx9r ziBDkw-ENX3#$1#E1Sa~1{(DCR;6Kq5XXq_*tKKqPgs~_&7UG7HH2ocAF1qS%*|Ab@ zX|vg~>Xc#;o1R-jAGeThE4^4tyS=n6rty<2V{0WmQ7|!p@NEkuF@W7?1G%xLn3K3i z(8{+1OMux514x-p89-nZlF#m+FC=e_qTJ@20eZ{zRBjoYnQ!O`VH7G{Xm`&O=9@fA z`iFUgZx@hWNErz(i96N1i+V%w<9Jq6?C=5vCZ0+fH3h!4d7<=S`(#});-}CRBNuRo z0~l_u!HoIp+Mpxkj3Y>x3Hp>bbob;A@Sc{j0;z8hdq_`NL<2h5gZYC(XM;`($@9k1 z6T^Vd2H1++&>O#F`6hAV=>UNNL{BILbIXMck{?paMT-E@yK#CK1ILF6D>JzT@$(%4 zNtp1+K~uz|5KN&xD>&BV;2l5%eAu-!q8ZIKB5O zH-2>MDz@7hik}f7o@g3E_!BVqAbJ9N(>RmH&^tP00ns?$24%*{pg991OlH03#F^+v ziKEb`#S$kKWIA9}O?tC2=fMPe+oR=bir}Dm1KCTWx`nfBoTr}>aubS=CMS^0k*0Y7 zO|fpCfV_}fPGxbJN%ZzTp^?zrTLBt#2zq1hJh>&=#O?9IXG9FRnGO!>0eyT#D425` zgs+q7U2;wd`t-S^vnoO|r2UBbGQsh7!5>ZV0u;s@wu{*LX}OT^oAZS;sIIehGDMmn zP*|~_0f`j=bqXB>0;O_yA~%}~$PK+Oms6}NKuHD)1S)=EK$r7*7{oaestWZXC?t9Z z)w?h1eY-79@u|?L(1$wbqR>{MZG<3rAt{(Sk`$oi_o2|JnPdKvIi!OqfJ%l{K4Xq| z&mGId2}a&`m{JhRM{mlLRdO8^Ch`6D7~2Kt3h1iPC=e*95CBczwL;oq zF9(XI&ZRhtm`%eF8}SE%Yj56yVhJj>c+lFw7Rh;U(CCwJzJEvy2#orflIAB;fHtz` zOY{~m&w39Np$lO^LhbMZB-AFMI#7Vx+ij*|um{z9b3BSGRPPh?K6+OiK>;Eaz4NZr zPN`2)53_=T(>spBm`M}GJ8aLso5QH_w%{=)A6dcnzt$|UHb{E|P!h4AM7ErI1J&V0 zYIenTOTC+hdc#-KUmOO>j|z3UL<*2mkkSOFD^&2C3a;LHlKNg!fF26Yu#nvGR6eqp zPJl=;2juh-2aP*@=ouwagPu{|jS4IcbVbb8K=;V{KvoYPe@UrvjMPWmIgkPt)D>bH znYhsv)Ek2DjcOzH&p$>fR;FN{zEQ#76TvSk_?ChjwewVPlrzsl@ZDouw9inMJYO@# zNs}H@bkcAhRVWPDY(dP@K!)!06}d)MY!mATrEa9Oe^4buz@0Wxa=Y&Lae)~hhmd{8 zOdS)dBLysab^xa4QR-P+?7c1a3DuJFneukk9Pnw;QgA2^%G?90BLyr{_!+#%d=R7q z$sbb=c1)2FP+yP=Rx5~NI0&Vk!7bjJvRqKgngtoXpoX8Hu2Us*TOgN2@B!Zp^!B#+ z`Z@yZx+#@F3AVTxs4q|}1m7#Q0rjQS@TA9*A=3G{=+^s!7gGust1IsFqIOUT+6JI8 zuv&qYfs_u~D@<7P4eaM90Q<%p?pa9+J|u$oiQqrL;<1l~lZY=@a`5seP)7LpshR7c0ctp{) zDj-wb$|NY>LGgx)d#t~UeRzygK5vY1iJi*W5HTi3IanaM$A-IDM=U$9P)m_KSS=8n zfKYlX^H~g^&09N6g;wzlNda>k; zGrOdUGw7fSS9j2}VX&5SPFraW&jqgc^VWwg02@Qc-BYHLtNTBCE38R3Z&#&p93(k=VQ@#|AMqeUGk?qbSZntNm-4JC%xg#R`5n$^9a^Q z4^4FUv=OX+S#&vmY46({c7X)h5$gqCl-z-dhl*ws$;;lTopF!y1r%k15$X$+MEimwasbe9cF55S&Pt2iG(Yerpas9{>N9fqk+*gvFoJyWoG_Iq`N}9YQ&dNY%j!oGdUUO%TG&#KAGR?19^UvzP zJXY#9N-yaWp*mM6`udQemcjSAdDX^7mjw;Tfz=Diqc88WzP70OrmXoo8x^Jn``ub} z)ZIbSZgje%e3mF@N5||S`R07YJH0Sj!lF)LpW+H#HgZb#Bmt%^{%Xxhw)e=+8LsY* zwh}U{eDsRw^~q9l+**4?GTE$WZ33Gzd{K0g z`&Fc$81?iho=O8Nm!z73lwL__?us@euSx>-WOzUVjYU2ydN#4FVqGMVToE21U$h6w z!IM5cNcus*!)9@0Fcdrq)RDm{$ts1#s;}8tx&ZB5>+%7T^$gI))vI!&`$%}oNKB7{ zJ$6pYlIZoE;S>T&@*Sjk?#ba&4w`lTXqQ?B_9*Pm0yrzr*rWg*Sh=uf8$b%m&a`Te zvgqC(<%^c@^s?x6CzUVi;-l^luey8asomatVP)kH@V%l5q%AHVlU$ox^ykGhq->ecz;10)P{iNb>Ip^~gs*`4(uSEFC- zYCj+OFcP!)6;5o>q6o8Xf+k6`X8Z9 zSYwbnS`VA-W@j13){OOgwxCj%vPx%P%3{@{tX6|ZyNC`MS{(&t)w{Yu zfP9N_~+IHaLSgv}TZ^>fg_)UQUou zN)QOpww$qg6KJwyEDD9bJ^Wv@(`@-c*3GDHGfFgERMQ(2g4V@9^3dZ??u-XY9| zyiNDhfDWOXUSyq=71>v_TW^taGWa9q%<|J2k`ipk>XUtU-i-5^n!jT6rza@onNkLm zo$TRv?4QYA9!Wk$AZ1}7oQucL`tS%|$wk}E=5tYf2C{(3p2!{|n|I!WDoH8J!LZ&U ztld}3zCK0#Oezfo4v+evS??!k8CZa^0ZR+gycP#+ESt~lSv(fruUq7;Y7v!vT{3iJ zTe1rG^wXg{Xx#8v5hHbv6wWQr>K>&2a{ZSUU`|Q)p1$p#;T_@gLUzLL!h{pqk0sd; zlpS!%PmG*uj8MuaJrd}VTIQ5Lv;7F|(dKuf*Aj7huZHvfFvY?)EDDu?8Me zDa$$X{fDrhA3jKElGovo!)_?#NfNB@%xg?`qyLnZ6e%;=9o#*J_azwFP`=&k*-#G> z&<=J|R_^yoI6RvqeEg0F2Y18Q)1jx5?jeZmAsId;lf&Zz22EIL!U|EzvPs&NCTSm; zB$e_?Dc2uEOZ7pf0zz+m$2ey$Ia$Ce}syCX9k1jGYiyxrAfT*MjK3;@YDDE zHrM@^mU1`zT9<$}m~>Y@X9%sr7vdqXz=T?P*-0h$sgnM|IqD9$tUGCiN#~X--|u@U zSsMx+;gk+_m()gxduBJI`*m4DdRz+6!>D_Fw>WWvQ_?-x@YDIn6-YLsE7A~nv>9fSs`%*lVCr*0DceOj7VS@9hye0{ao-U(w(=_*O68I>KmDawsW^L{0 zo>Ds9A!V-nU(#!C__p~=dQ&?*xCiRi&`|7uBAxu}O5`7d>auGZmDt`|91aInKH%jm zYg1CC^h!cXue%BFX$tRY0ZCVHc*eu3Fk$qRY*Ll7o)23`*Ruyn<;KVaK}tLE$Uo(? zo=5o?*-o_X2paj!?^*fao^+DN+E>=>tU(iZG;yH|H+*yVhX3#M`VU^9tHS#<$>}Gh z9KG-f?rGxpXvI&I(%*F*+UYKjnr}JX-Pf98AvD>&>C7M-9Qh}3Zi3bK*u2pjiE;<8zBq6-{PZIDTlIe zp6pEPKII0}*q{k-p7@wp2u;uvEYV6>@<%$wlO6<%?`-8fYo4TaB~`#{>r!*HHsC!< zJcMKcWmw;@*B>4~JT7VxR$UQXE@(2?2n4=BzH>dXHn}4C!x1I@3=J_xXcZ@Fteg-4 z2iq;40n-@h??$aD-lSk$3Sv`m_7v0Hfv?VZZ9ai!q!BcR=$O78`zT>tIR?ipa<$!P~i9E2E{l> zFoKx#WMz60?ylt@~Xb?~0NZO$ky$vn!jMY-fL2gyf?(47oWCK)8cz5OLjG87m2 zus{G_8orjdlEzgWuK9Cfi9sQOX+nvHUzjCjLAqrr8hi>QbJmoe&29VC+>-RSKI9uj0+}e9HaR1RxD=$ zHG+&!q2Fbr&L#Dw7-Nb$Q>?$ONOCxNG#8SBvQ?BA*U{LZgm@~QYHE|gW&_xChgh45 zU0oWA6Z`+Y%ExliL7(ov{mKHlxP``pf8MeLH2}J7lH;I*9QMQwIU^cYpW`oLXCe^AV%W|Jse#W1O@ah0i@%$2z;%fwm7t2{1RpT!@ zF&LdXjEqsS-abpdo+(6fDky~{bOSA+KOi1Z5`D8gY6bC#=CeUV3`FVIhA};C2p?n9 z!LolH@$`frVV&h0U^hU8mKgVVIRM=;MdLz;r!e&V*`$s08(71^^H7rKw~rWRzyKKx z9_1J$p;TS+crwbV&xVo7292TFzzQZCpz5zN_UUl^(lo!m{QxAfY))AoFo5XwhGo1G z2$Thq>KRg_$@%STC~u)S725WJL_-!JE*D7wG6hHa;T!_h^(|{wLz(6mqcrKDC};J> z!KcIO7$dg`l~H<@07O&v6ASZUix=eiS}vXdKXi#W@!#NEbZpc&VvQr#ZD5T{zl*%- zAS6kNq(K=3rIJ*X1cVX%N(^A-WN4#G>7c8_gG-0uMWk>4Ctt^-k345ycyZ*f11|B< z>E!b%N<>2mL?{Q6RPsYR_yr^TErk4^VZf54{SIYC#bPk*Oz^{I9Y^q-z#XmPvYZ zU=F?ZD0C>#;xRNO&5mkG6G%pB2Bq2JQ9@OeP!(lYFbPu6Dptp?Qm-gH%RRBgaC2*V zaRfqJoMr+cVqiw!-QDe)oSRIoKi+-DU@S^c(zyv;2irqY&XSm99wq4(l1Y+Y+8WoR z%rpuI5tK?{_yPgtP}VDiT1ml%9{x1Eujq$W7XPBC1y?)=-q%nB2$qc@$tVjXokdJK zC{)fv=@R1nC~p&@b6>HmkwNL;?}#O%{6;8`EaQi?$EylW zgUK3O#JBcUlaRNMb{oXdqno{=^z6MsFp+G>&@D7c8j;fAauYKp0wnF`q!^_R!Ov}E zgrFS0LO_}jkf1DVEafVMd*GY+5;aPo?H2A2u6nL6FB=vpf-tYz%|^gDl3k9_p*&RzOSEB>%JS)n4w{YkhUJZZ-Nr!f(l~#wqEwOwrINhJN~nxT7(BtC~ zCb+_)S|gJGoVUXr2^8TJ!2zHWXUxVc*0-;G_0D?y7z^Y{dYhlOcsls5OJi-G@Oie7 z_%5U{VQ_yybCL{~G!D>`gdg-l$q;@AO8o7WS-QFS$|7?QQ(-^)jO|cRDoaACESrp5 z(|i1^$*)%zB4*$#N^yBY0D30Mz$h0Bkc1WxABd|;DiaQq;>f<%+Bh*I6lHypsIT{@ zyNjZ9X9#_&M0&v)XOs8?bWeP0LIm+7e#B&eLLGb7;U`$EUDI22t-;edJiWWunLOJh z-iqj;H-g17gYvc)%Kttk%C&_rEQ>qR{^t%-mW=Z9lx5RF^4U53oL$q}JDn+z`zT3c z*ZmHX>hUxv<3Z95q}Qp9uV+odz=tVm1)ao+fo20zV!7yrvbNyUbzY7`lH#IRSyt;r zTU`**CW*EvENtkE7o+Jv^Iq|2@H1GHq&4b#d#BQGytkLy9In*j2?+w4lm(Q?bv0oy zN`CE2QED6nvT;boln5F}1I3i+zjt#===7Ei#+R19Ao2Gd*qcb8zwu*Y4-c1RNrV`s zC28*xuwG4T@U!&oy+qo_(kI*pLit79y6;HrP$W$unGH-}K_Uhq=}QVY#VJpwrb^_*yn)BEO4pa7N{C{rxB8%XliWud@e!35G6mXMO% zC`oJ7v`$S}HHY>2$GWbq?RpQASpqXs1mIDw0a8&;CW7*J=Y(G;bXu0z31(>ujMHuD zN2ylabygV45(oP@ldiAtE+JfC=bqN3souV4NU1T&5)U0+856OiIrF$TE^_+ercCERRxrwAq}1JW8KkHzq0cS4v4CC{4N0RVLebvTP#DNYdQCp>|vA(NvSBb?93Bv5$7L z_!%Wml@w(QP4Q?Y`9~xfwmC^=fL!jLKR`2*02rJUqa#XW#mdibj%HViN_qvqQat#r zDOMS-UNoh@=btSYcUKS~{yZEo#Qcc{YS2`Nrl-OrAtAYA{Hz>)?PN^4>e6MKZkxm; z4ay6H^2VTi5R?;0>&_`XOejUENkKA6VF3_EsQ03uCiqg83Pove?ePVpxf>`~W|$j- z(p@B<3F0%eJS3KlT5Z*9t7co{wpF`rzfMdN5|ZMbSMz)zVNSa7?~f82+$qX-I7)~k znXEuB{2j7XkNN&TW^!y8Yn{mOF_BtDCdIG zkzC);6(zJnqhHGkJ1g7T1TU=>oE4iU`+{xuE1qGXb*BFcFgB_vr9C@nNp{nt_frJ0t+ zqR~~Fu0F|cP>Cf_9$DhqMo49cRbb@BdI+btU;qRo$)jWUHM4#wh92pRQEu)-7wn9mFz0 z{TdE_Gbp}({Tfwy)VS|Qi^VNb9+7O&+2xZ>Oi^|TK&Reb(##$AOD78!ciDRD4mVlT zvzJ7fNcuhVG(ce2yr4vr)1o+w6{Sa+NU~NA>S!$$VTm%}Bg+7DSs|&123%RRi155> zqs6VXgMnm0S-!NUfX|gBKqYacyDQnd{%Wj`k|ezei`(VV%5RwW+pM`~ev|ghzpM^B ztwEA?c3hbp6j$-Jc1*z@QKcU8QjSaV3os4HCH^d1QA!iUg+~dFrjHS&?_+2Kl&jS- z>Bg#cl49oAYPtkVMX+_drMX?&?XXT;tdEm2NG6oK;D6W)Nunf4ixM_uuEmQgTG!!< z9azpJKxL+JsexO(8kZsF@8v&)McO*eS9W}~AIRID$U`pn5Jw~fuLmy>9@(m=-zIS7L@XaJ_Gw!jzZ;~hz zN|Z6P<&Gvf%8@C6)s2z~&*dSmG!8$JT}km~BBAwNj4CTbzedM+!Lc7KF@)aT3Ck?y zK+fTF&TVZWm{@Wl0N15Nv-TUM(@yEt+E^)bYoyikx9EE?TBh?MZI`F_;ann-Jf$cz zlunc${?;J3yBgVIHy2KCn>z-FOfBey!KlUyKevM56xf=`0!b{hR#Q11| zvQNvt2ZX}=D#ZeZmY(#lpu*3rv zgOakODuC@FG`8qc!RaFx_QYK0~nFK8@N;py6H;VF5 zI&r|swaw!k`w?=f!`7-ssFF!FgXChs+Gm+U(m+cjb&^2&3Y5q6070qG)Ffmuke7C% zmlZD0jOhmRIFXsY;Lq<5PX%_i%GTEzcE{_0j+0 zV?4R>c=!6MC^zx4VBYLWA(2CNB_74Xjx6blG}Z;~cgKeJ(iV#x+KSTJSLj6&l8W-D zjIh!x;dfZAAjkvBNh?W@62UhX8oER38Yr(W^^m{6=tC~c8&p%@#A@k9@9r_(n2MBH429k`h& zLGm|HVuut->VL2|C!!=vIS{1CUtt1-$&#n%3#46isB-iNeg&svP|78X5|FFtlgNR~ z2rlhx773KaUU#$EJvkS=D322J>q=A!l0XT^^9G|DN2Oa^3ysx|2B?yvjIsntL{2iP z5))|xIiFFkIH`#8oG6d#X}+V$5m0Uvr9@{ISy>R2ec*uxT3qpl=4PO5jKkIVR@S^p zSm^>ZRF20%l;f?sk%S`*W*F0YQGQ?zGFGk%Ke{?(7eJY-EwP->4=6iTi8s6|&*PXe z5M?h*B(5)S5^HR8?Myz5Ec;dx@j*6F3d`odxsehi+lg4O`oJy#lnvfbH-zP1J2@F5 zN+CHIC2qm;wklOQKLm;Kjrg;^4*&0qMs|L6Rn`X$LHT4+)|UkR3Fu03tBp(k;DKf4 zSumyr8j!3l7W`Wp`Yr&JO+cv|szGwSJ~^q?l0#v@-&SQEWulHRIZBQC_&?J#h zpAGUWT6Qq^5M}F{pg)sDLq#bd^^c5n4S>+yOs{ezX$(kotqg1^nR4)~yzciqdEj;@ zFZtzqMY`K-mKW5Zk&0e%HUrAbqg6SBBI99I*^ZKNam=t0ST=zrGs#N+(U*dv69`L$ z<{!r2O3Q+^AJMduo5`wbR+2!uSCpZ)dzGZd2ar4tr3TsYM=nO@Wt2m0hVm4utjJQw zjpI;KmP{qPR|P(o^vem>%xN<3$=Z;lRh=XY{}KCuF*&mj=&xxJ+LIG?BaLCR9*9z- zm83`cXC38?D3QQAlw5J*X6}$Pye`gg)P|BQbuW%CD3Hf!6^8A$$Usbm9VU~MW#=M) z4VbIkdP46Bff$meR6(r|5T$%OmcTSHV$D#-#Fvtr;tgseKqblJRC$wBX;Jcbu$B>! z!%!+qqQouY?s205OSv?P^1HBa$h=?X>X>D%$kqrKJtAawPYUv z$p?xOBt1%!tfOSkL7xvcYF(PRIs`Kzz$NY(SyGjQQ6h#;0XzL%G>o!a3B6`T4q|2L z*LYov!&Q7!h$Q-kBpqR_IzS&8P}W;+x2j8NeAgg0s?Xh+C@Z3@pq$8&P=4_!^+4Pt zlJ=h6oN=mw--g1wP7x@{vWk*%K>3R(&B~yXPZmz-qUBF55lah^@et8OB(b)Bm0nTO z6{@?O!&FR^yYV8cBIha#LT6r-y{a4$rDbVUX;5O?bSPEhzcB}Nj2xTIo+!6OX_p2* zp>%5l+Y(#QlU;*ao!}#%c#o5ktpjUN4#el6NZ)0_+i!tCZjZ~id>cyGl!Z$#;2DVHRa#=_tjo@G63vYfI@ zmh~kfSVoc(B)KL@ngQtsB+6RTM?ELm1CKo_lEa=z{P^*%GbR$z1DBPFG*tmxP`(!& zT?a5+-}gt9C{b36Xu+;LExrh%_p*!F)q7tFQ4+l+(W963tZ2cqqLWpkw-m7iAx%wT ziRc^A%g_Hm^Jd=6n|bA)d+#~-o%8v8E?8XCt*V_Xr`kk4@)%@)`x_Y&d^-*z86(>i zbq!;2Wbx*f?>zzHhIJ--$p|D&qkh#Pp2z zJthbLSh8*ohUEYKde*tM1v6}DiT%)Lw1$Mh;FF)>7){%$!0jJmL{Xi?ZC~8LmBHzm z>}%JDe*!nGa&Pw&*kN!L@W~#FfXLXTOQ!4>Eq?hadt@nB@|G+1^1om=9ZU=5ByGrp z%=ty`G|q{u?~8z~9zamQkbHWt06F=mv6Y`R{NqBiz++zJmfN)D6|1n5Ch$E9v&2@T z%Zm2hzN*f$ZBJR+H@G(&;}DW;4kr@*+wY!0eGxd-Smv0 z(_wRYm>HDp@(?!L8qp|(=tH=? zq;K<$uaNf?4#3z-Wew8VcpVGQ9p_a@D9@C$=Qm@<#O2t59E)GJM6v{7X z^3#VY?Y|yfAK-+5hW}s)bJedL{_=Qbwmr5y6iL#WB&12;huKytJ^F(p9E2QKWK1Og z=)3~6sWhE^_<8t5xvbZYn#b-iEl)av!i%bcF$>qS=THhAuE&82?#a5ClV@*oJd(-d zT;MhiLV`TR`~2`6^IOr3qs)4EHoE@YQ=KG?sF_^3ON$;l7^qpl3|DV+Rg*Er7a{hssR}s65!N zpZ*+}vh#`#_Lxyj8kKm}@{asT(YwrrYE3!*QeFSd(5QB^2XK0EllBvW@9Oy%UBMD+ zlYA>sLIi<6$8Y>=M+LVab>=2HCGWj&&ZWM<0%E@Pk?fwr~AE9iZu zSBwt2L&K+O-1zrJ!9`FPB~TNIW&<~#)lueLQ=}Q*dWSV~zR4FI6nIT#C5Ib^5=Hr0 zfVyx@B`v`qzwRnTvV`$3C&TXy>>q5(i0(p>I~9kh_L43$3}*rJ$p2Ce;w|wdj6Pz) zT;?~7)~9ARpeV}gYPrfnWt2lRl0FgU%@g@rJHulwP~y^M)msa^&0zci>ESndaQ zI}G$%T4;Z9FQXg@)Eq8slyf0?rT6e=S;Cl1+gaOHO2%>nwf0*w-oFSYl5xf#6;cA~ zfZ<6=E}QcNu}WLHqufLsXv3Xod`&4iz?}VJxx6HSimgb(tR?jBd@e1Tyl#n$7l&Eo zj!;lSJE+8vL{w>okZF$x8wsB=g@BOsM=#4p$xaxGNTM(#=XwGZ(YIZDQ@-Hhhp;tY z>}z{~*GQ}9oxQlP@n#F7dc(y(x`#&z9q6A9$|-Dh&z@HY#6*w$Ft>pDGg?@RNpmq4 z&s_(hmT)lcn166zMQL!_`yu+{(D?R8=FG17v$N;<@O%$ukdy*Q!Eus?5nzMhgggJ& zHur(5e{8{v^PY@ZVI<3!Y|vHIAF5qPg`wdckP{MfsBbsp2uQE=HJ^Wabi~znGL$7 zMeZlJ@RForp{*`zNJ51?$~&IHIH^`0v`PD&t=-#tbB32I{Vv%(yLH z^QN5{OrydJC?2E=BaUM2Uc`kyni`-P<9d<$6nk~B*-;^` zG|Idc{v_>)mhEHd!GWM|@{iriAQpyVc91g!+HxPdO=d*)W$b7M{-Z!CaG-^!Z7vep zH2@=c?M2c$GbL8YNY}-)#8ebxh1Jcss0K)Sf#0(MgJN?P?VFtiOwYG28I{%zPnPdW z24a};H{d!q`8y!t_v<%sitIaHSO5HE`tq+?4tuE#uyt{Yg>plOiA!}RH)UKuMqDE= zi#h+y@zfUOa}}s&`LrS=<-5(58LyaNe%&nih|38i(%;D z2xe6HH;6~&uwpdDpo-U%uT9rII#B_>uaxlohd1G>*#+RTcb;&;z|c6@dp<4j&0*#Z z>KjIcPw@t|cpk7`(zn4Y=YwcLdAdr0lf$!zVj(jRrHD0vv~gJk7r_&D{|muW=02~v zY8V2yTT@r&V@^t|(cK;^M&1HyADLQuJ!RWdOK#3#?`SYhk$biajHrWZk};E6J_cU! zNvN~J-2r^7--xB_VB^h?KCwXZ5{L`&VmrE|W=!ymOF+eB3s5tj&yb(8g*Wc1dtPW! z&9WvNKp#8lj-fty?!J*0G4m}3SkLm&?u3Z5pac~Dke@5$1=vp3CP~1~&ka5=%0zmq zDeP^^UT2GWHhCE3qmn$X3C6|Np79G29V>P&DGl+j(@jmkMVZauMvDpvuX8ez7Y{5t zyESz4Le+9ke(eWz&tiB4Z@n1PQ7W$J7L=}U?heI^ig<|f5hYX-%c)$pZ4zI0DSMx7k4w}>vi6C}8! z!cxjk)V5AsZjuo#-Rx40??$?IPDuxs;q9gQWdIMFA6KUXo?%~Z9cd=m2^B1ixSs2@ zq`>h4jYR%e5kF~#>O#{nY2xO<@yAz-pB{rnotsfhuY9C@C#>77guyAB0%6QGn5slp zwBv+J-12Di?`T`g!ls2Ens*8$Lf@Zr%T5*dSLegPDz|Ff55)Ux4{I$R$pNk|=qpAtQ0HK37fY;zB zQ<^~ffERa=Cf7$^u-GzyBOJs4Eca9wM}MVerzO+o+kM5wW?X!Ev50N5MDkjxLBD=O z8lxD3!O_ofg}$apG)(u>+qI4^4{EdboazO3%e^muj`%Mwjtj1RxTS@4@wzp93n5D1 z$KYi{$=%Xm7xA}lK`qsJ1_GR#xccph6ow)@ZtI#X?FL=enQOOQLK65RoN_N}-@>8k zu9y*DQ~@jgN^lY|9U+SJG!#Y2!o%2~=R?bNzcVL6YT^NIKspbaN#k`n#NHdgU2jtSZS3+OOPC(yMC@l)Pw5-p-WY{@B|U$hAMLDZPLy5*PHp|FB+e}LC(s}1AvJ)4L? z4|?#$ZA4c5Mv{U+%-a~nmdG82drd7}pKc1!JyO9L!3-;r0xjbC9(K9!>oIpx%EN2& zkL%AKq?`z5yv5jJ=yD9gNp5*t>fy)q*fd!^v+_^S7)WA>!D4v;HiWa&Uyb;x(tQk5 zud-*)4P>vsp+X@n16u#qSO9-h&P6Rc;HEe3>?}gZ0ilt?yVWSJ=g_pK8%;afTDvZO z|7n3kF#!MYOg%I>8UmF^fK_Pl*S$L`QO>w)YI&2xWd|>7-Vn2FlTvd;B-3jUrK9i7 znk@i%xUU7}3x<@DiGnQNsj$6V12M~Lz3PkgPa$W1{q+uRPTVIY@Iq27RCVG}W^8Sy z)MvNT!!KPPUeU`j02~`^v!Ta^FzdjJA z*4oq4{(B{1T;M&q-UdsF@SH9Odxf{2;V->r`(^l1KZ_GEQ_)>z=D+@XyQ*exQd-*LnQ%PT?RBDpT&95Uj=E4`XeBCy8r zG>+mk+op=4__PT63?)++Zf~DAx?V)R)l==r*Av_Z=V5z5$Cn8YKC~U^W!XukcIO(P z-19~C(SNs@IPxBUQr?O^w~&fRmX#QxfZ0%yl$x%gJVhSxvW1A)ftvKFnN_U+jbpsK zTHBY|iwLYC6Ujat4un#{#*3o0Y9*N64X zu2(;DkA~dTY!Z!kttxxkqf!Q4jZGb(u}{j9CJ!e{nDC)B`j+pjIqrhpXEnQa|E$L$ zzhYaPoFwdQ~u9I=bXPd+#h!bh{DNLmb~?t+|R9Qc?!7_(xUa zM~CdVV;&~=XGMh}xut*Z9x0 z{1H@WwkUC4qmz^D(dHqN&(kCa%sOv-ZI$$&(mj`%yp^a22QH!1&+!{RL9=aT|A~Js z$X1Sff~3}YNfjR5GEDW=$&T(HX8%dms*{=eFAa2uadfNgY%2M877q7V5tP+2(^Q7) z$vgH$cZiDTp>84xW_!QD+)nPmIYIwZ;|kN}by3u&qvZ#`oD(rsd7E1iDg_f}FN+};j+0)uxMCLhE@pUlKl*__8j2Qt{K)z&Tb`p&gd z5$RINPuHLM8TxDpeN46Dm4HEqA3vfcJw;h9!0Jcgw$4AK`!w%2a3YMQnh^7`ck6VG z^bXlUY(kT$)RNq4_^Lwv_br3lfSUV z6Hozi(=XXbH{Ks^8Wwt4?q)VZE0$ZqWC(djL%ge)kP> zv)n@BuC*=?7I2gV+fSsmk|~MST8H`!X*kJ}|AOFt?=3DmZFnXHbJbZ-X&;#gHD_O@ zwwGgU!H`}#jvxCH5#kPBUi3ymOMVk%H9UHCu5t8EykhvO$xs?7D_${LzO-=;5Pb#E zj`TdO0NWFB;t?d)blF4^J}nptsvxng)cBhNSWR~x{`TWt0GE@!-F4&p`W?OPUUF}O8*Y{+0;YT~%E!B(720r5hsPjRp-*Qv_;cS#~E~`0Q_EL$pU*7Cu7(sIUkRcikm;iStG=`LH>sg?| zT{p^kH5CI{Onq>Sot9j){>FIGJub?SO8tU@baN5YbX8BKg*SMIXELLD9a6rzBi;Ws z4jm!(S1{+LqEJKUszV*^GA)(qDa+(B}MM;OSX3|!QFOzZVC*9 zK^L>L@3gdi_@dsElk->(+QIqnchg$X-%nr5?GC>&NzWzlj8PjmPcEED#@U{&BRd<8 z{&hVbGIQ7CM30lDT!uSjRDEx;S6F~0M8Mvze(GT60_!HLFl!r4{*snEt69QTzv7&5 zG;J@jf$gOxC0*&LIGZ%r=vWKvx$T_feaLr_S>XE@`I%*@>faZE5i@b(&C_X{@O6~H z72?2AXU{2cJsm8KU+NJJYRgJ1|Fp%|1xS4E>)TSdUp!N&`c)?RU6hW|Cp_Wp>GtvX z(d&OEic9(Zvt6GFGIsB*zafo~;#P)`6a#Sqwx^=D_K8sjM$T==k1?*Ou@%KK>455+ zr*QR9nJx8K&D6x)R!rM4KYU}`7Wrhk_PeFH)lOukK~36is{z^GwDM}b!_skQymLZ0 zJl`-lpj}D16HvQwK)phgPdzFm5Fged;P=k+=A2+F!NXfu%&s{$VU%b|`XR(`R;zF^ z!I$t#BW24d@EtMjxYll8aYx*(cm1Ruq@NqVxu`rrew6jh69uUro4(M^n}AlFpukDo zi2;gXgqg$)GUbGPIrsSQi|6(;*;F(50y;{ptIrklck^z@Qf9m0wB(ZaN5)FG@1f_i zih17jME>wF>R+mx!iW%Aa{y+-}V_SVg(irytT*%+E znytTfG`2*Exda+9rQb55B`L>Db`SM60l^38CHDQ-vW0$7&!7Bc}%Kk1VgMVbDu;L zwgMhZ_(Tov*t-6;V?Y=}P^-)7n2_@bP{?6ih?9JEukcJKyV&-g&}v9`C5rG}Jl}KJ zPv_{9qiH~+1GZlGjG9%a6~Y0Q&8t z=i_o_R^?FjRP|+9;>b82T9_3B!bC!w*qplwlk*Z9I@8)Z4inO=w!@+lk5)pNeAV4%`S@1m zn@q^QxAH_@*swEsu4COd*2&XZM9d>PnCsdbL{*TPHGn%$Gv zk$lRtiT%a_<*K3TE%q=2;#oaD9rQjQLIc}%oytA|JZ+1lCXbE7uN zrV(JTa#Rt9WY9T%hDR!J!3xri-I@iJufmik$9X3qWt|(1mx^@5Z-QILqZrM6V2M=> z)2#@s!eZ1b4&Uz}OHU2A?+#)$J49ljtI?12SBoTah25&x<8u0!ktGsb<9 zeR22bz53zdxuNhzWl64QX{MdwfA zEQ%YDkkQG~qTTYM&~^d=ps#2rSb!#8viIEfTZi-g(8S?!yKmjbDfPT9(5EYFuAa6^0X5+@q)(Dn$m@LEwB&orP3Iewp=7YpdCY|tj>6C?2{eVpp)X= zqs|$!45uYd<%_OGDy{!?R{*Nk{8MiFL)dDUL$a67fDi2ib(WeQo%}BjLHBTCt1NFh00B_uCHk8{JS23&eXqku;E1ISD~0n&AA_|-8^^> z3AHv!Rk$8}X4=mLTKS%H^Q?|#zU#s4PhwYgIb*eiE8-)=02#G#g@!%f1+u36Y-D*j z!f&R~^)ptJXSM+zcLOaJd?P|NzhRCUFS3g4O?;ZW@2nw3bop-i^%SEomHT_v_Cr2i zZ~F3xSA^qcW@X#H*mXY98LokM()Dsi8gxRSD>IQY7y>q`wl?{u#eRuOG^XXrH{p*G`TI za*RDC&y;0L*ndo(2$s6H?`7{s=lA)^y)JZ@yw^(ot1M?%L@5*Hc`v6J0_7q0AN>V4 zMMkTAsc75zy*aH7BL-^i-Iv^t7V>U)p4`>n>iTOwVGV6BQym4qH|9%beFlbjEZ4DCe< zt;5SCsp3GTA2_D>RgsBn(RAv|pA)3E91>6Kq+$ZP#bPk8&rN4|niTw~Q8ohu_i_B1 zHA*(6d{?O%XkHAr;#cSZ5Wnhx6zlq^iy-RWl6f@zukV$(H- zx?yi!S--(pfMS|&HDmNYT{H4KDcVQ%%-1ZvX)Lb%kccL!Q^~L1p#0Ix zTxA|!PF+e!A-#$E*7QMowCg_I&?p8WNbGc$n@WhMjv$uba1lJA%wiqb9*xa`WGzdT z51?}UR|G|(lTP9&e-9*-FZ29Hxl=KgEG$LPL^HehjLmu@?!JU=SBWbYhJTiq?5bRA z*parx{v#KU*j=y#8;!$*jj;Y_#Xn!I9sW(ve>NpH)Gi|~4LytfX6QzECEhdQ@vyLs z${Kw<(Q!CxJy2^*X8SKmkqyV6c$cSUa>LZ{}NhboV=eg}*yK^ad-z_& zw#dmixpS{gPK3WKSQ>UnB)x13r|HSH`Eq4;bnEH3 zu^**;U;K<6U>Xd_L3e2zF^&k@Ay*0Lf8$X9vH!scH z3I1RH9$W+0Rg~#gJ4g8}I0Jb6c*qla+W9>%4G8x?{w~om}IO zd+*FLPcUEKoV+bM{Bq(GIE^yJdkqA{ag5e+Tb8N3d0-uN%%O zh+@w%xI0;`TGB)0%qwT5UYXRF_{B;~-=De}_X(ES`HuZ4_>J!Cr{AwVF$-X;Qbk_@tN0RPFuRUdapkau`zvSE zv5NFhHM^oNA&F7f}a1}}Z=UgS%kW7~^#XuPq zm|6Z-y^bP0aG~Y(-**_qI)muz^lPu6Pt~^8k_F-W$1=^gvm9xozm{~3+^Qzd=kZ(2 zBuI@Tlkrj`u}Nu{?{^Q+iodAtXz;i$R`hI=i7>_3tP+)U#fcSY<{GIInU-FM9Yz!{ zFg(4!p-Yjzx8MM$W$f*xS>GAECV1=kG4qSADRoN9l9;p2Q_wZ1h=|S=?DBbh8~iWa zp0q!IC9lVrNu=DgWbM8--FVo8dr!Zv)GHsb@~r3ilGUI;BxeG5Pf0ZvNyEW=QFf*h z^3P+PQ%fCXW9Ily>u; zy19RK2{W#7DlqWEgM~YKIGT%sNo+C3pyl@)I{jAN2W5Lt#>T2%nLtwp4c|jpb{O@t zUqPg24Rhy$3oB#_X*VKv&d*UQ`*SKqYaNO2l>CIRx_9OK_wrnhhjX@NQ=o;zzh7>f zcs<6Qcoi{D_*Ic8)+ZEhe=a^P{NtV^WouwZU~-=c#mt^NvK9V}rG}_b@kwAg$AkAn z=7vz{qR|E#{;2cG7@)<})!5YH<*fl18$4tcWCZmwK*{atD(WlRzt6rIZa)RhQx>$= zTITu?w13U0DsVXW=}_*W*oFD_uCm-uLVmopzJfaRSnmSMfRj^mXn5B_J`o1b7@ED; zYdCs0`kuR_$-oXZHaG`0rkKWm+oal~X<8~dAlrimqk#a~nGMDW@u`n8{#JkJ%YgJ~ z&1!;Q+ANWn^*Wum@26#+RbwJ z&sTyDa09-lS}>$z{}H$M#Nq36X+~(zf!Kks3WGmeUx%hG8~&vSOJS>V{1>D?MmOA% zxCNTkrvXnvX^BfInWh^4g>cYg zlZe~nSZ#@&rZ7yhi0fozZ`j93A8PG)vWMXs@ED!sAHW;YqE=gkQse{O!x0mT(P@1c zu;e(k(0}qzzT7y^SIUqcEOaSwUiX!;fY?61&CJu1Irjagn&v-8zO{$CxNhmRFAtC~ zxS03QLuGb!EFARcczNh){vb?v6oMF2O1(Oqgn>G1$>O3OamCTWTVL|%2mJW&=ts-s zzc549#yRtU);6?tZRNPMz11B*aJFz}xcJQZYlXj<+AHeLf0f!B=^n)4avxTkh#1+= z(9J)P7AC+ySGGLrIf_BqG+-29(X?G<$+*|`A(e09s@8g~%JbwPnzGGyCh*jRcphH< zmoH-HbI(x3`K3kbq)luMRx>;UP#nTNC7rB$914iR*37I@&8W~cS;c2LEz8vp^!AQD zW}ZvV_Pp83^~)F7c_E%Pa*OY2^1b4q^E))($C`Ch28NE;R{s@$Le9@9gxf2)sMkZj$y_aP@zx(y;SGgP5 zdhka1PS}<7Od>B|TTUkP-<(n(4z%UhE6B>u3)bk}Sojy_p_AjblpMOiJr{Joq3~Ny zI~V0q$L;JvH3ak1w`ZKL=LOc0+-G&3FxvprftNiZBT}|)Ns_401Lm5|bo9MotG3^i zL2+M@vK;EyzMF-ahK<}{B$0By8a~%U=qY`{@Q`BmuO48(Fh5NTfFhcfb_WtMP&MKO zw#D2Dz!!?X%>JF6V~3feC00sPJ!_!f+ILRizh5L-EN}5K?4NOy)WI0lkpM6J=BCn{ zk^77rxSgX+(*`krI-w>4+gEYDLnD+YUA#v!Mv@U^G!r&5qavl^pu=o|Yx1oZ=jMf1 z(5Cejg@%9sEPvIUNW}U&_&StQD~Zepw1}Di8bR4oV|!hxKn~b1q%Z}ucZHTy3=C1cF^}0G zb<|D-4t*>()Bm3R_L02uv?pdf1=58}hN22eTg!N!@3sXJbw6A?DOz|pi3|{6yEF0u z-g9>Bq4J-I8`QZ0zM4o>#;I}!J6Z9dl(CiCPqd2Fe4soY+_ODKEyXqW`5L}G(Vbt7 z+!y#Rb|Qil)+T5wiH{gVfFU+X=VVA=L>zuO#{iDet%jOUgl1l&D1!3V#jXGM{Y&`F z5&+i`TZJz0*SCx{TLkUiy)Q((K2osea~%}|)4bZ-%k4W9Slqj%{-=?}sD80$~|OMBzet==yk zLV-VCK6PNfByfnq5HTDYE=q}JYZFSAVzqo5w_EkcWq z`nXncjZ!E?G2`Dt;YHvPZex*119W27tqYSLF$WJ3?t9+onAEWqGTWE7>ab*fUVI^r zW35f*beFK@0-gwumXz+U{g0ai{&}69k4dUi;>M|4PAqKqy>ow1R!s-K_ z|M>Gu_%8&%^Q&%7bEIQ>64(7fL}M`-KwU58Bt3v&!)U3*iN!i%;j~6|j2F0ne&V$b z&3s$8k*7`qHPtSn#QE1NClj}SUtZ9C6_zC}S<`A!e8j`Mn{MM2R7@CuJFs>RS1F%w zdwBCQJ1f&~dTODsk=#Rfo~Zn38*8xZJJ&f?mgBf{3=0E>9z7}1 z*+gJh0fT&T@ChAUN2y2sq$-pFqb-JEHEtChU>jT1u*t*+z?8Z!E8<~LVekpj+)45gW>nADN^MF#YwHM%62-CA=BY4B$Bt`{WYL#_g0IK#zPXAZQjo_wt={dOQFxp7^)?i%rKxLiMT*2Fh& zQ?T^s&a-z{>fXDW?4|#n&*~Y?3Tp$*iIN>uZ4l!9(xUhaZ531AN+xiC416e4)Hzf! zOk^N}Yc$tCmc}=|`c_aZG3FtvRCnfnOblj^-|wds?u%te++p7WE@>CD=7`GO`>Pz{ z@>qBH{3BJ#yOk@^9F^;x#N0;=54#vhwt$#L5c%}Y)gNWMv{ySzFj-1vJat?b84aCSNafIkCQa^ z@!oX$`>Uma0a2NzVze~GBPubaua~WHTD|gAFcH&NnHVo;c2|CqFC%Gi0;z4{m;t0O zNuSyXS8OG_EEzg7p_BdvE;U6T*{_sz7(w;kg4#+VFKtkSyPPZqR3{+E-azWJY!k?9Y#~F~Y8jH7ks?U} zLFncH$K?@x9I~+_SS}D<$tN|{N4Si(A7j;)q?0<(<>i}{)XErtcx^tnNx06PXKe_W zrh+!J&rq<8_-PNTG8N)DyMq5ErSNfW{9YdsI)@EvCtldD@KDR0< zE=texPJ5y{GYvfZ&!g++$ah-G#8|KgTF)yC)rTj&W=YOA|7FK_7jV~`O(b(^uLrHh zKD4Ga$5~wBxKy!2K@7l?t7_Ce3(`#KgeG3TOKx@IrbPRWC=6Db`x0wjFeO(Y6Rkjh z)*^1fV$?6QciBPXW&X&=sRmy=Ctck>D=h)GB{35`BLYNAM|U;tc)?m0205k}NSgYC*lT_CK3uC@0OBt5Ajr&|eelv6 zX6iZ!XizHEDyG1qPJ>WjI0dc`FFE}CTb2cPdZtD^A6nIi+v|4s zopAGyh&VFWAR9HDu*A6r^s&0~f`x6yyp^}W??M)TGPJ|rMjrZHLW=_*nVjExa+Mh} zq_}e#_7=F#w8(b}0*m7RZP?!z@u=jpel~`gmO^Mu8;T2E+l}@HDSDqyHnPGg^Vkx9dciv0+i5OWz!&N1i(!}htTzn4J+iNK zG}ne+xKd-#x{T@GvkxA02#gSJT_`&UY!dhq0#ZyDh20tqeeg_|F4u`IP3k=8IWNHT z^a_4-A$MWAStzAdY3BiG9v6^pdhIE*@!5N`P84h^>UA1NP5lb1R1^g<3+bjJ+n%Uk zOfOn=@(eC(L-ocOEHjEDZ-{_xBlnmXdFt*GffbUnMErqK*D* z{0cxzH{1x$n!EG3H-CvA7JdC#P9^*Lz<6huE1qA!K= zC@)%n`F(Yh_9=F}jPNvrOrdlU4dTDsfdiAHA3kPunZ2;RztIs;YOiUp$&%H2oHRe< z7=5YP099%%WOZvK@{;wUq9zlmWR~21-{?#5q+o#=a6^Y@%F9^ef=v>K-?(l*ZB!MP zA#`)FZP)Kc*A)n*aCtDeZ({v8gYb^IDkGrW(RHh9G~nN?4#K|QMn5C6o=9ooPH?o3 zh@XFjo{_^NV_|27@feLQ-^f_;fm$RvO(e;w4Q2Mi>?!drBV&wWa^u4y;mq)cBQatG z@UhdZEoeRK!M}UeTFDtXmvXL=NQ+wegX~??%!m@*Z*8xPuOE6v;gbR|V%%6hjs-?U zRB^Muk_xdLxvY|SaHBt3Ru`;$OAlKKXZnwm6kpU~6TBrb^AMd{{3Qt7xeCj53w$28 z!yNUwogjj^{9cpHg2JF7jVkdg2Yc`7xoKq<$NNX+kT);TSVI$mD0hT6g!ll43ei18 zfI?1b+ss|BYx5zKzj&j`RS#3yAn1+&K8oz-OM5kD3)e_f?}KVQ3rlZYQ3 z`i6$W{_?C)E?)!3JwOfv@M| z=C^(Ej?{R#`Zzne?Td3!B1@X@)k&x1Kh4=;goey6)31>hHBVL{eC@)va$HYqA zzMxDgH}3OE)$(7*EaED*;C-rb_zOU224tKc-N2Q=gon(&^u0>ep^}#yAo8_4(dnLh zw05C9aV%oHR3IDb}7@;eE@Mt(L9=&{Z+X zXgq{10XkJQXs{qsf3Xl~y;pu?Gbk%ci+yee;cdpQ4T zFVfI|1>Mw54>QOQ=}#`e(!H%%K&9Y6?2S$@itlKKO+LN-%JgcviK_NV)O)IRYLcwO zZ)SQ@&Mg0orWlrwf_7N5x>h=CBIVo1O-)c`QC8CZH{7(mIbvwP^!Tyjj?jolZC z8DS=cObxMw)?LMdwN|p!3 zg5L5Zew8Cum#z!py1xQKQVM|cllX`v?!j~II?n$-84I1s%{H@VirB^?QFsm4>tE_6TfqwI7iDG zF4KwvhEB(2`t(W&L!cyi(gzN9r*lCNO&r9Wat?U+5iM+CA-PcmOjPA>X{K?&8c~FcB23h@U;%l&^(6V^R_4KUrZd$~9<({=W%I7`l zO$2oMr0+B?$o#oCn3q*pA#S*G;1TlI-<^#NkOa&oE>D671ArJJ8k zD-u{m;4IYMZ8bv?2*HU99r>qz$@q7i+#?U$Pb$Uo9KFGf_de2ty^JJB$?l|-@kf$jbW&vPH7onEKP5+4( z@p8$SQZqz-b3$mLR6Ov#$jikiDNW{a5Q0sRSEenf;`-a;&VAO%NX>Vx@?W z%*A^dV0b%~g6B+l&oX{eAu_`9*

    ZR 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%0AxO~Ayw0!)69o9>xlqI){dI52SopdT8T^s(M; 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

    Mu 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

      -yuzt|?KsEc@Yy4eh+Xw%D4` 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

      w1liCZlf`qA#|?M&@QFz#Z0xw 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stallingomega.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stallingomega.png deleted file mode 100644 index 76ead6fab330007f6943b175e972b0df022b7fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96404 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
      {+|gKP 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Å?x;Ad1qJXx>x=@@mz?hlAR&( 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stomach.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/stomach.png deleted file mode 100644 index 5a30fc8a65e01b40ecb8e68d891cf50150fe731d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76910 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/symmetryomega.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/symmetryomega.png deleted file mode 100644 index 700df856f023942fd7f7be649badd7a7397fe02b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22586 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/veilofevil.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/veilofevil.png deleted file mode 100644 index 7b1b51b5943b95fad4f355b4ba2417816d67b25f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79972 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
      X+x`v1K7iU9;wdNv0kgO@X-s z3F!Di(h z2av~vNcI6~ERoICc1oh`0f{843Yk3V+rYUAgZ`S;@n?A1rX+rl zu#nA%r=pjy!oFu4oj4$0>Y=5>g|pSO#d%z1nfA6fz4)Vy2bj(`kPJZqCkR2>{l6$M z$O*`rw~RxIT=uW5@$S%h_mt&i;U7eXLg~NY_!5~fXOJY$mr|viQO>jXq*i;cC1$Zv zO&rq>f@(E%OJ?2jtz6a89V&0VuDXq4ez$Y#w!tWbNy)Kmb-T)G;K>7}YC*7@O!j-5 zAPIhr2o}}q3`K`y!(z}mrPXOlQF3|ujD^FLWbaf&2{~pPomh21QL-lp_2*{@F(FDW zM(oU4w&>&Pz!-sU8 zyqh_Ouyd^8nP{Aiq95ou(*KA^UKvb2x${Z%ic%13-YPYl64U?G_(?bF+XN7?| zQKkv(r6=xi$YvEc?yq5IJ%@pq@7vM9F#O1=4#8W@aB@2w>GuM2w8f@f)CNCD-b;SZ z*JIx6c7&iL>nu66mT*Cqu$Fv~X#74f?2BhfBfT{vVe)(snT$%BkO$l)wvXe;^IhOygNHoq-8FlbxbyY$~JS<2-|#^nvp71S0T->)V!W_*{tO_nr*UXimO@q zfkY`%r`jCI)#cC+Z8Fhts_|kUkqgrt$1uD>3_i~e%%aTI1W3q+3L7;XB?VehsWMP=V^Ey2f{8J0Ld8KYTI9^|wtOLm?k0y{CeQSOLG;u-%%N#|;61 z;ClMpIRqvLc7((1m**pWBmj^bNs29fx6&;%>1;(m+_Ae&Z2m&@X3or)-Bv;;-T#$B1G1tcWt zF7|BoUKb2fQcAKH1hxkmu6ZH2B$$o=Vpr+wM zA=?a0Ac5AUC}pov(6rF3y4?zNNH&(9oS4IF?aP-hIR|NF4gSm+47vIWDu>h*FHX=h zT@O_r3=W0284l;FA-r2bGZ|)pGjFH_MUuKk>%3ZxjcNsBn>^?}P*fgYoB3VY9!xWB z7^dlj!zS({!nbx%yXA5yM;HK45s;N_KdB&$2|Poe48LeghV2;VN0M}j=XF%ae16}xu;XSu{u zwphx-JW8_Jq`f@Y+nyAlizr{QH7`xk=hXucrdIm;S|K0_g+a&d-9oX5bUIS$djA3_ zjxuJn6+Gh)JjhHSngm+>oghg$m%L@E$rmeg3#Ej4^;IJ4&@{JHH~dDe&kV2=UsF0c^F2B9e7(;6M>%&f zM$RO}C^gEp?##j3&fVm<2}o2@^cBvM8^W0~KB@RI@}1E|sPxcn&*MFmzKd|QiyMM^ zvZ)MS>%KGl23K*0*QBZhKLVYCL06+2wF{V z*Xdiq_Ha^!vh*^|tIrudN;x%E*Wh%I7JywNUo6MZYZ^26iUUM^I|rj07hr;EI z6K7H@$+5uEs=`}(i5JhvsiL+AZBbX>JI_})K!6#I^~{*;Q-ICN;y(gxrcGqLjYQZZ zQYPfV?qJj?+!110ofv!%0x{}evFrn)Okb}=lyHI!BZ**H0Dx=Ve1mSn=rS5X`w1o~ zEe;E#zW1|4i=)$Ne9RUHyCxuoD;U+44J8sd0DRcG8VjPl%DWdR}xAj_(n zdQ8CTF+y~lYkX1@mwTd34ldVWlZY?JBXhYE&39_GMx#)$$oJ@9#ug$^AM@84f5g6m zK)X;(T)GNYD;Ly(=L}+I!u@OB&Q!qwB(+%A@$0v~&9Gne{A$^H;U20MS*%}&!8X7N z$M`y%ZS#}`*dka4WfEZ1!XcS0RnH@cRlqHKy`qiLXR(pz^|+!7@g+br_Q%RFErF+R z8^Td8Ey1PhYq7AG3yN|^9tiva3%*$KuU%XC_NX5}5gYx?}5WI2?vyW1!dO^VMoTpEK^5`dq_Zh_6{+ zjs!c|We@IBDKwe$TCH@;2KcRdx@E~YBNDXcwYJhYLgWNo!Zk5&j)A4cDufsw*ExDz zsDD6H?(3Pyg?gLilX^Qq(@2b?Td#*rob7|2w{3V!q@IicC=wXaE<=*F+5dbVDhR29#Qvo-wV2>b5y^alESur<3Ll$03q$trG)S9pmaa$%yXiS6vQz_TQ zInL#x?YT@w!isJ2i4bKPzctq(5KT+hGo~X}FaN0)9q`kf0T!7Pcf&q89FU zCe+QRy17I)*LLwwcRK|YIG%e{exF}epz`N^>Kk%1ky&a9kET;2kHfqG+T$8dY%g3cZhkC}?OvH}Jx15ZB<8W0Teenlhvo}Z zn#~9lWv3&m48Ew}x7qRK4dNK#Nh)zkihhrqtXg&*Y?{={D3j!`X4#Y?<;9HSNm#vi z6U9vFb6zd4O>q#Bgq5iAkxpBZAWNJ!`tIeujGUl{yn3ctg~iC0q+Llj$f0gPsto12 z#Nh&!G(bUQE&^|Z=x(=bAX3*!v2>wvAkkK~ZL?~}-{G|;v)STAa4c1&}Su|Q7cmSO}34_d;SGXdr7%C9~YGolJ1f!!Gy-|7zcOzbj_?!8eWj?wNN;SvX?EtWR9aR zAtGn(ygh=$g+%)_GK*Oc1k_fF_i$}cQj2SkSFK6KJ(FE{PrM2CP|E)P5!a#s@j!AE z-xW_5nLN}&5Z*52zO#za(MNOh{}FaA&1s|CRuTvhLJmU6NVY(c4H$!kPasZ;msj+6KiDD7|U$J(!p3xYB{weP{QrkrAB1&9oh z!!V1FcTikl!GSo?GA4K#AdbA7BF?V&qc?9(nuSY_-8?w~6VM(2xt&JAK(P(HGVk08 z{;REZTYi8u973KBv^SC8H%-3A3E|f1_kI_}a2Q>3j8Bft%+lW&Z*gNDSzrQvYYn(Z zc7U;K9llWaljkb#4j$;4 z07cjbctnc;l8nLnNW;f0LymGP(?Tg6$!k84=qsz%Tn=~g5uH#?qIj>#;yw3Jz1Qh1 zO0mG)g|}w1RRUbRu6os5+bmAt!m@ep#I}Jrlf;Z&ghX81ZvkW|lB5WWS`GQj0lq*6h`JJS=Vk+P zpbrvAEUm&#EiK~yYoCRA5lt-sN;?eTBQu6i6K;JQq6u8T+gpN~Pr}~Pu^l>7K@Vb$ z+APBa!S6mHavdZIB4G~{ViFpC{0$HP;@g*R*%al@-!Rk>+UW}UXolA03p9!OnUa*F zDhe8HM&6qN97=I^t6MsV+*ZyHQou-$C=VWT3T#m|eBebcC`oEmDd|X{Fz5MmZ!RLy z2Lt5o*;Q4%m%1+Sd&vq|7A~5Ta~7?as)NQ>c)qj_p}P z_Bdn{By>i3$OR4}kzRhH{22I6l;-rp05!&5m*m}$h!bW;5yxXPGR~cHuO%3g^?*Lkl_b{}ywD-ilY~e@cy;#}+xOaPl z9>dYO$+}ujY^rSg zK`@99I$;xSmN;u3 zQNkQZu%fo*RfJO}ZR!N&(#dTHJas;26G00)F??+D@i1`#z*&PZge)~9(jnlI!Up16 z3>G6Ec##bh&{>ibiTG(mrWTv>?iFrC8$Q@o8q}bjjbLZ*TWV)*YH$;FR^diIw(og$ z_@xm!-6j(tr}n!gCl^G#P%im?55%9*bnFhtig;GwbWc3&cXM}ZLJ4VI-2{P?Tj}*5WXnP0r(m zG$}-0@lc{=8F_3iH_>VnkmW!~gw%2nv)U|7OUZ;X@_Z=G#TaM8*VP@Bx02r40fW0W zGzITa27xjtk(MPY65g^Mr3nAKVyy7?xws}w8a0RHj2Yh5YGG@M4NDlUYiLS z05~OQ`T{s2&H)fnVL)~Ur2sXQSr(EKse!F&U}|U(G{O9ZP_XcZ#L5zGYGr+LdJ(KF z&1{{Zx7#>qGa=j}XkjYw7EI+SU|x3u?xZc=<$0~<9k@QU{ZZpKyWnP7WNmw%0XD%h zlW^|(Sm3k%Ho~-3R&as)W(5bp_(4q3i;DbDN|``<)K3It#@}uszwZD6vS#1$Cpxq` zI~~k_3Fe~7F`_XL%3TFf8VlayG=(VRn5_V#SFHeL=?LWqQRcbr<350F)`_CA8Of`z z7(pI(RGxi;2BlKPd!ZMbvDbiCER&io(XYTQ_rQqz4U-|D%qF&@eFQ!n4)<;zGXHd$ zB>3RLeQCG=oLvE~LBItB+<=ik=^2U+`V-*Kn@k3`FZ<1tV}xrejsKH9Y-iXYUThJ4vrDicwBB0 zFCZbl!it+a*Ai#Y69WKIL<@x?yucR1qbRBE*CW-tvMmjfvWjv%1}GQ4%gTz}FzmkX zBAMjF%am2Gm)({VH0t#Va7#*UPywz@ z*?D$q6>YS!C!`4Ox!SYAm+KR4gjN6sNyrkDy$myFVAm3>)zZL|2A^W;@H@v#98BowhSEC+-G`*@CX-eHT%8=VFyV|Vq{H`Zv~RutqA{CX}ce+ z--IMHE)}+Azg*oeB7a#dmn@z_bQyI~?E&jlCqd&V;9LP54noE2YeX19fRIsiopF7Q z;GfaI9o>bNM*oJmv@g&`3rn;`HH0F%(7;mV4N)J_rpYyfcL#hdvTM{E%cTQRau{Bq zWZ!kY<%bs7!@=-Az>htGW2pDimJ!Bz37s^B3kx^qeD*~j(rb#OYQ&rg1AQT)B=(TB znhF8LSdtsf7<h%UEzS?=lBMgSiPa)gLZFF*V;2ZyyzK;Q?^Ia_xbH{|UMFI>Ucb zq9oe~uKN++(djGNItR2ZqsqWWGOmf$TL-kg6SOI{o+PB!?}S=CWieJhFC@7(AlYY9 zo%+{Yn~#=-B*Zo7oz&L|+LSzqJo@bfieQ|AG7K zC`vJu+>6NuckvVfN%n)VE1m1W#&dW$90;4Th}T=hAxBNbJ}GuK*-634kN+~t6rA5e zI6v+y&{9kr#NBMB7LiMr@VYRX)aWCbEer$65JLb-{|87E?uTcDQ$FUwTKthj>_$fRiJ{o_t>xv3B!a7Ai+|wR75D*EsqG3Jm32%%TtQPyKMH-v{vL1 z!dGeN>GhZjwDFWWb#SYXk4Pq?c#C}7+@?=sxvtNea^c!P9=LWg03jKGfiM6KZhi6% zy0ffbraMct0c;i8o|$z=nRTM=nOYCXtpl5`dwtz(*_z9`ySsaFk@`sAm>e5Zq$&1D zN3iOP!sKWXEgyt;8I{6S)8(96P6|(15)fB;r91uh;YCE>sWAt^Yu`r0Imt4El58GGmvL0>-7P0 zNQ$C_G+6w(+RkK5!dI!W{!7UTz*6`g78g*I+-_Vc+4UOEw(jrm^{oJ19(gS?^LJ?i zx^>8T0dN}!&IT7A1(A71}#g+7w))}ukNb;Ows zHIIErWGS=WBihK|5p58Wq76Tx)Oz!p+&Vle8y8ydQKa`MXy4zXAf98JV1k<{>T82S zM#ZMN8MfcHSUGc=no|gHc7^oqj@{7|<#u%BN1)Nh@)T5*Q`NE*Wk#(B`Qy2bSse@+ zQVk=OY%c;FD6&AO`^IDnN}unpTEVlgTCMjubTL8q0+olHOw67`l77&!ya@3*jNwd0 zNfA<3WO5KK$(*%sXDcNqR`>`bzf!V74+PB*5G8J)k8nGP3aITk;`Ahsz=)d2EcQ`o zvx!;=9a#kMjJN9wZ;wj3d7i0UyRRfb{}l=FCNc&u^H@d&wk8u6u0CFZ;FDhJ88Up*R;HB zi~7^`ma^o^;H}8=R{0Tzy45xE=bGtn z$k70jRJ`J^QG~3(qB=`M=)u;Bw^zxn zmz>+lfdx>~&86Jvnu4t!ydl`4`J7-IxTMw_KpUy`kJR(NW=KQc zB6923j*#uI|C`ulRGK_6_WQmG0&r{7I=lTC0=hE(F zE-fWFqAU@rvCn!e{QEJ%-&Po`$EjXudEUHB;DK?TQ9Fck_ z%Qq8IX8dMKa)DdbX~vzTY}Cw6LBA#7Akw<$`O5^RNT${?oBSuI4JBfGWHl-ONOk8R==XVSd6gdJ0d#rcY6JNQ>N5lwXv4 zp#Vj~tW9Re$5e)0nF;caVaZoWC5N0JYEDoMfJjm#DLj%&^mZ?UX?K!l9C4Dcj=Bun z?fH~mmN?HOGDuR;QmW)(d3rUZjfc0r_o?`OL({TfplfP`|DDQF}1x^9nIRiYwH;1h>e7l_vL=ggK`N@kZpZ!<{sTU5EqRvqfNG zvN2u289Vp3B1?#pODZ_WO37E6M9%S@g7eI*0okU|@m^g!=+cZqJ@7No_&BXo* zyEwAkuXwki@@_pQq9Y;RqF2P5akOlp?<%l0{s7zQ3$UHM&W`F0@+Cd0#BHJZQGoL8 z+n~`inuX13+|ybEw%Bp(4FnkF?(cBU-8&1=pQA0<%r(=|BFnG0pMIQkLoGMEj~QGu zW|T7>ugMW)*%_CNu!Vq_cD`puOxjKlC4DaX9dpWvH z37=!d34jj99z0nh_3lF8&SWABTWTpRUMn6j>l7SCNl8AO|NQx7tx#RlV3JHgx-z59 z1So5`>G>Q5fejGSZxd)hH1r@mfL09yP;L>ZO_>2vZ$jPwHVGL-CLO2D(-HEr@FtKHl=1+~Q2H^E^wb!K$Q-L@!-cI3 zESZL8ivaP0|8JyQlKsk)cy3wEGGOYFDP%|zZEHv^>+Cz0vO=}$ut}Aq)+y|D0N#wM zaiIk6LJ8a`9*fsAW$A;wk&HTFy}rONNRt1f-koQyGt*)2k=7&$K~k2Y%y6@w?1*u0 z-D?_N(N1&6X_1h!!=!cBN9@;m#dAl5Tbp>3npUOWx}@I3*ul1vdVA*HmgL^(9knd+ zjudR|;8=?Ax)z}rYL?`r%95B2dsJQbUlO;xKM)<8pgrI`sWH1oZ`Tj-TO$V`-5g5r z$xqXH4uy!Q6UoO6z9BvRolrTSB)p&~DKdb8f2X`@HNo&@RH>9MzfD*EA^`n1ozLSY zMH!ba5>=O%(DGrYfEdmwNh!yKmE`n0I<7*<3M%(HJrMdkRswfH0@o>Jz!PmGMfqin z!w?qVx1&d^poA1B4=fm3tw=cv`6>*D@auTnW&lip0tT0kIst>~6t$A*b@Ra91yGK6 zra7NiaEm&}ypnAkipV2!Z%kA|Em}2_ZxN|(O`J3dujJY|R{m6l2vYi^U_&&fl?ah3 z+Iomm1ZwNHYU_>?w}lY5nkI>&ni9A0#mqXqGY6*iZD%OeLZF%WrH`)dx{j5EZVG_QTz$F zs*0S6N`wzZp?MRsZ_HFSUnEY9!aZWmuUsQ0NmN%8Y=X7dSrT&VLfq=*QDtr5C8Z?V z7UmZ2YQ5_?hKIXBX9{nCeJ&`w3vK+9b*L9;j%1F`WnGE9Lu?7Y1bJLAoal-?kZ~%? z%8R5wJ7%&=_x)0gTx!6*7J|+U?emhHd@;+XTv!=N2yN)ltytR7aqQ>Nc8+XJn$UiF z!ZoJ=W4J$dYDVtD50t7H3n2>{QMWD~L`h*jK$QH2ik4l~QJKMT(U`>g zjAmNg*PnVys@Re}wOpDz;>j|Y-^m5ykT{lDI_Q~J5T>SOKDqEM`Cyv1X`u(t^CV5_ z@EI!Ha0UuD7Lp_G@7Z`(k~d-JhU-eAQWGa#Nt_t3GLnB{Eh5%5OQM>3`9f2}lpZy; zsaHptThdJ)UfKy*`cnYq5pw{JW!eQM{^YotUXs9sn&_Ec_;D<4|Bxk@J7hD+ayHVv z?y!_9eqzB-ZG$5>N#Z1(9>yX8j;&MAc~uu6aO-wM<|%E>Q*IL5eU+$W;^bcV zZf#O9p53B9v8H%tv4ss4ut2MBRlz_O+ByY19>_BRTlg}Y+xJUDn9|B zemWeIsfESNWr0g7srwO(rN|PZ+=(bJ#7LobJd-#8lB6yrF~ASfW~aL;8N5Jar6~ee zCMRKms$u|^TusT>NX_P!{T#1b=XF`#c>2#jzc~M08C-fki3gvojvEo#;9~(&@p{Ov z3#UJ(Buf@aQH#zK5)YY&F;)UPsG_|RvK=T{DA$$_+vU{p! z0a_Q(l{BSUlxBj9|xub>3z7{IC?+ndI)>KVvv(F1PZT_d4E?(ugO{(eF z32yh8aO>G#zdvVl3*d{};w4Z1eIdm^u#N_ALE)7-Cw!#g9H@+A#NDIqj(I^gD?_`g zwXT2f}AvkacH+mq<33V+c873}F8zPV=aCJdd3=qdo81fdZAxlX)>d0u_Z+3O; z=9vEa*FRY6dUNxDJDcjTU;_?NgZs{$kd`;+WH4w14RgmCG5H|6Re*_3zXu-w2|t1m zb37hFl=Co^mk+I{O##n!0e3`Oq;<+Q*mIO;3Vdh`^>CXJq)D29W(_R;ny>^cp}Ffz#fOskJ`Z$JDxzsP)nJi%HDZOl!mEaPK(IC%k0hxn?gY3&kPRc^J4Wwjv17dy^&I zdyn6k>OV12vXrJu%^+?uMcGh+eQ1x0sbu{H0 z<^0x(gGEnUL{%t{hCCNP({o+9vEnDl9CTf-DvLUxSr9o@vc4y6y;I|OB6>1V5 zrzaad3HU6`tC)$##7lEprnN^vgn`C=^i7q(;5~4aCPo9ypGlN#(mTmfIiwCugsA3L zd+r456IC2XAh4oFjG0{ zE_WXK#ls$&1b0VgqE2T}8vn%}fCB%AV_`4~t;u>$LrMHLa4w*~T-T20f##kk`ek`y zrhovTkC@l+1~>%?c3xJ=TlUV((WcdDM6doxmU6AaU5CxdW_CqshZe$25~IS@r=VJn zH)~F0$#PSxaQXy`l;YfeK0jBNW`R|OnuU~eY^DhB5Tp^Nq*lW|qT(&dDm8JU_@Gr) zG%#qyvfQl#pDM|!@@C0sHd5ci+9uHNYz+SL5&)448S5n&D)igH46c|8X zCS{i9qD#`6xE3@F8$Go&MDL5I5GK~lU;PuZ4^R(WeHI)P`=XoSo7KIl%RvDX>5p;} zML;3WOZedA@@*euvu?`$Z9Ap)d2|$pDCZVd?KtO_1QUl*51gp;&T^VNrWWm(+T4=H z=?>!+8slXsd`Ed{gHzjzHt{+Z444_Bm781ND z9;Ea2Pp61-!7@p*IF)!{VUH$C*1z>o2%{6Ck_5;52Yjd=_I-$ncpP_4SqIX8VpUwk zJ`gZ(*1!A>b+KL!vQ}c(le>?1=fB@B-T}uu^o;Fc&g%s4*WYY4BX!{EwgpMqxDl z%Uy-XqrHxD-rrKr;=o$Yxg)^@tU4QR*~)=-$z_bJbIu!enRbjTnA=#}57$uZbJPEq6)qBO#}E%5MVY{obb8^#$D!zkx{ z1JW7}tmB+vq=JS7gT`>&7vH*OEbXnC+H6C3?P!Y_ulw54QC@XNnKqmk+JavliNs0O z6%A;-N=n@LTmX>Gv5n%w#=v8d88K3J)~1J&TEhp)66fg2U;7%?sbbHiu((I=Ar{J@I(X zUaaM(brtv0%(`4_j5MQ(;9QBwjog;tSl@S=4Vm%WRT3Ovf8$}VRMkF# zC-}x0QL%;)Ps;PgQF3B_QHn_--C&Xxo(ue3i*62`iHb)#wq^=D*i-U| znyH+@1-?}y%i8@TLlgUJt+Af=&tSZf^~S0>c51zP+wNHIa}u~}%>;oHZA*dnWNAZL zn%g;MS=ym2E!wG0_`kZc?d%-*tNzgc1El^Dc!p14>A5wBeojTKqF{VQ6~%b^q=e9m z&MF;7nL_&Ke^L(8peJEn^Ju|OlIV$r9hRO)d_hYc*2my3h9S%}$bGDg9!05$H)e64 z*oS^~93_%@jGKM3KIODrQ|~BNl#_C?Am&+oCVbVe&dO#q@%R{K7wnGe3NcPfakE0Zt?mxBRleTHX-Na#bHIM zMFfK0Z6N@ah!IXWp* z7kNg=20@Z+e-Ha00a~O%|GCx~;`|Wf-UJa?n8~^11zuJl%26EANk1HpXEP+}R%nD5 zv*#N>iK8S`UEiIu)<3izM-i9KUrMV9ET@-(}FBK3!i+m`ce+ zaKI`GZdR7VBajky zur;>4ZIio5yB!?aOe~R72Cq_p!)riFwe1AWpq|S^hbjRp$=UJBouV`?)U_;aEJg9Q zP1I;gziH~6n!o0&G-dC;rjUOOhs!V|eJN(X$_HRE{S~Abk5W>F4}hd_Fqs{n2#Lx4Vb>XWGLsL?zV830JbgcdUuSK z3P#(00(I|fXeqFAN8<`?UV)r)zbg}%rr$c{O+RHY5P4ZkQ7*b3FKauIqKvkRVw6g3 zl*$rk2R_Q{tJayd^c9BrxkcnB(mU56^7i zB+_?1yhlOjTRwElp24zq{3GvN`%TajG6+o*!7D31bc+u ztL+0~E_h0n4pU!nir6Q2nmY1p_pSxblwwZF! zc2l-$GJil#2)8`z@v$m|f;>d*U%@vvp&HX5|018#5ZI6WK@wA9WfPVW~Fz)N+TINpNg9We#^ zqTIcar95(5&$Vr)?6f5KpIWlqVN?!+`&xpU9PH4Sj>~b*wZi#)UZpyb4-a|eBvHR+ zj=mX*VTurl!2}=6u;SQ~5_7Co7}_K(B1OA0fu}4Ph@)(o0TSR|W7*7=BalZ5flLed70cWDx0XrW2-BO*d zcwmPFcDH=yPWixPOHFO61O_s+I^HcX>9|WN$phqN{h*S3OJ5?~m|VkOdAdqN^Eeb5 z^D0Z~>+v|l6t^@O*kO^AsUh)VKd|Y@g`Js6!h^)kb618$@rp_Y#6jdZ#FblQ#o%bN zQk)<6$(0T-WZ03K$6Mpt`pMt$lO!Z-l|w#TKsU=M4dJudp(&;&NKZKkC6@dko)sgN z8t}!2mZp$sICvmCk{(|$HlK;~iqD3*0wI^^U_-|J6QR_ciwN&_?w7w8Ca=v+zFMy_%~P!M<3|}K24>uf z*zn>%l%30S+eQ+`0f-Rz0xb|C1AC!}S!PQq%A_gU-uQiqRgOysS6t<-lJ=a^E&u;< ze_zjx1~R>_-8tA2P15A_OuxRbyCq2$xA2meUOFN2%hS8z3e9N?l*ygKW~`JqK?o4g z)j4&5?Vg=KJgl{b!`r%^joOhqu09`gE%7)4bzsTHcDVyqi52P|mD}?@d<~oOcxFYy z+?77=Wy}-bZ!)p6SnD|H$XuNxl7wPCD~%1+dU>;VM27K*Kc68n|NJ3&pdP?IcEljuo6G(;%{`|rn(m5M`*F2v{BxxorwkRg(^#mjz` zDCI+`Z{cY%8S{By^@E69z*ScCn5YG?Q1>-dSa_c0jgw*rjKeNN0{iv0kj! zv)b713GoCIE7*&eilK16ib(AzbNq!@umy39Al^(jI|NLmyK65l^0|e;*-V&5F=2*u zc|Kd^SVUWBS5v>U7Of`N7Q=*qWv9{+*NJ;cl7&?75VFZ3qD*_=Qj>3V!&p+2aNQB* zV}cPX`0h&h&YwEs&wEWTG%3Ovv5V=tLS4#;ih$W{ODK6$JZFv*3=)Rw80mxk>m6QD z(TCk=I9^r)3z9+LMbZ_=U|HVDyCA8Kc)^~^{ zX`c9tMj#l9(3=a_&fvK}A66NwIP$JEHrB?5;#k8}LXowAXkTT0;>$jTUmlS`2ew0> z^tf^~t)Vn+w|fVGnT%T@m!o$JPa{(Si! z`STRL>@%X&Ql%}TG+F9?lQ%Bc#9y;U%=6LdM(NnC-HnVrq!T@%AfFpeg+$2VwC$A2 zC?Tt+jCZ@x9dcmpA$@y@S}Shl)HXS8Wo}t>*S78o-KH8^Yh0Iv-XU1k?;elC?(tB$ zo>f?TOoiwA<6$+{QzK;ZKb?fCPu>lN3;%Iha*fG5O|Z^lpzH=@E^}NDxSqvZ#TPZ9YADrSFxq&*n;J zmFg%Jf68L?`v|5u*#;H}!?C9Gd!(y7P`~N!W!2qFm>@B24%Ue5vrNg>i)3Zos{i+N zsHdTLLUuaV{&eJ=4rDV>UqcmN@^nFP!(&0wxu%$KHH~R*t^lLa&yR~MsT8+q^ z1EW*>IPM6E+3w<;cv${!BF(6Pu_I5hu__1LRCO(-6YjEBwbaY%GN(+AyI^(Cp^K3G6u zSw`}Q=IYGBS&I3br`g?}76q=yVuUO+F=B2j{9Z0hd2Xm+$~cA(=1Vv zBqfpARc~f&Vo5gf#Z$B-k_=iBNjg~~$~!Hoii5wIPvug<92A@*@32aWCP|Z}%{)&!;X-R2BiNa|~Bx%cO$xEjtQIqvuHD<0mY5MpX%iBkd zJP9*T>>>T6=DvDQY3s!ybCXsppm>fXmvEt0DCzlb2W)T344eym`9UiZ$PB+S4=j+# zx$5HjzOOdh8G-#+Ul);mV}gWoR(3SGN&`VC57J^{o!e@Np7$!%?UP$2H|B8 zv)-MqvFHP`(hcWen2&(D$h1j(Xv8;8l1@pQ%ESsPU_>^iB+-&qjVZKhNg~JxlR=ih z`kA8E*axMnC8647WvNdH_Zg@E@SsGCj!7j0s;is!4#&i5E{Nest>CuS+dUSDI9GeX zz8Zc;WWP%UiO_yzf`oeLM;#JG545- z0$8gcowOlZXngXDJ+x6R%4-26kO(D8U}qezI~d$blxa%Pv}c35c;iVLq5VJviP(OZ z31aoo*-2uq$(}VWMpBunNpi>u5^_0?ln(=9%>bTmlx@F$XcJcjSg~5U^TVwp`-%!Ahsw#sQVYi#;P0 z0Y|SjXNDbvIEHG;0Pb7c<_JzJR!qKsEa>EIz4NVkzU3JB)Pb_lg~!y-JCYXmq3FhH z!fYI7pL8YSY~~s;cEra<6+19`csk-8$#BhPd^^6*wyciE=&gc_NrtG=5D@e$v3yZ( z*Bn*2Z1TQQahUgv3`S9CwCkRdv?+DSf%^5RB%cK($-*uE%Zbtruld~x(PZhy!*VSp zc)OLpnIf;HoapV#y2k!cx7_yF;aZJtuQj5gHv1%NEHKnw_( z8b;0eG}ytp8%o0vxPnG}9mWW@Ez`hiJK)R!b&HXYVkImr+TgCG8h}(qBKayuEw-;ysi+hWwf=xsxHs z$I@_x4`I~rKPAdXEJW!gdGmTk@6YT(AEkFBr&G;h=IU|ZM^v+`E3So=3KK;Skl%E@ zn&PI*4Ec^N-VQl^=|RVaO||aZzF?9^cH;E-2He(xJCJ%D8nR1XeaDb?HD>b7GZEVz zgg(&$Ageu!S^$uB5wgl$Y{Y>pfUA>{IYk4Jv)Syh>baIO5UUj`^Lb+z4)KD{Lu|`% zd&Agt#Ou80$xe_XhJ`Kc9N7|DkbUdooMKqyd_}@ zYSt|@NwPk$RF-a{4C+~;wANZTGfk6#>_@}Fg8QY4*!G?ExL1?=D}A4lOSy3An)G7T zi-ev?)X4p=h9(jRepfTMtAW$A$JJ0$P%%EDY`1%!$w8O9ql*{GJD%ocMjoniZ$4IqAWfiL4)GfTjlnf=>{c2BFTJXnzV?W_?+|TQzyh`@B;FK z!*yFpgOS6;?KTtCE*4fljKV@kI!U_5S<&8wap?XsNg8fsn|`Ao8uI$nr0-;@JggTb zzlh$$gC;hzJ)9gFPR=#y?=p74) z+WO4BJl7oiFtUkVhzSqNcm)Yxp1OmreK|@r@O&25MD`rVULJ$!Yvg-cvZm`I83Mqk z85=oCQ>^z@Y9sBOy)zx@WT~t5B#c8xNjgbl@1l}?jqDid4!u&ukuQ3McXj2*nx;lo zJ4ter^|)8jH?MCts0945Ua!qLoQu0QMJv08KzU*s!WU2yh<&*orCmZ#Xz5_Bue)50 zP-#x~LHoMT=?TT=foPC?bsqK^1(D;WHH###F7X6OhBnP3-=|sKEbp@liq=77iH&A! zNCXVTE69vjFcGg{ib{G{3LjaB%4O%BnCP4~ew69zsi~E);sKROpSn98v1)RJ+PNTg z!kFPdoV^nr$0X;>9rjK-(kn@?aG!cfQpoK7;jP$}FA%1?cL8x`1=%Tsr*RYdNs@ef z!{W|Om0N8UJ(koASZ=dX06oyWf-59x0}JXN<`bWwYl?hNhb~zo_5*>f5n2>j0c@A9 z5vt82(IAlxmBMs=2jX#v+?_}%NRNDrn8+yzT`MA~0EEofL`POZtfdzmK3D3#&c!Q8 z0)|M{hv zJ1rZ$7exsJ63E#k8FVCzAJuOk7}7@GK2k-&3oS1?#hxFWBt1$JIyTAeb(hk51sDL) zW7ELc*ef!gM3t45Hw~|@kfa+}Q1|E73xur3o-J~04V7(sTjb~(k!H}$9A6_gDY#EG zNP=UcUfPjS5KhBBr9d_F@ic^r=twHCCcyVu1-_I%(h7v@aC+`|1ry^HY^~0zmWxXT zCYcWE*nHw7SK=hcMTH=~e#aYJ-&X2tUSR?_GEi-lIq9!{{`m6jz1cg-PhL(mcXqp+ zB+q;_A{PjI$7OuUvf<-@J4&Z5l6G+ zOQ$JN8!-5KTqM@|;OIdVSC!q&02hD?>b(eRtPb>I}SCEQVFkG!l(+VfcB}$#V$%KBu1fq@x zg#`I=wYsk6I%7FjC(A@!;6|X<2x(SSqMx0~+y&Rf@G5~*@@6FxlVmh^=*S;Ml%>}> zufj7jSt35k5>1K{MwEtbAxSUGGi$#^j))#UH%Y<qsRaxWq2zJUfjkJP$Xs72Ds4I6PUO^9CLBx?Oi)(?g#?TxsnO&0hHXDI$ z{5KnEi;6@$h#!r`XnR=q4tqS8mxJuKPj(!cnaXcm+R*S5R_Cp>UXoTB+LthYHJ6i>9X}FXB`RY%v~y&L^Iw$3cj6$H>BpO(gadCI`XykqGS&06QZP zZcS!A+8L1WSmACk%oG_6i=z^)Tyq1LJW<+}axzX;&rk!72>}VV2Zma)JUE0!3J(#v zA8Xen6lETe;Ct}<&iL5 z;wMg$x~-PBm3sZx&8N|Ip)o7s-^)1I7>qSTIS4W6ASS*M0%OC_9g~T5b-{xVJ?Zl< z53;K>rN+K8NV+KjOpZ0px+wuoP9jN9q0q)ydQo9|nx3a&1%){c3KJOoE3or83+3%y zwDb8qbVTUFojKojTiDnkVyh#Q2X6|fuqmvyGbBSvQhBHeSDNfjg^*DPq?@?~s&}*5 ze8+f914VN`AB+&vbfn$mn4>2FAjQ3Nsvo$ioU?XO}$Ga25G<9__qvJ@`G`89E{y zm!gOefixz{K2fsz`H)`CGK`~AP(A@R^9itJt}&R<^KiDae57D*O?3w30bV*Jnge_P zHNkLyV5NrDN)+2X}g6^mg?4fcJ@rRRS*1!vvY4w z<65@(3<3}@St9@eLSQg2qkxgDkb@Lt5ptDayR52Mr7BB*rf&KBe}lVL@6Gf)gp+gU zBu*?JC(10kcRzmJo4@_(9!fsJ0qrNH=3ztlY+25Anx*65lLmjae2}(7XU?`eNr;%aTib_uYx^)YVMOR?rc-=q)0|2(MSF~W-Q1ubiQACPEsrdKHSq`i zR-wdP3l*>ePuU^|2)}y_dq!Ps6WqL8;;_@x?!BINv{slEPdi$gC~2VQOBDNl;Wfpg z;(rX8CtA+&uwaXI=}bxqh;%V&a{tseG%ImdZ+j#ml=DimL(CEDz&nS^3=k2>9!HNP z-MFFv&Uu``;ntNff)itK9EGrae;MY6XwM1`DITH@vn)?a(IEvyOuI8@+nuvuzw?tt zM5Oaou#Ct)a@=fI>R%EeY5gllB?;;xsS1wko&1Q*093AbF z-trPsidhliFiPUtHYtUaU9SM2yVw9rN?O<4jTlM>atyf}_YtkioIrAQZyMr5$U| zRkI94{biI6p*dS_i087H=`6;FL;#Tkar%WYAreDGEF)sRYRX?lbl6S#Yb@n2PwQWp zwaa9fkhy4(O|woWyYHZDl;R7^uSOeQYqntg(`wPU8hY57>rK@v?Pv%kXY_+#rG{*3 zG47@R#Y2mQe5|*wAtitBaJYVgQQl(*SFtS&0LftMGH>iUxHg;?uY;MQ>jMe0M@f4l z3=bu`%=n?SA32n&dMFVNkV8pcvhEHMI>16BPS{^oEFDr-e`&YJ_;?5(!9xmCYO{QZ zb(s8^L{=4e#^Nj?5^KcpL0V)P5oCz8J1u`rZTZXl^!Af2e_@=>$-S~LqhIqmobB6L3UEc@|)w{lb1_r|w28ayEBdm*LbmqR>H zFv`cyQ?vQz5ERx}X;$omJGT4aO0p2n#lcWMFT-V`=YGQ|UQQ)-nUPZ|V<8+pmHf>i z3NFU*0KR3%egKqP&6lI7WfTuFd`MdP5Cudm&5*KNE$jrfcIFDUGZ*9;@DEA|BZ40< zg4HkAR=*0e@(bm!<8Ap1znq7FlUWf%V(gScb>T%;BhhlRfs`w1X%D-+-OOH&Qi~ivLS&J?_pFZnqS3|N?2v5gUy2nSH;=+*wC!9zBfat$}EIK zK}@dp;TyOTm-*VK7WtYZE|bTSb(xW4=_tyK2p^C?RA>aEJ3*XIS11{OS&jJ1WA&F& zmLUR&97YKdwytesPFmO6i7BxTo**NVkbUd2a9uX8YxT>~>erNuaNoSmryP{OWSJ#a zwQ^8)if}mB*^J<0@jy#n=7Zpe8RlPl*!_<^>}Yze`I?^fS18C|rP;AWV5sLybKSuZ zVUU1de5^e`4Im_pvV(9GRhmrs9Os@rmNLimR6It`%cz1ljw|i+vc22qbu^AIMqK7i zh_efxOSy6k5U_-Ru__0aoKu_*mK@^gVnAJls0$%=$}*%3%MgMYEFz*bgKK)%#C^~& zNQuM5k373=@k?04i4?yIiEZ`E`{rfvyB+S#Wc!+DD{!DG7^sVCrvn9Pm@6bCtNHb2 zIb?LYJ?z$U*wOyzMq4Zm`~fBL2pq!e+}U#eMP`5SSoDM8Eu$YBy*_c>DEw;&{sTRS z!XY;^hU0k0nL!+BMFF&iduL}GU?Ni$JeUk2utfwM z#p&!`7vnA+<1hCNP^bQqMiwU-)L&YZp)|AWNt9)f7Ap}E3o~ddrj#-Lg6TwRUnZah zoR)xRVJ=iC@Vpi8Tx9W!pR^3CUstsmKE8Y}MJ`$`Rw?CXa}6mMi_HcHLb}UK9-vl9N@*SjzL0wjC7)=N*OiR(rdZ@P++!~i$U6nQ z-S1rD1WE(QF73NaJ(xZzW*2gq@}`xkQbZt3+F7a!Z`ujqbhRi?7Xj)L5u#50C6PMq zTUbOaQieH6f8j(7}pZ$H)zD{w=xrbT^ z`Zgq9ogyldeH=msry0*FqNr=N*&#JvuOMoY#y6q8vc9x6%1howLGX`+^p z8%m-!04X~}a1Y*iiBbjR)%T0Q$wc}5^?vYmg$V1NuZ58+C%{xGXGf^2rcl-PXnN~Y zRom-)=q`PKY24*i zymigz(Dtrf+q;&P33eb}n%DjycTEN-P(&( z2Qkj&V#hHSSz#a7sJnSsF{ym&K*NTOWm}ElS+{1jmD*hL;n6r8QYePC7GS?*G}N#J zJHEhdlzAw=djHg?l0DQ1P%&oI&q`Er76|3v+E5zo< zCcJFj=M&aNhf26lw4jVK| z9+-{B_N+tcoD3J+&6Zzhz&d32Q2}-+$goFxVKydey=R(2Df=kcq0rNLs#Lh#9%E>Q zgGBLEWBGu`^l(jIa-XFEd5b$drn1S_V=7mbmbYzpwH)i=B>ay8KtfhITX$LhfxEm= zcj>R`F{qCMDT;nMZx!~@-nF(@&-)FB(GvrJ~J(kry^zi zRRMN9+wvV%ZSfRs@gc$vCA*Ze1EVC{faVN5?0KS;J+=Ge!o`m?mo+Byi2u_uk9quK zk2zNSCwMxgxBSnZIh_;$a;TKL%M3xEfA22gFV$Ttkiy=z5Bq3$HAMSpdsVyFl+!y; z?jzi4Q_3Qjj!kXH0XIBg;GOfOraH?GCH#ogpWq$ZWvr7ZCDyA=rvoXOkF1xA6*X-& z-b2fG_N@EgExu#4l)jdIs27qES|$FLvFvtai()PT;|(AsjS|m&s*c00{U+m-&usLQC#w_h6dG%w_#+Z;d2285QjIyY94O)bmtohW3Vjr*M zg*yU9>aryzBWG&A3Zwit?$R4;Z2yreixMNt7v`X007 z$MdP6$DAqt<1>?91e#RtBkTCyQpw1SkMAiO`LnW-x|Hi>cUcO$%Ts&(NrXqyzM6sv z2YKOr*eVE?Fx`UGFr`u~)1_%hPq3YLVqRcG2-{@a{QuQ?wcyjkLxWl}ie=pgLc+;5 z-d#e=KmYihlL$;jwxbA_MoZfTVeTQy(kSH%Yar~j%9Ut2U)-}z36t#HpJZW5h-*^L zt9?jHxaGwVvy|~2W(YD@U{YaJdQ9Um6`8F0%p|P9GLr>`CUyM|q@=sF-crd(6J6Rh zFp8om8@Y9t=ej9KVU!?^lGY9Tilg93TM$7TYr^}O3MNX+2Yv~Yb+0QaVJ7_&=Fzum z^(f&^F$JIER>BDvs?=cvPfveuU|pM$m9n#1Zy5C;=GlP5f|STakeNV9Jd_R(GZQhq0yN&M|K((AF+*sjFZD7{aMy z2tJ3P;FfMM(G?~YzvWXjJs-zZFrhh#BENzeW)b$%N%jbULqpxkcm8*y>2(h&q2-Ea zo8;k^j~gmr@}cWh7J(JaVlzFRvT>4dr4;LN>-nVE zy?+=CI-AB2B0@esi;ZZBxaV@z>n#?{L8QTKNAKu;ElEIyDdpNq$r{gaNG_p;)%nIK zA?5SQ^LJiSi8VFtCf@kPl;{{fw&FjJFqeJp zPAImF8?N@p|Iu59JLJl3nKcy(A}G1#yUU9g>X#neDGHcJfdZzkbH755#GA?o3*<$j zUFQP=y58$PJPbO}5ir9vIXn4l@eOw zFHA&?Q4YG4^W^y_FTHn$(@_?F*PGL$8#hrtF8eprDOfBKrrAoU3mz@|sw*Cql~cG_ zQ7*+_4PLB^wt{@I6SmuUY#H~KpMsdHa<03)x}(WT@ckI&D~O$^UtTYjZk$3kHon&&sC$K~^+oy71* zF;d%rL(yVoi!J-A(-@kcDg7Enxs>JdUwp~JT#h;5vJk-~X-B~oINPnJy7&wAZQ+|x9Imf|Qk z=0X38DG8&{`C$?B!w@5$EW!Ip_6%a=E3lR{c!m43tLI0ey5iS*A` z)DnNRWfzxs)*W;oM%NFl!!GBowSYd7j&wHjMhDs99K|4`<*!CdGgcyzkX6z?kkT+B zP_idR*=Nt0QnvZGhQwv?LH3fA4U( z>c4x>y!%&*znXUssg-`@vKN}HBI`d4E!9~nPLvDrL_|t#cii`u(4l4+Jl)b%3wKHV zHtE!Fla}nYL3Txk_DTJI<%kR`*oK6ZqL&fdLS5^Y#gi3(g} zxMA>$ia`gO;J`G1D_L~V{>Yc_M4hD@b(WqwOS7J7W&uoH(BvZ} zc12UlXG$!CS4%~p66-Cm{5Gk%Gf4Milx*>mgL&+e+IEkw9>GGKOu}s!Y0-K7_m4%& zDW!buLCdFy%^J0~B?{>*j1QqDhSX8X>x>51qt1w8vb|;IO6=(gDNRq>RM)8`f8OnN zX_R1?`(l)LTo-zWAO@ih!k(HG4X@k;OhXG=krXY0ipQc3-PvjVrT_Me{+>z2ANlr= zB5&V$(O_fr<^S7R`b(OWC$dlpy`|qK)%6%=KL)il-JXfP^u`n~3)>YLoa`zj+*Gky z;+?d)vomf!#~qo^Cy(97?q_N_hn5@B@>irBI6D_}YRSS48e#KyOEW|X>!WT4Y~IoZ zR9Ac~mF&_e8SzlbFF)PM6~f~b96`C}?j_SMVp!D6P>pg-igw^n)&v^>zP~&+{xTDU z#bvriY4H&LSS0@#;l-oCc;U)9Ra_k!=jbdAuI%%7W%75vv&{eZ&eDrQB{V#3lPZN5 z?vrLrpLA>*rMeTrEJY{*#6uYS%@ZkcamCRTCR(lFT@SjCpFh*dZdmkz8XL+5DNWf1 z8UOWy2j+75i_lp18QLKcJ4R`g!~-R}JtO5K-D^sYWiTFfS-0&Z)2P0VE2rE-?Y#2c zrG_0_cX^>qUNA|EaLn(#la>xfz>{O;xPo8Vww#`IIK*sNDhK78p9`jAo%%+&+5{N-{ZQZ|rhc1Dm8 zDgR=DlIn6Pqj!{1NOZwJjFfm(N{HF(KGP`aUa{$tcvzxRrJ zv<$@@ovsPv;+m!H5MVDRfFk40VU$+3xU%K%boE*Uz)K|}1fFCGVah?F62%+>UAr)a zr)|3!S7Q5i;ZEtSh=20A_;YlpZ*Pxapt!8!6j{AJQ}>nU%|9n&x9BuvMMzh#+CggeichtG2{hD&r7A@Dy?o zs3g*~i(?MD=j6pIv~)@pEV;rB7O=w`^rTaHbXIZmNC7(=JTMw3&$!G7X8F0-Ss=lD z0NlK8y_eYoRNr8g*cAzTZ1CJ%*b$*2EiyDC)Y=}FM#)aMbKmdNz1Hiv$RbsjP0_fp z`3%a!Hqd|eu%xY7x(QFp(Oqif@xwIj#}ZI0TGNiuLlU)r=PRQW?d&DQp&Vr#l)-bd zzO&5x5S}*e;zek7?eInI+J&po*r$p%-J8NWI|9T(>bPU=%#=?~`nZeo^ZnRk4P9f}FXLQ|J(i}(2MFYyNM%0qt)Z7!ZwlhMUNgxigrj$LA5=QwfQp#o2@UR{) zUC7{u1!VDU*1EspNZdca*^#D&i&{U<)3mB(aaK|$s==PoASD`TqUOA0sbOC^wM5ts zU#UrgA`UxScCr^L+OuP$)QL9j1ar_LbhK-iI4>V(-W0gz)IreEPPmZrjFf}0HODnqEC znVOS|0<^+|MRNq%p%){5FjKx zr9~Wq%YX!^)DpC5dg}(YSPj}X?WPsPJ&@8(=f79R=_KO*vo{BYwyfhm>p%0jyzdWS zm&ARBB<_B1(NzN8T3q)!9cno=)3RpVO9Ivw?QsMzE3J`Emr6qa(fu=R@&i69cp+$2 zLdr9ITp?wmOhssW2X2DFU($L@o#4?-O^2mk%+z*AADXJgWw4N?6SmTLia_#QCv{|N zn&J(y96|XYxsJ`pDV3*GLdXJ@rUI?&fVAtajF8+I73$d?H5uPSOV`CZ33N!>hzT=q zvMJQmCwSGUc|TIie)ow{ESU4ZQOg-YOTrzC9<;=qJ7U(>e8Ju%$G!f1zb&8(L4ZGL zlU7P`ujcYmxbXdC8vhb3WrlhPwcse+N#TIE#CnC~uINL(WhhnK`-fERAHxr;gA+DV zt*2OgHp)`U{ieoODtk^}seI6R0H=)mO2R4%R4O7Atw1YMnR**9L8shi1zh^{B7qp= zJ8ER+juH~IZY_^PvxGnvMW6e}{u8uB{_*SP??3*4^Xx7b9iEi%nXQ(%)Wu>2l!sDM zOExPR%`(yK4UAFZdA3T<5bD%XAE1(mULDsh$=(5PG8ubFOt=OuG+UZB&U8nrrry#H z@mM6?5|%IKYT@`plQl=nDIxGYJg7rgX;TCx`;di(jmKvO86fNd zQ#Y*0^yTnw456SIf`ZUtm@E^)eQ$hkTx#c(kI~-pO5cledp0c<=N8g<oUdSu3vsZkIT8`fU9$1zH!3@Wo*3l_ax&yWXp9dC zYp+O-@RK)`(rp&soSxDs;TUK5dB&+0gLy(cS&K&?@odd*7p1eK-kxS_fe<8;t~tSK zN*L;ky2|lXvAz(dGSL(v4ECKGu+M@jc2ApA4kJSG)~mnU>7~B6rG#oVTIDMz14)x! zsXZ%VFb^&q-T}YXln+0&96VCX&ri@2actwm$1fj|S1y)wnB|hD2wj&{7D;8xjP9}N z%(VoaKBVjpdZP~~eNuc51{2Zjqh{7*oPS=OL*(` zM?R?8EtjbHkW`+JsO4(Df{ra}DIRu(r_&K7VU$0eoX{wd<)99L4; zHzob7d=_r;<#tzMpUxv1&JWkik1)&MK7MS_zm6J9@v|#&u=5t89Wu;zbZ^k<_xfU# zUruoGEZl2*Qg2s0FOLRlomWlNc)S0(_Z?C;n`1NBlEd0)7;Gxm(mAxdm?P6~!5}1_ zuO)sIgv1jz$II%#Rc(J)g5d68R6-eoc3pS2T_b&0ZF`3ruXgW@o$lW+MmNtK-hhvt zPTDyqgMyFCi}Y%<>UfNOYI|qASWlGXWu>BJ@AC*+;?(k6tvNfM` z2f=V?#?&EYzuUtfz0Q{}{gXZq$~rIX!D5B4tj@o^3Qrek!uCQGl71lyF~8mB2MY8Zo$3t1?gYUyDuFQqb(MPRg(wwm zyDFv<>$_SycDC&#eA;g6+Ou(b!sY#!2To=(LH^c8Z5sdgv59@g6BO5Q)Z9++7%d^( zBZPsHA3px}@wcyEt(2_=r0lGgn1r1-NKp>$w%-A23;jNn96`!H-0K~rJR`o$JcJ-~ z8--LCp$RHAC9jE!EUXo|`1HF8j{g)64oQmOtf@M$N{+qc z!8Uawh01swqOdFvz6dQ#>x$#D%FEgf<_wD@G`{NAx1CxtwBKMaoC-Y!}9<$2VCNLaZx>E7%;BYFm#ST zdR=o=e&r)tk|uzb#434Sw#=p;W0V8rBHg=_pCIK2NLjcoQOazVmwe+M;t8DN#l;kj zN`yK%ISLRMsX@E_i7`UFP^tGk{JTITUaAyPZbJN5%Fn+kinC1*;$Y^B`9Z!M%@6FM zr?8iyz0v{N%U`#)ueg_-dZDIkyp0g=BNX;bBO#x6UEJ)l{46A1~@WTq}2CeQq~G?S=d2DFij(X~wid*(Xu0LcIx2Fc%>!A|lu$i+3~B32txG zNv8Lm0hGMEqi3asSuNkUSm{|_vj#itFxz|wC25pjCu6u$WHwDiyq+0~Ma6tvLHGkH z0Ti{{$s|uJ=Jy_!VYoOo_f3vaiPS1XQzFSo2A&JfiI`%g4vJ8i(4>ftiiD#PCmF4Y zDP?4{g9v66ng_9rb1H2>qjX>*Bt{wux)(x?(lfhkRC);7J-1^aL5v}SIs;v=;-i02 zWtktZxQYjw=WwTY1wUs&9nJm4CkLU$-*bO>VlEIdQD3 zi6Xu8AiGCbd>jOw!`<@;>I^BbuzVXm-O6}+fhuUVdVJi(_l(Lck4c#1>w0}wo52fD z?(WjH8H|$;MKn?(E|R~#zeMcHcJq*9lo-B*lyI>;BAf88cg8&<6@iq^0vOE-J{81! znZnD}{@xTDguHK8kTQqDjr{PFO!x58%EBLJCN`@n~(15BW;h|9xUE=H% zs#+3*k_tHU%+u^3#Mg$;Ji9AcA?FymSIH>m{L1boigC_-jt_M`QMh@&7g*`WFK6H- zuw~n{crWlP_}3uv$bXw&z*_d5CibP(pd@sK7^T__hyl$B>KQ!|l2TKudx`phEG1}l zn3X_CN(rOQ-`(ZEQAt)`@pCkr5#xO0KlJG6HQ0rG4gcoJ_xzDrqF#HQ!%jQ@*vprr zJvwdD#o`fGo+IG%CncW|kZ2Mfp1Sh0aEE7}ZdLa$UQbi=5M8ThUYv1`0JcHOIovt7 zx8Lq)oueD1z4OBWy%%ntzkTKK!;SM0#*)uZr`22&KafP3I#JHp`^qny?17#(1R6B@E0SjW?ZDZ&g0X#QVo z*OuEjmSjm;)QgfcC0Z6eO~I;ichA^{JhU*z00zp)ubL09z$?i8?_kck4D;LvRp|zr z=!Pr(pdN^4cip?QkgPdD6X#IZw>F`Fm_OQC*5UcWjWj z^Y7x$9UX+;6qm0>0z@cFe4s7fK0>=KKwQiZ7l2hp3ofecwg`~AkEvDwc`n=sV7#Hj3 zyt$wAO3&PrE9W`lTsg12w?T+D2~h?gG6>J2&K(;h`QF&Lb1X>o10&S@%WK>NSU@dm zR=S}N7wkAe_RkBqq?%@puvyZ>h5bPxdyB^{^QHq87)w+=zx~&5|MABk|M=VQzoT*; z;cpsLK2`Myb`oQHiaFsP0CWiD2z>`m#n0Uo-5PK^ag4_z={&#BySi{M?QNs9_j;}k zH}KioaP{GJpyu;zJ(IxK6G>~O7W1t=mh;RAshs!S&v~HDecoJ(F>*l?@6|H+NVM+C z^-A(Ru|eD|x;)|!zTaK08y7d6_;}pTvh0A>io%DPgAK&089ze6_27{f1uT9|&cMy!yajYY^@=79^co9nMqVO>fu&jVhdqxK7jXXSley z;WngSm!3N^@cZ~}_?z$eQQBJ?_^g^_un(8(hXFDjd*%URRokb$d6@F1N_j=77AvHa zevw=(F!#iYbq(bU6=Tmb`0O=jDk6hSltNT&!=1nJuwYVc5S+Sg>0Je;j@EwCFqWKQ z$W<~PbN>TNdIaIPR#*6K#F8=Px&%z{JGHThWPxbo(>BP7Sj`n7fwI8O0&8_$=S-S) z?g(#$@~J`fj5haz>BDcsHI_lxb1kp2t4V@B{91ju?8Z{D$BlSoC%Bqs&ekJG$zP^C z+u_^9VkWI+pC`3gX`8-FunyK-iuG8sF2R_lOhsJKORm8w6hVj#+Tf1B-T3s=32gTJ zn*3$m&Ty&mv1f=SLRnodZypiYIg?(;O*5E?d(DoNPucD}?lCDZ~M<_WR%vtHR}J<)U;%K zw_ISTWFb0l@#Vk&{&xWCfBWYg3lcy8V51dVQMw4Yyl+wbpy?<{svVCAC4JW=3h?XG z@rWnhVL6=jf=0YnBOap9+VMl3xCcLPv}_G&S2re&{ySVx+a0V*gM)@GA{KPm(dKjo0e?H+ylT~WAaLY|`lnUR&pxpJjIu;3_DIGq9eZaE$zJ;|k9HDudA>qA zms(wh)}fU55TrbfR;2zx^U@!B$-2fXiV0ea3DU%{kP0#lM2Vo^p*sgN!pz7W*1$ng zq><-f;ZE1rh}3%I(i$T9qhgN3D>4;A@96NKE|g?c5X%;>5=0V@To71@HZB-bEADtW z46q7V%rtIeTeunKM=F?0$|#|b2O75urnd=w){u=~W<3qsKpIW(XIGbay||Q_PMV2V zZ32f@-{n24%kve|Q_0mOk^XhclTl0h2iseGcOM8Kq{Ng0!lam$F+oL71#v?zgtFU! zWs}nYRBYG0POCXEJU}!#E5+N#F6rUL+s=i6{-td{V@ZXOTX{9aAkFIW=J-*fY{fey zTm)$82Nq`+N@UDczQVT)^eaq^5Q0=Y?w>J6BC}Rpy`EZe!Owlxo1e*gzKu>Q_RS{% zt!BIon(@rfcxEP1#{2B@Ue)FKCartlrPZr22hZ);%SXcpz70f`BE6dt`pEpxKmTup zwS_2kMy>4_816%sA(YS$aoIVBi;W0LlVuHt5<-ymRn3p+C%v9?WnB7RT==uBu1^}Y zF#tew<@5lwhHZETu3nm%^%?J5obh&H#?ugIb$J@&Y$;DRtuWi)BD~PG(Vs5swm^hq_w$DwGXw)FeQGF4%2fV$f>n9eNip{ z!T3{P^r8Vcfdj$Bn6udqh#k((A5FQ-!Iq+e@rzXQ1bbJP_Eo6M7aymU4A;7^rix!E$PX% zY*l86KV-3q1>W4bHL8Fww#A2C9yX49^0m+ zKbo)|W66-=N%!as1gjPQa82nazfTDW_0lZ>BtUK?nh{i1un^iIl!)u`s4dIRCq1#Q zaxD+|5d=Z=JO)8)1G8_kBzPY35?;Zu$Llj*Eo1WeCU5U6{_gvXC&{0g58it1!@hSP zr1k@;A2j%_R~Y4@^bFkW&`oM;I>YlQL+lB^fT|oLd15iL$SJWTCLB>YVqP)+jGNOuty{p#oTEz>dT7*lNdsIoGa;> z3Gb^(FM^<1XUdS^W6<~VMamfY=}E|f9`8myo-g;SD>EKQ?>CU~iY!(96^Z1}+y{Ni zTWji@{0BXww=o04fW+vk*BH$Uwvn`3&RyZ#JP~kEU_GM z$nolZr)KKBBtn=n#UU z~^xUreX&gZB#2c{UnHNtZ0kV8J;f+2Mp4@io@ytY$^mxVCm#_?HyyZZ~d-qkf zCNUD97s*(bO-krF@|-sg^LjO6IvVpLxA$`t>{xu#*=DBM>^DLvl<+#=WSsD1GLKv&_mb3_rq+a;ni^c^ zamF(Zi>xHRh-D-%iBv2ppU1}BJ-%k&G76d5gWz7sxv4ku^%DO+a)l8N`0=bef+dvUK#7WRzElt3W}(NK*8?pV{sgKT4_!%f zo;Y+LUdcD|pW751RhwqSGoR~Qh_6iC>I-$YJBCsnUZC0hHa(y47E!`8*=8(Yk&i@1 z5);*S%1udFY;LV&wephGzKDe?mH^q*P)vNR*=(_BnvXS+(uy$$LxSbWT*-!mv3!I* zXM}vm3-*D_h+_9<)vj9Pr50o+VL%cWSegff64ce{^zbm5WcUbtB6q}k!@iNUrE^oF z8p^ECi{X{CIZup2nDZi^tIQ>GmzdMlvzOQ`oNQ~ZNzL_6HJjQ|M50Y4Ja4>rAlozn zi$t{=mmk?4$i$0IQuXgwToxj^Xfkic`M0Th5|ExVn? z0;z~8Pko-B^O*8NMj_34q7($M1m+TRy2kaU>?O7lNydB^c6e8H;8b|arP+)V-nB2< zRKmN66CP_9Prwq`Cj%?VaxJ-7uNRy2W)c9Kft$nxV@99j$B@~SCE^K0_4Anu&Lh7- z$|G{uBIQw^zs=o2zjSqT%LQ4?U&{~5BI#VSV^-61YGbCC+NRcgXRX8F#13TB&xQ6cT{)|%38Rt1~W zu7nqRCr8Frh6yjQPZo)P(#AmddNGlC)wDb4CebiPDaN{#Ug87qF-T{@%Sq&J1W=ax zju|uF@rI;j&Q&>bW7Mi!aCm$(r1kNmmXej0-pwIacp!ep8)**ZGFSXY zZc35pgOtJ$ryv?#mddNpQ~3$86n|ZDx{@>7$flqH?UwI)-=vHRJKw1gB|MWyYxJ@cs7MmTBON3(2E(D$5$1uY1740#TfbXDdEoP9i93Q2q>;5QIUtm!L6+cQYk`t zi*VIkeAGjt)Vq0o1?)F>R4|{)j6PFsfx8NT!n)cbC@}pM2dvbBWLnc8lrSA-#2IL9C%p26 zV}&4=IOWMuIY~){A&jN9EkCX1)P6ogH75g?y$$Pav`a#z6Fr&sLt2Xc6KE2D)h;kZF%-I}pkT@|En}P(c7Xd_l@HW2|-T zn&LN@@_xlC41p{**GSG~(@clFLKe5`SwA3WFyEO?L53jaJIxC)N06_Njy*x4DX3`T zgvZBpq>&y*sF%}7B~8qi$Te_*5eL3h71{d3Vau%6^cnAhiJoHmVm4-Paf2#!!d<~} zAe1N)M=y0t`VkqGmJ=Mr4Uk1{Im?b%`{MF$ifZ@yB_n=Gc?xj{RcYnF1|Y08Oh?m+Usu-O6qv4U&|%fe6W@w{3Yo-(^!d zVPhSVO{(?qX&HlTN?bt7UOj1E?FP&HeU$GuOwOE+T{3y%K<&a!(NKT#a$&LIkCtdG zcR27-$9!3Y65410Ik>nDmNL&-e*ENP9`ArRHe3y@`C^ANo_K|XNgpH@LU*j$&}~SS z`Otq^cxC}K?R!mP*{v@@(zXdh8l)oo*YllZNGT<|+y(fwO-I#u)J+}()HjIl`~5qf zOb*XOY%%P!aS0EhyghOaWJp7ltjYgU zd|E@=ManXS_wVm`!%wGmwQ6o~F(Gwi!eco!Vw`Xpp1H?6LRr7w-Cg2WPc|3xiTVPH z!4TQv0Sl5fT!8~9?RtcO^=^Z2kl)33)si|xW2sv^wsmB=CjBYH8B6aBAC&&-S_ zHt0xBlQ`X_ox1JX6q>t2t-CpzL$SO3T~fPC?k@G8EM74stKq0Fl0%&A?&q3KGGMh6 z!q?ytcg?)fuGk_Xqv9Anvr`xoFo2Ha4#;_)kH;t(@XXD-Hi{R3p9faI_JpY7KKWT< z=}vef&CKFFC-{*q@K;hH4=5SWh|9CM0AGzHFELfHwSm(3{xma>jyJkFQ z@rPTHEC@B`IB-t>4*rQ6i*Lkodtv)kkJ0F-%3l~dwax=@@ z6_~r!smsuuR4y}P)_sGQ9A479%i<-$yP?yjc+Y(SASLgS=AB#FeQdDA4tOXLB*p#S zmW8Wb_+os#W;o9s`yPaH%R+TTMI;W!9@;(D<}1eXFA2FWcp5R_B4=&FVvO|+TTm|Ue3Z@JDC@cVJ{@=c1nr)PpZnld2548#`Ht*5mM6P}cSn(YzuL^eDw zn55I3uRp~U*+zIFa+aO%(?jjFx%8}XIoGI%@@bQjiB~_)2GgCyWUO3@lv($|X`3Q# z3c&N+I(v15YsZqRz{c z<0ud?fOn9;X5R=CsasEU5iw6BVMGd?Ng44k7N8m~&`%eTTS%^SuTLM;ktK!8W~fn@ zd|Fa6pI2A9vt8A+t(v?GPE02Ag3WCVsP%lI%@ZPS9l|YqtvhTFa|=-X5CQuj5Nh?R zg%Xj#`DsYN_ZZ7N-oOO>GJuC^khqyj4bKX<!BA3rj#81^-!%;@?-GkT1L()x!VAT#Fq@I7 zw(c-XyY;koQNoLuq7*udN>Gi{8N|*UmT4tucD7Bwj$L}Y*rsQNi*#f%>J6~!DXpGb z7a}cLO00`!2$=P>RqyAK;m*OqRFO~b%96384DyKFydT9Jg z`t-R}@cW7S^w7AF7A`TZ9(flQ45MdW7$(+v$gr2nIq%&(vIRc**u7@X>(X@C-4u63 zQ{b(Gsl4FexXK6?K67}b7lf{j0=@^%ZcOj{0d($inaHr0@JtrC$$-D3DYG<==Q`cEn ze63R|>U5-EL=~A|T`CuGMLYzasdiBjD${y`o+VXiXW`4lFKqZVaDDl}4sc?Dm3Ktu`8IcT{I&ErB*%!nzs8b)(a~3Ut*41iMb)^dxk1+krER-wG zis>SWgQvtNVoHB^q5M9ZG0)Ft?8R}Q06L!1(nZbsFnFf9NG{)LFp_GQS8p_uW+Q1- zgt^uO_)ObFRSc#01qtA7%WNs&!@5On`kUJHz3LWo>Uquu8#n!?Y{yV8lES6-#GDDq z&<6H}h*zIPow@`r^y@*~Jfp`8^$ALsw&ssnaS}K>biRRN!^V@RWHY<~NybPbl&AsS zxYg+am!+FKF!xKBlq*u{GDsF_7GMOQ)ggRV*gU`lKQo$2b_N1ynUyW-(&e}G1@N}J zLRz<2o36P!s$0aV+m26~Gtd<-3l%PTSh$E)cWO?N3@pJ}Ec%;2X}){dsY~I~E)h+H zlK(|=1qYiN1ccZf&ywe~b`vz`W#YwvZ?Z-xuV!RR7)<&`Pz4ZNm&irEdRn@OEK1=s zV~hN0fWpt>Iy4+W;Ee7voMfy_m^&Y*N5@pm3Svw470x(Gl^3sF&jR)}UQTX4J&X#wLd-B$x@ ztd3u|s7+7R5rH63@(583p*~`eW6&s7o243(3^w9Dl(HbyWG>?Ueo?we=;D_yQo6)eOjV*n&~U8d zN|Xm z??n;GAp0dXvJ7R3_e**MO9vS*W6ovGY6nX@!rbUEv3PkOay%)ZzA31ZqGbQ?P#3l8 z-!*vP+12+6fF_|!TDlA)Xpz)K(;d%1XvEMmk6o}PeW+}a7EoJNdSXC%F569@2GnL5 zk^=@dl=UFPpfReEGPj=}E-T7a$T5sMjv*l#Xure?WGIUqkobuhk2S@Ne#`g4Cje`^ zj0`5QI)<{LYhnHKV@>T5lkk(x9T4#+)J3IBCFUfP zWymf}#4aRdORNPf5;35*tBlovd8Y<6IiTtmhH{8uU?`swd4y36@?IL`;`(%P3=-!C z_RARym$Iu|n8lfQDn3?e{%QF>7*u8%Jdc(+p*n=Jp=;qM0)S9*nY+rRPAZpB=pyFN z#`lZ*8!laB#k9RGg`xT6pN4pTu!GWvpBD*!E`k~88HkjP+l9> zuy`w-ScBVpHQcX|@DcjaVvzY`EGG%|C#8!-y2IRGO8&`MD zHF{ZTn1n;oY}>ZXpA;c-!J8HF<+4S}2;nWJ1(bnSBO?-RgoZ{)9HF{p9jhZ^ac&h- z43kcs8_07ztb2+-eSIZ<#}7!youeLE8URE>7ABCus)Y9^Bw3`nfft}Fbnc><`WvoX z5|OURKaJ_scIofN{s~2stv06rLKscX+RSZhDG!6t7Lf~rTgn7(QQ0CNL!yk(t|xL7 zMKdE3ZG;GhKpbJ>TpNk|O$>t&7cy43u=r#UM@RVA&!^QKF3C>z*P{QDQ36Mnj>E zR=%RQJT%fqPFh)M0i+vSRDV|IIS#ygzCKl9lM8l@a|V}}fLQ~fL_&@+7fD^DS|aI~!X?FA64{bZ|K-Bb&Q&hIA^^9gY(};LpOCanV2cb4s#+33r_dJjFeH;dH2Nbh zTP|cN`cm2AyNWha=ZY#y0GEBl6$x>gyI3F7qqbsB}k;pW+qyn4irYx;>-j z3I~H5vVX)}yu#(U7X7DrAoEG6xK4#js$5d#k|AkccOeGwD)t#MlnL1KtExr2wWVlF zEa}W-DUuobi)BkAWrUa_NFx$ok*K1547f~UuBgg9%@W@;Z;X0fG4R}Xh0lTRJ|4R@ z#@?O)-fs7m!bQ3zn}MamB@!-a43;UEf=T1kB9JaELYvWPEuWFvi%d?Gm?TQUmb7Z= zcSamSTN=*`9hsrOP_{^Coias*R4yis5LFZbE)?jBD~juuYRMaelr!ElL&<033C{F- zMi&>KmPBa?;4zf@0CM?y;X+WfP~j3Om#!1(k_OSKznG}M@O(yN8I3Y#IvlT&6XgqF zOIo#15d=p6FcJa-p)tm?GgVvP74j)HC4V=?EWlcp z!df!cB`R7XE6V5#Rf_~JQgm7*LxqcYqR0=OmMv0RpTS!+v~w~{6-9Lmf&{@wP2m=E z;dfRJB~CRZAXJEfTmy3YW7ykzclqhlnD1#LnU^MIg2gR7-f> zv760}gUN&N&zb^DmgWrQoG;3^_dbZYh|3L!nSH%*k#;Gib2q|8<&lnnQMshEU|gAx zwLA@CEfVI+37yJYq;CnUmdvYKVwxy1h>0hPB`%U$`&w&6Qh3XAinnNNr|K5GFxMw% zQ&NRNFD6di;J~GNW{_W4CBD7&b&ITGLR@_1(rg@!cJaoU{i<-eY~_#+fzjFrMjM%= zeV26RK`rvoMny}CwP=KkX1I7(l=~ubhpB3rhgC}*R4v;5D^$2dJW&d_h$srh)^dp% z-XZ~7SrRYcW#jMVTtLhr&gVrr^VKu8Y4|QHi#OBGZ#^6-vP^sQ^t5_Yw!M{-=(%#p_-13E>*N4u;&U{s>( zQ>ePO!bOCxkkN3!%Xw(@8@}!&%JmqcB2eY3Xo+RHDb^x&i)`&f@|IMZtE#1r1unLi zo6wen{rM{V$7RM!)A=}F=vrrZQ z**i8D3id@2dBs8%S}ys#_*~U3(xIttIU__9HaZbDno_!Ho00i7ixn;AXct3NM1~@% za_eos6Q*CZq`F+fW|1&g%G^@&7O!e~3H2>kxqveXTx4$-+G7588Qe90HFUVMY}stw zQ~-wZ@|nRkYnDU2xhM~u8*(^!bZ#lLSj^}8b<0L|i)OndLNsBcQle?TODaV>-)Cg1 zS^UkwiXOj|pC}aN%21@D1(B4ky;9NQVJ+VRV|(vxFFlfIKj>}0@~W0{7r5I$(Ux_9 zwgd+Ey(DP92F=PAUZs|yFrQ*pFJV~k$`&lhd_16@59IULxrX!@q3hQzyJ1E*R-!Fa zaMZKA*IA@R6FPd|hcdS#tyu(`Nt5gOi8OuAD_Uw-v}ji_D_Uf1SJ7f#Kk!8jt5{4^gw+clw#t zFO=nq?(_EK(>^J|)Ogwbic631>%kU8Qgd|W`13Vr8l@`{nw2dGC1PniLDV>?-ExZx zp&TZ37gn|;jIIRqn$jZ${W)}0lX@l^6DfGq8x$!qnpzEZ8W}M&)hrR!hgIpjB zhc(NKD_W#dlGD!y^578Lr=lg)DXr6@Wit`qHxb__;e4<+pOo_&q$}yXFGAB~K^&it zzZH%N&T{2g$EBsZgKU4k?=LD_w39H-ONnb5STPt9G zJ63TuP-rn&b2ds~Eks!=S#&p1YBEn}FjsOmK2at>R3}x&j-~(re9%cmK~#8N?3-zJ z+_(;fu_|h;dGefO|C@P8G0!;U6-1GcRJKpo4|lnAKVl%QmK|I=9-VWS%jNmG?|UNZ zx^BDO^4F^33;f^X@mSaO>+7p?M-h9qh*=$pT`ZOC%-pbW<8bQw;q!Z>3|= z;r`;q_=s*ce0hI=G3ejaHGlT&*DvS1TEv0+pIFqe^k&M^hbc?DQy@2KiRV-|-pc_s%iJZ@uW_nlrNUS0+kceuD$PfW#& zL$w#9n#HK@Q0>L2t`q8&i|lMgvU+>styCIlUwbKa*5>ds{FXoC>-@Fv``^ERw=G}c z!|G2xzn-3+s;X++40SuKZr4?_Sk!bEdo7B6jkxr%x;Cf{MVdE9${bd=s``0Yz0Xy% zT-061fPYZvdw-dA9^-HM{o7l|ue+`jHKl4~u`CQL`-Nd;Ef0~S+RHU{Cu&GV)R0O^ z;(bm7y*$6nlUin_mRXONNqI?Qx9w?Q|Lh$R`QLl2f5v4Y5%EX-2yi&C`f|DOEt+Az zFCXtOUd78}wa5q6A_uj|Q60!ZEpk+gT+{^1ViqhcZOGNK_~9onUQb@U>-gsA@0_e6 zB8LC}Ck6h>pYbnXyjHN4hlz(ZTs2;nmpY%%yihlsgbUP~T-1sj76&;lo^A-rFX>#m zFOdsnHXG!!sC{obQIE^pdD_Q69_RD*{^DcHU-{Yi&!0aGv5HSF3;A=V4~O$zcuvW^ zIwco%LhjW`xmOd2^b~qi3cCDHhJ2eLzh=mH3(2n;^7CXlH0E}@)dXkHuq4Qdh(F}t zN%vQE*uH5T$<+oh9*XPQ2)8tE(C;Du;=s~{h zR*GJivzG7OeB0)$&N=4znSu#^cHtw;msoJWkMn8gwWi5MpDT~`B!c|-x$=ZQPp<0? z*??Z;wqkSTx;|qo)61=M@}Br}|2Jy>oc~bA_j4BWRsSr{EX(*8N&kx`zvmA#EbG|SE3nQ=qG}(aH7XZ6#!0WRCug?a&-UE~sbKy2DxibZOZ$Di!g$m=d$^fka zplhYCaG4ZRh$P^NG$2F*5F!Pb`-XrJNx)h)0vIBz&-1ly*1a#y3Fc;%A!wLu7GeYt zLI*H}AtxFOsPh8YYXSlQAOM)RZ6~E{AOtY%OkRi=H3UICz;ia{lzE;5AS7TaSmv3P zxnLj!PzV8#5I`XW03rZ@2mmAk0Eq|?f+So)50DU`G{N$&ofas=J)jJAMtpo&n1-TF z&rhQ1gWx!AoF-b0Xhw*)q8@0(zJxf95S2!>B}5Gb847wFp>O5tgiOF|bLZMz@v}y> zWdvy?qeyxb36CIA4HAqXp$~(*LE@?qP{@33)=RfHi|oy!G-&UcVe^+vOBtEQDQJCa z8t10lqdK~AgaUL6yU4(c-5FrE+0*AgQ<<(^k#_?|%7v~^gn*g6hxckb1ksvUW9uBeNSo$?WE)jB$kWGX< z8IY`w333b&oU!jCqz@4v#?mrG2!Iu37G!2UnKEJ@O!o&<{5X{_Ocl91gsJiw^eIGk z0TSt;vjANgVk_ysJL93JY-Ur$vx1MTk{k|P|+-=zywnc9-B)4F< zDOH5M!%9MiZWV7OxKb1|gSZ(2J44`S5XXe#vC!Nj7zjN%!-1S)=I{`uWO@0R3b%K- z9txxwj8tEWgFt8+!Zt8t+7^4i$&yZbSB%ZFpBd+livK6FOQ2suHOmNe1UCy>JH(fP zP?Q}*n4Mz(z>-L@d>Bg*s7gW4#=2E|QMy_CM6*o$uX?nW>Nt6c;f#Dy2n6unA+u~m_Y3B50ab{X^~ zq0b0RJySygWeO$!92&biWH2gCzq6^6m)#B+PaU+3&iC}4kegfv&lf^UFb2N81>*q_%N#L3SM-#Z9zy}su+Q8QZ z7PS~_#iT{>A$Y`;wJHU>#MsePuV7~dqovw(UZ5j*0uXa$jU+>t9*y-1)_n;~j8oto z3oKgToGZl$4+S1USqaTsN&;ss0UfiKdmYDm6LuNLcH>w(j%~-WGh(;{RG4;C7QZPx z0gYfeTiKKsCz!psHgUW+-k%uy?ZBfK8rxzw7<1)6U7L{~lfd#NzCs8uMlnb`#+b8J zi@r3>62pa9DqK2CFz978C6T3}SW9moA8!96!qws+BU~kY{ucY`3QTW-A1`#*fmbl} z*M)Am&@KmDPPoovUo%aDMGQIHIYX_>bB}IIKb|HTO8s)23q5(EDK9h(23EeG!BJpy z3=D{&XEk<53O7s2|8eGxpzO#8Lu3QDUTekQCr-w|${70jVng3%CN8u?hQ3Y@hKat@ z#K7tT{K^Qte5K|@?OP%N?TJ1Mm+A~nh+A~_44vJq9q@m&Tw!Bi5YdO= zLyu#3*I%5oKJcN%t(|yNCoO4WH~;_7?7MGfa%XtbAYu2atts#{SNFa*AfY!apaRZ; zAAqxO7<|JR&`0OM7?=Pn;1c)|;DEjjkUfg*12x@)Ny}l{bI4xMwBa&oJ1lw&#PFo0 zlH;;9*x?z3N|nNaW(MSec4RtjXLv5#L58W9|CTLl$y<4*J5%PsJq|IG0|lddXHX^( zd>@RH{e?0*VQaSXtvqw2l|7R!Pf-}s$`(<{v|m}`5cm2U*>_mvgWqNnC=+`3$s?%v#onCRozE%plSUHg`P_!I9J#38>0k#geW?gf2WdnCMkbc}e zA=Cy6Odw@4IOOU} z71u2VvPHtOv`L_W+C-YRp0f9}V3ZN3dr>m-b}zC-SsIZVsxmWo;Xf0=iMCm?xi;;t zZ9c}hE4MMSenGqj^bx5{6g+j(mxsVW;b^5STgLp^unl^FtYQ1EPh@d;I6-E(d}K}} zpjjlKRiyRi)vIT;^5%L|ue-54k6G$`+rkoHf3|bPuq`rdJ4Onk$f9=)`^W_*5}`$t zm9Ja!-HJqw@>bgP=^zdxLyPU_i;R_3Yr<*9jSNecC9vIVJ7!z2X*^~-u!&?tFwh!V zNMx;iallGQbSYMDx*i}q?Aai`-@^X;dh_xC z&xxX|m7`1bvVG8PB$BoAH}-b3q1}b%v!LiZ6r|}q)N@J%E1}WL^=A3SSoyBqO3@~( z>Sq0XR&w^Z>|I+F__)xb|46@eAF1cWH35deSi!ds72}mWIbF+#n@v48Pq4w7UC(T> z2GP)&&4%ua&9p3+WjP#H;hQs2@p5C#GbK78JWnC2qi#(HJbSbaVYZ+54b?*}@NRQ> z-3PLvUj#n1ghZ7}G}wbth*nmzK_6q~7=V@Q^>t=c{p7HOL=-4i zsA^Y8P{BwlWUQQ084Q<>8mt6OZzVjWm1!ue5=ocKxmEY+1Gv61ZRBk2W|y{U?q+v) z+NdpP4aMJrC48tT{V?nzw-hm)*d1>c)5g$hIs;B--+osJr*5(-juPnQ%X%GK2|F6Cyn~aem2U-Vr2wHCyAUgd zr4pUxm`-{!J;D!LmI&>b28FSsTfzt$i}Ib<6qvz9r_zW55l2}$ox;j@?>>F{@ZnY< zlK`0iDeyO|z^Gpw-V1&gz)JrO_NxF6BUIq6gpJq?)2>zmF;if7ZTjumIiGgin@;^5 zL)oj(ScL9(>le>C2m&bS79Ki*AWzQ9O0h3ptPicMr|Wh7^((vs4Iu=M!Acw;t^7j} ztn@d9z)Byx)7Ztu#k2-bw>=|OS}CB)Tm``_g8)!vlLi7hWMYfl81$T0X88T0P8Nli zbOunL9;u$U5>;6{J8nPT$|Qh;DFoh0-)aKDO3W$NO2j@2ypvj>N6lH z&oGjQ`YfrBtIB%&Ss>KE6NG9MlHsdcA@H{j;As4viTV@8`r@|xmL0b z1=Y%NEoF1uVMns$f>|sgS)0PFXwWaVNZ(b&?-Il#2snbt7Frp8&OA;Yz{yh$0o4cU zl*8D{Pt8_hT##+H5|pHTWv)I)Dh(6>_6-x!3i8L$$5oA~iPAiw`D}@GBz*McA*03X7DGV)U{txJR zEAe3pE8$;*l^QEn*7dPu1teSTlkIH>rKXi!=pmm6w32TTq)u|JjokiSubVh&tQ=9D zB{AZSPZURIQE21lSF27fR^s3A9VfC<|9GTTsa8G;Xr&K^m5aq9ZzVvow9;L*4P+}z zw#wS!7bZaB*(C<<_S*c-;sgv1u|?;iyvuy726wU2vL#tpns{K@IyX`~?u;F@(k%242S1qL zG!KeHW+$1FqlUjQ`}1xG)eh%5(!5oiQ;IWAtX!y-^SO89!9z@nt;9>-N<56L^;4p@+-mvaw*;%WV zlkrNnakLw^QiNG50>qMq7XMbU=f#noc2R_5udQ}8lN z7i7n)jFmSKth3xU*m^}Ti*(;NN2Cd@6eo9xNUhW}=}{sLXDqGCS!TvsIc;cVt%W(4 zF+i}zN-&aF@Gw~UDDdBPeu{$US2e5B&?P5VmRgm$No1vy$Sm+}PJV%LgA1ZG>wS|g z%lDWFb4J^u6c}DU+83n_fEh4RXvIcXVM`YVtQ2SGf>N;p>?$f;(;`{a zB3-t_F2Ta+I5>$el084R@A+eH&kqkeoL__;Z#+yc8?-ToPl3lVUu^@%ia9emYF9u-D%+5~krftu$4cv9g^o zs*;51Mr?+0Bel|cxowZ8m1ehQm7ZLRglOo6PtpH*>?gJO6J>?11?-fX4o zpEp+iAX{SPL^jJ9SO2}018iTokP6o)31{tGgC$)sge!(*qq*7$P#BAwmm$gS_0Ip` z`SG2ZJRbJHf`~&;}H~fW_;W~i7$d0lLr*y+}8#yy@hR%TV#XuFnAVI1zbQ&RF)qA0h{%KM}$ zD-aIzn=xcN_h&lxnD%Cum2$c_i%q!`0C?+4fy_QqgDBucoBgoQYX<(WsZ1s z3}-;xm!~^&4~rWvHN%xn%+e-YrY2p8B?&jtad=^#Jh)5C2)L8GN_RVV3fHX5D5J|H zqswdR0xR(q_RW=82`|D=<$;*Ex)Xpz_UvOIN_(Utxl+J6Q>|S$P>aTPusK zmDWq6dp?|2nmy*MY~JIqYUP(6R!-Wj9HVun&C2z3F`rLi<>LFfdLaOt$jV2-zLoC< zC|+yj{OZldRVC5YN_u$-(zG(+Y|SuUbSz5>&xK>6g>|fzeT&js`7~KzWV@B~`30(S zBWLzt1%JY?Yx21eF7||p6zYV>uoOi9<>A7mDmR-eR%QS6V^vzt3f!f_wPrk{V1`|h zi3`^H4+_*#s6%kmI<@-$|1*2v>%HFP%#y}-urFd-wdc$Cd#_EB%PTBOqf-^2 zluOKl5_Ch9*qACxWeiv4XxAx+KC^nP0d&CXvAi<{TP&|tNS~EKJr+=o8(Fklzsk!S zP_C95cNXQfLm9e~hpr5KS6CHSPQ(^*MQjn2C80FRSd^|P#}1`CQHQ8Qlz3dJ%3_H! zL(p0GprQJpUtWHMEJGGv8y~+@jo*!hG^=*j37hgn&6&|1r6ZXEWwy}--vi2GloCp< z4E;;mI79omL`DA&u2 zsYUtQqKqN&!}BCGrRT}_Bs3-WOxY`nL=~x0rqtRzKLg=}bVNe9z$IwmgKUQE65;tL zlHBFBZ@4P8E=LkJ7M7gN2~lp-vJ%P|VfScpS7_${l4Z2^P#{Z5&-TzTZ?Tn2Z z{~6`2MLAxg9C&q!$nCaHOv+N@59=<^kx&B%qYNRBQv*a8hmKSwiL+ZPT_}~7K$$3Gj<9vWGb0_7EIXlG zcOWtmB&ST0#EzU)EID1*67fVSMJP3)Ov*$XwM2=afKm>dA}jo?4&^5jP(GR@F=?p^ zLK(*0t3e5UAnx%5FmcJ^_I7h9!vUhYak`;IQBH3JB|Fj&969wZ*{Vl*(VpEYp)7Q2 zQI_gR?u>;yZ7BCiA<8>jm4&Oyc9g6DrRW{XtMhaEn(}0CdoK&H!p)iA>nLa;74~Fu zt&+T6Nx=Y7hm;71!E^kM{d`MxF1l&Xpn$go}orJMoUhj7j+S)$yn2A*a4*Gnuhl*iC+=9IHCEQ_6jIL~Q)$r|u( zFebume_>gaPfs+}fl*HEq__r@oy#)nlo0JG7d=5T))2a69q{7;>klbs(3(IDL}4iq zAVe1Nve}DRg%ChkD7`L}0tIjV|9__Q=Ecs&ux^WQ793<5Vm{x3iJ6{?5?msyCP$SM zLQ@wJ+_Szw=krOZBBMr$JDnQw{gRqS)tkygd(~_Z5prd0azllZpTa>M@5|5tlH6!7 zDDhaQWSXuYqV3iiC0Vz#wt<;-Fl$lxs!MjB3(TaU7`Z1$Q;d?m(7< z%1{=7k%^b+4W&;h<&>B^MY)3nhTu2@X2Wr0JVwdfLRemAD0?45C@5nB$rN1)xjbaw z!x))6NI|-+;yMFBz8qgkk|-;d6^a#;?yzeIpMk$TDF!S4zsq+wMS;=E{bo#$R1Y zTZ$>ugzJwBu^qw7~nX%O{&&Rx!Vi#rWC!JLOIJ3%e0 z?B|9oX~?ZcsOpxqcHToBWK=q+hpLM1p#jRZI!Sq}GPd7AhH@?1Y&LVw5gK}t zw4P2!ZS~N8(Hco*`C9eZpj4LkVENk_l#%60l+V8yh!Q0K1xZog^Ym4IhQ_Z`m>EKy zShYozXkx7wT|^026_kUd?j%a8JBhMan2@3LbAg z+Hx6XBoR?AvrNyr76M9|GJULwBX2{BGOUBu_F|DVBG%V9kFQ9<3VY!U5VHr_Img)aw-#JPp==f1wuw{!f*0Swj zmJxd6Lkin!lvn*MseIXL(}aSpWQXXL4Si7k3@J%a+CU?Ow>_0xbx<|vc}XE`hCLB3 zECnT4-km^67=gukTc+pdCQ6vngwh76a>$Knys56}UQ-`yoE_|_5{#f|x`wV)eWeYA z61`xrWuyVZ`)^Ucm82*EQ<7M6jY|RMT#qUr2~h)!=7;q;v60l_j=flXn9q+Yd-zs= z8xW74VoIP`5x9+E%tElUDpXpCmDWaDOHVT;QO5SwLZNAXot8X`oFxV=VAc!Bo12X~ zh%EbI0VRA(TOxdNk#?0rGN42{;>zy0E8oiY;TMo}SK63nt=fzeP;PWLg|hgGoh2qF zzN`hk)C38DV<_(h<=rAmvJ5E6GNMH0ke8W5-X=Vu2qbqP=_rjQ2I$t6i78>r<8=
      U^Zk5#KNH?ml=jnZ1wdw=so)cQyW5Q_f6^M5fW9sXrh zx)8x|DVmumJ?$zW%4o{izKU+B(UWY|I1&>_M@e#^QK6iwbPbvN)=(Th)hqKh+Y7_# z&Te$L*C9vgEFoMzl@&(_W9eK_-i#T-60(9E15W%Nw$^)t^3MZVHYimA<;R94QIcgk zaS<%%wCgAYwR6e)gFf1P2Z;7H&S?e-TgryY^c^Z2y1-1zu{aVHTu_SofYRGjM~T5w z2O0VrrIN%CNGd4b0i}T)Jw=pT2nET9rzur9Q=YTwkOE5DGNOzD21z8K47N;589$!$ zGe|OMC{gZ-(of1sj`o@C8d@a7`0|FoqZ;%Nk{2Nt9JKRhun_J`9m2J=A2f zfRFN1^5&3|L!ej>TL@lNkiM1&7s7OS={pWvDwOzsab-tsYteAq1>C6cdIMDHMEMv{hG>zh3z!fkbDh5enxLUTc?*=VEl?(`Q(}lY+tTF& z1&C|1=o_bszL9KDdVx?EP{td>17r|u135}~(@?J0D@i6ZC1CQibx@vB4nzr#CZhbT z&LhfuMG2Ps8Rbqh~)(a;?Tg9A;1|S?j6Z;=Er3K zl05H9vRrZ{z8zh;suo)dQRQyJgQ-Qoa8Qa+EYZZ@j>j*+i7+NqJxt$QubV`}kXt zJX-gpk-ffr*^5fg`IqV-JMNl*k&H7K0u9FapNut_T2lg8lcR}F=-~+&pHPIDR;A;< zFArye0q)b<8MF3!2=k8uau{qnr~EhONJ>zGWrj|o95RMI0p*ZEkQ|xIo=L!<2RtW= zvrK+&`+p;pS9S6~ILm@^S5PKLxtmem0c8mO8DmBg3|SH-GsJ+Qgdbvt)+j;JQGO~Y zapcsjM2`!atV-dAX-UYwTA3@^^&U6nuq8{P^o4K3*<=IBtJMl5BTBTdXiGEN_Of&l zQNq+&bs$Pni}KK*3~^k+@-i~%QudCLB#H8m7G-jjk>%vuWVRHcakCvuDA%j&*_FdG z%JZ(Q+t#LqeJ7iYUsojA!pti4rS4L^G^WH^WR*tqdWG8D`ErhcdqAIA8bEZC%99}@ zV<^fxYGjN?SqF|xBzdAmzNmezQNCJ4IXO&!W0ho`(t>)ZxDtB4D_fSeEB|Bd?0OnU z(kN^RX#_3WYuR3HkNOg1F|7X_c{dSd;SZI!eCcz$X*W>fL zTrM95R|?A21WYOip=Si8z3CRBH4oD$-xTGRSVokPqs#+9eNCSyi-KiwWb@zY=AIdv z=D!vYE-?qpcjyicQ)nqMkWVnNFVRAAfK2-Rt%+?&YVpM=uSxm5jCd!J*y){-CWr?B zN7UmqpeqtwN#{$van;znxbyxSQ<8Op^2|^|ijumCDN4`(gi@3q=6cwc1)F&0)@l6f zPemytf%1+}f+SGBlTEl8@ZwG)7zsd}! z43?|vSiR(X5F6J7wn=?Gh7yD2)2@^cw6JxV(lrSvc^7y;%0QBfiAk!=ps+_1D0hZ3 z+VTY~4JBkKq5H&^IiD=W8+?k{)E#A?=4)>bq1+Nmv1N@8f%Y9L;z%sDqPB*&@dI1F*+nh7738Od#e{HY z7AU3rI+!V<+!{({sVHv@C0H6tNKtyCD`Y4kL&+?QnHzfgtD}5Tl>af5AW10C8RZ#J z?zzdS!wL|K33*cu?KZUESU^e6nKUGp1mz4@@>AE*l~;k}04_3#O=ks1iAbCfUJ(-l?+@^+Rg zn&yCd5U3}C#wbu|TO2nfP=2<)I!b2g=aQ5oMptSpy9zOP<<%!#$(>B57hT!tXb={8 z%(hHWRuJus7Y*83ISJIQ|GXNackgStY}{CaqQW9Zy-ahaOGm8XwHgo$8A`}dLWB}B zln|q&t#ab~Ks*KmZ$c=uM)~eF#T++qs8_4|uX(!RIs>BXFKeBOSbAeo+m+VsU`SUi zW)bI|w^0`?ULQ!dd?^`CdBO8Wn7Xh89z9#r0xh}`Ntl$kfG&@r>=k9NCUle#p>&oR zO1I@KNX0DRNszB4`8vv5XuFRnL6T7BEd3+;gVk!$MU)FRM46z3FXQ7q(5tEpn(~D6Biao-i?0wrb0@8XTVFpQg!vSM9v&>KH-@@;s%wmO z^<38&?CREyrW|h*Q-SX-$ycL%$%mS0Md4O-j6jGf$J*UZ&8nPWRhbXr$}ZRvB3I~< zZ@r$s&6PM;=B|WFNKGjyeb-j-DCBo0VNB}>I7(reqr6p=1)&^ND9fRFV?J+uvdd6H zgc4Fr;8f5iP`*i$Q;W}S7Vkf#MuLXkZeYjONb?|bb(`A z3re0%Bq-@aL|H;(l(oq|(KzI4k;zcz6?T83!g^M(=eovVS5J2JXxEt1TO5S_lGoS! z$@;1&-zQPt3d;4uwZZ}))(W*-jmns}7}PDhjs*q-C7c-4DTT@-GLmY-0^%jzSFc`<8Bw?3DBrdxUzgiJ1fdQM+p&1 zh*9P-y~T0X(CFUTPYY$%RA%&i3J4SQ2DH!5=o8_(^B2t)(Y*2-y0q?WK~d!v(tcul z8Ch12a$w0*Hs-pr(ZUy9=>-dca1JVx(hvfTOkC0}Fdg?OtKTGMIPFz;qTIO;w&yPq~|8=S`I25+{dEg7U{0<<3xoWe*WbNKqDZP-ZOI$A?ztDczQoZlU)O zlXR5t?;sgaz8cCiq6k%3taHQMQd^e%1u4oeGGXo%N|f0!c0MS?h+H;@QI;jSk`R_6 z-!tDkzhqLiaOI9r4lExPC9&-Lfbv68-lZtlMP|!AL?~z2az08WDWUg8VoF1~QZ>RVN9m#WM^W|(%6<|hR1q^VVabKeqy|o0Nv;Ez1m&09 zm2yJ_AZ?ype4aLOrJw{$)2RMe=E{s@iyU`-;0L-J1fTA#!rEL&tR9flboKrQ8)6vf zDMoN7nagzUr)zHz0qddn5T=4yeWmeQ1mk^$aFgpDDhAP;zRy`2 zwAjs%wxcG+I&qppN$jb-Xejt2!yN9l?vN0wBQI)tpU(}NvEUuU7*AnSoqzI+}f zG-RQVfE5NAYqka%Bq1VcLFtNerzl@jlv_uM@q-kl_v^hzWwIKkv$fiKV!mB`FWksx znkOO2Wz2n)NcWFFNQCp-Wt`M(C|#8)L+OLDUq&b)MfnPreIH!8Ay-0*l34C67(f4m z6;O&Y_g*o*;uOk_qrAJb`bwr$l)n{a0WrzQ61Iy)imR;2fkW5ylz|M5A4d5t1op@* zJLl-R5-gfxnV?)k5hPwxBYav`G-V6n2cO$t$~cDd`Pt*QJ%HQ7)IC8v&*1jlEq{{KJIIcN6X^_3!$N94&M+)6H?C1_sxGD)aQ!Y-%j)~Yh|2e(Q(n|k znGSiB1*9$5TBS^z9;UMG`}aMnjVPYPi6Pa>{-?ay$qgI#xHzB?G>s;|xQ@%Y3l<(s zT7|NyQK}`cK}r-UQ4^(|t;DHreXVt0C|y=c=i8VN98vfc3B87SK#f*dqJSir`K)mM z4GL4FE>%oF70S*iVY!)7iBOu}#felRm%l$Fl@&@tLa-IeR0ou7%9kzs!7Mp_m1rvE zV~x_+#V`6*yeO8TDqJpkU#DakO_G#M?*ZkNQ9{xvS4P<_QuaM0J(cf#fW0`9N){X! zQi)tDB`t{=<8jJ(K-r$496`y;jq*+@&mUnGjg<9JmXs#>sG%$=RdR_kPL$jxqME0a zefqh~b-|JyIP%0PQ&U-^VERS6q~=R5a%IZc)>9ct84?kW>@|cnTGrMAoQd)WFy9Yx zCR~*}(Z^h}l={4udZov~_0MuWb)K;LEQ{NRn(qt8*Qp2TXr1lxBzcdEzj2Q(3irfn zWwY7FCVSWg$m_w3k9*>w{Aw|kNtTqhRH#t$P*PgYl0SaqVcHsFHYhjv;h@0K^{ITU zU*qe&{INs@9X zDNT};DUD9aAZE(p1m)ZFQprWpq;pMj6scfsMY?o5`_PME~<%v{IFGZ}P$AdXCH_H0=a=gQVwm3lf!t~eP z`#R;dP>xE8^C>w|wh@9di9JrqvR9WVd3hmAo6C{|S`ynyJ>PPEZ+khFW1X@S%8ry~ zSyJwV^0q=*Hmq2VWe{4S+?JHpP?B;xQ%WdFxh^R!l(7;@p&VyQILfB$DPKFnPV1rvlNHMFit$w`JE64k^)zL7gmS~f+oe>#S)hDFN{{7q z(>awr?OK`pxY^`JrPZoIVZy`N4XBUxc6=aL4Hehul-1T&3jq&o(~Z3MX>|p=zFSAg#KZZb8J1|A#mlqj{`8thE%)^ zoED5e#%cG@%ToE~oK)smI%Qj>RwZ-sJal*_RU&k3b;qA<#Pp&W&BFO*l3%F~oxEtMN8 zB8KU>$@^u52##KFq^t`8%g@9i=g@A5r%CClEGeT=nk5DpQtmC4q+BVbjIg7Ou#Ybt zVQr0j)ZZxor@}%gf7SR(%GOfZnWR(t_?lDMN-8(0E?v6LTn^Sg^V@+RNYPh?iKslUO7$Mq zqncEFjx@?m?hu?`P@Y5Sm`a(eLfHyskH@1^?q^C^3gw+p-Z&-i4haJ`=^xgkTTUt z%C%8?EN>*1PT7!BV)rKA#v#Dbr*Q;B0em8fbe_eL3EX_RK^l=~{>>ql5^bHI)T+Daz8dVE#NK`7U! zD5FrCWR3FjSEiD6G?nj>FnY$$3N{VNaLQjnlKJUh7y>moZNWw)p{IYi=c;HSv*q@4 z6B%heQuLA0<`depB6#l#X}q_IzhyBG&dT&+Ij+DH+Z+syUX@seBmm}{o&yC{@xY?U%DQFcO! z63WSvzl|uN{8Cch3Z=9kfnms!PU(_$N|OvTrAf||kUXFaLP;b>8h40N4j90c(j*PZ z1ky2&wgzdM)26)I2Xtxj`ozOjhMl%al%H@A$|9BVBqc2uD8HAKv>dg!lg3ggD%65SgmO|;> zfX*FZ_u5Hj?j;f=l&DjoRLWE1>tK>gldF&cC%o;T%e3TKu878-lbQ@xCLUziJa1X+0t>fuxa) z_7WjwI%-D|Z7JgIVYrI+mDLYvD?-44`Zvw3@s*bcZouIBb3vCX;+McHHdYapClXSG z#|WJVN*c|BXFhZCb4${mpGv0$8vJ^Mk(NByDZiJLK`6Hel&~x*zs;1|+iC6yq za;vcU#{f=pAnaR5mrT@BkxLMf^IpR_Yt zX&?ros2d1@6;@+?jD)82DIcKE1));J|Nk4uxuLURl5NzJEV_@Ele=w!WlUkRKg&8M z01py)VfGbMg#)-rz=3-ZKxPi0s->tTluEe#+^Xf>Mk$G^lrrk49T*G*2HSxp@obm~ ztg(c#eatWxYqGQ*7)X|Q{WBS#z`s0U39XWcP^?s*#-6WQrOK-VJ8YG=8(8v^O5mAT zEC_N3H8q}rxF!}%j#mhYc1LC2(*`P8H<~0%v@<}mgUpaA^MKS8ne&^PBXhc_aUxK8 zHCZM$sp&BFq#sNb2_XfdnU~V$b}Pe(%G6aELDeW=ag|#id98_+S8uRri^~Z-Z?&>p zOXo(SA=#0m;d9`FR1&O`5S4H#D#fKz376bT8S^71MWvW5Dq)gH+j;A_IP*lfnO7a% zd46CXK@m~z%DYzJ2`m-m{V@JpVMs7tJ1{W|sZ3p!C}m-tY%m&XDW{ZMscL!AwfyST zQmceXt@5l@qLiSoGOM`VRw|PTN0&B!RY0Y<^pRP=7rpRnB?!Ox-g8{Jd>?(n5?Uo(_Eo+PJYPfV$IY#{IJ)8HcZ1YwS>Eti(8?fAVJ(M6=yn|BKkQ!)!VoEgA0M$-m@dm#a zZwClG$3U zlIF6W%yMh8U#&1~Y9~Y$JWMnqe0J_$GaWE1iRt{Y*1dSr_?fAnujhRfF8A(j#{h{4 z$z-`KORhmmR|I(~xz^F4-x+M~?(+iCJmW|SCG5)^N_o2TuA&wZgfuyzyv+0uDSUXe=d9uayZupGZDMiHnkkR(JyO`_($0oVJ^`ZL(hEYJo=Re9Yy0^du}e*6xqJuo8|niv%{s+fX_k2cQu&uqwuX6$X4S-d5Oh)ZL=as?|EA`u9 z#Vl?2vq_Bl^R#$kXO4=cSiA+u!8wo1?B-Mx)m3=hPNleTC0#CSIh^(Cr1Lt@@7_8h zeteWWT($&dcSkb~XC|#wHrNNEbfHVht*==%N;R4Brk`EE zAUeW%C^C=DakAOuH+kM!uaNMpB;*NuJh$D;&RJQKp#6hwK}vaG=GK9Ch}rWTBl_(} zehG|OpbO5<-gnoo@#(c#y!hOdK$rbA^}n2ArKu^*LK%FQ4m{B0H*ppT`D5?!_$gAT z!@s1LkYu|VDg$=Z%v4ulMPYl>CHU*JG1N}D%C*y+Gk+UD|Blgl+iyKpI9w6YeKCo3i+k1U*(cJBOb703 z@u|%4Z(5ECA^Dkj*%d#Z?Rh-%QWm&EKv0{^C)Diois8?!Xmu?sB_bwT95y@IXA*fL z92RnFoqJfhYv#BnL6>(7S%s$uYofamrR~B)p`UK6;>@jA}J? z^ei%VeA0H^%M1yk9jl{pcQ?Q)z`|_vmeP%9H;>t^yzW z!^I2k%}YB}YjbW#G`JY@NwfT(tgJ`7%pwL9OWG`Y{I#OZm@q;VA0r=K;t;#28u*U< z?BDo1;O!zfLuAw++qq($EUk2oYFKUCvuEl1p|_8!(U0WEnLxhNlQnW8)H+OowhH3f zN;l0MOnHu`*XS6)9%_5?;2S3L(G22h^t2n>zhiXle#(NSnQ;|H;Z==#jJZxBNlf{g zf@Ev7VFb=oRX+ zZRHJr|9zxUPHQek=z3gz_Hsu+;l*zfz* zImL}H@a|&k<61-fP%wq33v_;q?z{K0_+5%3et%$B8+S;XrcX1o;ILpO;qWO9u3-Tm z!4#9wU`HDcP=~AmHEA{!oM`f##=O$yA*#TZIp6-8zizcZRR4iHyPf@4^B-)!I&$&k z&)#;GvV69V!ye-DYoR1LJ)YvV3K#PMO?8NB&V=zG_FQi|8!}!ZqZi_+o4zBHI6goTHvxD7A zSk+u0dhg!EcUNOMtXvP|r3*V;LtA*)+&He8X7l?RCR~N|y6U;at#tR?!iMGU=8yQy z#kX~*=uTstNz#rs0+*r6{)JD4eY^BrExzx?rnZjV@{>Z50lp38T}^p+l*nx z6EO5a{Sm9$qN7xThp{inHf9?b_jIBR&K5G}y?z@@Z^5wa`&De_#Z`^b^NFehbaMjnpsDW+A!4on8;2FR;s3iM%xC zpG7l?`VhZ;p*Kk5OrN6;%X`ER-HMzNWE+Db83I^2_WVmDEHBcNBXsjd(wzJ4EAy=( zibdLg^yE8Em-16IlV$J0gnt;|%rFWn`CX8afu-%30uW9z4W1?I=i2eA z*s9wD^6IOUfxL74n&0xbVZ(VVFr&V_&cm0!^Et!<{=O%%qvvw$g0Njmes6hgVOZ>m?#9Boh@~}{#stJ zJ6X%|FctZFbAF#kLO_C)=kC3JIlyRsqraF`cNs?<_1hMi$>ujfJJvjmv_Oo=Bbjjs z=(!;@1FX*t9(?f^Uz47f=|Ru&)dmo@MC{y2O=;!AT&>>H#ziqsXo(;Uln2dVDY=+} z<*kr`eff6;|LefnLL+Wmrp*z@1+VK!`glylj?_V~^}+|98-ooKLrY0R;<*{oKg1+-Nt!A3A}JDh-nTej{~Gbi`ozPaTJ^#NFRlhE~!J3hz?pqI*luB8gJUH}oCLtud*2D3ZX zasl*@1=;VZ-#*Y!VmvV7Z2T+rm2`OU5LjWom@DhOuDj+XN_Y~|Q}!#DtnHJjChPAu zSu!<+()(TnQ6oay{TUyKP_2N2@rL?f`v^)SDNg}f<3eyNKII{VGsxPQZ=Znma=bd&@np5<=XUiMM1nL=yj8F9=rN4ZK2P?r@3w?hsuTL2!wP z?n2SvUlaFf`nTZ)(O_V5Lc!m`J&haQxFs5B_uhHsI-qX9qrWkbH|E*^DUg7MTalw`knRHF!qb(YG zjBXTEM)89r6kN19*jB%OgsVoWxeKQ{2y4Q4D|eS>ca4J?u)ja39{L@*J@fV;VqvC(xkYq8};&LB%|aW zeVn+3$rxx7al1qY$_V#uqZ7UY%W3AL++PgfrED7Ea&#cYA6!nhjqWR?yn=4sl;b;G z>4*5I@82+B#+ifLDmy=~u}pHwz_ z^J4_m;6H*o+Ff4RcUd<$<+Bi^x$-oy`}haFS15i!JQpTTLsSMpHBtCJdsWzDP`8TM zST0H!hQPs6(@@KC+z?22iOsE(GS-y~@JS{E-?P6H8S#+Od-uP8=hA+nnV*IexMiOn zYl-0lAAa%Y0^KEOVsc!A&Sbsx993a3P!-PV?qc`rp)MYe)clz5JbP9*U1x9ZVQn8y zva6oUIw4x+P*Q!<%Bz-e1_ImdjjPP`8v6239$bYtby=mhDY(C2!n?El_u3inou(^Z z4ei$46LNSmotGJCEvXP@;ur>2j8{KK>^#_m6xX0W>gr^OQmW*8^dj!*#}`CE&ZQ5u zt=V*Rit|#hjyS|5U>PvHlE2*t>CL#4wE{)C@&)>m8RvJ9N)5>SLNJk~!(RD@ES2NL`;Cpt}T;Z|EORs$;M3_^6T zh#7yeKe~&~R4u$R#+UH^bv4T4>+@Gv(yt}IvUr1q@^45N+;tA4e*1XdSYqw`c4x{QS{|z2sProi359Vdxs>)Z>M#ILUeVz#jK-4LBo4s;Hd4bb|5Hm{;XX zg>Lb>kvy=epAbc)mRoLJkR`oG^V7qkylif$;{Oqd6v|NaC*6Vf)|-9$e?rs90-=u8 z4IfpPPfGZnuM)7mg+GQBg3?ReO^r3FDUth#n+8kg z0~0pJF%Y%63uT6^EGGgY5jitn?kM(0Bp0UEJd<(rd)28F>DfyIKKy?LRhe*U-1TqC zv~{w8Q_WAL5AtXT6>v?)*3rTGPn9Pmjl1nS0SXSDYS!lZu2EgS#!#;{aI{H%1FEz8 z=WfUI`j;Gk4(;nyiS)MgUfvmejUCPZABDBTeaV%o>}STL%q9E1{I|Nr7P-KX0N&!= z;?lo!ZO*|U$c$rvmpQnqQasWCpI~@$k=4VO-$fS8fA)X-l#?Amp$(MAT1#6eJ$$V>u5zQ-(h_%e20}#%7hvG&w)HUh@gj2FL-=nnjg0-i|M*H z>;h)Sya6lEs0TK5yWg0-Crpu#xXCxZA5~`TV@3Pj&T2Ky@Irbaj<=--b%gkxKGFGA z^+(tG!Hq;Bzu5q@3GHuQ6~jDhdfcK|CVgv=%l^Gfl_Avu8)TlGq=fM&xgpnKbV$T< z_~+;q8!4C^fxwHmCDeWG^>;!RWrLnl!Itl=v^Pr{3+2dO856=_ZkoN=Yh8Fpg`c7= zbo@@HvZ}|1&f7vHm@sc_H$XUAv0Al;BrNs*eG^D+@^lt#p*tUm5;yN zt3W#{yRjXfxnEH|4PQ9!dpm1?#h8pLfY)7AiDncd@QqQdE(yU``8~?ucs-t(qQXr& z30*V0IZA-`AJPhr(oRwC_FCchzp${%!$6MBZL?Z8gSY&EfqT!?yc(a7%8{B@30N!H z4DhA*g7`Y5BSV)UVU(m}D}m?k0`CeFJZDv`B{>5MwBjPh1Wosg)K}{B{Omrrj_eRG z;-`(}VCI37_w3sOVJrNSn^H9nRct2@{yDxq#H~g*X*PoPeuNzKm{S%B)OyRfo}`}F zIn+A)xy+dG9vk19*PE35(2-cZ#yDe!cj8$9p!8 zP~hLyJC4nb)iy`m)p>^xy1M>p_ei#fXQC7v5_71MP ztn|H9`u^=+$*aUA!-ZaM`K~?(o+g&91lHrKE)_PcevvHtBm+=uZvmRrSh3 zHa8BZg>5qTJ)|iJjz*!SAYPa`<>F}PeUqd+n6EF-TFp9+UkP;BEoz67#5fLK3`v2< z`S@W~r!8O!b{H@iI#a8I0FUL1m4C`Rz;$*~k;)~WEy86iDz!C*P&o5AZAswonkjDc zVfMbX!G;6(`?`CQB_!tw{4xJxk<{~0Mr3b|t^c){8AacMWER$W76tIHgPAOA(RqXW zBIx1;M^YVk-4`>(u5aGGP6vNw?#s8|!og$}o^VgXIec(@@_G>rU#}`(>F+JkFvq=> zjWQ(AoO}$wB{)KtZ*DT+met%oqkn)_{HrxZ7OHwqafvhy6(li%=Jmm=C~~jU7?MV8 z)?Q1S)CLy@x$f#~8t{WYw;9F1S~tfd8xbXqCPLW%G&GcUo;yMG!GS+ zYKJ~pPqPn?(&)E%Ur~f%3N1jTB{Y7J<}2la12QHVNW+YLcL^KlfP_ z59>~uJt|<48TIuc;K43cE!%^OeP6vr)nu$ZAn(HA>_#oIq@9i@unKRpA9Z1wMqBI? zm*+~VeSV^v;F=~OECjTW#f2?lvu zl54rsZ5?wP>{UtS@G~z8o3;o;waW6POs=a>ANzY6J`8!sg)dg^7B)URKfn8D`A=T> zi_iU6JKA1ar$op6i4G^b6q~*3{dTgs7T6OJB?K*)REgr(NrNF|@}%I_zH{P!m~J;K z-R>%ZE44BHhTRq9$6))WbU5YPXiJ+?0)UU*m) zfsgd=XJXA12H9ioR6Z1jo6zWgGA8RU>F0-yNBG_HwxbLzy0mUBj29?i#A7I zmy4~)mM11IPeUpxZ^1^KX*gJnzr>{>;RVDk)yE}0@J&MfC+NVUD}=aY%_7Y zU3T>d#g9qaS4c!UitCVcm?O5bTqPh=Huv?%pMa@V*Xs2kV(?`Z((DSj=NG)XEI3== zufTBQnocHJ^Qrr#aa_2nf#AK(z49lo-+IP7HiK=_FRCbOgzEUf>Pu%Yu#VF?GlIr5 zq1J;jCd7B)U$G6y89SjEJmGHSXwO&q3OpPLgR}vlYv5Myu0`fqfP*f>)2|`T=TQnIr4H0YNWRU5B>M6(AAxS1 z3xl53V@9eW_EQ9AC!ZzkTfw!EwC^qOkCAmhbCUBWsivMaMIxAkjeD5CB!ng~ zfiLuuzm7g!c@zAjC}((}mUHi9JkTE4e3v#KRR_6`>}BP6B%*>2V}9dHe^Z|M3AYG} z-;Pq`gZVEQ9OY>;BH&^3AZ9zh{c;qScRtu-sy<;Ci5|f?fS$#TkNS&WXH;;y(N-`j zc8P<>=2wr(=OX@y0S`KreV1fy~@HpK#Mu7n4k z4>!gth;aGi8<$r8Ol6GyO@toRZ1i}j&A}3zRP8K&U~XGPbgunyVdz<~PHqDjblUC0>h9))HuyaHVF#y4h8w0To3h_#8t+7A#5 z%l1aHAE-pMmaOTS(Y@#hT-d=(rtRrCX{w(^D(d$C*lnLP+}HyBWe;F>=z{#jdrh4> zl{h;)4%#Ys5W!1!#PO>?>D-m5bH4T^*GPO3@n(8+k3Nj~lM7tYrb>1EEKtD~eYD<~ zWPu)23ZzDzdG?0X?&=K6*Gcu^ab4eD6u=rvJ78MoO<(K+E{Oqraj-Q90YrqJK$B6) zE#OCT$2v0Gj>d-476+R|M+C;1Hz5ATL1SmlJHRXdT!8`7)m$p@ zkA}=1EPHzg{|#&Y=8N6o-)S^MT*`I6$cgsGeJ8X=uH8UAY5utiB%`{$C2FBL&q62= z|5LH0lm=m*LlT9An^ERQe!hOjCZTx7|3${*doD|)0qCisD0Aw&2e^H{Vvn{&HGg76 z%t2m|@Hh7SI20HUG^D!V>m;_fyeqnFg4X!aP_s`hN@a?9 z2IObKI=~PNot{5kBq!DW9V!(XIhJMrA;+JuS6)-MVf$zm+Fim>8tzN5Z*zeu(XHs;fgTe}JgjgWQzw zQ5xPnW%H!6_DnEV+@J**(7nD*>YeDA%j=!xzuuSn2BGd|kz!iDpX#K38C^P7sdrWQisdWuxCO)`i*LA+h85`bIF_#aw)*#A zJG=>{2@L)hG2$#)N!An!WT_TkySY&tIu(yp$V0LSy3wEGSLR z%=v#m(E|7D0ain245rn-!G-1%(@pAyplkBXgMj2D$%BU{&MdHF>&i=4SJ(Zv4s-9A znT^mrq|o`NsQ`SHC*Wm=8HQxf*LGv$VD~`h`Am?@&BTcxzd8N9hKe<~UInAS$z_h# z8QN{<01RveLvi=2vV^LfO>d(928vkm)dJ zPXJUT3pBkOFIZcOOwC4UB^fgisN56jc>mhM)(tfg=?xuH(LJkN^kJojxV(+lU$O2_mYy!b|3>@_- z$F-`)kireONg9oLH+=0r)iO=;_k?DPE?Avp7dx3_M=&-tYCm|}C%mxrQ4P34fU0}zpDXkw`}H`P_5n9; zWDx`i8iOR#7W|>zXd-9hn+<}5o-EiOy@gmoACsb+1Xp<62$S7FnD$^w5TxlXbA<;` zabFDf%@{Cq)}siHqCRyYi>kerjgdm@>ltZ=a+Xi{@~>cy=(A^}$JcXJE_`Nd3+lk@+V{NHSkuqs$PN4pCz#XZbK;iYChXI|oJLN%CE^ zs=&MSBA1_1p2s^@FkZQ?DQ7(;%n!fK~nbhh+twS_d^euXpm zR`B)PVNLT(gLEiCj4#9Tr;|?`4~?N6PBuw$Yt*4h7#`9DgNfsUzTBJQN;p~|fnw=)w* z1*7%t%R`D~7q4!*2G5TCt{hKy)o9%TU}(+4Mp2hgq*YcE?h^cn+=wgUhSX$yL~KS} zxXyrRkD=}U`C3Bnb}MaFzYGosexxeTDV3<^!1$oVIo=+Y>6a(oMv-kJHnMct)0;$o z9Od$fQ03Oq&KNy`a52xVb~e@??IVG|*$L)=DqXMy9aK`21x>kRu)^HOb*Sc&M{1D8 zKSEhnHowzr>r9N^D5LxHeI!o+8_F4SN$tcJwR~Q;AJDK*2aE(p&CR`(G!94c# z_g!Z7NbblVZ+{0}atky!I*~a{YM`@6FA$s2y&?@!(r;_gN0!PL7W3VcCUjS&{ic$l zX_j97+n%ooRC%}wr<_!g+RhOdbW)&=lt8qvcd6qSOBs{)Q#EF~gf=bK_1cg&rSom3 zhiYgX8WgR~T?hH+X{jfrNywNMO|ZV))xV`jIqpKSH0M3~!i`Luwu@ip_vn(e%eddBKc5_J%eq)Jz*+yB^DdUGUzu9fsFiR6TPSL|Jr!X*2H{xfogOIkRn zn7`e}z^lfsx$L9wstT7eZGGVu}n!hYuX)z~@qHrr7)F+Pqaz=@9K1gd&An;_=}(U(IX30#(%yOMysLerZ| z*DG^meJhV{0FPyd0AB`3qL<>{Uw;SHdFms4zi9F}W_o=@-Ye6gUSssr3_!zp^ z#p5fsb>DNz85fJ_MPid+jlB*2*o*%A)(2UH;<(3eDxd@-nx>&^=7T1@{%a~0i1 zntNdJqgL`;v6bZ6_HoBhuolEG{OIi%v9*25Ao-S#s~chem)aA$zK=IV)fW6YWNY}x z4%Ca25RC`dmP?XPAb)I-gwB?p7HsTr&jW=L>2gLa|o0{m9g@QD?Um5TqM*=FCD_G6h)JHbfsX3$)BrtD?B$>Yw0QCt4 znKHm;SmB%(`ui(Q3iDE(o||FruVdoCI&DvAUBt;@R|n1BPYnUz6&oH-HKEA&W#7V0 zSSNpre7S=T*E=sFpi_>0pN+jiK{O}%o9n9BSnkq1wxx-=A8s=4vkDjdWEt@6D{<vB3`gNjH%^5tw)*zLGwcxf3g&cqgS2uRQ&vDHhkU_6+on9p#IBl zA8bNim|0K(>}cOFgCjza_thl322pOv=F^Rp0`j4X zdXFB#U&)1W5t`X#%2FbYjwHUgQt+g2V`QUz%x#D2B2l0N#)onx5QnQNd9aulrz+#Z z9#IF)HeW7LdTvioiSGWqk>Md%zVE~3Lg(Ue&baq*Y8mmUFRl*Q$5Z`fdZL? zhQ#;0)F0f;+%s)o2smQ+G@XJdPlm=aKwod~H!J2G#15Xy+um$b-6e*;+wP}5juzXM6s)OnVlU&8+e0Qo?r5|l}v8=v7Sb@lY4cc<3NL7eF{Adf! zF-YJ>L{S>_&HwSgJyw=P42BVFEm{t!Cca#kMkUxkQ}033v~ep*@EAu&(|$XCI7xM6 z;ykcH)MI8_ALek0r{B*=UOg6ZkJpvolQ@~?VgJ(d<8)}4byBhl`6R@JBLAI2lTU$2 z2)$~)DSqw}%{{wz@alrimPPx%57k`mec2?Pv>5b|@-}HkN72GwA@4!d^ll}+TSH7U zmJ5QnXxOUEd%55KJrDAgm^z*xG14%cISPBHQh=U8;?wZnWQ!IVAPWn)sLxT;XD%5|R2^&I&MdY& z%F`d!L^0$B9Asyl*p$D@le!0WG;*rLELSkcQDs2>pEz(yYk$r13YVL&k#62^!h znwD7e@0Hj^B*3hI*G)^y+n`&yhRGzO)MI;@BRY|xwpW=V%@xqqix1?w23d3`UonnK zu<&O9CMaPgkE(vG^RDf&>o1w(uT<%q35%tp>uw0PS8{9TcID&8L_IV=2j|W}8`WWn zVkqA#auDbd>#W&VaeWak0#sCubN7o<-uSge=pX8CcS-C%v67a5ulT1p_{#^ua%u&u z9zt)q_MrOEQFteO>;S7q@E1VuB)|ey8=iYjw#hgnd1=>&^llDu=CDLYGjfOj<@lim z$A_2$sSbFV20HjWIA-wp?^~X{#8nFAu_dT3Wg)7b zXhzXvFEKL&<56lR>48HXYJ@_ql>OJUf}KweD0IN59bR(Cv5c2Y&V-@Gf46gWt_RVF z+cQToB5U(x(Ib?qQ>F_WkAJm3Rjco+zMQ-`lAw+jF5VTVq`uJVTH&OtngRpwc+HnKHDS-r@99$0(M zOEZ?FXT)?=I_{i<=YO#i*aP?dWDt*5T<1=yBpyJ-YDo9t@-9gHr?Rz|!_GwYqa=ye zY58{gGqw{plB+*Wk$wwlzm)GS1?uQ6W!^1GQT)_YJAS_z8)8~X{&|yD_I9$`o0ys1&ay8Jy!bTxA-9s;+Zm)u&jv*QJljAqG@4Ni-pO9Nzf|Lj z*XxGsJkep#Lz$~WX2m=%1MYR)N)({62(}$Z8j$`^-1Cl-y}9-G7@gD9`xKv6dRoL6 zH{Xe%Yr%p{Bfx{pqPHNIWKzWit=Im<7LkSQOE8$0gp$U8e`g!Z9^72yV$w{!M2Dpn zP)R)hPL-wS8e*0bW!nWUIMn{7u9nb8ZK`60a=evQttt-)ec9`RL4GtuAgF!NDm@T) z#=g7Ky2r^v)x=KJYes;1Z(r;5jc7rs_36}RS)(7_a|aE&@H)+>M}KBY^%V@2$C+KW zh)anw%tLp-n*v9z+@0v1782?LG)l5idVy$SBkNgUuJAn*nW96{b|*+ayXrQ)KK)!; zrbo3ElGv#lFnSl~A2zqO-Hryq)l~4l#Kue~ioVjq{$*hwb;+wYAXfAugwCrc5OZ4! z6)HuS>wHXA3zB$IHFPx6$vC*IKMkc_Y!o%K#jKUOsO2Q3q8&S7?FN`W8OZP?T&T35 zVx>@6@q|6+DumXX;Q7c-UWn}{n&Dd~McZ)#268c>0Zs}?JdTac61iJn$>@!qttPgi z`NBT*u@pNH8Z-V6!pi(bVlEeR%=*_*6@E{(EYiH)bUjZBP7D*+#~?|9 zz_wTcMAy^xLeFD4)=+9j{XwiabET1OoJI@HAqMFYA~h0psSz97?Wi$h=E53u(HIqu zRH1do0mxzG#&Ky;l;&nBjaQ2vT_gv4kf2XqEiMxV7X_Ac51Mc|SAbr-Wnb?}o_>e? zt2)nbyc!WVptGCxq}dZ0*SFVw0rNxqn*A29ys^DBTcYq_Q=ZhOZGu%%8Ltf`*NhbK z$NKa9PB$|hf|sy6inKKP#^sNQU%d#`k#h6-;IONXtCNR+?a_t(;T&;;Mw~;3Gn?Vv z(o^&i{6U5^%Xhl*YacQ)epQoYPH{+=o2%fr=r&j4&&Lh$L_)VC9dn151(XI~M9b^=eY z;^RYD1m(H!AJ*DhOXXo5;qvuGk6>d*fi2A-5WkF=H_w#2Fe-O#t#))dfiXES=JX6FgAb zSx+1F1}bCRx$Wn>w@>Bn$3ILue1SaTZ47BZ4Iv#8!>IlM%%z%GA%Osv@e)5Qgc_SIfsoYFop(=m3Scujwiw1{jTYqN z>oy=WHV4Sm!@6Ta4E?idNFv29hz@aqr3ziFkn>LN>)vcL*}w z5&prid8c0wiNE{XkSF&4ZoiZNO`3G!@{^#ZTl*G$*JqOyu{i$&le{Bk)*NhW4x)0???QPVVs zIZ&_zpC{U~|6Rf^i*7@$+3tuX_u9!pBk{f|9@(-!{9fwglAYswsTWmwk*^=w1ld%P zRx49THGhg!z^-rY=J}s=qCPoMB9N@Aa?kM*^m$LKG|jB-a*pd8;mmn==;k3aP+3#P zj=+QghicX67+8#Zb|ACh4I7`yO&Ig}N}R@((9pY8!v*dwst3%CM?Lg}p5r=^k8c{5ANBYMM+A zV8Gg=Z~WslowQ?zkE)y{->|?GmA4bHqHh+zG3G4W{al$Y{hD5)$D5oyFhxhK3rTFv zXMT#mpf^ANy#=oCeE@u%jL|K8wc5Lq$*n#gF~TehrpA1hY?pKpp|hTRN*eWmNbYh- zsD-b)|CPQeR@Ppc_2P~!kH$~yz`O#K36D}c0&|iCV%7!__$e$1Wp{SQa2JW%*My@u z8ZsXmPWKx@c1;_T=z*!s=cZ*Eb~IlWn`F$$bo_Li3Ze4IF;0ypQo?wl;@AI{J4nJg`2Q{k-w;zZnE_cAJzUid! zyp2O+a(EkM8&;ltS1z``2D&~w8_Ww(e1y6*NZ;2D_cV4)W-bZyS`eFoZ8Mx;>{*cTUQiDAK%6C3BAa2*2AcceMZgwHUk%5y4yEycI;ZbjRr!6v$gyj$A#l>&@g{JkWal3eNX9hjo`z5xeHgYhmG|tj_)y&VF z#rYZ`gu!LVR)}*ht&axZD)}MB05HyXuYtMPStoz`YUdMp5Am?;5bc!5_SXS;XJZk6 zO;?e=9A>En36zBRwUGM`P)mLvudq7Qtk*$`+8X_{`-XFy7=ST^rWT~1v4O1{mI%Ah z=8Dzr|3%+l?DmZrGMJ7qsrk04Acw|8f3=J7LH+lcRv9J{)&DCw#m)*bK5K6~UqTW> zwYs9}y%DcA3xB#|4L67>*}AzbMfA z!|Y2obb&tT*$7*eb5mAAD{NP+d5_8!XFdCc<-Z9L@73*a{@%IyRsklhAexIK&i2M_y=g|gI!s9~PQ=H7>>o9@XjlSBiV@c|7_t0(>qQA1*d zqOhZtpLf?AqY^YN#FR5pKJOR4SlL0;(cL@tF0ijg6zWy6Ds194M`mjbz27GeW?o>R z2{{y`DR|BI`(c(uTlviS)9I&789fc2%pUoa82TOiMAET5j^y)*Bxc=++b2BTTICz* zgnmT3N>sOE(dYzcYein*T)p7s12wvsrq|=)azOBsxlh|;*Uaz`%RThmR|X!aWU`G} z`|vfriK9w#C|arD;dkXY1q~GJ5%3g&FDr|HfWu!ScVuq{m)0G$J_lkWBQlu6n zq*jB)X)EsD6-cHE&`MdBl*$-94>{Mq|GczSeD~|{6JRF?iHV6~GHDiYNOuKxGf-(t zloi@L#^`TRUS3hh;W#onA=jf(BxzA!h174^!h@^BG zF*5QJh(=A8XV=FrDVf`MBV+6;as#j)UqiBgxo2=@*lYHp<-md069WET4-B(CbYDfQ zHY?nEo1ov)Vw73XWpHdQV^6tNR;SpL)gEqFRPF5Z7xVHC`uGzpQG@5PhXmKuA!Hf0 zvQVnk2Aka-zl7rfZ!FZ@*b(>!nJ*R(xW$_smY8mH=ZSHXuT#Fj)xAHqe;bo%F6%uv zc{Z>j|DQk@po1WXHl5!4kIkN!;kM+Ktyp!cb1PqS(2o<{$2-=NNzk#^4Sx^X_O7Vi zGtMABcAa?3IdY!h+FR>5MDI^M{f%0A5%#KmTh*4MAcK`M9MoId!y^E7r?Kmeacx_Q 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/zephyr.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/zephyr.png deleted file mode 100644 index 5a3b097d7e11ebdeb80b744bc56a4b88fd175b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60404 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
      s=@tEjp*pWk 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
      `B2ozcI`V5-JC|iYZIaw2w(Zbn#A0;SZ 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 FV1l1kLaG1& diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/conduit.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/conduit.png deleted file mode 100644 index bfc678c1dbbd1eb6123c2aa9709ccbc58d1b343f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41574 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

      #*v^2j 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 WLXO2zI;cSa0000utoq8JpcjA1gl#}s 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/simplespelltable.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/spells/simplespelltable.png deleted file mode 100644 index 1113ee1dab8b4976971ad1ce467029bf1ecae7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33963 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�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 N@9FC2vd$@?2>{9{pB4ZB diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindingarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindingarray.png deleted file mode 100644 index 7309f9f8d53a65bb502330d5291dca57ac384bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43181 zcmb4qg;!Kh*#F(7OS-$eB&9p0LmH%0kZu+PMM97kN$Kvc73nSksRbmYyJO$|zQ6PS z0l(**J+t?oId`6U@-xrOeAd=f#=)e(1ONa>RYgG;0Kka9U;rHz(Omk^-6I-QYjtG> zM2nz1`HnC|gW;iK>;(W=g#Z0OKxP&h;w755s)iyO44aaOnSau7vk~!%+DYHYTi)Hx z&F-By;t>GkJ?-9l+u73jIe9zMDXVH|+w$0<0RSDKsvxWHzjT=Gw`guq2VV$P5BwxU z5O~t{AA7~frQIr8Vg;G#|#g7qc@cnJpz-ok1Yb7A$kSSjbvkBFo?sG2f`y0 z&(j*Dd!*N1iNyA=Jsf&X96Rg;oI``I_w9B%?8h_tl~n(~sElfB508yKH68G@qsu9g zP*7C`L6VYmi6h%1P?(uf05vr=j&))>HgB|D-uNO*v9?&Lw2F2fL}vq;lK;wcm%W z4+9w&as0bMId5k9^>uZDyuw0oPh>BK(QmQ~Y0rDVJ@yUIchumZDKf9d-GG|?3{G|g z8ECFM$iBKhv06WZu-rk3q3Cxvu=DTg?jW>-M+BGb>}6BD;Si7#_{}H5T@9-qh{VHi z3tc+}S(#T+;eP~{mN6odEd{;qbU%~(8Tx=Ep?5OedF@fq5`xMDJ>6pU5702Mq#d;~3KBvgYSeU>7p^Y7K9wK| z0^Q$SR;xt!O+2Tc62)jihP<2r+eM%rLRY#!Ewfntoh6TB!6tiOBU>g*Y~hO+&Bf6(^CTGT*|bFgs~x(heZg26)eys3{0igPM&_ zr3;TNgZ+657cG%Eccuo}p_24&fiD(+I0Jd*2L}Jm@|z>-lXE>4t|+k)g|xN-VWIO%g0y^gXT#cHy}U+KN4D4~Vs3}jHo z@#}%5;6r2=ijx;>oJL`T6gJ&1aj%5eFC=Wn>T-6USjOLDvAGoT?+gxPaK`gvQ8I-s zUv!dsSN*5*)W=3%)}CsHYe|MDzV&5#!)q*vR+?3JLQ-?PJ`xW&utD?*$pv(SWFzK- z`=8={uxAPLdw4vmMXQZ7SkWDe!=Ovhzx2j5Nb_9ND>W#OQiZ$;NG>H90E97|7QBl2 zF%=<4%!#d~(i*Hqpp}mfZvsV;8jE$6AKF1*vg59por%@?BG67VLV~y(i)wYmNT{^I zG)FC`@&VzNs$~(_8j;TfQ06ZvfwUgqjQnp>tjq>LA|HbvSZjk&=KE=&D~VETK%9ok ztrj>(b0ni?Sn7-ORk>_9!lRQgpZ!ZZ#vz8 z`$+3Ow!}Ioy%dg#39s&sG4!>Se~jA+*bq&M)dV%&;wya3sJZJu&(k;BVR{{!qqp_v z{IF8(@AVt2h8ITC-;pL+=pL1U8&G;NN(N-ZbHtCDT9VhwUh?zEKjWpWrqT9=|Lo7x zP6^r%Wd^amjlK|}aFJweDI(p;d&6WNP%|+MEbAna zW>H|K*krK!6}NO( z+vpTa=H#B%7?cvi%Yg_er;{mvqSc7kN64I%L4#sCdx2P@A9Jp1)W7-s@)4p}xsApD z=kp^pcS>n>6{=z^ZO%Va!*!H7%huKDSo)c<@GZ{FJEY)tVz=-JfSI{y1UEOOtj8xfYCbN@F*TvgLe1o)dd^u{4Bz5jJsO2~aW z;bsnqX7_%}X@dge%c|U&#uQ2=8|xe;cy7WSM5Azw(E^hZ>GMwlcY|YC)wmcEl~uL+aRqED_q0N9pm> zt-v~{hMfF`R8(!|A{%0X2z)3QEf)5@%S@X^pJgq8U<{*I`E_kl_BrjpegqxJ(c5=R zhMV?QPL59Gc@aHVi1&sSL^m$%@~3$U8TOR_d&dAX!Xisx7_9(Xq z&4A2%LQ7fMXd=%UI)LwVGwdR%J{gC6R|# zPf75yNvQa*;aMAgD6s%VLJ0*%*xiHnf?{Rd@F=wDt=*82V)g`9gAUvMs+;bS%Woz5 z0Z(L)1m;JP_?aOEQ3R zBny%v!5TBq60gkMcSU+--ah95*fV}&rp}xW;OTnMC zZ}(0<=fl2N1^#NlR(65z;6%bvs(3yk4;=n$<*CjNCROhy9G&3(FC~ZW`|X#TuDLUU z0{6?0))FtT9D-=S_OKe4w1{a;$jd}cy`$guTd))wBJKybp_cZTN^{wZE1TMg0*5)? zx#vXpIGRtA^H~cr$w$|H$>!PB*d0p4 zYLFuHgj<(V7d87P=S3D91El7-uh+azT!}2Z0m_3m8&$HXb%r_W%&XG|vowgXMoiQe z+tPHO{d{%a>8$ZUWG&g&K6CHpJQu>uCoo2t%QuuG_&_7Xf}dN1;aK8^E;_CjWKQYT z+O)l}UQ|lRfKr0`lx0nRxH=st6dX6FqK zMn&gWYkhGp+?*c>pCV{{L1o*v$P69*^T+xhYVGIb8yPSE!JNoPmHKQAo5nYWjJ zP>;Uhto)9-mWy0G|Iyn$A21@!6xX?g<+2bw{)GT-4D z>FWvfStjGl)CEV3WHFpQ4Y%B_ub^&j*=xv};}k?iT!$~3>$7zdL+YI@4#vwIeAb0I z57g6aDq3ahK8{jI{W|Y;njHnBvJib;K%_uos?^xCW&QQyXlKh>%>aj2cYcLY{~Xw1 zenHUmaAusCKz@7EPy9qbkCmn|B}ULf`j;D3sF0``S$n_IZ-=&GILJrg-GA}u1%G7a zCz7mV-3~do{!q<@&$qMPhFT?743=)JKVFdWYUGiB*Zcu`M+G`IW!jKXX#ycIE7xPT z@Z8CH3kjN35Yhq)`gHM{#4gl>6{!dN)DBPSrjN}_k986_Z6piMX6-#0x~KLhWL1Fp z)X(QMwrMKOWy^y)(5K$-f!1fCrI8E&BsIJ*URd4zsMMJLakROZ>5ttnBWgGh2k{BQ zkk=s`H2elz^zObQLJjYsq!gPD38hn7FS1^ZmS6QZ0HrGK$WWs%MpAhE(+nr;-l zKEzP%&R?AE;>4|~xtyo_pM@~5z2=Iwv@F3|5}lUJX0~zl;u;i9`z_o>va80#EaMqT zRHrd^`LOsAvN^Z?zU0-f?d7#J(54nSrb#0vcc8I1VAXPUgRx1Z{Z|3Kog_D6VTZ2ftiHVRAOW@bpsKFNXVZCDg zH85N9tCkg3BJ)%AY*Q36t>1fZpqLm<@I#WN=J+j12K)Qeg8|Pk#J7G2`&P=!UZ&C6 zze22iq`SjCzM;EfQ?Zn6Nt-M&YR$yk4i%j+faOjxZ+}eBYE>LkbBFuNBxk1h3fXdk z{XP+0Nbs-V>>?v8oj%hkYqeXTRP_ErAdA};3*XfY=QzHl;u^F&*<}ob>R^SlIHhnJcGM|^P6`1h+w;qE5fjiEx5gkc{1a@ zC>^vnG-uxCj{wznih*DC9NWuHxr#5{N-qK{gGreynJ*w=SjHkD=i{T+xh()PODwly zw&uJ16B}goD#ionpa44$Kz?j_%Y72-C66tSx#kG&Fla zl}CxR+P%KB!NZJQ99HuArWsU{^Ses01>|KtFS62ZYAM7tZln&ZaXatCZ{L(YJpW~$ zY+{fJ-AA7k_>fcadA)4*02;&p;29EQ6`-Dm;^(<{-0C)lf$qv?l4JheaZn|#KR;UD zk2I==oqexNIwuov9i&XwIXhw?GZV-CGw|k1>u8r0M(iHhYFo+px$@@%I#WOr=Ww*1 zPQyig>7M#wnt$Y|zES2uM5W^+`q9JpIlQV}QQbfj&95a!bUT_-WYU}LI_85R`0uq) zgY4s0;AqnlRwwl*q-c>>#=KY)B)FfIN86Vbt7nC4u{G0q2@>>l_f_`BA?x;RN{%H@~D%=VzLuGP@Ja0GO7 zgyn9EEn%>?ED&VUCj3bgD&kHc6o|;$T9)1a!?~Uk&}^4}N>uxm8M4{_DwJRSErXS7 z=+ME}*ze@u8IVBh&Xi_Kg%1jxzA~8LloZ`XydUR5jj}o?$ozK0VFnd7V9eguc{{e^ z;KiV0Agg~H=l@1wRTgM^ze2gEJHUb{LSrHx?tII$I`r_8n59xib zlpsx7Lk4{p8jafx0T_7G(UC`W#*G_4+Snd27FA+8T4mecCmnBh`se%?`*73#aI+4@ z_nE+h*Xaidg5`$xPRB+6^_bhI_KMQ%k|qA3S)G{Nbn}jTXPN8~LaN?&y@wf1FvHtle^BZT+bIjHKI9K8 zu7{|prQ$!U@@ue8qRagl8@_30zT05NfBcJ{pdwmAj#L^)c4g@}Ga0O4ZfdmM{o7H} zNGY;lxztOQu>-_;^c(sMbyrUN#+i6x>KGTzsuewr3#$r(LQUerhHj|w}N~^EC zudor;h2Hv=z0vLU%orQ+JO5Eiq=`tgSz21P?Fo&_> zCRo10dgfWj&Xdk-XNHnqTt>|I-AbSw&e}`*q~5k>?A4@Ra<jSB1ZO!KNY zU&M%jiG6z%E*x>#6#K%y=x+{Fy8GpN61e%W&U}X1ilr&xua0#p6MIF?b4O_|QpvIB z`>rnMV3Y+9qG3$(hkxi`v+?DT>c>sYDfB{mk z6*UCL$Am|p?}y$>bCx%?H$AA?z2(uEmzH~^K<+vUqZBRVIFKRR9(J3b?bn9p%J*+f z%0PuMpaR?}lFSpaA4oxDlAqnc^PB@QSqR^VUb$R2;KiDTOpTu?Pk zfgz)S)Hoi0jb`x}-=y@^G-(F@y0Btn{{lmW=E{|aB%+>et7C%k4$d10%V!CHh5#NP z{=!1#lI?!u;QDEmx;ZEt&7^1UjS3CP)0^KB*2=COaP2JZ`8;0<{;gFVF&+fBE*Qh5 zjb$Oa%9wEBkt($N#VN6~@%qPP2Z}+2K>2x zSB0O`s3*R;^D*1tTo10WMk_N=9Mf9VXlfdxqF>F%In=jvgNSN^MStJBag0Xzn$s2;>*D3<-zE1% zMdM=MN%e9}VBLm7f+-!9j7T7_ypdqod`1-&YFhi3O@y+O!wo(1m{XtR3%MtomcG5n z*qsE&BDG5a!HnY-Rax-?tg2^|;ynqCW|(mP5&UlvK+y*UM+`P34{pHA+mE5Ev+_#dxlrr4_w%{g2?PerRrev4G@=#Q^#+3dj;`Z&l&17WRN zzWqvhG*PFijdztvx*L%_zw{4SBMh?LDTi9bDN^dJr%`$uH|PQ!s4mU+dng0w_4x3< zTi`ngE;OFE%T!*~e0^!5TCPJa)xxM?N^seE#l4=#P+1kZFE-8YyPW7vi}YeN3C6)r ztaNK?XTkJ`bP-h!dVKzHXJ>$7;@ne#u(ae1kb`%8YO=QyOr+%j364o#UZFz2rkoZG zv6HQEhVGriNr}FmaIo7oqxW;%_a=4(C)nv6+b_UwOjYg|1w}$eY?@UgM{b`RsVLaV zwDT?3Uzw}Uhc2d03HRoRpK9gLA-WMFXnmK5Imo0S9;S;$lq_Ov^bWFHIsADY!tJY|Dy1dI&KvnQWAutBDe=zn)(yVg{cuRvs!rRwgM zLAOCed@xk5H>h}4uO8a^??M&|S5*&|^f^*b{g5ANnGd$kutpGl?qc66Xo3q?0N0?6o|;6v2A6 zjq6}cHjO2BuI0P3`GT|kloV$$fc~8}DR}T8raUL_jaA}53Q>?huhk-|o%mv*=%DqdyZHmNh|K?T6~H;qW*yE!4z!sQNVDs% zlYUbi&(Vyz5T*YhR+~_r{TNvSG=xPmk>d@j!*J^4l+S4l3#EM4O_o@pG^Ls_G^ID> z$bji91B+QqbnVZ@DN(1=8cC9{u`<#Ox(ScWz?0mDQ&@xt{Nx7E^X}SWL=GRv@N2?8 zHGRl#yLGyCQ@H;IwYQ^+jj60*hj!8bI_0VjFp!0GvdA6gze|Sqa5=4270y+kBGhZ~ z^DJn!PtKCg?lsT;0MWxoJxCGA;F_NZXF@MOx61=5&0#2c#j5XORG#6Smf(!aO?$+m zn&YoQ{ngI!+CJ{TXWey9r=yN6TnckTp#m;CZ$xpm=rw7eLiY#mrkhsb{oJv{7U*#V zCY%`3Ay*!Zzi1K_dL5x|VHu3!FJ72=)0Y&e5Ld7Ck|_V3j*79ny1AqQ%`CX)r<-jJ z%5=7qL<=W?UP`I1mC|H!6Ypu56l{h_Z=AhhBBOi`x;o3>WV(XDUh?HnI*js)#P@q+ zxbk%jy(?S~&~fMpcS=Xht?Q}$NGQc(*X%$CqQqKhM}0D5W|hEkM!Wu!J(Te-DB~*b zULTQC0x;lil@DdaRpV{O6yNzu#urAl^M07fq+&q|^#ARGhvtD$8l5ZJa9n2X$q9U| znf=Lz`F~q&L+`U`a5^ccepATvD+k8*@h+Fv(BN*=kShLlHyh?;x8xA3CdE4;3pxAQGK73Lam^_bv5dk zT{5=d#uFr1ahCdgrCO(q<|wy=5`tI(q!gd#5}kQF(|B}UJ$>|*k@<4-)Rx6F!ged* zT!I#yAgZLFE9+}oim-+C^6ney)stjMgTWvndcGGTKQ^ek178JECT{q<`n zJ-jZ)P{u%?V}S#&oo+D#Z|kNnsoO4gJ5OrNM5ye)UlI7Ll`r;K^-7EI+Kk*HEq95W zE<`(oh=6A?Mb|i0mwR(?o{1OL7Zi%0#^+2O2>zmHaj8mM5FqI*LaD0oK-(JJk7VgI zmcDqvAzeQ#<)f>1d17MpkY6m*s}jfc!v5q%Zu|*TDKopDmU+Hf_^di_C+{tQ>#9?W z$5xc`4>>p%pIYbUebNG9QUn|N`-7^^Ii3K3Kn<2$N-ce=Kq}q*uHw_|8;5J_Rbt?O#jZ56v*|u zs`MboaF!-YDA}3o>8o{{_7?(s3#8~@xcPx#Np_?;>>4r4uhu0*Rc>niB+rC)jB}8( zD)dz*GF5Ph<>!1rQTCG5>MsW-JfbOR6+OX~k7zd7bhX5FPPAX1GYdR?pvJ)L^g^^p;I0pIB*#c3JCokA%ao~Vky z(p2j2FeFA#RFKFZ)p40>vxc9ePZV5L<8WhldoGNjme8ZQf1P!k=}`pvnM(KawN+|4 z#(zQz>b0pydL%GX_H#HqGgBVmiVMvx3^!q|S&e?K1WVw}M3p!S+}l#vFl83fSm7QR zX!s?$&8`|tZor67xemBL%5COwP1+fzcQ8*5i)Y$_Oq<6&>rCy!4CC%2u>HHIM^LqQ z$U9bNZL=fE>m{**_5JKe|2|BkTV6}a)4wa(H_@!(U4@FsV}B+Eu@WPYrky2Mzgb!; zmktL#kQlrilV|xYLuV9Obgs)eJL!sn6e+`0J|>&`1|#m}SlW^VmFS04bpMO+Fvb#e zf8yoYE~pdzJJ$m(HmwriD?Vo>&Mn?3LuUJ>fR**M4CHjT-EAJbEoYg+C`XvFe!sdh z@zlMbJGQdr(jx5$?Ax5v-YSTckryG|MTOp^~BQ>Kg**vRgpKoj;vr0c;TftCYs0O-ba#buWl~|Z~6?fFy_FA6% zsMr7gF5xrBn3@AUmRx*(H z8y>2y|J`I_i|$?+;x{pQ)XQoDnI)H0>Ts|C|C~X9D`$Wl5;8N_qX95z-Trcu_bFL)iWAgJ;mvVX}8L#7by*iSP6Z#(bacI`Cfe`)W_uHypHKZpjEbz>OlVpe3p08^ z%c&uunEw0Hi`FEvY2$B@Mh~hvsS`4|IR2URg^H=%yxx3T)Ep3w4xJveaF+jN+H#g@ zpzx@ zjjdJf%O57DKi0rUQ&;}i(5-fct+gXK7BCO#EdEydz&71YMY_q|z{2YoxI~@sa+I!! z3eAFKXAae=Ic-z9c$&ouXMGxdblYb{iWi08an<@4zI|OMnP`h~gnEc({>FHcn3Xz8;T3dwkHET*mD&eEpHcW4Q6&5;{quOpdrkh=QDN3@ zE6ly`F*Y~7eOBL6|57$2rM-T8X`7OZyK1U&V?*YlI&_eE2gO&!Z}rq(Y-BsqQFDU! z$DhRD%((Iz#Hp1_Zgy^=(HrlAg5JE3)<9T$h_ILKW0qj7}WD+l!z0Ca&J+o zb#Tzh+}F39w$ioJkR`WFp)`Yb%1H8C|w@#JEpeW#w!80>R#B3_ib54qCIT4;91t zmGE>o<@W%oQXns~B#iwcAwH*&j|i1;AwUJI4o%`?@2_hV+r4CW3*wyupyXK|1J_&( z-3)`Pq(g1kSY&i~i7YOf<_2Tc@AKs^8@4_#JZUq`tfiQSrs(^%I3#c%txER1qo1bt z8)E%i^)_4~0%T7=?AmvfyuPJMZ zPvulZLWxOStG;!sKaxPIY#MiEDoSy;xeHQeP=K5E@+XL3$5Lzw%0|zdzU&2Diq(L! z)0%-{jk1*BlG@C|m~aR`6j#3ejH339xTowb5)^}f>AccltQ!;H;CL)L6sPEVK=DoA z_jUK2#vxRHrmI*$fqpgk_NkL3ko@>vs@h~2ri;2RGalX3UE%3K-Wwg5uce~U&)5Um za2_{pxL`@fuNa03BA}2j4~lIi_dzg7E%lRd-TFKzC))p}-JW=d&SAsS|G=$C?JQre zo285n-H6bitB_L*a1r73?jNRrX5;KXSL^j*sE&U+&Wp%?E_$SdoZ-wIavOy5Oei6J zL0Q8&3-*x}m@nmcL|WF1xmi|A-ByjdVAYYuo5Bj_>=W4UfY!ag=XM%c_9E2Ty@fCc zb7qd|0*Qw~lP(l@3uxD=&Xb=z{(%4GLf;vHtzMx&&-i=jl}lK16erdrK5R`^ z%k=gL>a3)QWm*z*l-r`nLePSZ{hbfHK?`EJHCXHqXAr=3)oDEZIAaq4w6LWI6bfIp z(qxnj$2U9u9+0Z&S0CPNTqYtx#km^K1p9A>9cc&Umc-sC6N;kNZa3=Bw(g4A4*Gs`{|D-fT z5yESW)5BfzC#U>mm+OHj@tEb#JI-z}YJ4~RN-l=-+x6{%COh;;s`wAeg0*PyClQZJ zJ>t>j&M0^eRDk~XLw)|68R{SUNl%USmB!Mx8q!FI`E+!~;T+wv^9|S^I=HnUb8b

      3rb`B%H(=_ExEXv}92e1*D2&A(sRA;XB9(yKNV~ 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindinglightningarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bindinglightningarray.png deleted file mode 100644 index 529d6cf09e66b27159d155c6a7343ddb5ae417ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43258 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%0D(|4)%P> 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 N)KzrQrAk(z{{x2%t=j+q diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bouncearray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/bouncearray.png deleted file mode 100644 index 96bd00875cd7281b55611ceb563730d2e77c6607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35950 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/divinationsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/divinationsigil.png deleted file mode 100644 index 598c297b34300228b49243c28a6c123e2cea10d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33324 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/fastminersigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/fastminersigil.png deleted file mode 100644 index 76d20b23cd4a4c35b6ea5b485cb9c24d1cdc191f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30009 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�%q;`J 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 Sp#(251#~p^HEPss!~YL3BXd#! diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/furnacearray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/furnacearray.png deleted file mode 100644 index 5639657dbdf4c475c4b22ce482710474187b6706..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45089 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%0AOA(zd0URg5xTx&R@ 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/growthsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/growthsigil.png deleted file mode 100644 index dfcf86c0a72abf9983d0a1f72a6e7f014d4f9699..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33209 zcmZVmWmsF!^FI!sB)A8PYk@*>ZHr4Av`B$srC5u*yQBuep}12h?p{1CS{#Z~q`12T z%|GwY_x?S)b6vT1bI#e>+1cHh*UXts*eeYsVgfn>004+plwsNc0LE0o03HseIP;mf z#uPa3UMj&bCFXPWq9qtp;JYXrx&r_q#eZKAkd{G%xrpnbqOO3uM1)Jt!$9<@TL^QB z(e|~0#|vjiM@uIU%ufJ#;bv*>VQInQZR=sfqNJk!%7Wh#7XVlQ6`1^MpSis@-yf9S zW3ncJ2fw}ywBxaY-JtTXKhpo;vH3ea{YY`lM(uB&V&q1ltEp*}(YrJ1JRzE>xF7BO zu3=+2u52qIggNrBEuaqs-u@U!9l4A#QVMY`7#S3=JsX_Z^!0&@{8^ZsoYb9^UeFE4 z0?TiJ0Qp6IRjz+&aJ1N z!5_o`@CO#fPSbLEjS}Mzax5fpIhLNKSe^j4#8)h2xN6Y<;UPRAQT_|9`i?kE7Dex;{2v)I2)71?+J6)UJ6#HfY^=&<|F1*2 z$b2!-|Eqq-ROKbK$f)qJLi{#q1*6|BV}ob^8wW_Q*H9$Gcc=9Kh~PO8)jE)^yTj$o zsMaXpa%A6rx3^{V!EA-U7J%OG)o*I8RQ3H)IX zz)=2`JXvz|mL--E_`u>>dYh6K_?#&2P)0V+T%7Fxx|t8xVE||;KFBd(9>K-wae}ql z{BHSn+({kZqs7ukZubQnEOh;jJ<=rq$I;Va*M`PNtGxfCx2Y(Lco;hwe0D2jjPrj? zXxp6Ce%}I#LdSl>JXoNCF~LFc2&RX*p$Xc|zxhAx5&f@EvOMQLf@kcV!PL-wgN;e* zuq`E539##t5`*IZ*r2(eNo=6M6QW1I2($4+z6<5bzfW4D>6PYK!TaAz>DsdH0Tqp+ zdJnMJ2iaV4uvRc*HGFpK%Co}Wi1wWiHc6a}j9hhxbKyR!

      6UAR)(pW%hY2Mwl+W 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

      u`=;-o&&hAdaT5jeQ7dxjU?8O7S8Ol8rruQA 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lightsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/lightsigil.png deleted file mode 100644 index 61efcd2e198a752f087a9bf74b5b7db4f4539e2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41435 zcmafabzDch5P`bDn&k=OmaI=}=SLq5uGZT2J>L900(CTQERILbx1; zO`a1j$F>@ZSdnM{a(> zgs%W_H_+{2u$wD)s8_Hjw~n5niK~PgDFAQ-diOLRgw5^Pdt|eJ`5Jw($7p1&mB390 z4NN8D&CRFEcJh@{WPK*>1ceBYKEr0ax=2MjH6^s__LC&VOIv4)1vUUY5OB=5KYOi9 z`vZqtPcPgMi1I-CU@V@052{iEC~Q$J7~kRQ~>f2+?) zeSPdBxG=e}$|vE7|G3p{!PGOuwO=?Y{@mwoXU4YZJyGf@5ZbrOrywT$9v3}C48qbu zdqOz>cyFJmEA&L^2gW6VOi2i`Dq6W2-S2sT7+Z}p3>4lzDc;C^z3mqHQigj_&b3EB z)w_&y{+{lSMM&& z3G6CsO$vAc$|hPihE?V#6&xmW{11~-dk`7F)tVV^@}m_%JEtcTR72qu!go6S5Q>Zd zMUHnIGb10vDrw4pasm#rA)9|0k>Vf~GAEXxM@mTQ40s~1N*=g@9*Gw&RdO>R|BnH& zXJe=zZ(RLDQwm%uv7ye*@E(IeNA$Mxo8L1hQA7KNfr==~8Xqpy4$HqBom{oFHF;>> z6(a=I<K-et_S7@)bDEG__?x(m}yvSki{Xyj-d zR8yC6E(dVX5CuF7YBv|2+OQ(MCXv+rnvw}W8NSI#P+03-!KdqP7Ws7o($_AC(V}MF6dxRx8uh|Rp&OzjY;*0-~UIsea-?U&1wu*d9d~))A%g3 zc8QDohfaSPLBR+NDZ9uDZ1F$`(o|B{LZIreXV;Zqk@d=Q1YOkjqiD;}b=X3vB=uvw ze?i1%y4~32GqP#I=)xAZW6y4r$Z(FH|L+ zW|-42NwHXH8+SVu_AfMON>9yWNz8kKfUfx-?Xe@!Y8Q1xkMJ zqy72MI*#V$H{NMD=;iKk3PaC`wlApN=9b1FB2D5vqcX_^T`h_sMr2;drmjI&6ZWrL zqtYb0jQ;VWKBn8{xH_UEZ1u*PEJmV;4oef(+Kp^=POYi)FXZ?ue_rrT{L(F_F$`qb zJ}HEvLt;q{xz92}#B~A%&7ujSk_OFj`7)NOEJ78V`%dN`JQBQX3L)^sO+50IEUpnM zsN}w@lbE48ds*wz3eE*Le>M0=tk0cH@nc}LK=sVy%3#le%MqtYJ;5F$Hwtxpy!CX^ zLc<_O=T&Euv7UrWrs~M~qj}o>%{%JxyuUt1zgXi%ZOc}nLz1$R zf{FeT_Qi{?dc{Hc3Hqs<*4md-J=-(VPm^x;dGVafklSk%b5O9rGiOoMw8* zG6SdAK00*GaekaZ&cDZRZoYh2QG)7!8(18IA26+EeS0#D9-Jq{E9=A5&B@8OaNWhb)b7{;7KNoPUP&dvV} zLJGr!2bE}ol4T@B4|EBUqzcpE?E5iu&AQHv0~->_ixcM#_ndW7VmkDB!z76SV_7X6 zH{$XqjxhZAU98mQW&7fhmoLbWzzKbSk^zw0G;oxpvG_xA3C+S-eoA~%8DRdje5(JJnp?l}#q@X%MB@wO z{Ub$%-ovw73=eUuywDk_Jk8gA$5a)OduN7`u~Zz^Z!b60qS#rA3e=$TeBtH^zY`Ow zR9o*b$81n6tvJ1?i@+{0kU@A))0t}hU8*bhiG}Kua8cg|c%^vC)C%0DE>>lRh7FTx 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/magnetismsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/magnetismsigil.png deleted file mode 100644 index 63fa80c224c88a0bbb86e911c017339b1b13e0ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36653 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 bWf605xKezvxz5HS6ab$~X4aT;Q#|#*a{F3% diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/mobsacrifice.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/mobsacrifice.png deleted file mode 100644 index 717018449429c81300d21bd5d5779f439e68a902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44577 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 bmOvnXeo%k5%bwx{5HDR#Lqx5*Q~dt{Ca*G+ diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/movementarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/movementarray.png deleted file mode 100644 index 8149c3835434193f2d1bad7826299b01fecb29e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46869 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/shardoflaputa.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/shardoflaputa.png deleted file mode 100644 index 2ae4fd521f353891bba0932a48f39f85c6704c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54532 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 z 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret2.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/skeletonturret2.png deleted file mode 100644 index 115aad7315837a72e8f00701a7b63c36b5af8b3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30611 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 jD+nIo|JR>=A%hHV{8& diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/spikearray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/spikearray.png deleted file mode 100644 index 7e312f51f067e9fbe9ca93b1112db801edc766ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47801 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¬+}k@r}QvGM}4+Nm|$IospwNS$62>p$TP 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

      126#V~Flo@M-s+D$Ug;bu=zVIrM8zwLNl3 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportationarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/teleportationarray.png deleted file mode 100644 index 988113d35f620ac4ff17ec28eb5ec032b3740a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50896 zcmXtf1yozl({^z8;ts)zOL2FHLZMiJ;uLrH7HIK6af(}U_h3bWyF;K*9D+OKy@C1Qy_t$= zI#oRa`8UM!z42uRh!#T|I24v|)Hrw-mI5S=1v1Ot69v>#TE-CHh#*bYR{z(=8DUe)gt%p782!Jx zc2^WU6_^%<4j5H&W@7}twnCKg!US;7#->?){l6CAemFqUGK8G%e|`MkJ9Ck7{}BN= zV}g+ISs=<>7ivbn%7T%NkQXJ_<^{;+>Sy{Nn}5)kj-+fYpC|SDirDP`N%WHwur_qp z`cYByKl#E(B%WI6+xlFGr8F-v`l0%XYetIN|Mx`f=|~xDDZELVd|VYmLOBx4$mT8k zpVIgr(gCiq3IicOYu4sd-IYd_G5@ECNK}Y12uhB74O4Eu{`o0x=Qgq)`Y`&xhjgsX z0N0=Y^h4B@?=3n1)ua#*|EGQ4T~rA7Xvd4#XV}Av>1H=cK$t0C{r@_7V+`{3v1^v3C6xkmj330}CS}H)*1TM=f z8vRcb3k(2@u`_IMz-}*4O{_a9iR6D>3rB^Zff{h4Zc>EFUzD4H_doNimVsi!(OCb} z1{+~hf3)g36!|2szR@Qpw)KC*_fP6ch^cMN)u21ORzu-}ST1W+*_nZn`+vjjhZ0K4 ziFR$nwsNB7-j;ttYPIu!(m}Vna~1U9rPwRo<1;T{KBWI?nDX*Ej~8nFTjEhxL)hRt zW(X|~G+n*EZS3p+`YI*{Of;=c3|Zaf=yF2ubN)YB?5P9vwCu_nl5O2X1JY0lwzylE z1a=I^{+~TjAZ)s%8sDFa1iIjj-kv6r6Z}V~>y|S+SiR#)Et1gMxqD{eREhLnXk^P^ z3(Mo9%hID`9p1vt6AASOEFe!&_xJ<+k(SV-Dy9%R7#NvsC1 zw(kH*6dv-P4*-6^6S{el&JVsL#4vOKq6{bX6(_(GP>UN12B0D?kx1uaXLc*HdHGLV znIUb?VP`%d_k;jCkv16tx`3y=6eHFOc{+TASL@x00DlKVZV_uyLh}LMqvy%|fGd5~ z@$ojZiUZ^4Op)MSasW4g3~iGiz@MU{X03;T%m6?~RuDVRLfpqTCjy8eE>TJ+5GK22 z>l{up9m3oI&g^b*Fya|&C@Df9z`R}O%lAsjFll5!SY8TRaDeaOV?F>^R`Bpqz?Za# zM75ll=`e&bNDOAS8yteT8C=DAr_A=wSie-74lz_ZasG4ZW_d>ofQPWBPJxl22UoTH zqnbF^Dw1z`sQAt#;H4ZTh1|lC6+aq4hySN*3lF(AgdF#&4FLXX`$k9)-iYQJpZ_G4 zqJx%dpZ$W+lk(+`5a6-t$L|?sd)3MnIzK{(FOI%RJ^gA*|0&iRQOOpHbBz;%E&j1n zybif%2*7-hJ9#xps#>0butI@Eh6jVtN234)Kd5SO&bE3*l}5S{Tb>@*|f1FL_#Ir8hn?sBL|#hX-l{%PLSJk z;c&_|3w7)4k%g-8uC7QYOyB#DNsjwD4<5doGWGr{E$}+aUbGLN0LQqSEe|&t?h%Toih#{Smac2!@tKuOo2f( zqy0{{D45rrWpLfE2o&sFlsVVIhsPWNN|4elxiE}e5zKBC~ zRc<(yp_$3qj((8_4Lz4Lkb>Y`6V3d$(za$2dy}?}krRx|8r~(Z?RNSbvp`ge7waiw z{@=ZM#lm+eP>%Ot9F4g~2$!Cj-(Ea0m0=YAoZ>}`iWHp{i*~xpb+2=sI9_#eoD%ED z3wczDe>=iCH?_zG+#`QDQ(>awFw)Ml+VAgVpq#Zo8D;I#Cn+`YuuVP&iW$7h`Imot zTv;*|gdrt+v8hA-06c13-I`Fr9#Gz}JQ$@R7Vzn=z1lv-JdpF~@}^N~L#1VG%Q&`s z9hX}Eb!MPa;u9B2f6(_GjACtAvZK8FCs0&Ups4ha&#PsPSX8}yK$-YAO9K1ROT3Ww z?kdxtZJ_;0v*v`ke)bhN&6y&cG~7KgcSQ}+z8z%o=ftVp0R0*VG+-eD19McJPIZR+ zx?vtGLl-44`bmGu{v3Za>snwgHK-|6X->^~h2$^yo3O;0OgJqtYOgYBU*jSTXy%b; z`#V0an+c-G3-%}~9(Q2(4X$apI*NX4(A|Gcp}s9KB_sUb`Y4VFIf?G?jZ|6b`R#%0 z`HrbAU;h@oEj=0l97wP+h5P7jupx?vbHGYlBgZcmHxz4^k2j@=~vDsx$`(jTA&~Yh#_(Fy9%I}kUPy;e7D*|y#P z5iBGn^Sl6@#O9@8gb1m4YbY;L0BsGCV^j4y^^KCAR;F$Z-3o<3ROSW&mnt-5dk2aR z_#_W5tC8-u2i@Jt^G?}2f*7*6Azbv4D2Os`>3%Gr+d(TMt$$wIc=<2`sE>=04Q9DU&0NdGwCz1Jcp1xfz5u#{QD90&+ru+t=!J2sV`C8gO(oc zzaK~r(@wEO+{EMlsdahN5bOamBO7#Z=HzqW{4nt@7D5VKyu9B*YQWr$q*K{!`c69#kN&=u3EER+B)B%?@|Y`HS=Y7_s`F2}e*p{| z!+MNtHXNQS0V1_44U9?pdYfV-{=$&GPux5s~DiT8D61%+u zvTdR6lxD0~-QAs^-7IdUP6>_Xw>knM8-r{zvwp;{!-fo18UaShJnM@S#o+EHCXw`= zdtfP0{rRD>vJ)P+$B!}OnyOhUE)1y>|5Fpf*)MZ4go^QKP%4K57v0%?@g6xpD!sMJ zUPCOv!AJjkUtbe!=GA)(Oc*&^^;+o@IWBRR?u&RlO}yD)T&A}X>&7NfcXp?$fL-?r zOrPB{0fkcLZ@cR@v=daw29v3XTzmOH*Z(RF24;x_`ml75{>~o@dr^+#eVotS;mNVI zX!~}W#YZtzc(vluRKCw%QPWI+UgVH=uz(EODQN;Ck1E$ z&?5z(X?j?T=SF$KO#o>F(M96+swfjOq0lyf2}&XiVGVav1wiyu=Teylcaux*{^+NU zrOsFm;?x^yc7PM05owA>8V%sE5BHvfJJrB9G}By)hf2$9Lf8Qu2({=vfzOwPFBv$S zXaN4}5ZeRz#6n1J=_q&Ic%58sHJWSv)?^fW@#%DwzZO6YL0HtP3;CQTbT&nYn*w~_ z>5K)q(NmQm)Un|U^_QDLO3}enyecFL{S44VtNm_yyQrfYlsgS}#@oaM42kNCp!C4m ziuKVyzCr)8eFiIV8Q^-2_=dki4}Q-#(sqSQ}NP-#6nL@z3a2#QMJBN{9C4u*GpR=>Rob-Md73{`{lRZS$d*qZG@x)89r(upgXeF{0UIV8&;LHm^ zVa^FlQj|d6;5n_&xuO%R0V;^buMjpO_M|juz8|7~PZLs6Q>A9&(gM8Yp+Y5H+NW>p zsyPmN@QFhT-nd@apfp^;7(B|Ay)em91OJqx`Mia8w1(nSRLfR|tUeti zu7BH>EY&~*+2-`(_9DAw7R8u57uCjBk#t}cV|e>JH+T?ZTsIGIZrXwhF_G#@RX)*j)nIutCNiK`n56_U+j@mX8e(?08vvc#9#ep+S2L*V8Fd= zB2fP{p381An%FIb`xWi9N^eqfl@khEd9*R?3UlNT zFIyqX*jVuQ7%Q*?H3L4L9as(`^nj@0IfrpyQWv_Ai5v`Fnlhz^=n5ofIlLuJRxJJ& zbNMfJf_m?uPM>YBvSNX(%J%LN3%9YeB$v=gEci0AjO;Z`)xZ#^w<2eC_<*eyCigW0 z6Zxm#nGl}equ>@j$YIE_Tay+XoNdJ#VBb@vHgGqA0d9{1t?`-5>v4D9ZIg8#DTh!r zeF-@E>!p+tcPcp-HP3F;Q7142I7x|Si&$cm3X;&WF+)ZY@KE{n>?`=@=w^T>HHl6>9!$2n)W z%mx6u6_hg2;;)WtxuPspoV|61noSIzcj@&xSUpSvMuCnM>X{%;${Qvna=xiAHw&4m zrkTx*@2Y(4SGqX~B%lXv2gx^s>h*Hbp?=^(ON&3) z21>#e(%Mh`AqLosxxKur`YYjLzU*tG@2|;>t00m2UW=GdRn!n$xrYTQInI#%;_T$+-TapV!_F;y&O{TIdz{IK0Pxs!W4 z!WI|8qVi(uV6!riSKdZ*8!|)1EELxsSPL^Y{&!YcXD|yk%QkLZAifYRjUwh?K++R2G)j$8n(bsjHS=}?~T4>!lE zy}yDILiXpirtEJcyiP+>SD^*#XN5jtzGKVrmfnf3R$+MpSvn|z8ya`h1ENy$g*-y8 zM^Nrk%1E=0sY&hXni};*WT<^1=VV%`_#4S7p{pvLn~q|^_5i-(?w3Vi4P6_1;p`3< zy`Kr9QOJRLz*$(ymTEOc7QJ&|7)z7(D#JfAm*Ty*Rj&0WH93M92X>@q{^k6~*4;uw zW<(begDdmRKNno9sy>AY&8>i_4^TKnQ%t}1x09W~iv3jHOb~5LhtWa%yV)QC)Gqo# zmW``lDGY_;=re2;c%Ig{Xba$s$+ zmEN>-TFRnUz9~!_KJqbYNE}q$DM=4HI4Ub|PqWh9nnRSiL9;RTS5Yi*4WYua^*>Pj zBpac*=p1-0)nVhxqY056fH`=0_#fCM|K$$~IL<}je75aT@_-ycx8|wa^NS5D;2or@^X_m33*osuW?Y z8PT|L!C7^ML#;HO>uO*Qbx;#`%(8Q7O03mM$}}xbvGz#NXZR~N;?+0rzP1!Ja#`Ca*T-J3 zds7aSEgE!dF?W5I)Z%t@N=~_IVfJeUQ*(`uikeoW(7M{~-G~RSUE@qKU5z}vfMQvodknTjY;h-hk_knfvt(}tZ19s9>z&!LZ=L# zMim8T;A)-6fmiNa@@%Fk?QV;!fs0cuQt(NxFj#IP0+D2&UREC7%d_s?fmx1zaV6(J zpV?|1sl5~0nz;52Z(%Ym&fZM%@!qlvr`13kGT5dq=ytzNnG)WeYf7oIjeSh3gpZEy z5z{n2&h&s`&hNh!p&=9Dj|%?u5p_dgZF<2n&(%GQ?gf?dZ*3bhuS`z{wp|B<^pFwL zoeg7kCfhi1jl)knBPWHB6U{W{UX4n0zlSU{G4wD-Rbe=t`vMe|eW!JB_M+1cS&Pw;#IG z(y$V3hWiPBKfu&R1NTuFMPp14R|Q<-lVFcGrnnT5H8cKifmCT4*DZy|?23bS{1w?~ zw1*-`sbToPfZ|s=T{f4oJo^a?El%WqdbZ;+1w69C9n$z+`HCWrB}$-9F&lN;+eSfj zTqs$}W|uDk#KCS@eeZ64UYVu}2Ricyzt#p4leg7^3k_~~vqFj$=U`7!@N_V#JmpPd zh?nLNFgGQ0H1kM>eM)|pqgtMZ-=!i z=T^r2cH^Wq#RU6IaR8P;PJc3m%HgKu9$)a^qCMrCG2gXk8UYx|SK6oL&m8gin%wx6 z?SAoIOX43%V{M4F7fbvxr?79@ky|QtK@_s~oc**a6UuI_90jDZ-ZcVY+KtoyMsZKQ z_Zp<%FJ6hZ_Vh}e7Yl3Ap>El6ODx3bj4fhI>=`o`6>8SBwXT#OrN4LO^nVY3vip$O zv>bhA21Q;zh0knook@mxh6_@Ne35!eSG?HyDo~@wy?)HXhMPqEaB`Uj z{5WY&^(b7{K?)MD?K!%mi}EGTO*&5QZP8z}guk6-VtJ5<9xiGq4?$vSj}M|ba2=_| z7(dFH_)ouKNqka>72Oky?X}x_LKJyg$A!;gZbX?OW9R+-LqSWX+a#7|3IesK3y}Qn z;hAcVi4a?B@#|u-?Ib}JD;wTRTodVcN!81nr3hdLs;1)}s0n$&;cQHGHyV4HE zAgvCvAd-Pr_HT(EadJ|*BYvHue;3NP(L2cspIgWokMd}sCX9$*xD$BRwjU&hM&n!2 zF~9sh^TD|AF!*`h7Jqu)e}wZC?`GGc9cD>2Wbr8~Pgd=>$~)By;V9M+BIRmbL?cz2 zB^7A+HW?-j?Y8SR+Lj?_DQ}i@-enz`Ck=CNIC4|)9bS1;mK5Zgs{h-AOBW}{3GrJ` z$FaJl!7V3$5(ssL>j|EhFX;Z)&H__WxmAA7wZ_9C*@-4Y+b=oVh3US5b&>dFX!Vx6 zpt{;iwu3gGl19(#>8IW>;1l5^m9E0GUc6%bweN=2zX?R<1Qi~dC=oISO;w`aTEqo; z7qri=1Q0nj^^Xvc*z5MttsalY_%t04=!0JNLU~lm*PZmmW2o805fK=cn0H8KW?1=r zZL<#ASzp<&tVVwR#2#rBOamdpIeGIo$PrU!pAc=aKg5k;FwQs~focp!jZnJAxW?~>GK5}J-WdPR(0!Yt0h41m(|}Yu3T@O zaeHd-&sp3n+*KlmvH~0Ng+wZ**i(Jz(QB%Lxu5GuN6gREX`~4w-OGyK{>q@#;CE+GF`)5f|nlEk47AZvVh4DElL^{2Aq5UJjXV|Ks+D zDC3(}1}bFWV^Sxd%v`tmaRiIkpFbqvX1wBn;ILIkK|YZi_-9(2EVR3LDVL!SASbHT z*dJuAJX$dPFuF;cSpjnnqAzEuVOHRiyWn{OI9dCZCa3iIrx1=Eo&ID7uROUjb<&>3 zZ#s|emI(Ug6b3ssOaYs$#HW$oP>-7M>72G*RT#lXxkWkErNv)h7}y>^mImwiRx{p7 z$(o=u4MjDW319w`TFu@6&jsMzzhoe}V#HW+EW}x6HeO5OVr~n5wwV^X^cPQZqs^L? zNP+QZHk)kdUnkR*VtmI{ZOXZp@`!j98 zl*HI+k$6=(7T=ymlj_pIeqGx!VTJaA#hcqShKg_eSEg=pxxDO}$i2wVZS-edXcl%- zq#aWwIGAQ}`+G9=YRC#U<`LAm{S&w+0<+USyM_fNak1#>vmCV;l-6@Y`SI#(8pHF- zA%}?LerTW?;nt=cmM`jitGoBO&dJ=#$J%FLE8^}xFK(Rid^}QQ@Hue(BIpj~Zw8lx znUs?vhD3yQ8v2jc75+?N*o7+f#OyQwml7z-J^Yb)QcX_W$s$CIN%}=0eA4{x^)!# zkH$9RgIg}j$e|@+tRN6vyqhT7 z8hJBMrxs#So~h+3H(# z4tde&EhNP`#}EO}KXr0TiYkahbFbmmfGHEUrn$OmL|4vGU8_ix@ZSU108K9uUyseK zEJR;3I4tC+4wB{EI#y3%DnrP7Rcg*zO1ukX{15_KLbtnIBCk7##n%4VIk`!=mOS`DB=Vx?>t1rDUM1G&*wZi6yo1nJ0r_D(YypPnCQNc z6jm)n3I^wdgIj`5uDmN}IT9ykiCOdxs9La#B;Rc<6gg+6x(LmHVJ!QNH7=rm(pdR+ zk0jSh9tBt(eE2{b$}f0R#=Q4t+Fv zqrt-=zV$^1FX-Zg9fy`1S+|dgtlP)U_I2JZlTO{=p`u2$H-*-H-kA=j4lx+hh=?+S zSa&zkYS2 zqCmuwXYq%$x0%o&z#7sdN&iJN)E6= zOvf?D6`xG;JHyr@MMO7J7mBh?o57T(^d(uWIPzL1=*a{uAWo4>e*~<1?9kTqc+>?M zv0a;vou8s@o<}!H(DrPpmMi_X!_h)Z{E&4)9I8=&Ax8kY7v?Q`0Cgc9et9>~*!-)}J4jzX?f_FZ1=N+)N5mY#VsE=_lf2wYO+-bsAXwGxM?Ls6;=KI_uKSU8z9Vm{|IX0D5mVJcJYAywc^3& zLP%w!5^qt)kE}K+a4L0GLZO56-T2UfWM@WFQ2z&s!Bx?zsWslPc{4R9?6g^buxP}2 z4rs_Dv^n>p(2MEJ_BFqUWiKPki1O&0(ZFH9zr|)iRPmiYdz29TTYT)_Xw2Njc;KtU z+QtO!tvD|N1CG|NX-lm-XH_KgW^0`Fe*9qvW<7wRMaWQxqDMi+TQC0+-baIkAQ(F5 z0PNaiDIdBeZ;=o#kYX8CVOFlMeNg16{$v&) z_U)<5O}V63jmQ^Wz@yd~&WCzQt-W>mpdb$?NnC@@4Cb@xReLlVuY3mzam@2xQnlwC3B)#Vp^{$u3`W>ro+J?VJe$`A!k_`a_- zFj0{wo>i`bEa%T!2ov9RxRf5{+`Z_zrS#e6|2sOb_{>yl+L*7O$`mRNP%!7A*FapXN9R+FZ;Pv%VSGwylZ9!Vq zEYzkYT4>u}>Vk;fGj7Q3=(!;xe-L($GNfEAb0LIa8PI=L#yQn( z(MLZCx-uBTvAE`i5Csa&v42|oq*ARfbMzdZ9&m3sjwBgN7RAp1?)WrVof}X}7GcbJ zGLcpa2y;5mb}|&twRyhLaHlnUp2?o!5WNx7dmdklJO#kI(I|Nf6K2eV%a zSBOr}$7PgTD3=o+{myf1Mq5JX>e|3uA%9S7J7?4!lQcChE&RqvV>1W)1a61rt!K?tjs04#-C;P z8H_%X2~+|~b6@#qQBVNrm}WaG7~=Ou@j3bjmZVz8KLPst@A+fmAP=07BRvF=P=$FFe0pYx@^@ayRn4O8 zT*G8R!BF?qO3pp+?G+q5@j#(A_Q#K9A++{{>!uJ}jD`C>LOSJ5GY%!CvX?C3MmN)8 zjXDqcoF*i%8F}L4{hs5SY3oHgkyULQOh^}YNI=J??3y*MB~Sd$DDV7}v0hSMhd>`s zWwq)sC9MY0O@2oI$53oq!^}XRF$&i-@koi z+tRHWda1^1GIAfhWON&+H^<%9OsGf1#|Vq3HKw3qI0A6}jLgKWXh~%_0vBa;BJ3b+kUCd4s8m$b0H--D-FWDp5+X?A>m7$j;*jkHWBM> z(flqth4?SGnF?gQ&j+I%IX0=ir&PY6M6)>!e^hbS8F1*D=oKso&RNhq7j`VzThYU> z-O4H$(3O1@O@|a4}(o>4)q=2DbY9$TB0^daL^3a?xA|gAX$!O5LXfTr8z9$c~ ztiV57U40frK^R@tuxyqRD8SP~9f5sj3rORdHJ}tHHnLW9?~YE#srKc?8`SN&-Vhs1 zzp4&9CmY#$j~WqK_efG^=3p30MtQ{NWBkw%kk`e+_#h>KQZ{02>B0gtb^~FbvGE-LD12L3y7P|eKy@c{HPWjeoojQeoQ`>A3Gwk6K5pf*nkO@`PaekW9!=TA_xB|muMw*h3|-<9413h zyyc#6x%?-iwiq86=s+ep6*f#b1xm7_Ef7}MDO_BrzxW82thQK|Q|a!Q>+kP_Zy}a!@BlLrUE%Q%QuB>Wg*8(XH*yD7hIEq5 z-J#C;-xL(N%<(k9_pMpvHq&a;xun=v)SK*<0ozh+QyYL7{aVRpVidziRHw zY_B=RANFSgke7F@8;fc@`bP_!!q+WJ!>xbyQbm;CKqw1*DIuxAQi_ph{Kk-iG@a#0 zF^ie~1m(7DQ_<~Tz>dS*YZYgCZlg_2ppxBBc+K^|0VZ_vOFXob)um8T=3MCBCRKq4 zQWsb2Q|D9o^b*ukx2*vl#=S1=dwP*Xm7{}1AX#gC*NNxc&UX59_u2nB{m3VxviDtx zcQ~(DMdXl!z<3hRC!UNQMe8ECFw&=l!A+*csK&>~=wMpH2t~N=b{rEGrE%l%_|DhL zV7)TVzfjg8Z^s)X+bQ~z_Eh(Xu(!L4a|c9q2r&LRLkm{8zqW^rhrybRb!Nl54&U}; z%zm}r-*>rIPrGw7{L;g%Uf;Jk@grZIx<2y?8l~NXxRq1707$LxuQ`usmoKdn#dDqV z0{hm|5+7=?>8JykMDQAYbSEKhdP1Kd%lx;RG;tMb#~-svoo1Ai_iK`86&H++#MhB( z5s22tl(9#tQ3JfJy@5Gz`s28d0b)7};vJ>Jf7(ay&Xv1TLFR^M5?%5FVlYcij&$rV zxjbk2cpO2d6oXNSPIpysmbA}-gGT$b^eon1&O59v-3YuZn33z$$`>bzf-atJywhAp zX^F>Q*gTAppCe=sU++S+X0qfkc7OA3E4X0&B`6tY)we!+X?(LStf+`jw;bo3#H`T@ zaWOPw$n1{pWqGm54>C}`mmzrW;tX%@3bMXs>kq`mZ|PZC{ZqKz=_9hX_Pk#(Zy)dt z**GIha7q5_Zun=|>H~g`UERegh0f5y3D2J27o`gkkw!ks$qcqZ_mWuih&rld3yxf- zMserGG%6J=6Ds28W(?BgEzPq`b8#nwG?fw`M1{Hm)YLD3?WFtex|~* zVP$3~IJ;n7BIrb&C&k{%z{*9Z6dHRsSVu5s#V*%%#Nmb86gWvC!!aZx`or1nu-`Sj z(tW#Cb5a_R&c$d?1tlVkKls~;^C5$-fCbXeAzj|tp?IYFOfMI<0=~W{21c!lyG)?TpiJw%v9irYO`0knEo1j zi2%B<))(;b$v^(MHJBX z=hJt)TPX`9-5knGlF>i7lX*cQCEZZ_?(0cv!RJ|EOLJpD;Mb6V+w>@3yTm-{PnI<2 zRJ+9vm~y|5tgXf3&Qq{aLfQBVG%bUJFp(CjMW#Ho2(>bz0m@>Ohn@-1X|91IV1c;J z?~hEx$gil7#Cs4=VZ#&k=lAy-JadNl#B<+v z|4?<0`muwmP$j=>B`zex1){6Vk5KIrz zuszI(_z!AHK)Vn9y}9Fg@QHC&$edZY#YoidBsxer?nA^XMHrbM+Uwf?f2DhO+y zYa$1>0fi}S%U;v@JnE&kt&1y$_&|@NzrAVp`aSRgxXDRzO%uuTwb@$k-Pi|9{bxBX z)Q6_8xvE+L%@Zxj{wTGd1-qdKP^aG~nPh|k)*q;3LU-_|5kE|#nylXJrfNS>$pv7V z9ty#oGI*F+Psm%q{Of(5XW8VD{<8%eWKH=62j-`ly@9NtJ);ehD*b(nW72?5sc{)V zI*^gl0k>JL?7%2Lmq-s)z_S6J;(g}uf)P8xp^CH|s$^Br!^BKC65)+Ci!SBWMNa3N ziz>e>z9vEUr$I)ylP2VWwLrm9`0MGmovb@>oQ?m8bV(KpuSpKyy&;J0-39x+en_;1 z3q5rz6BCPQvr`Nxdr!$c#oHF$<40ZGd&t*Uw_A|#&yWlA7TBeXY{%0zdh1^1pnG8E zRPJLZ4+SBcUOF_PQjS#G@(gAdL+|ze2sINVgpNQxn{OwTs1I8T(j@0oefJDO#*wXc z)LG%DVj!}!q+{#z{E*dwhtwT#Z|3XQYkw7 zWtl{+%?Pa9!Y+U|s@*HKw08iw*fQ5-jnl~}BQ@bOulj{?n+LCwp9*|gw$%IKCQ^+1 zU{wk-&VdG}a>{{nY1?WWrHS}MzB(GA8iVqNIDX52bQ(g56m(YS#iLAq;-lXVNR71n z7C!8jn^*|oF;x_v&TgD@5XE3lUK1W@ap7wW09!sgaccP_C{pzaij{})K5mh+W{NEs zveThIP3OmtlSmgJkpvbtHLGv%<6ieyKF}@1*Do{? zkx})Y>(hfu9z=Ydbt$!Al|}fMFH*=qUNWbre%V!RH3?%$ zkRfl})nQ=@SKKl@AMEn$pTQnE)_RroJ5rzIIL+-_EpEP#U1p~n)d-?XJlQ*`y!Opq z4HC5U!m&bg#$-ePB6suTR)Oge$wWrdEPPXM1jrt{)aU@mOpG~S;z1?ErivFr7~qzw z{4Onv#yZWO1xUiJ6PgHQZ@XO}s&Oj;;q1%UOTu@DP%;8iX+9JZPs?|8>MN9Pb6yzW zAP~&><7-+0m&Ghz{oHeL@dmBM)Ks6Vc@2-@1I3Cx)s{b7RLD!fW)2}bz-3f9O#?k| z!!pkDBApmDtiUhUo2zchGrM>rFZ!j?U`@L1NH7zlOr+#M`yde3Noik%?mTO^c4fc-tt9rhg94GR1GOJ zOWjzw2Nzl?%$QlL$F$_D zgG+PMHdo`2pvU{#rKQ$k8jQ<*I=8B7>xC9G!A1EwEL2A|S^$;gQLw=J`XgEx(}O5XQAu86G2P7)Is4ce!+OE7{1QfrPC+3wu8 z)1Tjc^MY&YyVeQL+N2J68GX0&6^>8&UF=H~{~e!7-4ML-d8~+%zW@bF4PdXk===Xc|fd2 zA;J0jUh*XS0d6cn!M-mZh0Z%w$E4+RCyT4_#D21}I@IwSSx?!UQ#7{#gdj z2p>hM@SAPJ4pPuV46D07TjK+~laeMKUmm7t1n(@P?pynco@brMKHo9Zci}PZm8U)c#*OXzR)gn+oaP^*Zs@p2vvs)OTVBp!y?G;y^y^Ql&6LxlZ|&S4 zjfD`pO3J>gDGR<+{*xfWQ#i!9mH})IX+An_<3k5bjttw1My)EePD-Bguq1r57eDy6 zZE8{0ponO+*dVUe=@1YJ^h^8p@;OrU6FJTMD^1F0V9oWN5i&%>jD}v zR)(6~_EQ2B^-2eFYa|w}X~ie6K9@^PxkjashrY;BCmVYC7SkVJm}91!D75ayQVpzn7N5^b2%nxH2pOdS^g0jUOVt+X=C%*lT)s~8uf0T zf^BzTw{H4_zB8|0E+dvQYy+dpZq=xh3Tz#l(jVp>Vrh2?mTu!D&sjcJ0(Hz#1!Mz< zhJTL-YT&TF0-U@J-Q_)%B{}Tl70n~Bg=tCh8pG7-b7VaWQxQL}mPP*)o6Irw`MRio zd2oMy+Dr9|^nzAZFgNh0g{I=*yb-!;gW<+I^^qdPnU$sb=-rhk|76uwT!D2PyGtsw z3?z<7p6k1CD>IM~X)jIT;7yOE^&0@qPx4`FO()od&{5Zo!k;ycGl$iyEwV_d;ynH& zeUPaugK^o}ATHFoD2|de(vCoJb`%MJv{>YCK#5&BY~%;$B=dp3iVHu%VOIm^HDPy) z$duI&?{~6lQ{6siO2G=NgjBX{mtQNFOcp-yr_vT6j@vrt*2dnu0mVdHgRANMsy9Xh zC`LMeg%AGmRv~CMejLinN9j+_xJQYYCLfE6+iKFK}t}arKQfV9CgaA+7Bs?>7Fx99DC?@d?-C zN~o)}|4jGwbvnZ&uxcbXRS^r{&gC7bg<{2sCE|YHF<-A9nPgx3Sqb4_eN+|(N%j98 z)}&mLYED7ja!(<{@uXuqo3+OS)QJ=x+h=bBa zRlZC9eGApW3O{{6JYz=^>|NcIA|a#i;C%EOBL+z&9t0K7H7CDy2>N%!OE%bMF0V>K zq{LDz!aOpQGMN>mydfRMQOmp1_-%DVU*F+C@Ee5F(p|nw5x9peq&3laYGo);YH-N( zqk}r48p>q;W_DkVj&N(8j~9aCK=vN(epRI zdrbZGQgZP6Y+C3@je5^nh2%8*;k#Go0B3EKLWM&;y>E5slGDUXM z+RDe9KZH{&{jx{zQvC(hX7kCXcmGN@NAG;5_gXdDAg4{zGXe#j(xmlTVLP*qvY+k;Z~+cYd5|K z$(&Q19%uBqyUD$S{k}g<^SX&RKXhXCjEtILz&J4Z5;o@1jD!^0zhhzEAV(@WH*pl< zi1i9E;o#Fv5ipO7_=j+{15>_t)NnkI&O2H==2$h$*6B8q z5EkQ-nH>V}N79C>@{&#a#lS?Lc^*SMn2TMbz@Y1^gPUpXvBm5wuZ$4v`X*03x#hDW z@SkA3DMJ@MdH6;XS`57h&K&m9fqO>j(@uitt!C=qJjO3auSRhvm0EbG0+%=Ji&VI~ zjN8P;##DQp7vflkR7OH9)efHTi%Uev_UDqLGv4GOGocv?PV+>I3a(CU>Nu#c_%59e zsfDKr+IgK(Cap={9*5x=23;h7{_Tykv|~5z`t7@G;q?!!6-}#IB8ykP$%TJ-GDMM7 zxw}G4mw1W}AOB%%Wy`PjePdOSpSr9{S12p7imac_6!x=5ifT(&}&| z^x%x${}@|Z1M9W3ZK|GIy82m4LJyd{;7eb8NKD|t3vFoPgD8lt@>-NA($rao7cQe% zeD$c27NCGgnuPOQ1@chizwt@4Ui$It2qILnCXNWu8_f zj_+BI2yT5egiVWI$wXn`iK1)OlE11FJbzt~B|Z}f;mIdN;Z3}y%QfeWCSM3(wGqQA z;xr=t;j3(p@7$>Gkbf?GkMrFufpu}Ih~l-Lp0iJ?CFaw4QV+5rlFArX$9YMHsF?AB z(emuf6!Jk;2*Y-3%lF4m>V8VOuJ)7B=Qz$!V$#M$lO1%JGP{Lj>}Y?7;;lumYiM5G z^qjiN29hz^IihqDAF_cS6O9*^*h+$6-$yGb5?e#7a}?49FmwosS&Ikl@~3#yw*GW| z6N_%Tmn!JoCnZbo3EB>!IFG*SD10y`wfefkGf*kAJkgUK84)bAAkN*#a9U8kqIUiB zmV^mV3b}CFefml4>29tRc;CN;gX41a#%MO_#M!(J0<-s{4DK?aEQ8CtoPYSHn5Js{ zhCOaIqeYPIX4F$!S%V5Ck52zcj=3EJw*r8T3VEa>RD-QjT0TVFD`Wt^PkQ+3$}v}O-Tb$O-K*x{Co@g-Ef7*tmZA!)D(Wo{$uWVK|j{J}YPj1U_~ zSiL7HUqM8;S{`{ zl{-P1*t;8XNmuG`6n$qy>CD?orZ!npU?0X=j9IU-WPUH2(B?#@t@4&E5ve61l=|C( z5hqgfIviet>C?GEL{1JAa}`stI-`R>@9CKZ2H*7{1c$;|_JKa;J#w-+3d+zzOnE>Ac6IDgVUdgEC-?DeD zRi&Q-Wqya+@G8XP^Veclp4V4_id{BCqd($qOOi&+9STJZnjb}zA3O(i5LfZevI zI{M9-jSKe}>l+Y}3u?~&>gk6cA)BA=z0`Dz@q%Du?z&R%U;#>BXgIvC@SI+xmOc?G zL~2cEw7((fApJb`)~HBe8|7q+e$XZ=#@c&e0gaE{0Jzbx;hr&(%smeZI=r7TBBh;} zlUlVPrPWSU<}VSuZk~*>X@$=|W+JCNa;z?lTd3uvbTAI@KneWWm5z_uC0UCO-LSrF z;AWZgVK*wpzL_v^tYM}b%oFlZYS>{d z>Bx2jProl(?Ey$IEW_`aX|aDyRH)TXDS8ky5ys#mguMgvcyeLvne2IrR<@m5Obk)X zabUfUP?uryr!FQsQ=@Owkb|kYS3MuGp9f&zMdw(jE7tZAeU$=)O>KBR@?1IBgF24y zYxmn2*ifH-ESS$nzif)^nWi+IEZt#;1*}?Pkyd8o1vQdT^+#6<;V+G9+op^v@%*Ma zHAAIz&3sGy%rR`&s~>)nh<)p_nB*b&_gS5q>{OXldW$j!=aHCZ$;9rDuwQUw|4Yp! z`l@A7+sP_KO_+`E^9^$@S+so6{R^}oi{C69yohSc7z!x{R}BsxSM*(oRNHEZ;%^yD z1m?zzExM7Z`epYi$B*YpMf8 zXXLDrin_pSn3SB`?rhWG@jB+Wmy`($yM$NQ%=^oN;$gczYBT+^TfblB@34D{d74T? zy>3*X&vajTK4LEFbIX^XE*mXG6cf41}2I;8KwB_ix_aoDn<|Bk|ntCRp?6`Lk} zp-{;HW8CUdBJsBzpKezCqRXF`d$e~s%|vp9q$bk#y_pcrvCyf-ga(U*%xmg}hjFP* zH^a+gBCCLBI%7-G5NTOTwFRqZ*U}*;dme26-}KTUWDUtX+&04@%Wab*RA2zUf?whbiTox~HG8kqqGRh;jnOf1?l2FE3wu3IP z3WF^>cRu3ubSSpbCXk3hFQ|GWCm9c##~qrRRi!p5P$^+o$_aIbE~iwe3t}JE{V^YI zUJY6%rd-fe2dGBDejg;Nacfr^$lA1&%sjoxA}FO$8*7zt%Hrq1#-jM8r8Fu#SR#Fc zr>|iBxS+KYkG)gs|BG+mBjp|?GST_Pg2?ieyWyh?(YVC^y`(;~b(R5G6xP_OJf5d= z{Ty_}8X!^mMq1ER<+q%(Yw)WtfAiUCYrP{rga0U#3YYZn>hgq2K7SYH|1HQ`czWm2 z>#ILD^y}dI8aA#SlE!KEt?iDp#~*WZG5_uv zD9a^U0Fhliyo)f&yl?MO=#1E(Fs7^t-hU~_Mrmq}6N6*p1us|Wjik&Q#T^#vHq#a# zLO&^pd~{avtOZFPm$!7xhW9whwn4J>k99uwq;D;R$*v~$#rvR{m{+trkI&e=16>bk z^_-abR@~FA!p?O?aGM^EM1XP-cd2YAqG2u0G`f-u6#uQM84Pz#*B)Rk%_u3DO>6Na zg}y+ooFjn8RsTemxhPVmq=)W2wZTKpJWIT=W^9K@R+$|r!w zw=M;6C7Y;11hAlkkM(F!9RXMM?$phRXAUS1C=x?j9pn{fw{e+en}ZHWP`|%* zm65*5U2jL$VOY@23nNapnNcI)l%_-x0Vn zX0>UQNaj>P95{64bZ)U#AP8sqz?NYC$6G2hV9>Bt6}i&v3tI@-}DRwjwuM&gRdXeY>r#(~UUhfH*g zlj=Nky^^h`IpR3WTlHZp>Zrj}k89G1D+BF0-7XsAUhdxLYQ!*Q?d<^lNENWhn95hq zw5Y3K;o;NPUEl(AnpOA69goDV1i1`RuyRP*DlZ#PNh1%np>MQIr=@fTIcfL3TZ(+2 zLzy+83OuyQ{8|R!v;Ov=3+KDnfU(1hjSLl#*d6%98x<%?4fj%|YV!+)l!l-puu}t< zbw#|bUFoOsRsJA&?}Nl!l@YJ33K9vDH)1JOeREBi@J8UEbY(GJTL+u1ihCH$`4`^uxC5Xi|NdUdxen2Ua~t?D#VuR{7hIw;-Jws;%UD z)0v!V;9%Xx3ME7C<|}y?=En3-EC)mv(ZVIY1nn_ixr#Nu8m}$_TT!QMW+hZjTyKrP zZMiaT@EQC1d&k8q{m0$)y%B^hW5kPoxqMNE(YzK6sRbzg|g=%h3=?#^hXdo-S?JFbU^7ajwY6(pic&2JAIzAVYx}#BhEj$8scq z)?GaNFw9SU3;PRn0Hdu$z_Gr{{7QwItEFd%C^`65{P<(;``F7xp2*B6&P^qZ|w~>$+(U8D7OS`gN_RM80|H zc%`q}r?;Y5@Tv;V#7{pws4KG3T#EfItH1L2dnp%=R*zcdc?)m=P8K(hXc!Cs z+U*Y==6V;AglDg-j;M={XmX_`>(J`UwH-_``kUw+&@z*Qn6utj%G3)u;2FPN`w3$h zv;|D`WY5#Y@ZP9ABAaUhh9xMH-=(asrH319%TNHFtX?Lb-bc35Vp&0tK>m1E?-cEW z#t$Q_*fvxsWUo-%IaEEOTk|&qW_7cAHH9VO zh}g>Bq1EoG%|F@4ojH&i^ftzls~o6DL{J=-{wvxn{^mMK!r32Pq4`J!D~UlM=(-Ao zjIpaE24Ra9ZI#D%Y=qaFfLYV>q2#X45>EDZ>WoufuEn| z^+{;X^)fSfBAVPePA!`|H2)nC`r)gq`Rz>SqQbX+G{`{&AQm|xVo;ik0z4>LWD%{{ zK6fIg(ni@OA@nEYE(tZ*@uHuwH%heY=|lL$bq-}-PAX==Y2uha7H8T~#JBH+?4=Up z-Dg7>Ut`V=)*8F*0f`rFHVMI5$mYt!e09tyP;YG5voPcSUwoRNURYMGo=PW0ac43Q zEEEm;E?v8Eh`+44;;D5Ry+5TR^S#9@x68>X2?24gdlHBU=AbFl2?{sq^q17a7k;rC z1mf86FFaKV*!FP-(`+yysH^hME%LSd|84}NMv6fCHa;h&D|5D>ozhjSb)REc-n>Y4 zijN*e7pw-{qO}hU(CWg)-#DT|IfcpLcwdrhK_g(F6DaQ>AFbt0iPJu1 zBBo8&(u6Qu*1wdn_wPm;Bm4&4P$g9V{mTufRsZO}GhG63b31~hdR)=!Kc7HXq*-u1 z`Y02&5iuE|6*w?TUtmYx1>dA>#afqb>hqFp(;#)CcFDVjpX6Q z`n*0LSW2wtWS6bf#%Aov1$fd_4O0H}&&T6cD<_oan<2X?{&#&zoUIfO11eS;4%tUZ z>eNil7L92!5JFsWsxPi7LUPRwT>bv#8i;_R&mrRgwK5W-o= z2O9q5e>I(kh?YGMym9@AZ#G>U_C`fr^_SEEJ{R)oJkwB32-&oapp_r{;6BqRW1C*T z^XwqL(3wO>(wttHK6 zY<)THhMJ)_L{u{8dDw$Zsr8;DyFz`@+qgM(RA}O(K|dD2H@RE1820&u=Z94gkooJL zlXBAc>%MAQyKX7ggEuA9MpPKE-zbVdJxKy0wlJ8CS+epK0EHo~+Hj(j8;jKcC49m`lPJDtD$CYP9RujZ;sm_Z zg==Rs?R%<=oAJXRxXIxofKBQH`=D^c#=W`q3$~vs{L%ANtcO~2>04%?;TcaJgJ^F3 zCg~qe751F`LQLXS-F~gBT%kzD)-;e7cFF)e6YMnt*@D9FV5t)iO$P#GVA9#!sJDAh z?Vn&uW|H{FE&P;VB_F1F@tz*v$H>bTR5x>qex0f3QduHE5%7!NB2Ljyju-vV5<`{} zkc++g%&n0)=tB?~Qct@H0rJMJR^_7WzWNVIyIpsCtS_70KhaP`X;YnDhG$B*&<28T z>TtPE!tD`GN>N#sf2X@DHx)=paP~v_3E;Y$95}5OLnJsf;+b%NfK)^dd5K$owU+)? zvvdkf0DPr=4dmjkd8MQR4@B@ymC9#i7d|482{5{GBW(7V0kl*kH&DhzbLzMLee4P^ z`DeR3B}m4&*5|t_m0>vVf4TXxw;rd0e0|O~_?s>7M}Z0i+5~ zHAS;@u#^rEhZE{j`6#IFEe3DA8c~Vk(SS5t|MIl~+0iM4Z{BbKV~UVV@7Vqe*$)Kf z$q0g!BG5rRhKr2>p<*T`e#?z6wkL}h_#Af9zKs_~_O}!ED!F?@wp3TyrG}}!XL9LB z?~c&f#=J_UfXqS&E&C>Nla>mHit-{aaD+f#VQ(9gU!em0?6wo%J+J_00$QeZ#nPz* z+)H1D9=~Tr;D!oX7T}?WR4*#-TfljWEqVv%BgZs?(pECcv^lVL#kz|@Vz;XKmPR5v z;`A^{k!}Du5wHTBW@sOjqZh)N$+sZ%@r~R(o6>Y1bFC=c=qv5VZhl{>b>&%kc+61PkjuL=tU1EL89O)}?f}E)QIKR~HPU@WI#dZIuZWA7RS~+cU0}y(s%T?mt*~PoiKvWnJ>pe!dv%wG6 z(y~lP-XUjXI}iOhB1G;F$Tm#SpK_$U>&8A&@`=o(uaE$GF@bhS>65kH;`?n8V=Mv- zFx&(9B!gV@R~a|qbF?sLFHrxlq4sHhy4A%N?kRsq3C98?&=9m<#3wtEXt zf*m}7ft=~r(*>!M@dgt1|PA{(fmv~8ZSlz1D=P& zZO_EXRvO1f0n+YCJC5nUFjMlH$&LaH@pKz3zc*70=G%M=luWHL*9x%cCqp8J@hRlD zpE~@92~H<2`qyjd9P*Y{;61izf8x2CGYT8D9b{Ar=cb{qHp6`NWhhWX9u|uP8x7Y3 zGiR(dO20uyDGz+;Y{P`dxgvsNyUJ2>A{K{GBWn5>5Pwxwme6&@;G_hkQTOnLBd=2! z2)3$0zy4mWqQYNBOO8TC0#{XhUJENj` zZU&O54~Vc2?(c}8I5fDSRKa{}eIy1B-)lYx>CZ;*sv5cH=pcxz9y>g{@LbrsN~9!& zW4gmnL5z`Ww)>a(Q8S=&nr zc@mWNq+u*+!^l_^26923)M0Rn|7z}Gq-=gKo7U&$ES|nFf@bjB$G1#vQfQZvgbDQKAN`FF- zvcn22kpbuLh)vtkRm)O+eY_E!oeWkRQFh6Qik4Bl%(0sQ@9~}k4}Y|5)T`r_ zzt}K(^Nsxg|7R*{3-R~fG+2@xA$W}+pQz0`h*R%Ei@3fyEKywvbcLEJd#GWD7^888 z4rp|lDMqcB;-6zzV}Rhq_O2H3gXGww%XPG7AaWDB7jFYmc}vyoM*T$kESrWCzWn6OH;FqPF85ghp-$v}^qgKNad$rc!w2|7P}XRl!!-V}A}yCA2`^t)4R{5Uy-M&$orwg@F(2xg zEJ4i?*H@%k2dHZTDW7!4Y&}p8i6)LebHh;H*%mTZq81P! z*ueB6l-8A?G4W%go_sPp+I_B7x=d*Vhrw5JsKtWxPpkhfPz z0X1b<6_f`ZVj(z7R9_SA00e*(Lja&+?x@cNJau90>Dp#!A+tkns!t5~6TyhP(-MOf zKz_fk|H6`&%+BX5?CesxapCn@mCKoZ;z*7%K!qwR;Pp@a4ppTxwn48c6YR&nS|_Na zoIlAY_4opfdqnF=CdFM=_Dawx=`%`}83M&SUm@$4wfvS-7&kLr05CDXIiHOlN{+i* z^|28?lM2o{iH&ZvqNVpI68A;WGLX%Uo%Ko4D)*}NK=hESDYX3nmC8|~*k+YZoB|f; z(AZcJA4bs&@ExrEWA;$YRR&HtxlHsYW(5EFS2(OM81*|~1AE}ZDO?arP}cEy8>2l0 zI>cV%Sgm_>eL#$aid4L}pS<)nvUFKLF)|+LG<@KV;NHN1=>a`NC#sr`K7lS$lpqy&GY7Hn7)FE^z1_ zND5XEV~G7;#;h3whzcS*`+4~eGJ`tqs=-3V4C5JYXxLO*rvn>sKBywD2lwa=+~8jq zMKUu3jUFXpa0(0NQTO#Y&r#?3%q3o(f?Hq8YX`P|B}L@ZwDt1kt}nWS9|BXH?D4_< zg@yOAbUjMAnh-!u>H7_Wy$ugVf~8(y9`j+IXoEGVVDYfy4_2@!n_%eqs~fCrD&oZt|}7KwByvp=fh(Ln!WjuMc%XB zAj5waKDUBSWeClDmL@Z1Jv^%~aa01-{=59Dc}^Ta(h>;HUikXV89++c z_BDT(*zgG?p7|m@kbU5F{Tp<^Ow_4k zE#jERv$q!qgDI6g>|6 zBm=mKSTORwAvr`}6I7ne5|R+g9WKs_^~+3H$;c=!XIOErgFuI9$du%b%=T_GV`3Ch zU#X1&dwyfvA4VDLjr?c`HFn;Cs>#kL+18r{#SMpgl#e65Cx7WLh-YmvGtIKhr@kjk zaaL+c>p-CcF>$Zd|~!W!}34IJA%TF#zE>gMw~Z8-^9jPO-r}f)%d<>fsGH1P#GE z?)t!QXHlhc8}TRuJ<2WMQ@i0teTMHwAxQ8TVCTiJ^KZyuLcN%`P9%_P?G&L%3(cy1 zhME~LJSc|9hn%iI=sFn4)Kx|*5F59}$#NIGU@KfjUuT{c;Ug};;~RyEi;I7w4Ua7E z_}sf1srYDgzGMmP8g$LdKe}!Vx{C+l{QCr-1xcF=5sChvfep+9yA#Y4b`T_LN}CcA ztsf$UNXg~s*tQ$>Am}6qsgl9l>&jg-#MeS`S{dECC-|3+K|&A%Fkuz{gUX2t zWzG|qj2^8`+Vw@Q=K>o?(Z#KKU_oQHUvpAU2@!^zY<)-5Lutlst6DS{TU06yKLOv! zf7s)E(WZqh_;CX8YMcxDf&%kENaVoZB+7NZu-fT0?9%DmZF zt2sg8^yGbi3)RmlQykN@XUV3zXyxqywh71}AFxDq?imP>fo}3jQOy(n?;W`Zq> z1QqtXL%VO0DZkxzSCBHEZr931n=r>ak<6?_2oji%QA_uJ`@LWGI=p@8&o^cSDnsq* zm`$xUCqEqZQz8d4)PiXM5SBT=?@_6|r&(!}*f<%6p`PY3YMSb%xE~tzU!}hV_VTni zolt%>IAyCUCrA}IeEpudq~XC*I+Y4pEXOKo%(K}vRsV;BoLscg1kj0e+md}x3yS%Oy&s8Ry>l9#I8-(rb{-7bX~DU1Yok>#k894A1$ha zV_%+DwNz?+)(2TNxtoqnf%^R1V+@w9X{K59pEwx7&m@EE-Sq5ocgTauDwUOxg>tOY z#i;j=>MncxsGv3JMKbnMn_tS$TUq&NM!8RgX)gxn$Eddb((q2=@b3%I|6^)nSqk1r z0C!0ZhPwCkrymE2gyfLpT+z2xDp!$if-Anf!>@=@1kE8yhhS;OT}I6F*awt@=2pU3 z-W8_>^qh5S9E7IS6zVr*zN8Mg=EY=fCI!4=@tri-Ptav4NaingRL!G(8?Gb{-lp{E z;1})x`N}nOx5z>WS;7Xf3)8`UlbnbM*nvnv;!&@m*lqOqm}9h4aVQxgostv0BjCvi znm}DeUA=hw=c6FHZv7u{xb^`ips$oK3Xp%I|M?pkVARSx%%@%5qNyhaHtMDPve->d zp6|=H)&r&$lg?bRp=3_ZWQ1dr?s!hbU??Z47fTODd$^Dsut(S9Ch<~4DKb*92$H4X zfmo`)iqR2P<{Wc^{}saodfuTaMt(jg@I#%WKVCk0p*0kchExa63a6(&XiOdnIsau- zx40KKx0af8A@K!@&q7|UtMU$51MlA(0Gq&JBD^17Ozk%t2J2hzsJQw~Sjz*<%wo{< zP+}WDkif%$Ja2qI^D!+ikN-_h^%JLy0b^7_Kv;GYFMOofw@{^0Qwf)Vp&$w!#HWP& zMy2!bSpPHq3VB^VW3r3Px5{-~)fh)07w8-}OF=a!6?cdoC19euWdvJQ)Ui>8ytj&9 zJalXr-{qk1#Xw!f$4t{kR25ZYD+Fo7%7@7P7<-H?GhQZ+(~RZ5Yfu)H-7}g^X}#h* zJ?5vn5}tnmnZFtgO9)h0GR?5TbD9H7bz`*qh6DI|n$7a@JW=E|*aR{z%=tn}xQPE0 zwK(nQege3qCd(6*IeUd3C5#!kQv!zEh$iu774>I59h@?vg;&?9V?*NK*=88$>MJg+2P6DLohP+`=?i;X<% z>)1fUeA``~YJerO+dF*VnX5^A!u%*GV z%tbhUaa)KrI3CA>kj{DMzG<-N#GK^pEv&0?cl(v@W?HVHhRphJz1f_}}onye-UuVRF-^4_gBm-E+Z+>*#b% zzD3L@efEBY=RMTQ2K#v~1Du=X38y%n${pYg0A4&zp#B>Evh2{8@rM#x@ zCSN?Z=Ia0oV8zFoTF0JPB&vRlxzZl0$n$wnsgVoPL21-!ZQV)yegzCLzz>#U`+)D+ ztW;dvD}fWX-K;3#hXkJnTrgJm@6};nyWz3`En!X=BmVaxgbpr~s;pF)7zBUI89gIn z4+wf}ExYH0s#XV%1n`D$DW+G4i6MRGu+F~|IS&4$0{C&20;f^i_Tn9}U2NJb=M1QP zs{EiI^=&`m13Hy_v{g7f48(J6sH?C*)Uh`e+Gwfb?cW&Wxu>y!wzWjSS6%O35~8wQftf<1=?iBtxQ)#N z_X;;DB>Cd^JwDN-96>q+EW*MjWEbExz`B;?v1E8f#%P(q;D z^jHaUWLdkuGNvif3i_9z!)@eNikW_yI&@H{Ro=S@dTdAPXuAV5bb16d2f|wcQT9?apeWF+O_OXyuRhlXf%2}xA&gEFz#g#YKoF?A=!lx3V8VOheJ55(pBv-sqGK{N#5jU{8+N!`ZSbrN|K zBqj{e8sLF>=ROlu9UX&X3UkBvUV+H2%1q;tZBe;qsb78oqQ9IybuO-d~(eLC;f(D?!J z1B>Ex?NotL>P?}i2`un{-OL?g;c5pEJsK&QVvR$snS5pND|zr}x7mO!e&HT!f1mG~ zj0C+|73SCEHPUlyX9go60?2i}b#vZcHWuKK5~_24-jC6@`XM)DvLlohoSAU~CNIJm zPO{LxCQDy35#Dv&SJd-vHVXi0~MN>D?l_lw_(Ej17-8pe1{AotbRCzye_Bp{I?^SS`Z z@?S)6^)2kzG<;A7i#EX2{S`D>LG zpIjg(`h7=do^d?mWq3esB&r~O_UVUH%=NdNwZS=MTB-Vi=ifj0S2fg@%|>5S`U?&g z8VDJTYhZ{NJ(1kqBM;Q#_$-}MB0`4(B}fV)fD}fcG@7d|c(Bs=oBmD0M4I8p8z&n=tPrb`l$qrB@z2_s-w1?8QcjtQhpNHsx1JEmtzy!pw6hQFCU4 zcBX5`^evwong{Pq`Uj-py-T825l_hMs7VvWhOa0kE0u+uh|@;zIVca`?%2SKI)hThVN#d7$;Gi)F>o5vCS96V=;zv zV87kj$E+}>uVXwN`NYR+4_ccTd(O9u#6A))ol+{D3Z^&^hM!b=$4q&arTx%^2oS>k zKe;V+i*K}k7=10XE>gG43Y75dEOtlfr!FDGHMe0^z~PSh2cef2*Af}`gXVjltwF~q z&}J-`%Jp4~X}gG}OfGPJn zSeVM%%>nr_T}-bOEwsuTSi3r+alhKmo899Fpc1Q(r)-_iqv)2BLZEuH;ghmRY2#Tf zBrX4e&jvyR0pyvyBMFSbKbc6<(cDppaXn}h&-x6i- zjb3nTO>p94nB7u+$#}ukEVwl}EDJ=lm)8Dj_!CSyN6sO$2IAq9TXdzbk2ITt-~I44 zCBaa~aYg=%259i-)`r%k-LYDD(yD!nLJIwhMgQkZ0L8^;G;i^1q)%Zd*p(-%=>OzO zel{1vgc|%pzHge&R-iyb9lPi(q^0gtg1A5Ra!t5Q*}bn0qKo;tT z938sDvpO1E(GY?Yj5%!fYq~$eE-Q>{*(k8%ECw|DG-ngA@}AociYn3oPI zwfQJ$u8s6g7Ek5X^EuANdCr($P{Iv4=E%AYYx!mrAI`DA75}Q{%<%GyQe8yOGK0Yx z${e{2@@@4CiTvNQ0bjhY`k7(=7@#0TKaRyaRdwUsShzLk$M3`mi4F&IGg_gvvp|pY zfu2g#wCC!WC?JgJHDMdR?f8qM19GZM`@wYb@nwSVGb+DEggPzXzeRI?YOI^56e)In z^cv^H=xxYp!fEt*gP`D(kYDL3In~onQJZ=ylGK1F9fw=|PW00XSD3F?xCHvxqV?ws zUJRgYSg9C0&RxCYaD`I@Bxi+>3lM6AiOhu2izQFBm26qCZhn(;iIO;2jU`0hl;Fo+ z0?a)Jj}4HS`IFoOu;Cek(Te|uGwg(E8CN-rv+g^?$1z*? z`_4^U`M1?+Mu=#Gdpy4W`$J%qQ183oT4{5GzbPy)@o?Z?il#Ze#pm#!=r0(VUm{N) z8Pa{P?&~iB0pPbG)GbOWrm~^N)((tq&Rc1rFJ^H5)En#O&|^v2qSZ$*65xGOp4(&t z)F!#hLXp19>)42cU1I_|{{|z$1$in1Jfr4Ro#OBMT|v|?sbsICqi5)q3Ih$lB>trT zWbB$34)+FHq?L=>OW}&>FK&*?ZXa#dA)GA7>luHmAs47IlQjNETSY{NtfgJLDqq-@ zx76mk-4oC0+k`gH^kmu+3T>a?pXD(#?MD7KA-p>(9J_wB{C!+*zZo>rPCO`|&5Ix% zH4_aA@L20pgp-E7cTF)n=uh2xTP?XH{q0@4-I>;m(4SxKuR=_At=yH;?aIE4*>$e7 zr8M%xf~7rP%jO$naecH@XCjNOeV`u+B%}O2JexMJdH(RkG&)7@Lne>qYQON^_w&`# zH+!IrvgGC%wbF?Pit^7aM~*(mqQ>=_4S=CPl9JMIV5^%>P0dGb?PawP%-4bhQSixT zmxvkLEvJJUT*L*uGbqR)rMQUg`?sankJy)SvWQNh5d^Rm0zH{J^V8jCL-aPJYah@9 zWYhCE{5*E;oC#Z~AFd2D&*el;h5k;$P7S^&?Dl2t27YNh?5T^tOa7(mcnWuJ#u98+)Jq#uPx6)GF3-P7w=QP()P7bx728WCr%50* zEM{IaD4iOuV(s*mY3bN$?iDVbaz=4-X$8+!Y7D%O9I@vgXt)yzC;o8>ZQYh4j=8q* zMM>MHgbSd-|3v@T@bjEYy4Ff5{>oietaI%C$rwnoQ*|vP2D-Z*%H}{Y_`=OF7VyCH z?>@9)270_mDF)5q_deNB8g5hlmE6J^A;ILJ2$-eiiUcDHibwryFkk&CIz0eUBfZoO z`+KfzF;{iq7UWaO%hgU0);Y5Kk}i`glB{=~g_*#bW8tNY`e*qg*M_e0XZz^a#*rf|0O{pxpK+>1FJw?eS4AVw*SlQIqXgNuNjKNB z+o%7kyBXf^#{q+OVJz2a48(LOPA9;9m`FTp$Rw5|p1l=Kn&`Uuz12SwHK4lRZ^JR} z8%c4ifA;DL-n5WTCZ9>X0^6MA&NU}$ME3XHc89!opVN%9x4N59BMU_p?6JM=xGO4O z(sI3k#%&uk*YP3MCMx^X{uK63AfK2)TA2M%_5(vb69$*GmN7cRccpd(#Y~EN2>v8k3fA! z%0o_$k9&NL_n*n$NrV;CJqkeT_&bDs=l1pkEZ+fDR?R-;hxmmVvD3;@t&%u^4X4nyy)p+mgTg( z0rKCYMV_J|GUm1+GmJ-?7Sb_NcPUE>o<@jWhpdcn zQ1D0Z9@?1kCS=c$Pud3+MuJjVzYNmoLXqk{DPDY3rt(QZpR?}66)iLCI}^p+_sH17 zSe} z=h7r%K^y@qCk9B(YuFB0KacGg2nDP*yU&mDtF?sJ$RhK?H<)-BSU~j6Xi!xBB18tF zkAP%rh5JnP?1YMdH>U-x?US0Ui^lZld0LP+FC$VCre6X2rLTc{<>5IptBZ1X*_1k~dfB#;+)e8O>Yv~7#UGiztZVdN?I< zUG^nq)sTvyAQA6{wUGLkI?CTc6_7^j;YJ;fh0wsg+qS|JG5LcZA{UFzmL-otYQgEN zY|$Sznd5(w%Pt1oeOb=SO0%G6d6~A%cX8OjX>GMoZ}590<)mNaRT)9@-9q#$Wg=Od z6ek4_LxNu2qEE*k3CB(Trns8K%#Po^F50r1|0-wYEia27uXHsr)&7bTxsIXt_Fzu{ zXOIB*agJxhTR`>Pg=mFA#2^nRP?$Q48#NW%n+?|3PB4X&9Tvn?XyU8hHqB%#)?#7o z&assDUZ*Ek9Cx>W>bhlT-q|XT=BxkJBz3<}*3ZW>qZ?St_~M_JEA>9LJ(umOu>+pv zDW9gFr~SnBc$J9qn(6ZG4_29W=8yPCf7)Nl|NmZqe&@Me(TiinbLs(a6j*@DY!zFxkTlywxt0{kpL-!Nqkq=_LAiW+Vvx^;b1h<(xdO{=^w75-NZ zx&5sfgU}~knSl1zNUG`I70i`?W=?+*qG!8*FORgkET>EuNEf-3Ci}Z)jus-?x6Y;; z^SKaqZ?~`@PB^e}wf9z9uHtj%*tH(zCsgGGuD_Jd+Llje-*y5~WGnO<)?lyyT~Y%2 z@97W!pnFISSaj{&Co>hlY4M8Y?Xm3g^iFo~yEVv>s?5&Pc65Bsx^>1duS*$!)<-Y8 zSC{`H6EujXV)i>S*a_*Uu6uQYjPnNaD}2)=G!v6AG4^?1Xbp36K;-+s0@*p&;tFCr zxmMUCfCqf3(9)@&DwXodzSqcFB9~@)W7qErHS4dwks*qYz2MJq;lm6q@q-jEJ*M?U z_CHtzGQ_r&ziI3s0CwxcAKjS0H-ARm*B3Wpvv?p#Eu4md5(H%z7M+g&O7M{I4fO9t zgf^uN8K-;wMefSUey*xLyil$Rj2g5x`zB;+ZD6~edcTZuGI69F_j~WzjEsBfaafIY zmVIbBw4_#DsdlXC{{b^W%)a9VxpJ7S`TgxkUAlYy&tl&DuIAa%IgW2Lk~6BLW}Lhuce}o}QTyXsTYHMj9q}XhPY072*9h4is3XkOBB8fGx4%M;^s zZnqWRBDtQ8$3TK%?zSPJLwEQ7&y0Pk;I9eK4mGrMBs?-P3>|)yP*yQx@(-GQ=KpND ziCnLdDx=sfjU=7ZINw(=quH&*G&ZIro6%iKr;G-&rkhG%%Ye}(9;e+3?)$w3wL4LB zX)y49EmGI@Ho_a%_3O_?3lJIqofDq@k>UNN7U;`t1PIBUe4pm$Jrl}ODfML*;RC>L zH9voaP#8%uDA7H8Xyl|}VO6hBhGDIN!J%9tFsi_+xq>l#z zD1#g5i6tJVN3d=(n>?`s#pOk?2??BN;4D1zP|b6{jfBBI3wlG--=^Gz!+hbTglBbo z(S5Rqc>y2;bTO27A=$OS_nrzsmvZ-_m~g_ncD4g>Sm^&YAv25i0EjZ1Spcpspz4d1 zQa6_Pl+`RUH?_delu{?xH~~_%H#aJ!PC}5Ns+Kq+&pYq}#_2`?7Zp(TRkG%*DFE2; zw=i!!On7JFo*=yVV$HJ^OMh3sPzfbGT`BdI;n}VTGCjKNT^@f+? z9%&fsF7U{OsAg#f_|AgfccWoa_cfF|#!zm!JTpM^`&X3+R4x&Ia(LDs{^{a zwuT$ec)zm$HxIkla2~FygYjvXqqoj+1-I20!IWeZ!$GOPJTu(T{$mX9-p^3(4-S0@ z=V<7i@a&zM_s#MvJ3pd2Rx`*em~&ijITfx>I?1QdR$Lm=6zH@I1L+u3JLkT;hC9|_ zOdZfv(;7voTS;=1U)A53kIfA0uITw_S_k8khq3CbMfa5nIZQ}yWH_ZOspHbLr)rXq zY09l8xrIgh!;xec(-6a7v<^BK@nij}&X1`27zkowj_*+t(*&oCh=56S+a=YNy(x`Wh&ATAr~!3YpassBPB6>#4iUv(&e z?KHn#rp(r`P&pRtJ)p_(XoC4=|hsGqawLFh&00xoDJ~Eu%yIR(x464lMRxckjtxh!hDMjFuGrX^V3eotXf#kPzJb?k4;lUED;@+lH8z* zZ9G%cjvGn-P4n9+3EI)sv`neXARVwyi|`>M>4sypP)o(`tcl^dRt6q&YQ3zrCUwLY zbg`IQ0N6i=`p*Q=SM%F>5bLO0dG za{z`brIz@u-J1Tsl6CMxm0sBbz~DL=o7DhLax8Y4QtJIGHq)d5(7FH$Z`?-n`_Z

      126#V~Flo@M-s+D$Ug;bu=zVIrM8zwLNl3 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/updraftarray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/updraftarray.png deleted file mode 100644 index 7f5b6184d6b6f4f7220fc96074c8ff095dae5e17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43778 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 S?=c4f$W2{Y2U4kM8S#JYh7;`o diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/voidsigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/voidsigil.png deleted file mode 100644 index 3e05776d9c705334496cbb3c9175908e41258054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24185 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 Z$fSwJ5#pYU+*ty=k-izKN*5jVe*mE$O@;sf diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/watersigil.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/watersigil.png deleted file mode 100644 index 2a8e511dec8db605f7bcaea5dccbcf026e4bfc7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29093 zcmafac|6qL_y23gU@R4~B$R~gYj$PHR(8t1l~DGKeVZX9vdfZPMImJ0XQJ%JzK%7^ zls#k}Grw2w&-eeIM;@MynT4aGwUVeyQU}kvPUgPOZnqB3AGN-!JtBry^nJv( zPSzk@jzcGBT+Y)F;hgaQ-@h@kBppupUvlM-WLk{RY3X59fC}9^<#h&{a83x=9Buhe+A$c5IWev?!CMp(B&M&f){pc*r|>t2XUruSff_Q^xw$8 zCs7eb$s|=avQFyJbhyEt|Avg-)#gs8T|wuaD?FNNQAe%o(7{x?bCgRoB6sdyGn3W$ z)8@uiup?VytU?DX`1|2{;)PS*J^5&0yb+v&0V@RN8XHE{63?aVrV6(FurTxOj{Z;g zaJWGbJvg)9GNFKIcx4tZbSw@0c-u_IIbS6CQ4Kb-Ug^Ap;`Rmw+;4HZNwgcGY& z+HKM#6#GewLD~FEui!q3YQf>*`QOT8jx2|}pRtO)PdF}~ahbDXJ_&m6w)!J;L33L4 zckfXHyUDFOh|OMm4w=qxdUu3qf6+P{12mlTwzntE0mmzp=9lQa^_#@Cc|Xz!;Sa8) z<25r;*sc%ax@)-jT$B_PHhwmn=lSJmlgsY(N`S}47rK69WD*^?vSjAwJAsZ)2+Qj) zih~yFCi`C#AZ;}Lx|!Hfb3OJqH~4(XZ2t7V;I9m3rng%-QqW`?b&r@G_$fqT(rY-i zMa5o1ya{Rn6GoE(DVubf4Vb45biNMTPyC@Iduxvb+5K>IB#d#k{#^!DbQ<)y>b-B9 z;B^sK)GE`GdGZ?LHxdn8W{|;o_(7J9)|&Hv1W;v&*_|Bym40gU_SQWr2nZ&10#ABS zc)d%A$#u11^F!j(>j8NlFDeFK6GEVK6E{yT4p+?h5OxscINz2nw_htq0=pflJ7O>^ z{A<(_H&QB{`EOhCgQX8T^Ub%wyvItOn4g;66e3uKT7V|d6et6je^Yg za6-%fwoq!=1PXdnH56|iD5nkS@9;| zV$i}br5rkUiOO=*PDS>0TJn)lX$dxhKnEU$+p2d#H6D^K=GL$VGylxPIpAKM%~2K- z`QYKvN~kc3sVfZ~ZFef@HL01)_pJlJD|8ceK1R)n)K{63cl&!G`F+g zmWf}}6&*TEb+GM_T?{LC(uZE}(;^6Zb4UjJCN3xN?`ONGa}Ia}kwAO?Zu`_+Y4Yt> zABLWIF~rg&bT)U#8O`B}v{leJbqUfYNlK(`-Lz@6(GPI3z1f2V=sim#7i4e#N!XdW zRoN{~P$zFSg}FMeZY{d3SA=uc#1I7e_FdUF(|ws%1MNZv9d<5rKr1sJZA5ky^)q8uplWO!sPNxb1;V%51-ZSqbL)!X?);6?x zkh^m^w<=rDWy;zF|LJ4F?}}5`($C-#CRyZ+;c~4Bn09ZI_M#Jbo0tR6q#_HZonSBvhlSo7C{_4I$)ps=I0RSG{%c@nnA; zROr+QJ2?TOGIm${ra8|7CuLT06tb34%bQ1{N73jKmYvJKZ+3oW+;kfxv+b$MY8hCu z{cxddi~V}_>0Zqi)ATdcc;qF2y;ylcEnB^1yCS>)$B3p)i$aY=07DRBbjx>hFlW@=n;MEkE=-dLePW z)c;S@Ir*$pDHRO`k3$mDM_Qax{d%>z-_ZlCX;4JotUc3j$k_+FzvfX2^10l)&)k<9 zUu{SCZSCD{=f43ub(%NFw=xHhKhFOU>7xBP*&6#$e!;3aWLeZ{!Q*_{@0ITt!1Y2| zCO+zmL{DC_;VqnZ?MsfW{Q=76b&{ZUfNie#v{97e!q560w_bYvu*fDb%Tlu3*7r~r}9%#TGC5K|Ar&e2M<%TUEnTZ2uPI71Sz7bqd$IR$W z;zQ4mC)`)Aa&Ea1^o^<9{E>@^(mK?j&P4tsI348rBQMY2qW13f3SZridzXk#|#-Ielmh`5=eYc1i1`QlSg~Jw~3oI+Rg%4JuMOH^zofO;>8bmNi^d zBVM3`*o0i1{v5s?_hAt7Dxuak!jR>grmx(Enfvxpobb3u`_i!%cJn)Jy}#6jS}UzD z1_(Pn&oR|JqxqW=_pSj4Y3S+;eRV~p>0|vF`Xw$b!I?m(s>*$NEQ@efe#{r+CD74{ zZM^lKFVJ4d5R5t2vMtBuj_}w<$!r8Vy6{=(MTd+l>cd$DI4i!#%6*@$6NV{@ z_-n5Vf92@0d1G@nvK79`O-|3Ah9kCb<7Wp98C%Q0s(}%Xz^wxI9ugcs%Y%bzust2NON4t8V*87t3CF>GWx5aD%e{#A zJjfx`Z}w-uXJ*}lGlpqC^L~sD`UzC*bIHvqemeZZ1gKPpq80Nz zvFBNc?S&i!?xF-vOdl1SjY!EsAPV^cKYx}q7>Jp%H1$0s!SJ)Ta(MZRks_Yh5dN4# zrSIQgmnDSs%lW-WZ1dq~)$p^7GEJGjQ3&?{{Hzdu_5rqW+THu*)=b*>uH}&lXB6jc zf5(S*0Y%f9XAZRfAr&sB8-I;^e zhbS_@=#h4q0 z1yiXeKI!v8Ir!**YJP`X`KZU0eL55a#QE&T>|9Lh4nY(3*(%j zdN|)!=MRQ?Kc%f@F;$s|D^)u z+#5l9PWa;#61FACXIqLtjdbaEFOli;rF3X9B#)v_svc7v#(&;GelhY`ow&sa@nL{s z)HYuARc&{DeT&A@e`h_!G3q}QBEQQ6b`+L`yhye(J}>hD?XmtGsPh-~iwy+d9?unha$rOD8c_Mfb|M+5FgUs8D+u^`lumAdOD-#t?Jp0OJ1o4T*`D% z55l4FB@g4l`MNBmm2r>K!$P`n76=WccZKCGCFn8=FVs9YBgRavit9#p`%-o-1uQ;T z6tjC``Pz0xls?gkV{+wq(RAeaJP}S8aaG0}w^A+TDdZXEwjNNY>3bHJgk9GKaf4P< zHuT}x{T${aH2nj!QWqZ=KGZ;w>%bx=2F-Rhcjvh5_>O}NYF7RHWns51SN<>gOO*qD z+w@a+otia#uG}Oq_`HHH;`yo`C2LzRTYBKXra;{knrN>ahK*1oGC)2~gmC6Hi%??w zPFjm*@SQ1VOi&PJ-N;J9-RC`$9g35l&N=VOZU}FH zdh^!>-Ohgv&?Lpdst*&otf5x;D~U(ASN*koZ{|Lp$&nL@=(mr-TFWBcKl$G#9@j4Vsj&<)*=H6quIvE9BaH?(z(SuD1@b(uR z5{SHSn!~%5Qg>$4Elpew{H5s|26GoIe=Lq3hFK=U;p%Y4XT{k2g@bYQzT-k7eLT>J zi6kX4Df{C*3t!{rP+M~U;oP~|LEh|lAuk#Kse1MF`fC(Ucv=uAPjy+17?4CN7C!x_ zhc1t(mW8^%p-RczzF=GSgp1IyCs97wfBT zTRLv2#EMjeU&^z*)$>XR(%Yst!ypE`J)A|&y_Sum7D`I5gjjc(%aE42kScB!#B`0Q$PkfmPrEC) zAYPIbUj8@d>3yZVN>$I;$mzDSOq8Q}_)xaAMHm_t;A_120yDY!ePpCu=+JG(UnH7P zo%XnihctR^FzQZv))BNr-7gSaF)bLa|3lB#h!y7PulSGm(=+eG;3_`R(7sAlybf}5 zXBpMJHEqp>{I|FUl=OCaLW5E}AM$`TGRdadG|}DJG-QJykxuMM>3d03rVl%gJPG;E ztITnFcI8|eI_rU6Frhec;be+9teK2-&)y#@*lS3DfdyQ-Sn*|e@5 zxbL%-Savc0Lni}-zppY#$7C>r&ws}15&|9aQecRCHm14xe&fouuH1w1n zaP{c9=8|{ky?8rIV8>^R%5L;n6cGH~aveEK4Dp$W68TTzO|OAPJ8iF6#>aRZZ~Fz% z8O^`}+!(_TMO>5MMxQzngbY{y1uj6gBiZt%`V%Xq{ zi>F}#5&m}sDP`*L8GpXz*I#_0I(?NEz;25iQ!<>cq}2b+UFwo7W5YOZd?pU@^H2j- z3xw+S2T-U)INy`tuYVARy_GrI5qi)zXHuKQ2dV-CW5|$Zlcdo42Iiy2L3MNbZdl0v zp+C?6W*ZCaaMcJJMJaW*Uw?*;a<4|~(?+sHF!vLMw*r{|Hi)-}d}|+IIf*5ZzXo2T zjy@o7Rw8;UyUeBYD$$y#TU+%UwbY!cCg0}&w1#xS{XR!#aRfSzVQ#_KX$s;MFit|T z34!Q=nz)HRR4q5O>hZtr&}|A*-kjq=LOQ(h%+WY`RW<({bJQDxK{Sn+(#fBDz1F>& ze5!^QSmHcYV^lXx`$NgOaZIN30()mUJL`9L(1_d-&Dl;mw$T=c%(C2_Y^gfGHZ>-9 zguu`0qsGCIT6pJZ9iJ0{VcI|ius`W>mC$G?7Mg7+T+oz6sti3)<}ih#Uf1ObTrk<8 zN9qS1%8D^uwS_~ZMw9=Q#I{Q2s@@F_u9PMqg~K zfVe`kDO;v)_T6$ziTS_Ie~+})A!Ht;1gP;f-dM}PkKRePb=Ee}1lVSttmSL@+Y2G22q zm?ueSu+y=wa5_j%DQfUqzUy*~KTGYHV-m?bHn2Li=-*!_+pmne^4K}&IlOyne(eVR z5X0V%G2r^lQ0e9#3#jf>tMe}D!AHA|y4T+Qu}AH2DY?_ezL>g z_~iVi1l+rGCw=7iWPgzx{Ti6}Holb1!_lhGwf<*A+5n^YHsq4U2ri;uN%cpkOz~wP z{m{Qo!m~Mj+y~>OYm)Tei=Xxd05PATRpe{bAsm%pDM1;4)`hgKIsDN|ex(e$LHPRn z$8W+gw}gAx*4yu?s%spT7Z5nbu;mBVj_6kC=Gfq)lz-BXnf6_$2@4Wx6yE66RPE`c z*sfc_k}*%C(;;0>f4TnIsY*y)i#YuhCY#)ch#S{le~%GrwtHr!bXo2-%5ji*v)Q}7 z%i%mQx5WM){ePI{=<;DhSO1JFJ8O8y3lw75d<4ie3>jAwCmHdx*Ea`Ao>&erpRIOC zRjTm2;tjmOhV;qRYpPa8VjIuF6t(b%DP8+zh|lj1^*3=C3oxa^Hm-vCSvJBr8zCr* zFPcUovJsM-XgA@RUNF(UBCquP(3Y@A67w{+S%_J$IjG1)b3WtY9Q)IXN`XiUPj_v! z>vNH=vYLYC5q|2OVb9~4%G2nS6;N^rRsN|Ceyh3=67)DnO<6BM-M7%i+-64vl0S{y zawPqyZg@dLx|}1FM(A@zYz1@{W`>Vr@|iv;zJLrLx<+sCs?BC%iYjz zIS8aTR@fKYx~d@)Ci)e<;ETP(u0E`wi~piANTj^eIeDAs(|dkX(-7~+5FPjX&xnLVVvyXVC!fr|WY#fI6KlpP)-w8uegXXDm z_xPGE9^dDtR`eJy#_`bQ?L0X2x09_|75E1_Hx9PFYnEZPsMu4Xz5tA#1^K6fC(yPh z_gy#6rO6tw+C=rm_qy-SL4U6D>?NG9fp%0lE2x&*pyNTE%MFOg_Mc5M&?cnw7(gI# z(sR<=o$NT82iNkabWDJI!uj*G{=y7=($*z^TC<9nRsMftGC-E%YB5Y{gf7)(=>g&> zem|Kb_#eEvq0}rutU^%tyY|apGS7ofvR!(%1pYI2(Ccvxt_n|^s^Vn_h$;K0 z89aWEE|a7FX@oa{hn$_piqfC8VV3aY%>lgn-Yil43lw(ytUl+RahLzaU1mC|&l3Nf zrxxt#UFL>-%`ulSVTC6^LwD%H4aV}(P15;ub<76yDxtwcs^}0f0b>S`Mzw*xnOfhC zyOZ27k6@P(OqIaLeJbpfTI+Lc6oWKO%hlH(jRs&F5#Tm5K!a#QY(JF=oc>WSk>(e} z)+%5Go)5sU8&_Kq9aSB*@w4~0&slh_*Rz|4^XDCp}+=W6}%Kp}Nif413~0(-Yn0moVC ziP#-*iY*BDCd9V3NhXJDarq5Ujswi;A;|^QU)M26-&A88Uu7eZ2kr5L2&Vi^DyN+E zcI0AqkaJlU0VI3w#1vNNAdKgJ@nU$ejiiaqe_EOTg`g$XoRc1C+e1CyAhxCOv*VpS zpib(1ux?X3otTM7YVmmDWDQ^ap-B*637TB#|o;oG2;Z6HF-bXP=gCvEajM+kKC+DWll(zqpH zW;3|AVQa5CBjc{N7!^s4hbuAd+MNw@Aq#XPL{-3@apj7G%_+6VOW*zq+>N32=dOn2 z*Xv#!BD2*`)S_f16_G%|#kTrR0#Q$CQZt62e(V<8YF#j`8f2z}By%LoTm#15v$KRywIumNu8`+`TE+o*Oa>YqR2)v5lGAt+_c~ zDvav-vUuX%wLfdv#*QjqZkhD~&x8m&nz>I3%RE;D*L4Y15u3xXDYKdi#I^#}w?l92 z+|(=h@dCDS;7M+Xa7^JX8vi^8*7w0v%cFBfYxJ{8n0zNv+JwGv?-=ciYxS~%D{^N? zKl=fj7^+j%8U0J|PF(61oX%(*56d4xzQ9)GqNat*MZbU8=Mu9Y`lC>Mba-@2(U@GO zE{rf)#g~4fErqF@_*JKG_O9_u_a0P}M@>$DMf9g=IPJcUWX;}vxE2gRW+iqe6(p8~ zBvbfL5tWn%|ENGQt@vLHR>o0z`?L%DXR&?*%Npb~s2hu2;)e6E3Hp=RgMF@6iRjy@ zUfQ%Z#xP)mceCR3#VoO;3YQe{VXI8bn=op16SC+vN01r6d6LzX+`!&2L~PAt0om@Y z>DyQ&g|J|yZoA&NM=U{|AV;+{LRGzflt}k153Ut`cCpfj??dmeNM!&&vyd>oU~C}_ zcwG~U-=RMr!TN=qUA(kw^=dP0bgN$f?IRln$*Zq&z$AjGBJVd2GhbD>53kXL0nOYI zBuA|e)Y%UA-5roS&dBS->yJ>`vT60hH=j!5W2y#SLP!nAR+s*CU6 zoLs~eFIH#+w9;8^1BIay9h*UX6)I1aEv;_sO_te0^Ml#$!)|N92xy0zr0{w1qernV zeX^;3uY@r1q=a+QJFIvUx0)fC)$FV!y@=9|36%E4&pO+~n#X@X$>V%2_Wad6&%Jww;p#$=DVYEb7R4=)*ibn9f+);x2fd+c; z#}xcY1Ob(YKlw;!`AJUsiIqU^c#bX??? zM`Vb=mpw_;Nu_zY^R+K6%NH_;U{r99d1-xr!R~J6s}doXJO!(Y34@`{x-3oecTYy8 zCqC0zYEGv57?r3(Dt!clp{bkz@9sRVAQy5-#v5sXg^iZ zUM!^n^A5O>J!Jt&ymz|1snsorX-TArOkE*`*xm21raYY%7hu%B$VKvv2B^YDa6jmF z-)EGVwKpF%tq4E`WP6)cO!sh6?ZvgmGZ;S$HDk9^Sjx>=eZSSX_8^ zpQIpEa8=|({+W^20j=zK+eU?)MuVmBbf0`)3EQ-dHUnU4Y2-4NL=YzEEXs&4g>)WYz zYe@cp&4HIRjy@(LEejg1D* zyhv>i-Ngj)--_?n=E)xK23}$^*jBnk(c3<= z>=Zz@H+(y-YBTA}6ST??8yA=6U`GWp1#KZVCb#c}-3ueRP=dbBJ2ZLPc~y| z*-a}RLQaHTP*a2@Y;=}W&Ll+B@SyO&Fi(V4ulT(BoHTf~Vx0y{%D$ZiITLnDk|bU0 zQ$6bXfM%Rhw$~D`9*|FM{`|K`XYwFzGu z_F0-yrE!2Y+##PkVwX4xI&pLFx)-<U^>DGuDQ9ms`NP&TXH7JRvs?F3z`i^tHvN`N`KTqv2YO)M7X6&5y|4wVN+-eHsMh zl1Wcvy^ud7J9>K-jIrqG9+H%u!v)db8?t@MqV1`G7S5d;U~p@!ihI<$`;^N5+1l5Z z!sSi8`CjRyI}@iSr1G=6Tvf@V7=!Kw!J}NN)#FhM1>J<-p{DS!tO7pW-lF@HN z&Lj4#N#egwrg>A)Fx32eYRHf;SitlRdBy%64M&q4Myc zdl~2YReXLyXgBPy)*)NqE=)(j^YA+NNzjhx3)Sh1X+ZZpaa{;lR}=FIdZjXx2*c!U zdTE6}CziK+ePn_JltKH+bB~T4+OI5C)K^NnR8uFu2d1V9*})hmr}D+hLmDMsJWSy2~!6zLMAYa^eZby#)BA9f0E;@v2*RxHu`!8^CH-{&VjmJtRP`j_uOy zQ^Qw64!Xz~TP5e&cpfBPNma?}NwKSwAS5kf20YXw&Ihrl8(`6(u(NV5 z!oa$+n2%7)GiHkx|i8a57dJmVQ2qrR=B#sZrt>hC8aDHx*;F+>j zgJG?cbN>M)R~B3G*b%2CEM!!*LCSdcJaU0&)JYTL6S^$V<#6u8Y_Wk$#p;1wf|js@ zqy_mpDAW^TZ3^IyFYZ1ShAGFdD18-Ne}C{o_-RVdLQozDLoY!%30dTO3z9E^pAg}O zX78sp2R%Lm`Yh|<8Sq*6;p@MM-hIt1-{J<}&oRv$dNBfQ0mIwfqcnCY-RSZh9cX?? z#LS05W(Hs&H=C9VdfG3#w`aMM7rlFT9}Bh_R|hs74aML5K9=wkwMBKjySZ3TO9DIB-n=s z8C0L2Ff;bpcltZx@1s`jXa{Ot;PxZf?cdQ}!(4z_M`7#uR~oT_!`3Ca4oeL^7P4BC z-!g9rtw%H?(;6JzXe^ZTcDozH34UB;1|&k(J_wbn|CA z3pbG!D&(u~#!ybhFx(h{2MDixbaO7%i5|i_GW(;DP?>J+s;D%l9q0tcngW$yS9V&R z#8}+NUK6r70f}-iL%iY!FEGOeeYUIaz^aBhW_+$&$w9KmZieYwHr(R|1j-xU-5%?$ zm@SL>rF!Mp1~)Y3xP0z*vS3x5)O}zmytH@!ofb6RY%0ZQO@XIx{WVNkyJulOz+tgA z<0!ZaQp&CcFy0$^v15}KJ61=HYQpt6)}W&UY9~=|*>1OiFmxSVs8;6~#+K?|{5T-= zI{+lWA2F?FpQRz(`^~|PLi^o_GMHO`lk;=$U-kjBbHoL;M_XmD54&TtAKv=%wF{q( z*!Zrf(AD{&XzcOT@~MAEQQ>g2NxAwLjOu+Q&zzp0d9T}37D$~6tt@s8g|wP& z+1#}}nT^;7yZ&4*S;e(psW8V|`?|_0L$}U)eyeO-nruxLpX-U$-T8A2QtubQ+`aVi zvdavyW=O8ymg#c8qJO}r6=(%uCHrY(p=@PgD6`WN+t{$9J$l&$ZgHRJmJyKl_rzoHM-z#pV2#-u6JVt)>O@2GA<7+ z1-Z705_DD~>ZbV*e66b7r0c(aU}-CEGoGWW9yxW3huXm#1`Dm_G^XIkbe?J5O2c|= zyxD!{NAfv+!c7-(f%cXYDqpsIKi{(y=@Citv$U2;gR*@>KfDDErvpMhNPY9wgl1p8 z?09pL%EL71;o${6DVI;S`u^u+QfKJ^U9Shr1v&tkD^^Zug(0T6IHz<_=JQ*=Am=-{ zG}oL0!BTV@?r~tHTt8K#OrO}0%wP}F@DDpXegM{i+xnfJ%8L>S=3{IGsRE~ zPd_MQrpl#3qu8*mR{ZmB5{?1DPCw`we4?|fX?KAN0PC)yoa&jAHRA7Cu90`%2b3SU zKUkLbm)c1=y387RFN7TR5!uM&!y)$d(%$uo3%bavX+5f<<8*o7+f+coYbfW+A?0kM z!6pZ8R=TOR@1g({^|H0nc5q#;k_x)WmNpg>kb>0qyS#bY?6k6$Tq?17OMbUuFO! zwwsdivyG}u7_v*0-+Wm;u`lhmK&36{uX8?BUH*PPUTuC8NWbi}4 zLUb*_e>Lm5{XJ2_)r^w5Br7DVUfDU+?Bg2=icDEC)`m90#^SSSof{B3m*ozIey@W6 zt>NO^ox+GeKMiW*#wMMM=^-@x-pmiLkeF1;G48pS^YJL_&Fz&oU!xd;{gxt(z}If8I&7B z{@&+R(pNX6Zuo286o76_b4CzA&0X$%RXQ$ziqA}CKVqnq3Ym|$WP$9G$9hSMNqu~r zdsUm`KJcOHyacl$&Knp`z4J8<0PFKhTwY0ERH8R7o7|uMG@$`WRDpR1LxOL_vMtI} zq5fb_S!ws;IWDm$0o@-VdAW8)X!vJ)smJ*&+<@xyef!ka4-qexVx3t}c6F{FO)ElO zS!;kR$}ft{4{e#I3aVHY>J)Em54WY$K z@;B~iVvqqy&45&KIK<#PR*MRyb4aR&8C&y0IG>@we7`~QvEr2G7cOLO4<^h7K$K>e z;om(o?BY@*W^U|nUqJ|yNhbkxw=pud0FY&ow-dQjsvb>)&>pinuH(Y0Jpi88O;U!{ z+v^;@lo&iSF?4disS4jJ?EOO>jXHbMiK-8a8{>*ueOG1LAsF;LXc!mk70n45N*^HJ z_~v@{A9&-K0ZQ%zlJ?lu-lcaf>dKzbd|D4J1|VeGm3+}p-0_S_tg!^k4dJYL1f-_! zJZ<*-2$CZGMlO5_E_*B8vwf!R(_LZKHy!{7ZuNt_8QVhtj5j}Ni?kULiVU|8efoww({_r(@u`nGj+*?*B!p$txe9dyWe7uK2l$DVF_-|EXJ4f|*3 zUQVmfd~q4h+EPPNo!##Zwf}sV0qHK_n&QbnRX+~xUCJuIkP+m2hwW<+1d5pxX!H|B+rU3{_A{xYb4$NOlc ztMIGzM=fAwqOzDw^n1o1bvq4Kj{8vMXU#yjf=8C?4`D$xpkut1E(!>>iU!%3DcG?3 z^>lyPq5mfjEjdB+>_}&^hczu&|^)B(ZZpo+?Fe*pwFeC&H)?Meo}&&+JEf zg`hus-*%DH{onnc50f2yG4m#)pD%&I37PB zt^MsD7iEa9jK!Hi^J_HnO6}?Yiy-pa45F4rZpc8yz9C}#_O3jBAMdjGuaPO{QqU0q zuum?3l!qZ6v%bCY)SafWk@@XE>AWrjkBR7+99{T%^`$nkWDPcXZO z`@#{VZrA4E?%7sUjVVMMcsO#5XtYxMhtDf5qNzRs>4~Cv;LI{r{YB8H{(x&3YgVvE zrw>(SWjNJH;Sb(*I1l0%8+2D~SHpNtgF{#OiA=_>%iF0y?J7eJ*8a|^60^yyCL1qt zuARVkiZHw7WY|v+``A9t zXE~7N!<0XAJcb{?cr(2Kn*et?5EeUR(k^dsulAR@+^w0YnSdled~d+DbfRVMifseX z%?WKv7XoW1o@U;80KkS>>+Vm55#0XUZs;JDVoTiEiISc`DnQ%s9bU+zw2b}g8*tx- z>Fi|#9HJ0|tcx!~!cYAE3la7<$S@*Q=UZ7NKLV)%?Vz9?Z!5IOQ7H>R7L78;JPE3E zy5{gOMY!c&|KIg8wgkv>)kGEyHADd!>dKIR5>mp#OjcUTTzVOh`*7#l@gwxg_0)f3 zm2L6o5B&2Q{8+tD;g`X?g5XvH15X`Jr_D>gol>Jh8>(uUVjv;ck8VPxs}|Bf{t*X7 z3nHsKdQ7@efZVE>DJ=%H?h{G27PkUaz}eYf-SyR=r+aibqB zYsb|QMDI*zVcNaHhO0K+Y7NX#&XL-77UCH^BYN zWcVFPuXqm9X&z}WB_aDMu(wx8(v?w>JHdO?JdE)oiZAxB`MogpvR%g`P%!064kzB- ztPJN9DX~ZY1V2uxAH&;+gZaj13u;^712@S5V_}oMx_OiywqybaM7Q!z>n$LcPaBlA zpq#T7)B;c}HvkrZJ-HnICBAuM1fC-ksrKC`&NYwx+C(jA`a(zMvZ=1(7^0Mk8 zUR4t4oaR+Vork?`<*CG@#z$koo)#5`e5uCwE5Pc-K61EB-wV9;$k)H2Oe>5(+CGooPMDwMZ*^B5520e1S&Hy`IqVBoRJ= z{=o>cTb;2$nwsVjf!#UN@6gTiX^&5ujFw?`AJ&4{3E<6Rn> zF0;+bXYR8#Jd6q@8+^akhz64An>W*Xh$F!EkVEaW2CJ|;2wv7vxzWP8w_KYKHALy& zr3{xQ!;~{}p2sw{mX#65L?R?`>UkaG)tIN_55ABqAKkB&QqUU$^%;pVV4Ah^=Uw~l zoH<7>)|eo1APgN#efiq}De`Z{xPK~-Yk@7YJDOa!PF~q}lbXs_u15gfd{AGg2}eGA z$ZJ4q)lU9lYWo)AvCq_@ZvoNBrukQjA~A$6y;5}*%Gu*^zQ?@A&qk?xhT3615s&RghFrcm7Ogul{zi?~mpf15pUI3LqBfuv?0`MZpAd9#Qcrm%|iR z^%VEGg(u&DB)V7&K^p%T+^?GUk&vEAOq!qO+3TTbaJGVlQ6h}*%Ird%c z`FCmXvr$*G!ksUH7ri~==>IFUE?E~Ay(<#JgkdMNB>A3nDBS(}#3=Hk71foBHI9dx zxaxjZCu7G7hyF2K%~gY^Y}#RWZZkxv6V>|(eb>lFiXI-nlP2Q8DkjdDLa+c%q3<1d)fUC|GK3Tn>iE}uxx`%pP2w67s;v=h>xxozlUoF5Te|g@_;!QP-p09vFZ*?nq zGxcJK{qI$lllPcgO>q##^fk6ndMBAkBl$%yj7J}_TzD@X-u>SCK!qqu*7q4dnLy}r zzK-#x@hv^VMbA-I%Isd4Z{?cmvR6q#VoL#zN4LR3?SXwdzjUN6;2Cy)R}_zJFyP|M zi1*KiDJ$o+-dLr12(Xu4TTleCS6`X`>J7a+LnRGcvCuDBD%7#JNev%w2nbXCcE@{NA+LFBr&~3w5TZ$amYYJGm7D# zs)0|B&!zPKUtQlF&*t~OpTvs2TC4U}yOg)BR%>gOQk&YF8Z|>HN{v>HS}iSFdn-Yx z+OtLxBx==+y%Ndy>F4$P_m@BNPo9(KJm=i!KKFf}>$)D$2@n!>!_GS?&2uM)Bf-H25Lb@ntGNSdswFS($Ae~5pFWHE2oALYQ zmJht3dbt}x6?)r;-{9up?XaxQzMv=iT%-zPc!I9Ve_lu9o-U(*3-0#kl$80vN6JwI zangB8Ua*OYf&e6Te?*k1W}OGZ55hNgAE~3|0^v;q_(=N?jB?&LK#^|=o`|9CZU+E6 z5#fRd$+b)w)bx5$s1RASWI#SjRDfQ}v43g|Qx;DvX!m9Y!NYHcFwg+8XATZ*WHwG+ zgd65Iw|`+Tj}BYzz>wOzdn>f)76FeJi52P)m}D5fD?P^QLJWS5)5AjLxc7B_$cbQ^TmB6cS74Ys#{`JPfql5~STKE)`475naRil=f&m&m!i&_)xxdPZcSkbRd%Fs>uZ6sufOfPCSnL znJY*?@hw$Nbi`Epg`SRtrAGs49-QOQ zii+xI9INBW8B+dF&$P>B7t9Q1^rbre4(>G*KITq}Fg@Kgw-n8Vr2z+y-lBxOx5OB9 zFN5%5wmEF&p?!Xsi^@Qkup@~?b9r7`-LFX7Jy!w=6t*Wm#KZbWIWM@SUQ2zI^ko6V zHrmc(DyC1^m1fI>(Vk|N*-ulWmSctwX^79-f68>7m9xoV$G+2|1A2BrB{dnVw!Ato zm~s_IQ2&kTf10nNCsqcymX|%FBIXn@|N$SLcMnpzV1nTx9!!}dMAwlNfLiH}j~yA7kPK+ke#K7ai@xKX(1EDAXs z)qb-TrGG|auY#VjeO*CZ$4gJAgT&?$W4Ua~Xw06yNEbzSE`Unp;XhZbPZ0ocA2dwx zWD^QHF!+5uwRcXfNq75RH3ald?Bd6A{owH#a{CNfx=gRm)t+s037B7Fhr8{qtv+9X z;6o4A&Q8d(Bb_F@9B-7HrtA{jL^8(z>7RxCXWvvEAVF$dA6>I@I9HLP_}XLaDEgkv zj*|G$a~+H^X=tUW!LvMs?NNPedod{hwv5CoiFKbb&wdGf|B&fv7>A!)5RG*v9nRzw ze)d*PimY`q`AX3*vA|?uGz$AIzQ8j&x@!CV>mfypSI>jDB1l1;&CwVp#$f2&j0-Hy z%-JFdHiTRTutF^Dl3=EjDVm}EXH9?q-VHB`+F`Y@_by}R{D?@l)58Bu`Jzxjd<)V! zsf{DM>R0ce-qSav%YPQ_Yb{qa>vIzpqVm1NnP5knl0q+}hvcEek@C}_sWt1_ZzUkY1^7@N1vbJAL%4y{)VX z$Z^{GlY?ysoZmyC->7Zh*`F_MPpkknAa24EW3f$D;jGb7%kx)zQzr*3D{_Zt#Gr^0 zkEn0(Ddz{S@{$Yrnf|2>tlsX#7s-6|J-DN2yQdgwkCAdyc}j@n z6Me^=@wo}-nOqM}DW9cEA(7q!xd1w+$4~gC)mm?%A z50v~hntKeUgB+%r(O|;8B_kfH7_1fXpc*>H=SFStlEnwX6x>y=Wob{3TH<~Q1H25+ zmy9aD)=L*EwT~tn2IOiWaV|9}s1R4HTU+sEF-hAFr@VyMBnZ+hob#vbrp7S~^(gv- z6oIZs^DluYINkeToMAW8vT&~i(OnWur2ar|J8=E*D31T^;kbw3CG(srANqlPSUHaM z>Ndg}O=TbWr^aIO$J-8JEoWhR6H6tyQs3tgD3MJ_t^!icVi=Z_!d$8B|*}*z3%B zwoEGbC=Ix|K8P5{J1gCSzHaGM8UJet+oTG6Tq{-raH@aN5O}(0u?gy`hIC*vBoEnr zTQYwBkfg9j*8_G9gjXFYqh~E>neZS)=`#Ojuk&v=1SqarIn0-g^352DQEwE7cY_%?m;8_hDs zaA<$N5JRAfvG-Ca)p%FCNll$m10fg+6Im{Vl^eYWmY|2#qCj^aO3d@S|AgGl`smnV z)Yp%Pt5TbgHMk9LiN2K86bZQ(>oTwnX9j@157XS`FOlSppQtWVL9S1k!XJQIAITBX9Ph77 z%J)T#htvNjvNi;;;;K~e-m#HsmEUMjkQ+z;pu{&9QK@s%76{q&&*=MU89CCpf8R5^SOQ=N5uex;ZjKHDC9= z2ys}G+HD;Ww&j){J(wneu#EEl|_^2$TtLSdyk65k>rYicT#C! zR7h0MBa{c?shKQq5{w(UN>ARbqL!&TsgwB(OUdxsuQe=j0Hq&z=iqy_aYBg9_6NK& zrX|}O0i@bwJ7f3Rg5?~3AyI1Da~Mw@2=T>1ht}yeJsoR`044i!WVBlkX?jm?D6ql z$9PA0_UNXkeRWO5F&H4d9#}QC)V{e@hbHp$v9pJ^dxj}k)-lhQ}M;^lI)o`6>ab;3lh*- zv#`~)rI{Y_;|0zqM0h%^~mU zIa$4nl{5yWfRHm^M}Q5dd9X{bb}Pxy($bT0zJG4(nEa=jrpl*Ir$^-agd#H48P6~C za>Z({^9FB0Zga^AcYv7qhRbhVgpBlA#7&F3!N@9I{v!K?o9$z6*b9spQHzP%kz{Di zY;e}kc>sFc8KK^v4M05VcB077;E$QUMPB2bG_LnWDQ7~ch7Lyv{Afzc;nDW&6md!L zM>BvRdDT1^?&x(192uW9-f3 zX=Ec899TBcmE%8$994U4_8mE0dt~l+{xtJanh1N>h6u55$pMWoNAp7hTFO$B@0M_S zM#4?k?2ITerujy4Q**{)&M8*YTk zZp?qm8qNK1ozPApMPfm!OgU2fcieo2TL9v*Bq8~r7PV4u;&&RPr4d;m`ET9=4=&Y^ zO5}7wDtT_a0sc(45^)ulB>znoTNj;%8#4Y&fC3s;sL)?nkR2d{ckg4rR&1FIbsX?Y zX_|lAw0MZFCO|EI7~$b_?-x_5Yd7aGShq7S{B1;{NE6N2H|(#+F&yE*P!vD4a1 zs5g;1J!v67eg0XDAFu|&98^vq>~}cyC)qA)C){5#e7Nw}7~$&i3D~xgXuDJS%X`?+ z!aCi-Doc9@c_p8yneBam-|+jQ?#xpbFuDsYs`UOeGNwZ@?@GBW02_Mfv#n|a(DyDX zK$^=(ds#u&#c!d|QX8LlwGB9Ay~+A%gVaiI-)udwdBi~k=Rb$P+hFw~lu1+Gz1ORGN59;W)^RI2X2$u;##AcDlrwjx9tCyFp1}kDsdG zG&NLqfw|7c>C=IPtmMX>FXP0(6Lj=af6uLxU^*?s&{oMlb6=ucgL?75yU9jpI}TpL zm!gt!$h-a!RY%Ln$7@`nCBod}TW5Q&d2*GG4~S2k8w{)7ob;SKf9lzb4oTU|2ImcE zobDh6uCCHpIwZp4>q5DoSHA@bBWe-bS-T=OUB-}918hMHkf<_%BaypD#8!KJls8?@ z)%0tz&h;jNgVBgQyg9Ma5uBi6;ad0>%7SR!Q1DvKaXl6rH0?k&pRkRQ^W60Ug4^A@ zw=N=63JL}Lcgo_`<|B&do0+3%EBQr}aMzZ~wPXkOHBQC6gfj|QzxV>1N}+hItI&eN zs&D9ge(p>SFp?$64PEl!t75Ut_6}p?+H<=B4c=&_uYpnrZci9Oh?HKWMhPEtOy428 zQ@@G19Q4s3lWTT850lsGfL8u~rNc{~K5uT^JNGxp{^sfOqF0AU+OU=4#rFlL>nk7d z>J^*KL$2DJFcF&-+osKj57wE7Y)D!MiVJ2>u?g*6qGv~}OVj_H=}7Z}O1I9Fit`PZ zO;3hhc;4=m!4c-isS@J%JGn!k6R!k73&1+230*F(+Pdy++SGeqk$wwKnrXkVu}7Xg z>Gf$@sW!63pfzQyy*>@dK9|OdBLe`^xoEUdA`U4IncczP0PVVUaoA?Rs)_j$pd=2Q zC(Lbv3-q}Lnl%w=j$ZA=7Tf?^(Q2V!C+gflWUed`SKzs4GY?29?dM}XHy7K+zK>NC zbk7LRBx}sh?$5w;u1SGDcAJYK46%D#`R#S1yg*&CNNMvA927OJ5RzC9_htW+k9{!G zP?NW3r4R5-{~bI(fHng-x}wwdp~0@ix?evYVF?!c*qQ~x{ppTI3Mne(sY{@zo&?p; zLr0zhAA|P-fRhInSe+^BQmXmZc~fiQO5Jrb;K4)gV} z8k5O8?csa5kDeV-8<{7-F2xdWwT~uEpV>59Rqr)KC&5CdZfz@0Mf#a40wMm_vw4Yb z3BtF+yoFSGp*epmfb80J-*(61Q9^JAzRJe3!y$FK7>?3ZY3ZXLmPq=G{#Y7B2L#N! zfts;4!H+QI$-Q^?6;V%GivI%-| zOdO8u2;0Z*o}Lnia|j>#%3oS>-hX-$`Jq=-!|?WSp#1lck>i0g^5@m;g)C2ne! z81ka=ELLJ9awg-~@2cc>8OBxd9ftdv+W4f)N_$;pK+#3duKLg?U(qqe@3&!)Br zYU?j^&jPVx)08MvpjE;C>$=H1_ADLIM0}n1lKq8`_5Rx zgGmg7o@Qo0qEPO|fWmpSBPWJ1;lb`z*z>1lJebwrq9&1 zqr~WJ>1NC6w65S$+>Y9DOQf08ia5FqVTiay93qwxq}R(GpS}>XpfIr9r^;uOHEeu~ z{sok;H1?jcP3SfC+X>FCOf#MTo?_SycsD+AfI_$L~xG@rn{ zpd5#X7#6-oFq6-_38g&J=3g#tz^d)`d|7#8W=>EP*?!*hPTZZDmv9jwVf;ZWcdFbS z;brfQHK=9uld1(Y6nH;E!BWe`s;;Qdubg^<*h%-EmKl|St4*wSbM0S7dpK})-0tQK z2b@&L3hi9?TZPi<2p-wMo9LNpejhTL`fIQzlZ#V$@N*8OA}w`?=2kw37Hopmw3-?O z&ghgJ&3NhA($%tXWnuGO!|fxq_Dk6tSOaV`oIm82-`8vGh+>FF5^Qm=Hmc{vIl=A6 zix6xl_6N%?G4L$oWsAoT)D5&KLZmrPjXB4wlTd`|F9O6TgsWm>z6M7lz9aN)2BW_3 z>j8|`5GCvU13X#FM`O;n2l!~ABj2T0U1^^m1UqGPnYd|h=Aa(iPmQ_82#WRV60do@ zT;ElN*@n{O{6dEmQQ#Cemh4EgfI9~K0IpN9r$s+U&sLW-l$oFUIGR*Jrtuv>Xj##| z%CLN0a|^e;$qzrT12(Rx<1~>UnWO@>O0$ zDM0eAqeisLZfqB8s|!D`qqNAJvp^{J?;AFiL3bL*9Qo2v>n+0`?hq|5gwKjW)-ne8|lrs{!;`o`) z05%g@N}WnJgOTl_TJ(rzt%zkW-K>$R%CB*hqMO;`*e#$d8N8s-wvvDtdbBDQJ65UR z%>ZulOn&n`bxN@8J}*IISaC6pj_H!J$(^wb^6ch?#5ovpwFhRc{4EgYv zv&GOSZD-nLM-h~{V>T%SAjCBnA>g#m`I5$ZNgqR_bZhcAPGJz}{%MC1V| zNB~*9%!A!5*`34GxT^UQ&7eY+xp8$~dXv27xkS+b_raNdLm`6d@#Sl6HQP1G2gE6* z(J<`}X&+NAzxa5|iB(HtYtM0C&*5KoNG(w9or9+%;i{Gi=fr{_0Pvmw0N%CnqaRK~ z*5y(98*~|66aUdq++X<7oGW=2%H`+qwqKMHECdmnah6Jl{@sZ*)(;&w^)SJA83+@; zQh(*khz{sPh7Rs6#YtPILs=dZQ_a_@dL6KAhec(nAWM^8#%igTvYtpfE&J0;DWU7f zS2|i+FGDGExQ~4Qk&>`QF~KZ+Ub25nO#oA6rk}VhjLwUO(_X-@JFQ-w&=Ai`c>0xJ z2%F?-A(qK8q1uS`&O4tL!;^471n|69a(+44xMsu=0)l32{_vuSTytc8++-3X_6p$T zf$`@!wSq&k)OwU^!JPtAF&v|}CAC{Fv{lrB`Pu~_-v?q;lYJtL*HAdiXoFlMJ7k@+Z2j0?OsplX8z2t%CXP(4%k_O}oY3(X@$m8fpV5U2CXR zp!KB@nQfEtM^`WwOopv^dfn&>NU9l>Z3j-kdy7$&`CbJ45X)h6qhB(R1{~%o!x}A! zBUDzdX{gHcqYD9A4D)46HqL2CnKg9rwZFsUKa4f82t+K6a!Mi|d<=JV7#`O($A%QwVpdu z1TuE|wpGdDC)$j%!6{o9)Y|DS^ExXLHqH-6W@F@ZWUF> zfv}X(8W-sy?SfdjmqjmkF#jA`FDSnMXcl*-@yB;tt|uV9k zReEUV1-n}YLcM{KuJ^(ciXT2TDUh|A6Bm##dgN=XMx^RChytYew9txeKK}ulMGW9A z*Qd9@cBgU^7yXD%kXOp31sRQQpbq;SYtGzbo{7iwAOoVpv=>DHXH{SLhrw_KbJUW4 z{%hP0s>UlH+*+;sPV8Q}HeVA4*TCBGY_*Nk_7CS7J7tF+uIY!+)0~EH?3H>fwZEu# zDLsWDH2R@Ml==gN;y4^FASqcRd1`U`f~pmvYFzEwBl~T&^)|H0t5OhZ4n8CCS-Fmy zlgH4zs$lXKDGa&bA6gmgi^8IA97_O@d6JC|#L?e)GK~OZ>xAZqK`7}*(QK`YazRGP z?!KF4!b6V7)(STN>>`u!#s``+{FgfB3B)r_cKNaya9$1WH^A zg>*WKC@Wg6@D?DLTv66){#Gp++g_1}sd)8F97-R>d2ipUOX|-;95%CEeq)ZV9Kkp31z?5A|#lCiH%WJ?*>Z>QU`NYavYoYB*I#qc1cN^WCdRxf14-pG)d5<}Jz$ z#P%`-Qww5Ec3$m9%13=~aFCK!%JfV5`VinY-3(RPP>Cws4A0psOdQ++GNO#=xk$(b z-N9RdpfHVAdZpv&FYz4}ql`lL%7b3Yg;a4=a@BLZZZ;&+Mr@H|4w)4;-aRkFGHc^k z&WNxlAupZ;w3jBfypLD;CpC4~Yp!%dssCWh@-YZRxBl-P0ewcJbbzX5R?FRRZ>n#O zppnTh?oL`T>V4yW_zz6X`+xzb<}Wjp#&&`txrR{h@fscBZMte9> zYtoPC*hC?4OfT)(!l%){H;Y7xxTLut%(+j#pLJQ8|9;m@1Ddw;oPL5Egqn)?OW9Y?y1?|8-9BUmqW?l9?Y9BY4qrXtCqPCh6Ko zi|!z$v8j1+xJ%lmkmZM|idx;}GmmuWMMB&W26aD-jQ?|pZr-3;TrkqCu%Kg&>1;c% zP^c^Ii$Oymzn?aJ7x%O=aSBo2DLuw|_-dDPd?Qpl@6i{Vqed%6;0YiH?K$-Xiky6& zs=<`yyZ@_OG`+!9_>?$h?mc5%M+(Hf;NBxeR3E(CxwAnYtA((4&U3X?Md>St>ZcS@ z{*-$$U(LgdZXkD76V+6775W^gkvE|B?9ccCji!xu>$o{_2+8ce_EEE|n-HMW)2L27 z$35v!+4eAPvwfi+Lf$vu;e?Gr8qOV8v#&mD zDB@q3LnG7!KlYi+$Dvyv`=bES9TV>En-+zPtDP9O?vMu#!<^$~L1Xd19n81~Qvtc= zcK%Fkp2#1&BD(0!(zns`dzBhihEf?VG9|y0Lb$L6zd!pM0&*sO68ATe_=*lvU9{&J zZY)k#v4X5Yquxxd*$W0u6vZkbX2}nmdGK#P`O0VDG=-wk$dtFLcD(@&p*W@_ zkkbBXxxiDbPHtWL_RQ{?B4&&CdMR z(8_i28>Kfg_HBF{w4YxFl3q6g>SJ+i!Q9AQA{8HUS^tU4(g>X)v$!(N<|jJSmc%%3 zjoh?ddVD#+*`LY94Z8`GbgbG~2Je>{9G9fnQp_G6*EJ{F(LKEl@q#HAXWN06gUGIK zi&S3`7Y>IbC>~Hv>j5@-xfh>v)CnCq=oveRPdkABo`*3X7Da?YA;* zI}2eqrpQJBCh69#r=AvIux^uGtW=s3=#^FC_>x9FhCGH&8$nOLu7aWrxu?$F zym6m;ocJ)2&D34^gNtUR7CD>V?e2cH{lI!(n!xk1MWw)y;QeF$5B10XW4YgDHX}Fk z&m+gj^8@ea2V!&{o?z-1r$%f$siN~pe}{b!+?O2t{&`0}KX8m%>!Ivt6z{R8&1ybY zd!#xVC=C6#Y3o1c4M;EzDzr$vE`GTk9!FPF-3uNmH^o_%i$A!NxbUd=q0kai`pyZi z>V{#c^?B>M=N?%t86q>M=BUA|uK`r}O-6-O(Upcj2_a%-#}_AD3bi0be-=4I3cE#J z++q1v8Knv8;4>Jvz*BsDa$dde`j^SPUC9L{xF5chRte4_LaR>O#UDxq-WAiTWlBit zqGJH>8F1dHdwE>9x|t(mpT8gEPt6IVCO2wtA35hPbNx)&0R%Xf`y)xob)>!^cwT)UnF9F? z4-3n5zPQ^Ji_4y7dP6sWPV2#_6&SKo#7oA1<>H~to+x}K;Uv+bGThZ7Umj>}UgCYV z&8$%Zwrp}x_86uJFNt{ls%>VCk6vj?9JHMJJ?@D^ecs`PF(hYU1ND(k#6#bJzCoPR z5$RLeKrmkH5_Bn&zmOz0B{fz0GES$F=_U)?`%7}bVS1tqk}nf0Nq9(N+#jl2RFZH~ zM%NW_C^S+h^xtzueO~oGwN+GDF7rn|_SFKgaqn)PcQs~R$N7C#5%4!wP=jLdd8M}> z&OnioGs%5c3B+k|2W8v^`;>EM*|qf#PC1g)r1t$bg^`1~_1eIsX}S1&C7EuS;MXNK z*L>_xe)@e|7vM|b4z12uVb;jpaNbnj%62gSxOzqosxBit%~jOIw#07=R0dA`r>_#X z;`~O1;LwqL?Duq}r}lkhAt#BIPc8%<_cdG%_A@AT>FxA+?|-m%O*-rl6TDNt=}^f|coX4B%|EK2sTIr)con@16E?rydhvl0NP zKaEa$YM^kJV_`{h{=zqY;lMT#&!;1Jr^S|guk4@?%Z<3xQb7nq97T(r+7oB%{s@^9 zt}urX{}Tu1`1=wW#M*bCm*A9}PYX@Fs=YLzRBS@3Y95X8M&WguSA3c0o`uItIg#%y zpFG|Ov4!&R*dtBvc`qH8l)iQXnLD#=oV?TND=3JJw!Ng}hv>{)pnC7nHktG>I3ZNp zO|$Bz`46|YGefMQfWF0Nn?S=qHztk=8RnYBAOmR*OdQkj_Qn%5X0G{*ZW*8stMl{X ziFAI|(JE_Z%P;=zEyEW+T4mkGRjLVh@EVEr6fvCBk3M$#ep7^^+guVJfR%>=3J29e zaK=DUfay4?0%DrR_Ut^PPoHU;N>}ZDSgbS2jkMf<$7=J#*mBv1IyG;^b!9mxT&mM_ z*_kIUPQ798XfVQ-vgcyo`_GOiJa@Aw?;bLYRpr2pt%*{)W&J;x5GaC4JwzxO=2DZZ z$~G124Y(gvar3mlb%D$XJd%m#3x0>-mVbc0TTOcK${nSa;q=stHHt@zNAYbwAE|0j zuLkpoA0C(Kd=c-rJfd4^Ky<)5ZGNAs;by0OYDdAJPkdVHlzq|S=Nw7je}6)UNeK2% z-})28O5UkY%#RGXyK_H1;&zjX_%QZ%TsqxANu&*EHn24^tk&1@WuPdFt;gvGJCfy7 zb7h60z3kL(bOEq(h9w|RrSM!o{S@7MwfrvD6l#bw_|pPDY*6B`^$> zj?l?5`$KWH`xq3FvGShmgA{&-MJ+kETbkAnEBLx6fhd}a&=h4x`nzE$^ZJ_m;e>+G z@mhi9BfuPacudL)Or3ffji#im9h6)_z5#@n3W;=TveyY=ym9?kkNcnS-vD<>6KwN~ z4O{M{cC;Ig4+p$c-~8dCBQFJ42av03Yh7ww?17OvmTB%~=fpu`zK3CLZ*pL{QDJON zr-HY`2yuWv{YeMu009JM)$%K`%?)O7>+JKjcQWM-6zJ^IYAj=DnPe@E^Mg*<#HtAL zjIU5$aueGrWzn^=B>0A~)aPH52A~-aI?%1E@46>nw<|erhly5oC5rgIIbB6VADLnD zfmdF9L=-SkA5&W|{)~FF5Z#q?PbJyl1*K_z%kR?YQ9eZwVqcjAblVZ2T40ID{?X9Rjw8Qb%d+&p>F5p^67mX+ ze|07O%Egk&*#xhe)g<#%!8C|FB4|vMHRlM#8-0yQ%9p~plHzW#^N=F6^KJ6xdovQg0`l2?n zWV~uTf=YG26Nsp6LB=1hjJL1pHK0MybgS!%{PB~}{)mOpSH=b=8?h{84YK@$AI>9~ zATYaMEkqaXtW9$Rd+xlf@DRfL(%n5l>v}fRbDDj-TV8gKI1=UGa;>SX&(Y!Pm}EMQ z8;wq)dYgTc)5(4Q2XwGeP&IjATV8y^vKu#(kF4|lA83zkSXPZI(>)Agwh=1zW9|59 zD}E~`V`;sse#*!)hd${&E_?#|+C6CdJT!^YRzjs`x+y&WC^k(lLD*(0`pcSezzVq zCoIj#oCJY&{oGY@>X8r)V~(RM{#;;puUDOGb)toI=SHuzD2wi#d(ZEzyXCG4gW!ow zr;kZr)s|n^5Fzo>I*+Zrf?q=riu>WCpY`!BFWcG;a&5XhM@Issw8uN>G#)@3u~)p+ zX0@?9H|K&t&AF?=dBoZcjG3O<^-HtQ^p*|{vUlz?lFGC$4}U25V80wO{E46S1jO!w z4L`}J`?#6d7jZeDU)y;}%n5@$>rcs(&Bec(W4DsId9%;SHMu(s_mRw}C#_(6UJ2#dQgR zG-Kbt1^W2Z64C&v&WAUyTQUxfO@2oK%my9jtrueb$HH-RPDh>=G3I%xL(piKJg$loPOXMB?KIR47 z2ho>(bc58QvlKo|Fpf^c@#89$x+rOc7+du9h6a>}!ihx(sV?g@&>wq6VplV!_ z61V}Dpk1{)3m1(ehS4z)$IH2iC&KhoqFFI%|1L`WMG>2dS$lR65756giq-poJs8X# zrxlaZ@$YA75`;CJ2cX2!F_7Ik(f~M=Jp6Re(Eq#mf!IJfF!yvofB%19lcadsj1k^? T67V_^2>9q~8);Q**vI}KZK5e= diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/wiparray.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/wiparray.png deleted file mode 100644 index 11297382699333125223b24da139234f956ee01a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16402 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/zombiebeacon.png b/src/main/resources/assets/bloodmagic/textures/models/alchemyarrays/zombiebeacon.png deleted file mode 100644 index 52f57df6a593653e452ad45a0ccad43050209e6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40967 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 C_Xb!1 diff --git a/src/main/resources/assets/bloodmagic/textures/models/alchemytable.png b/src/main/resources/assets/bloodmagic/textures/models/alchemytable.png deleted file mode 100644 index 95bc51ef81146b1f667317e7f10ef5dbc629aa94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10109 zcmaKScT`i&_VxsnqBOA}y%%4kcY%P42q>Va6sgiX0!nBhASj{~kuFU|LFp2D3y1>J zI|K+tO6UO+T0-C#z4xwrzkj}!m7KFCr|j9~*?T`TQFjb(GM?f%1pr{w)zLBn075y1 z06H4V!NTW@BjrG2d+VkaIR5i_-;kF;8KHlyW9AFM>9c>n5b!SJB4v>FiLU+)+L;sF z=cr}YP)$1k@Bv+|tM~oK*E0j2SPW-kQNmx#AEry7%OuPzBiP*CMIDtgpM=VvSb9O- z!17%vL53fbDZ>30n#Pon^(0$PS|v?acKJ<@uJhyXpXhbpKVlVW;Xgseuk7EF?v75r zY+hE_J$@_SNcX|cVq6gF?evYZ%CZNQjoF9}TmxxiJL@o{lZ=^WY??)TA<&&G8%^rR z`(ywPSIm#mbqlk{XZEW~5X}W&zc$+$HgKit2BbV)9SHy|3^WjcMx#OKV`T;)CME^| z12Z!$+#-+8|(gc^QP7UZw%cerp$j z&Cgfop}MWBg>gHj;)a2yF1Z5Ko@8`X(pBMv( z1efdxH#awG@Z`yp{f@gv=g*%%aGwba3zL~JG_K={oCq;7NhvwB;6|k`Fl%}mi0}|s zX}^(+U~l3xBXc5SXE>*WsYbm_!&OVBL#G?e!|Pjis*mHmuDOe?F#c?~lyqDYhvJja ze0iS?e%Q9q?fB*7yV95WZr_>t`M524kAJ8?oVS5se)uyJLDze$?N`G3OQyCnhClM| zhX{zBS^AvI7C2QO0783u41ngndkM>>b49t`wJ@C3G(7P!!Pv>+Bz(P(l$GwbvW#OU ztt^n`JW}R3xfn>}dGnd8b8N^%$kN)%^(zCVL5AE0iWLH)tlx{=Oa#V9Vi!mJoR7=YugVu>lXV?qdlX{Y%#Lr!`5#buY}rKPp2%L4)t z9BwSVlFf051E$8UuFkNp$r>iKie6J|nI3WjuWy&g3Nw4?j3*MZ>K0r&jRs1sz8^Se zIR%VY7se@W-kxv>;4!Qu-+~_&ns@_bA>{DDL&^VmUukbve z;P}RRnS+U)-mdd};^h+{F*%vIF;}nXVZ0l@?ls-0era9uVR`!~6E3eR18Y)Z1@GB1 zF*YW;yXg(p*QaJTcJoCoaV)@!pPU{5=^*%}MquZpz-Jgh)=P`gDj zJE-Bxn|S~4ojR`tmFnp3Nl^TGmbqy!E6C#-=NejR#Ut(44KMxA^_;JvYFsnA)z9YssrG=u=cQUKxmM#TG&+c9;gX^`YRd#w42!#FdJhrUL z9j&>%6AL(hva^ee42RB9{ikR|?z(||h)mt5~BE zDqa@}<&3_2o1o~9K%n9?;H@HtC+dPLFAK*9p(aAg#u;e_;cpYxk=%j(q8u6}zDMwn zA${V8>A|&g*)DZwW2|+kS*~?GVC2)#;01S#jD908v8QQI$jM&Z;y&A2TsO7e^`8CV zqemYMw>PWn>$#eo8R|IYvJ3s(Tw{qsUsa``=&d@%11++0z_z_ntHz+8C}eZ}Lx(zO_w#d3X@*G2;Ui;h7*fBu9<{UENat|kmfjt)v$ z)sKxr+tjUI@WBqtn=w!K=61rT_Hu5<_59mJ$c(>_cH;oTR$}(`Si*%t#oSN-Nc=<4 z)zU8XuHf)+8exk=ACN5Mw0iR7Y(1KvorLOkKY(rISN_qpypj@W+=<+^FW0|+soC7z zTy&UO&oOW{PxUCRQni2oxjf+iVKEFY-ZO}54sZ-iW4~*B-$v*j>5`!Cu7Uy;P_(RM z1&=@V%)d7`aq(H*S>)i9a~B@$ND_y?eTDKA68Hl{iS^Otz7v^i`l;O1)yt}=y zU`$1XjYqXb7HJV~S?OtOFX>lcT3fZJt6#l36};}-ps~v7br?;X>Z#%AcE~mT{rTxO zE)7AN|L8!>TTEqAeS7kyLf}_+bA$B6&9QgYf@hr2=o;umLZz4-rZ2sF*J-?1l_|D2 zrrOtcwPsI75m8IFQD+N0^t>>;)hhJ~LdUpd>C~QgoM9=2>@)gwyRn zt1LuJbJST;5Zz-^_jVM6k3|i7q`ZxVGE8B6Qhe*{d+?qJNy2^rymq~e2X;s}zghd& z{K8Zz)*&^p-4t}@^g>GZsO7KtIr|QFucWc|zyNb*?B`3fH$8UTvprTe;+2NsE9_CN zN3{jGNgd@%L-Q0QbE0X2NA}xqOwiH($;czjbIegq0Uric5Y^gix0}9RJ6H1cYucbU-2jM4 z?Suk7?GSXpTHsep`kT7VB-5!F3t!~acIRqfgIO$V(&)i+?9(hKdv+3bLv~F&w}yjh z)z=qOW3?6kAjH^6zY;!zEe^CJ6^~*py?XJT$r2U462Dio#iPE)-x(-_yMm3NS#ktN zcKX6t%&o_J)Q{(=CW&JjN44lT0a*o1D$tSDBLly~p+maq7XP^vN-VNmqvMZArH=O3 zG?6r4nfSbCe-D3hE7t1i@PkIbgIn3*oa|V~tTgA4cUJyAhLJ6~YS=tcN@%|;8uib^ z(5Y0BKYkR*E(u*Pt#=!&otqCJisfE8-R$R|t$JFf|MJV#qHNDPE{!%Uk?w7U>ZY~i z!}(ishvZ7dBH2V{O*(H$*&`dgHZuq$#lRY+dv)?B3vV+6CSHvIE7YgN6I~p)q-yK% z3~`o}M8t&czZ50bpOz5&0c(-jiZA}*)Uc7Stk?SaR!Z#Gu$gvXJn{fm;Gg1ZC;p#r@g>LNl}r$ULB=UXx!`At$8Tz zg1A`;=V#QUlQCnQxoudoLzC)tbuaYWx-FaY+=U+6K}Sas4!v{Q3`W;yVikjS*S2&W z^-PtLF_`c;XlQeDY0{+jZy6}RhDPsrm$xffibTd#I66P5>|^u2UiMCHi?f2b1?D0^0s?JNGc7o2$e?TyLGlz3b8i+dO)ic~La z3L#uYUOFpmE-mjmDfsZX`vmmF=&j5o2lu0m4W8_E+;~sUx8=!r(P^iG?JKw($E&!wxXX8{Tdxgq1ZZE+-bo!u+VyX#(+MW_hX z>BkBjPQvagyWwqD#UW#H@&(Ki6$|+(>^Q`&Td#XzvyOe}hM>Jvj?)b*!BdGtp6&=Z zSr=trHri%h*W|~<3sw8-H-^|vN6|8IZ6^7S+6ui6oja{_-e~xb-ss|k8TmxT2St}f zK4zS8GKdsw9xVFwUMTji>^&p&YND9St{M*OO(T5PM8bzBoi!UjX8ir6*lcyS`sjk( z$L^6;w9lF~hv2&ZZCx82^BDR9jR;riPN7u;N7K?&P=+X0IgML+zyZcs*+{Fm`1U)M zn;kQenBqcWV@lszypW~??ZF{K0=Gz4qP3ILU0T`K=}E-&HuvsK43ts8+1fuaEb7hS zW~7GNqVkw^&jq3G5reH`=dUZL|A3l&=vUu>;Zw{&;4c0~ZzXFuYx3JC!yS}?Q`?95 z-wJ-aVP}3{HjGLtZL@|FgFus=TUF|6`8SNzMGq(O0N$??^k7Nt;2$s(i6Ag*Q~4H! zkp%{|bDk@n+boc@hL&N&sEY|UO4 zr`H>Y2HdAl9|uh0>atLkfv91N+hord0zKN%^JhvIzPJ=km7|?ne0OcWCLMA!?u6(n zv6?CGDo^f5+b6i52LCpO44m=3h_2g-v9Oy(KSByuT(gVx>9g!QZxsF@c5GRKP_KvG zp^8V-52MJWw(JvtfpAgkczSpPfZ)|KHvpI?b{k!VNrJ|M`^iO8oqBz3>swACn zoF)io=WdyqOLcmy4ax5>VAp=IWo{=v2twNaZM8Il6a@8x6M3r@AReXEgATz6oE~h)<07H-v%rKU@Wd?p$P^Nyg@D zZ8R&rgEi?mYfJkSU3J2LmB|(qOO&;JaMo#w&Jk zGnhX7Xfm)l_#X4zNmoiSCeK9_QEL+kvDva^1|5YbdMkUyQ;=77{XpbSulKM!oLk1f;PMx@;ey^^SOsf#m=jr1$^Id9BlU^Cw z9#@)2foPAXbs>Z+V8*b>{`f=Ee2FRjapNLm?i7}ZgMP#{mRTLqu9H9V6oeLyEauH4 z_SokHmwbgf3?`Uk!{fse35juJKQ+$)ZNgpILB+*-lv@r~IcWRt@3<=7@bsw2MhFb2 zu`#lm?4<5uP=9jbDXE2MQuJ^^ylptcvo$y8X3Pueu4*RIUfbSrz-qwc@*Evl|uPaxkwqe5Ad2M=e z`&(Y!Y#9sdJ5||=tcq8v`-i+p-689Nv!x|R>Kdv`gBDDU&LgKjEl_+tK7gk##MP0T zbuF^Ut8Umrj2(@F6^eYHdt!cE>@+36W8`BNWoVu~f;p(?ZZ+D%B48az(9%i7%Qw4j*>>g{?u1=N06jDV?- zy_v!*V&+9&%}DE7{|uS6Whni-Qbm42+?V(}0{**dsCFqRzIfViAtf^&MmUAPs*HY- z9hQSN((9b>7@n_7A);h}j12R(Fgy7$H$cc{V z2Vs>{73a0LaT5ozC5I~xj*QnyHftGkk0-d}wT6ZY=RYwEPtL{32XF3_u=Dl}E)tJ1 zyRUF6cy-GidgO)KTEn9=U}ia8|Bzke`NPN|c6K?q)Sb-~ z?D7NH9((GFXY<@Tx*a>av7$QY=S)I|jI?2|@(wn_NmQV8xD}E(5m;88+cLhAI7TY; zdXBsvV?1aR!teURp)zZAgA}@@3;*pnM>2gR|E#3Ac7)IyTlWj<!WFHKJh6q!c448SO*siOG>KtdaK?=Bl14@ z2ao0Tm%_D=^s6jgZMvG4hI##l{L4pR zOWPxOe`VHp!8cc;=Rw%ekaQ91w8K`ZzuELhE;GV8`OI5paw}598&1@fI&%*OyUQcR)EvY6*q6C> z{hM_$^Yg|Fu3B?H`7M@qVYn%{m50xw%1plI0f=DvI!8Uj)}I-fTjalz_)GKNg9j&P z8Uj{t{=@N0gLfAm&;F}z*e)Y`x@NF&_qW>KLW=cBwga`E36?6cCM~=Bs z71wL|Vzk&Y=;{RaP)!)&;INR|8&|2CtugUIU*9^apnsG6jW_rx7%@@hwHM=CuY5w= z(P%Eslk5B6MwO)S&k>v=-hl{Id82j}%WRYswawExpw1ANs46-{Q;e9);$;>Il)vr?f?X&~X>CHd%A8;9Eqs zW+V7(jU34BofnL5#sN+f?*&N%a+MR~?^@_l>#FE&+PD!t!80j62900A3%}c6rIF;i^BICHQ_~S0w+xnpkxeu*p)EvZHfzr8fPv?YxH%&nr=CY6>$@Zqq4A*OH2)t2 z%gupEV=c6`YkLilJ*Smz_bgO|9W});F|qN^)BL zu}od8#)S6D=Z69Of8X&$9`saUyOdZJ)LZsX1YQ^E4KD6h)lhct_@7Hc*KP~Ckk*<0 z!TXdI#dwU8+0rrYhE?h6+XF>P(EpJ~XiekVBjm%9;79b}{pXws9h! z`H5`T{^;)ZP3reC7*5$5;;XfdvZ74Ks+o^ez8Rx#yYam`hPS@{TXGi`|Ko?qQETNZ zH4P-$wUzq&mr5E=JpW6g#4__a&w=fM!&TgAe0Q)aOlX-~S}~wjBITcd>-Z08@RvFG z?@#Jry=d&wSKfxw^T4>siWans|3gEeUf)d@$1;JYMob+5ZX*_ywSr3&O13N8%XV+# z;X}$A&=iImn0l;sR_vT-OM3vf%oIWP9;w&$niUULb`nR5ChR-Uqy6x3@6WMEL6`zTxz7Z5U6PMY%J1i(zu+~@8$cnJ3q zcCV=ohtAb-lQBC-FZP2=q(!|yAh-LlC1Nti-9-iPDcbwZt5^jM>9j811EG)VTua=S zjeOOdxA#VQ3U-EJYw9}^r91j}Bwag)(|ou+xE!6forv{V3`)3DeC-?iO*p2e zO~$_MuG1=K38H1qdVOfc&C4Te=0JZlBeKK2uI&(~|JQGH4?rvOK(wquw9KO*e?(|_ z(W&Oy+W}ql;hOc;kl2#RkXSo%uI~6$ZsX*&Ik)!S-d*(6FlpD|*CH>jhG53~%ngsd zkQ%rsC3exbzQCi-Y@}@#iYgd2X&2@DjZz6G5}TZ!~(}9-+vw->%%sgR9=Tp|9Z<$D`s@Gxi3B z`0HAKjc%$f0GZfDbW(@fY+M7H{blL;klwZa(cyAxAl+wXmqDBLYtY&>L=f!L0=TD}z^Y;X>hY##7xfbt-d;*AOb%&97kO z_8cUtS%Ea-r$lb8|4@0*nwjtM9X7y+eBZ(4WLgq*P%(miw8C7K?)|iiTTzkterrQ2 zUv{qJpK<%wl(FITBkk*=5b$~RxPwv_`7fWnzF0$0JY)rZqr-IIOLa%Ic$PFYG%R^K z4SQBL{>4_i%i#1|&aUcYE2k_(pZ`wXYFD*@`VI))masNawCCpyWw9mN%QxBGOJF2fMWtzE2?^gB&! zq)IkwiM$9o=RpI`H4SMzUJUIQGN?ZV+Rg1(dd&|ZIUnw07=d&CkqmgBLsSK!&p9=) zgO6Y3A29%FHFqIcOR?8Q{h4V+k+e{klHfp^%=HPWqt5NxHrh6OJ z{e>J;#ClqAo_F7R;KU#3`fq&y7>i!L+PFMkpaxztv6sM&bGHUG4wqoO6y+p2@-)uw z^MfW#mFG~t9KWQj{AoT)c-hsTPCN{6k(oZoe;^J4@o#=P4^9t$$rJmFio!XNzC~CZ z^BTrO7(oa6hSAWX7qo_CBrV`(q=kUUX=#+@jwk@Un2};SrN408!xqLlg=$tc|GvkR zI_!sTW)PY?%vyOTBYe=GvVjNh3owbQM+OSueaWExI=SmKB^UfbGi3xv)9Vthu~Xpu zgH;H~TZxIu-t3}q{#mHiWVb4aCPo~w3em*sBC{F_eN@2v*>-Qx^u2?!4C-W{2taaS z{s~Z?DGv>k$PUrv2>Y93ehGx*_oH6^N=-;`6AGAEp3e|f&oiU~vGpFZo1e_Aue!yc z(IVn)^Aj44E%SATy>wJy1%bNfrTaJhKe>VKyl8tKhKVkv=OVP0WjzUYs`^mUOYiNu zrHR&?EGuQ~@F@kiQ!j}6J@vI15y|&?svoL^{$IQNkA?ij#7kLxFW#U!B@=nq*ygXo zK0z{m2K1gfT&dDGo@t>4KmjFFaD2th-FPOagZ^KJ2(a5NqdHFLKIM*wa3MOK0o+ni z{BbzN{C_~CC!1!o3t!@KGPLZo$Z6b>x)&9=kR)+kwg)l$!O)Ylb5Y8y>dZYA$>Yg{ z0lL51*15o5bMP62{x(X;L%HrO0B!tXFF{QO-Zy{jRUn6?>E9oU{a2p;H3TN%5Ffk` z1Qh8r>Z%xyuNXjpL49Mmepu0{0A&-w(Vx8lhFhkTZi2$$sWCQnV>L>|c$A4N2+w@nIx$v1K4=Y#!3%vq0NPVFEpxTrq@y9M& zuFe!U!OT$y!OZD7sKAq_242{#_PMwq&{u<^0e5^$89`sbM{2OyzpIp2!8UWSp%n1@ z#Y98-$-6^|CLiSxJQonS>G(>%SMc*Gv$wB8{EiMC)*Zwor@16>f68ouV!F9sZ|Ck2nu8UTc2B4kEk&hj_cYiec5`Em%-g{bLIr|7S zZG}sK(8dtE7DO&N##gToy|VX`W^*&LUdvE1|1X!EK zivXLuXjw{hvhfh-E5ErPolNiAXiiX!yiFc88kuyW11S^NIw!g~#H?!Up`Tt}Tbh+h63V;(gjp&)Z6- zgEX`w+w__RGR6987#gEwhSl}W+}f_HV5R~e@2UCK+#!p^RIImma(u71(V&qH?BiY2 z-h0OXB#Dq?XG6D6zRR$%@Bv{ZNi={7mRx#9XqIb#UHOP_C>JHq&#NixGD-Si2;YyY_H$mTEJ zP#UVR_-%8~8ty+&*xj)N?^zysFC&2LGs+f#3^l=n3zAk0;H79;f=^a?rYxQ$>c^G0 zAyZ)&sp?hu13$4lcb(JZx8NQoEL;5mSB-DgW61oX`H{>3E%z4QAf`+4k3VGzZ%YyE z51~;iENRMAG8RBSC5+=Ithg@4jc`nc>^*o{Q8}BU8b=&g-5R-i?q}znjH-+3-|j8( zcxqMquz%lL__FTO8oS|mSzOO1z*|N@KeOG9PEd6`^58mV>6@zPX?{jN-TTb$0XFLm z=6CK^@bCl9jp^ujbfvpf6mNQ!zq17T&e7YpkkfBM?|dlRsh-6%+fGNR14U8?wdQ)1 z`q<-Rk0xg8Ve80hf(D3=GSrHm@A=gY0p*GcLJMlkt_t_;Ea`nMlz-Z#oF2x-ABhgc zFP(02^Slwqb`2&F*8H7C;6~BKwdJcHRiEAY$XR41*EbyLY;w+W7W(8yVBgtSD^mKO zgx;NGv6ZBN>IjsZArb=cucDRI%&@=uY0fSyrC!V$`PTV-MQQog4;If=ZPEv(AE#_z zo)_tx7zocY)d;kc5wfKxL`?KeTgCX>ahx)zYG>NvD?pw7W?FJIKxtRltexA9`)sRL{aBMrn5o@P>;ifdt z%D>|>N*B{k?vIb6ki%oUryzy05#g~7&QpB$ItVT9 z@$_^EOtqYM|*WF^~c#Z5uU~Nb3LAp?@dYMT4xoFq0{`!vo~2(v_cS z3D5v%SGSWuEf|-5k`Nf7jG`##rAk*}(Mjdu;0~QbIc;j?v+UBS{?e&ee^WU!7a|lS z5$cAQGIJK78I&snV06OH3ej{4(MwyBVEBjizV`By3y^B`u@MLN?-wam1~kMU(o4~T zQpcA0o;Z_U%PNaHMlcl!qXjdjUpPT&?N@)jwtuyV_O5{NTU0>%_u@PU{j}c|73?oI z4Zm!6|Gz3V(x!HXKBZK;7Zve1i?-}S{J-uxH-Aihaewih+ira#WuqL>yD+r9>D>_X;f1H000McNliru-~${E9SIB3+GhX&0(nV9 zK~y-)1;L4R+%^C}!H<(5mrJhX#7Zdfy-tfiCKwu5|CYK|CT=mGp0(93NkQCMH^%=Z;DSw73jGL97B<}AhtrpH2j zX4+MW`J!%}QagISuee#Wd|k*!;alP5_TX7FR!bh^NCO6^X=}$;!*K?F)OV(A(Z*?h z`|}HO(nJ!IbXccZhKUB$-cd+$?Fict9qx6Y{qf58l+a=@Jigp8vm@_2QVCuk3))I* z?*J@v;0Q5o-s zMLdvIHh%6WwN{)N7_`Ni0U-pcNo14cR*+KiY@W~xf2}X%UJ?$!bja>QR5J(+<_=l%0U z4~AJeKFTLfT4K%I#7HTgaAoM7n;Do_P1qAP6twArk_+b*S>=QkhATy$;^HWQvw41O z2di{gt?9iYYNy9cO$nW@N*0mjcH{J(-^~jOMaUje8nG0HuILTUXC#Dx@Qrvx(iPDk zzus`uMA|*uc7W&@sY$&OQYD7Ubrp^jFjb+XfU6O`=XgHRAy#tSNIBzu;`Li#aF&oO zTkzzNkW%8LWt5JZE9bd$o(KEBqbKKhUQh4|g=Bx*P{vSIC&VYYBxXA!wcs;dD+r9>D>_X;f1H000McNliru-~t&FGB&a6CYAsI0&z)1 zK~y-)EznDH+%^l!25|zWm`9TOr&xm#$aOPI!wpOn5 zq&UIf7v7w~cI#M=lhzue1iTac;4#MFdc*ZbZ5?ABXX})%e7!AHlx{(4SI%1KU77AP z){iV>px27?o`T^_7seR&oLI)d`p=G7!8pN|l$ou=IY)C2V+@Mn<^#?-YOPo&h_y`4 z@%OrMXyf5WW)vHoCB{h8j#H)giq%dAk}899s4BI0j4IPH5WD zR>*lL<%ranxJ>4DdvL^^H!lc|qgS+6O3e(~puv?+V%}+S<=R(rJdn?y-KV0000L?AO14 zPVe;W?9A*BA!K2&ovIkHc2`K23W*50Y)N1+uEKy(B`KoVsDcSGRSCwyE@PYu3Pcze zj>~b`CNi;z9V2Wl0tq3let1ClH>s~^j%ob%tS zbMCwEe&6?=d+xdS2%aHtc;g%8%*=kmFr?GjMoLK>$C#Ey6a?J!wXX@zK|cFe|697_ zF`nn)42R^iS;n46HlIgV6jGLjno8ljE`x5Dk?T?^7TNCgu+nLY#UfTJ#k=2f&2GP+ z{o)Gg=B2xmB?P%1I7Z3>kNrlz5rCO2Py zolu_n!Ta`2iH6@OG{Lzr%7kC^lY1AE{8i9;0FPL@AJ{yJ|h9X`tW0Nv(>^%r;&<+s_Vpx zLK4ULqY+jv$MWJLgenyR8Gf?O_7x7$4@0Qz>H`T2S7{KMNZO%o|&PAdvY0znW^DCC&?sejJF<8v$= zIl`Ada~nVV_IEHE3{VXNRaFsE^7T9ZoHzXZ+W~O;eP(87x#PcohNC}!1F8_HaSTGB z89M*>k3Y|qZ+j=DT$aY{EO&nXbC{+{82Xr|P8#_si~*Xwk;T?&N)x~`MUWYCTtJu0iU8irxgYBfpXn8Cm%o5>)B zKqd)O^*V-OvcA5?(W6IYHkZRRO*)+pC+@!cIp;-x=y2e`0m3jOiDNWH!3#rlO+yue zI7w)&uk-4IM`-NZ$4T2}9LE@{N+Kn?uA>+RrBaDny$(RP*W<@7y_7q?aSuY*35P>e z!$65+G)<#aDluEDk*`!~95}$R*CW<6VxaFhL`i}l1PI`W0L`oltq3FU-f>^S(Y zJDKx8zyMWINRos>zmKY_D9_^)viUrZe&=Bdr4mULfvOTk5fYG5gdzk7=H}Sk+M?Cm zAW0HJ*X6Olzl(G_jcJ0-VciNF89Gai!+`QU3%9rl`hFtHq5kY|K`?NMUsZLE{_qycs z1v14VXBQWF>zl9TyGx72QsTQVtyYVAwaQkfLq4A;oym|&S-khHZxMg-cmE*UgNb){ z9fxkePo-F7;0!4giWr80mC0~${s>Dei}=1zI2zIE_sL{3IKv_3av8%kX*Qcr2jERt zTp@)J_(4FDBv`2wK@jk@6DM9)pnjC{G$*Jk3RWhA7>y7>sa&RO+vokGZoKhEX&45z zT8(D2iRXDtUHod+zx^muN(zMnxw&~h``aHEdujVqS6;=Lua zwMqMl$LTJfBA3f?Hi~xbmFuqmIeEp;UL~)*>S|f3P2o5rP*nC!H%NeVHpg|>|C~H} z{Bn8xO;^a5bKw8}Q~yQ2@85k$e&C}YL)UdiqY(hV^6MWWl9R5F9lf0K+F8DP&k1h2 z=_dL24?iXW{=@J8fqeI`e^B1?jJEIl;BSyESD5~>OS$#qzl)TT!I>p)y6Gl)*U9fl z#kOrKl?p@0K~WTng#w=MGjtrnAf(&t(dl%kl*_oD_p<)^x%qh-jTvm)=GYB4F&>Y( z@)zHUZQDOo2e5F_Ma=A<#dby<{e>HM_3ciFgNF_=JF}nW<`!?*X?yiM-$lP~qeM|e zHk&03L-P4NnQV5l!~_A=N`){CQ51zju}Bz(FDn2m%gbzRtWzu&Sy^622*Jwo^6v9< z=>QhL_dR;u4!N|&^6Dx=2+l4qQz;c$U0UMw>IyTp3Y#k{2qAdl@yE%QDkzyuhQ4j1 zX&Qao#xM+`C}Pm>Qz#Y@LSULEK@gy6+IeHZ-26PQ>oPY#|11VPQwK1A_%MZBp1w2U z(2l;bu)xq6F}tw9#fJ{F+37MfH;3!G9J%BY;-QUVSr(gHTL9SoKHY8)UDvTJ3&(Lt zr_-dCMBtbvAVpBNTty>TP;u&q9{TrDr@U&6pAHO0Z%;nBuSDW;}|~-$z(DwI|DQ! zaK~fj=I2>zG$wz0=lQvG01F2XlG1e&cf|a{0*j3X`)6nIT$h>odBPxI(5%pSC*IAYHo1s=;b{4$Vt}L)>v6y z=J2tDJow1T=hOkLHJh|rP2Tv%qbxo05Nm5|oIZ7mix0nwZ=U=X+nsIdQ&W8F!TVV~ zyUOay3WqN{xVKRF_AmXl6hiPT|Ki#g1=h_s-z+sv!_Q<{|MsKYdFP!!@(6QJUTr)c zV;IJZ?o3e>n$0Gc9z9ObYM!@2eq!rMxz!aE<`+2mjvLW6jc%vQSHAKUu_pk+ARyQY zEMAP*wvFd`Y;3HPB*}Rh{J(PUkX!S6&S=N*R1S(;o(@UlHHU-M1(mBTffAg(JZoKhEDTLrXw|7y2`5$UBtH@evs{#!7={nAARA6 zGHOo@D3waP5!YU2JRERfC+wV?n`5Kh;o?`lis{A-tzMsng9mY4mqUjSGq7zAFD%fQ zZd{nlpaNvi5dcNgSX*D8gsiKp9DBn79(wd7o9k;__A|$L=-UrXbZ5^p|N1#jKKc-w zI}G^nCqE@ir4oJ=G3<6JPfg)C4uw)_lBM35j+N7=x&GSgc>N_u1b_^D7G`HT)o3t1JxzZwWPhW9Dg=YUkjBgm zjYflo{red@4$}t?>?T=Dr4lz@_X~t^grO)Xsz$5ZrBWyo1Rh`dyDuYww_STZw&PI9 z=7^$*D2dUH6#l5sm+$`S-WagnY_f9S*Xj2M7>0qA5t^oxB;fl#*S+^wDHZa}%*=4t z|NLWq;;L&=RFx!(&~zOsC4cirf5vIz)2mmU9pg7tNm?9%VV zi4%P62Ri+4zxDm66DLmapMUL^r+rkhP(-Mc*{SO~Z+Z87_{JSyq*yEx1wN%>kvNLb zgygm_e2(}3@_QNnq(d%~>f+)esKy&lV}%UG7h%%!j4>dUUc zsPCiQZlfv+#X_Eex%Vec#}Tdrshw$0SL@;;BU_9o)YkvYO zpJ!m(WOG^G{LXhF6$Q_6zP}8PEK=uqmbe>v7KXbQTr@YwcE3*)Mf7_;ydcE$J+Aoaqo|i%!KtOwAOxN_#{Gex@x$aL9sDQSr)00M zQJ$OUY;Z5HNmuD@3pzc8%G^A+n(ChV`_S+GzMPqv!5fdU2Lno#3Q-Wy9}cPPob?A$ z#N5mb?r_L32(SzTDFk-6!&Ie8-*Ncpzr0zzB!SRg<=eM?0oBOTPp7fN4W7)FNk}nt zLRN+o2l?s0_@eA?ZIQ|6*>1Hc*Q)5cL9f%HST57r+G46&Wn*K5YNyWZCbO!_Kr6O@631f*& z0u)6fj1wY%L?&CHI~Y*O=aE816A5cu+f=W5D>^ZQkwZ3iBX^k~WsIikNI(<7&h3y&K2H!vXi7{V1hry;*dG&VIw&fcl!25IU4c;O zs0w6LDUbVGQYBv~6Z$R^m0U^#EkhWFocEmEC;sG5rMXV0qG#c zu&6$+6bkW~dTCn#tkX|_q!5JdrB5ggR> zFKs^He8`p)U@8eCH^d~x$d%}*Xijv5 zbWvY<0GMHltR91IB0_;F6ih9P68j{Yg6hRo!whi}qi6~0*hfEYlGd_}otRW616D$)K}Lztvip#LA=`}HfTEQ~s3Cf;fMQ6b8j{PT zAoB|J0jj@_rGgXsB!PI|prW9FN->Gm z2%+nkih>j>2_T~oKV_gPDl!a^NdiJa6Dm^E2qOn6H4>R{OK`t@ty*Gn>|u>G`a_fI zfjNY`N}zkx(;81k{r|rgIPZIbW5f zY_;2TIvoxlxdwQK*f9FD%!0K{QP zwNhcby+taOVmx+u_@T3Sp2xw31x90+rKQs-ih|=f)a&(Kdm#kt8|$pDER!S&wQ3bV z2zl(gk4>i4g${s>V_MB7iIkIcSP+o5EJEMMaU51xS5Z_InIuRlF?F5R#s*OwqiY(v zrZF`&MZeeEwSVeeuLuSxJEy(HT$VzyL=?wZR(hxE%Or|Ire|hpZmhGqe1?>15+{;s zr9!SyB1vMbl!ac?Fs(G6JEq>)PrK7$W97_+4}fl(q^!yH+iWI{7fcE?HBF6bl7>&n0DOXsUYQ1K_(ZaTpSKF3slT zLPWJz!}B~=mX}c!WtZ+xtp=L!gG_eqv$-573jG~>MbnUR{K6P{-Wgz+q%#@pexE|I zgp`ueXgn#AQxr0}98*(uilvFpFjE+oMX%eXSSll>B#L5`o#|947OB|+r&wNJ04F;_EZhe_feyWsoWHym1cXpjjC$6o{ORgB$HdL zBgY{@5WN5voOcFTsT6UXFjcLfsVbVLlEg8t>!PYE#bSv>f{+P?LIKk-@I0S=^(hR~ z1SGm)(CKs#LXb{pP&FM*5v0%Y9@CF(JM4QdOPy`Zo%-PMc#Nh_favzR$T%kOGU<}O_p#T5?07*qoM6N<$g0joQ=Kufz diff --git a/src/main/resources/assets/bloodmagic/textures/models/demoncrystallizer.png b/src/main/resources/assets/bloodmagic/textures/models/demoncrystallizer.png deleted file mode 100644 index 370a1f77e60decf5ad032cf42dd8a254623418bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3406 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/demonpylon.png b/src/main/resources/assets/bloodmagic/textures/models/demonpylon.png deleted file mode 100644 index af5ad2bdc62e3c7c47581f70091ad10c66fceb4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5671 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/hellfireforge.png b/src/main/resources/assets/bloodmagic/textures/models/hellfireforge.png deleted file mode 100644 index 081ab182333eb037eea424e5dc3086d42307d96f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3581 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 Qm>)I3#K1zoN*5jTKM1(KtN;K2 diff --git a/src/main/resources/assets/bloodmagic/textures/models/incensealtar.png b/src/main/resources/assets/bloodmagic/textures/models/incensealtar.png deleted file mode 100644 index 68db926370292aff4dfdfe8e4cbcff961b77c4f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6835 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/meteor.png b/src/main/resources/assets/bloodmagic/textures/models/meteor.png deleted file mode 100644 index e6926d121b4fe68c6cf7d85373783c93207821f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1969 zcmV;i2Tu5jP)VGd000McNliru-wF^5Bo9~@Sh4^B2R=ze zK~#9!?V3w$TxS)>fA=x>&diH?J& z5)u*{3dmg`Rbq(*8(6`D1uCFKnh>CZ3IutSHco7(@gu1p^Nu~wJFh!)*>u6CSoDi~ zJ0fTM&F|{Y(a}BM|NM`HU`&pV+40dhUax`Q?_=SQe_-OwIXugE_;D@IE75&?Ltf+R z(JylE?p-X)!tnXX=krWXPO>n+fCzv2>QzbP{Uy-^96xl(9x}@ij+o8; z&M!S~%0_@JE^<8yMV8U*9)qzsm2#Ozvq{&o5aDm!x+U}M_+~Z7O4LtKvWZM2z^`+u1{X6KhV70p?|1?x*R$x@sH%&mF+e=v zXRWx!>!l0}iNpM$4$-GS!@_$jG?rKR&H6(Q`Q2PTco;J}Cd`Y5BKm;AJtMP{s-ac3 z**DEt2j3!2Ss$AwDgArnbLAt&GMax8lUs_##&Cv?D ze(yd*J};+x6?`Yo@bhn#I24bN$UWdJ@KRJm3H$MmMkpydzn(gP;?h|7*Bm|D7Uo4m zxQ{$DK4QN28f7x6bKfGpw#} zFr>nBA%*QsnuR;_v^)mE;W)P8XQL|%^SjyxlgZ>%GMRL1nwI>q-)ze+ioqeKhr>i8 zQNBHxrdTR*`}z$6s!S~u<9n|(sd@Ya_8mZ5+oX1H0b5aNb$i16BW;5hFJ5%--@iYx zyu7@9{`~oA+qR!H4C6tk)0s>p5~I;*w3E$dEC0#NoPBn--D;!eH_5K9aj6rgX7vaS z4`C!{7`%CnEA^vPav7>!&*mLAKBK&rxBGd*Yr}ezkyyUc=cbZqu zhmG0qD^1?4x9GLn#DjhUSX^;=Sj}$J7zpArt8_bUs#cFZ<`&IXo2KldYjrtj)#ztl z@dZP(*JT%b<1vnA3)EDbB|XSjW{yzoc9?9pId|qb%MUBamc`4S0(UJh#jcI2s+3zD z`k9xV*7HvDs?&PjXFRFAxsu=F*qQVE z`Pxm|*&NM!13Mb#{rDIKV~~^SEd9(YPV0H6dD&?_?=&wtt>>NQWvBJL)4Vb=JTiN% z`4BY};V%Ob9&{w4ip@KjBA-8fg5SOQS6bOT@kjuDAb_`2pcRT@>Mml2hiw%4nO9C3 z>g=lQVObC0uWd6%n*sj-vGH+==}p3PIiXu@v~6xLt>O)b36Afj+GtSf!kD>5Kl8HF zdfsVXaazwi%}XB)LWY0?Kpeal$AwZ?KJsGaA?Q# zgeLJTbsx9q=CCXa&F&OmMCQk zOpFcj-_E^>J?M=ZC1kc`jRWlpb$^JO+ef?I=H~6WkG}#Q1nlJJJMH)HdID|*4Ln{0UolNmu~6I|!ajqajwM)} zpWpF3vsK~J2Ig~{{K5~P2GjYRkUie_-e5W>mVmzZ28Fdizk7qiZLr_HJ>eap ze)k49G8wUtV845V!n?x#?(GTR1pD0^6y6o?cW+O)0xnEHfs?zwk6>3=tP7kn)V}ui zHVXx@dqBT?d&2jCnX}LKwYRrjsqi=+$K!Y$A2t3B)Qc8v9BUjQ00000NkvXXu0mjf D3iH=0 diff --git a/src/main/resources/assets/bloodmagic/textures/models/mobsacrificeswirl.png b/src/main/resources/assets/bloodmagic/textures/models/mobsacrificeswirl.png deleted file mode 100644 index 023cf956992bc6c3b04c062b579a34c5b18a7435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137017 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

      8vl|cBsWV& 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 LNkvXXu0mjf!6xZ- diff --git a/src/main/resources/assets/bloodmagic/textures/models/modelinputroutingnode.png b/src/main/resources/assets/bloodmagic/textures/models/modelinputroutingnode.png deleted file mode 100644 index 1d756a470382f9b018980e74cb2bae071e71cfdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1948 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 diff --git a/src/main/resources/assets/bloodmagic/textures/models/modeloutputroutingnode.png b/src/main/resources/assets/bloodmagic/textures/models/modeloutputroutingnode.png deleted file mode 100644 index cdb5bd95b1a63b3865f70ff09cc140acdccbf343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1916 zcma)7X*3(!7EW-@O6epRmvYkl87S#B=&GLnCn1ONas zjt+Jnf{6QW;-UiIZG{*V1kqq8dpp3<_x|j4ZIJ+xxaDvy766b^_-;TzS%s1S6pM3& zUlN-a5>*tI`|X|6kN}Zzw6pa}oLT>XK%ELx?c;3DwTA7FM6Ve~c{FML?$Mp?CX6ad zq>tqOlILhs__&AU*lwe)lPL%Ga=+@JKIL1e1Jl#N<3(onG8NlxP-%*qp4tP9;wzmq zE|p}@vR9Ev!~AvbbV8pLl!B~Anz$ks z130gM#H?1NM)0dL87AL=%T{!*-Dm@sOr7)@A^tQ^%-Tt7JtO??pcr^(n_oDgV4?eZ zuadiw_*CLY+PLa%e)WnV$N!xDmydMVPwMC+CTh%Bn!NpkHPVPdT@=aP>-h_=_+aNHRmH+9T^sHW;qZjr&zI z^}|hmPft%K3?o=~MqJ2XP(xhErNT7YCpASuz3s64v&#Pa2#-21nhZi|(e&7CvrH`C z6%B^LE>tZnwH-qu|JY^FkrrP%?@hIG(=9nzEY^}EKoxt?#5Jl;QpU{!~+>Vv}E<{+MTok@DrsmuE>BD~2(du=D24 zu+$>7GPv&<_;`ev~$NJI(NB>ckeR~zUo@+chTNi z?wr@rVF+m?Gj)qTv1Xd&Yo_-S8f#q+(&_Z$77h8VBs?M!TR!D0cr20D(uau=y`^$* zqtTCqxaLih84m3%45Km*1F0Wlo`9wA_bnv`JVludk_-!Cyt8%ArOd`yo3oF z)cL|dx?3I8(i#^bk12xN>EE;r#U1SP>@mEJYF~qgG}d|P^pPYU;c&T#n1!0H@zPr` zJ=PrMdFI3_+X*pi()vNuoyFF5Jv_)KNCanvJPdv5$P4cc&N;l0nc2LU1jZBr5U|h6~LR}a1vF^(US#hl<)omp(0w+%e674Ar4NGhA<@H)S3&8aMWHXJW7DJ1UA#!a{zlV_ zO@6)LXTAoFXHROHgKgySf*WD$@|SGQt)6bwy7L|r2pXUkPCJak_V@>_X=yTNq{M=H zM=C>T8dZ8q-=hDnFtGsUv(?jcJ@U7KtaB}ruac9>78XwXPil)_c-TMT4K_7(kP{KH zy}zV&wuHeNDB%IBRISa-98G3j$t#6ds-M@35?JxQ4YH9@+DA+^+(&Pqt=yMIed;3m zXb&1jO?}{{2iF_7KXD0kz?(VKI;~o=);%x2q zwtH;Yx(A(iisToVu&vew_8Tooq-Ncet@qWGopFTH0~#yBxNKe2iX%~AeaCOrDt~9KUWo>%06A+SP;N|XE<#Bl2jOIn)dUTKY5KFc7}P?K>6Qd1}$bDPQywI?c;pe8Biyqrvy%yP{o zduGMBOyx>qg$}t8?n^GHQHqL$g1a&_f4+a;ch9}|obTNGoqO)N=iKxQXlHd*162S3 z)LmT=p7NaX-IaIBBg-+UL!Nd9yE!8O*>@{xD$kNLDlsm8u>i13>$`)1{6~6nQVH*h zLMlywcj_t_oZDa8BX7)dML2mSd=idwaE5Gswpg^_>2^J*)Wy%rdcM8l))2uX_s2{y zY{;Zb8y)MqTfIwG`a2i|R)k5iP5Dx(nz1=dK@rOZ^cwJ*DaBix z=70myADCFM<;^Etc>v=75T0^-twHME6to{fQC+b6Mp92=Nd2E!DLLd?Vo2K>WfOXriK+ zi6qIkrbL!wHbR9DMrn;Ue4@eES~h13|mwGbFXLp5qcrjQHCAh-W>R{0sPFFq^AQ1 z$~@Z;9{>4#8sX8>*-0kw_oUp|MoH^f!{9tG!kmxTXtylXc^Ec@usU^2^?{ECof3^ z&{|=2k+oWmRlw8!2#8G__0n;6Utihy%=r0DKd%aJ+ZyM5P@KO)eWksxt-nT^NyDhJ zn;Z9;H{DmqA>o_G35Vp(T)I!yUiLLBA+7~Z^k&r#l8!GgjFDmmJ=#uPX3D9|)mN?8 zjM~3kuSz=>3wz zi~fE29JA~l{SlPMh}6xQBOcmXY{>8*G>C_lW5NE%y}J_@F`1YiQ{_*q%=1m-Gp)ti zTZeCiNW3lfEv`9OolVH!Xj#oOki<`}bO^w_R`Y%&!)6Q3Gz|cH3YOjfM>M^l7>zZL3d=)f=+oyrl#A2~6 z;&oMcR@?nHwGgriRh=3lpR8zFGp!IMzWviJ;>xz$;|nF;6`HRVZt_O7Nx4#jZ2M=U z0@Q|P0BMV+KxttawAn_Fo-iZ=)Xzq1jvtuuU@ev3`};4xucnBIWEyR9!*O_CS%A;? zvOwy^DYIgXlara9d_I5u4Q^zp_GiZa=(})B!#(|LOShvo*vLP9=Y=~ET&3~MuoNzi zH@=*{vEdWYBq_z)A#40ii#xPl`@bGB5#a9{E7vDXf_G(PJc7erUkxk%k@VNW@u|q* z;76^kaw*2zHx|!ekf6fS7$mGMb~O9i3;9y3_4N$~WoEEJ34qV6fGq6_k5jV(YnbP1 zmd`LnC!zNh0=K&llOdMJ9fP)-IU5wXQTC26*YnWjBO@uZBGF$fNvXy&HF7Bw3guy` zlm0oOq`6@GOp5SDnh(d~;kZqndm09sKG*o#|Jbb5PJYMd%BrIZB5mBtJRf&oz2|NQ zLyHaRa~0B9XdVW>)s+14>}bdA8t3BM$;&IMbRgqw2qm$p`&VQASB~LvjLW4*!U#3g zQ1Q)E#L=k$%u^11VQYD19i~JFqur#&hyFiUZ65S|C;2z6Zf~;uV*##6G@|mSz|_A1 D&y8#< diff --git a/src/main/resources/assets/bloodmagic/textures/models/pedestal.png b/src/main/resources/assets/bloodmagic/textures/models/pedestal.png deleted file mode 100644 index 1ca87111cf382522f551e03c4209833470a49026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1469 zcmV;u1w#6XP)VGd000McNliru-wF;E9vLlCBNYGu1xiUo zK~!ko?U>C^TiF?hpL4%`ZDV6%%nUf8Ruhdh8ih<}+ld-=(Or}Usnn`FmTmtcHq+5` z!y>CH>tv+PBBM$*3YjVr!2`sBgj{fZzdz0_01F2SLAJBAV%w`61fSL|(W5`+Q&YObF99_=!X zm&;{Jr3rLhM+kxIx`bhXW#w?3eY)K)ilTgw?k|7(GvEI6yP+FUv-7-Zw{gROykTCb zS3b01DJ9pg)@irf?C!p1ef{b9kPQs;U$UMWQG{RaN%(-eQ>++uPgdx{hHOc%DDh z&fmLtkLKgYXu6J{Wf+=y4ft|CEGNaS!plK>n z9_q3zB@81JMMWqIuIr*{T2D7@3c8N8EXtNiPEk4VJZ8!zgoIF42VVm~a&XY0(P&Va zzlIeC#Cv;KwHXY6h+(S#%G_=s8%T$ z2GwGbsX}2mi(r~2v|qNVUa6A*be78eJo&s$n#SaEHd4x-Zhid)aU3&Ks}V;rhM{8^ zT2D7j9z1wJ0;qA^+XcE|fN7XGZkIHQ1~)(mft26}KA!JUEEY(Tm^hB9)jlCjQ-n}@ zI*@q2M;L{4-R>#fu+fr)L`s4nAn-jL*Cj||I#Gmr&J@rV7Z(9AO_MCk&~=?CiZBeL zPq?wMf#-Rss!ALuy^cgt#Mag}s(Rch@j<#E?jM!o|8dO9%F3k-NQEE_L#&*I69ia_ z+WVE~7%mnT7G#!Xn5IE4mm>^Aq9fN-RV9idvMeJ_v)=xFmNrRJ&TA(OqYLhbNGXZq z7)4R3R@1G6&%=ig zKb`?gOG`X|{=8QL%d+g$@%8=qpe3%q|Lw0l{{DM(-M}yme9xmgU1euyhnqKV^36B@ z7>NPOMJ2Fq*X7`#gKgWrdS1C)=Iurc_hq{mKkJLR4F7F5F-;TCb8#Gp@aX7lnid-y z8zY+nXBx1)yo{8R?X68FC(C^G)o<9^+U%9QUj6SUYS(|wAO3ist+lnGl(>SOouiZH zVGS|xeLxaLA#XQYAJ>56>@SWJDwPVmyRT7I6(J7eeh^Zx&(UnIV&^P`VBqz@4??mm z?Y$cz06~_e*dwYTTrdSBwV4^3%_h&DJ)>T)A1xV@nHx8F`tKiTt*$bC{W>59o&uBC zuA=KELV#`CSk_^u6-C9W)kbE3_Wx7S!?bpKx<-~|xUSom?pn1Oj1%!ezW~d!@LZ2V zzJRJ}_@0MQ1W6JzIXO8x18&_~kS|`W_ocI6fBjp6!0$^}-@SX+m(IR_e_`RK93-8U z5=!L~aU2uu?2rT@lh>{?H#bM8(;3}CU~zHr%+&V%*vaeTXU=m@#9G*)50oO z81#Cqw_0e1!D**M7=|n@EwQ}PU^E!gX}6I@k-+l+_~>tc=T+?!0Diyq_~vdq&z}i= z$;grKBT6EwZV`teNgSi9Dkq%|LY|{*Du!WjdUAp&fMFQ;K|skgxgL+d@`b)=M9a1j z1c8%RZNeZVPE*n}!JUi=!;sNn$XVw#@4Wji&9!xAu8U(kOok)MjziHA4bvp>eVQ9B zTH9MlqQu6|F2O8hJei;w25*1&F;hPvO;a}Z_JEu_cUSp3Mn(`YOp_>zkrkCja~1dc z8pARX1ql2ZFP=Zcv@B{XD@0+0ZQFFaUD7-+9+0Lfsw^W20-a6=Z!#v&bDV0GLAT3t zqmHWS^e-<7I~}H;hhbWbudYxvt$08j_&C)n)x|~pAfR)6%w#lT+#jGQ3Ywy_+-OiT zE!sy%y!owfGaB@f1-LjrFCHMN8lLAd7z|Jq8M|C23PW^NB}!6;qajI_5d;CX9iLIR-W^v5(fBvIbK$fP+ipoOCFX`mPLB!=ct;7 ztSFqGe@g%2qWD_?&}p|hJlH1+L!5;waTu|&yNe`>tgf$PSS6w)!7xqql7Vg8+-Wp8 z`;xERSK5H@xwN)6$>Ny7XvF2k1x~ffY&J!bWL(!pAV-!&?1e@8mp!ifec~vjWZT6z zu=VCcW}ZiRVF3}S*6Rq8MEmH7$z+V8DCoMu-h+qCJeNkJLA}|e{og}^*{pcL@xeZ- zrg4091cE@xvk|4tx~_A2+-7}e4`i8_2L~)I*QwU)#UH`K8_Rt7!JpAe zCRv)|)N07O!O@EsL}5hPuArMHda1<8=_#YjOPbr;Jp1_H=&D{gKqz{GqMnd{o;}SU z=4D>bVzk)cY5?WCYpC8a6Fs118XS6k;w&ZRTt5lzaGfV!6eQ#%LR3YhG@}Q@!7C+{^JjCd7^N@XP&6l>vVqcCr@qa`{?n_lycl9ze-96Q&XN&{_i`7V6IDiD-!5@N)4_y2OY>AsC zPMkm-5J+4AA!L~o2xBY+9(uO+Ot015wPj^yWaPqOG-l>71}Wz~#VsDaZ!ACY&VJV3PQHRK zZauet{RgkLw{GwA(|3L$ctNS8AK_UM`?nI3Bx0H7T-)Bl_dOmwI3$i@uEtm7c~0Dm z*xXPwO@m`Q{OyCk1Mrg{|B73?2LOCDd5@>NE#@ir5AX9?r7BaC^dfBAMr%z=!^!a} zLcnlijRyyZc)rKZ-Zm#kr`UBvx=0E9kfv$@c<=Wg@X`7`0N%Lyu7Gy|_{aMPg8xy< zlqJeh6k2m}enA*USW0kqeugOxWohsu53MyTgFbmykn|G#&|@)A|L=`n7ytq3Vu=uf z&8$+si zg7MiHKk#T9m`&5}0V-3G7dcW29v>Yuoy<5sI^}Xap)3tWZg4%DAPS&q+1T1ZO2Ke_ z6)9!+0Bf5AwAN%Pi0isUamexU3HF&o+z%Pv7;xt=_q)CW2~t`NHwGwMv2kr3DFs?u*YuJe z>sv#bx@CQHo$b+eXarJk?H791WN zbq>(Ehh06Pe%Ji49kpNLpV>pSak(>@(A$mKoH{6P%6_oN!{r_7rs7uoMgE1SF?{w-yS5K&}BY4&m-+yzJQSd5v7e|z3z`brK-7pvVXOaoqH}`|H{v@WUZx_f~0M;Cna8(*i;1qbP45<6sGFKB9) zt0F_&hNw{}+Ypp47hK`_K5g4F+#1mNKYi8{rV40V3!Ph3m7;DflnOA7BGWZ_-7=r5 z=RDClz_XtC*JR9PQL=0eC(9Y9>6CH4WSW(v1svxK?icgtJkfasPdx!J+S?&8HuFr< z_Yw+Mpn5irC6QLkT9`2D39jl1Q5;ibdG`*SpN#PXpSrH;U)DsWA_klcdd4QHZ2}3Q zsIiNNjrkK#r0Ek+bPn*WC&F-v@(rWR+Z@%P^Nb~`@0{7g@Hf%igB{0Dh`2gsw8 RaQgrN002ovPDHLkV1jzh$9@0+ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_base_d.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_d.png deleted file mode 100644 index dc8ef737a35b38a134ff8baf40d3ef11bca51635..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1489 zcmV;?1upuDP)XIO6~S1zt%+ zK~z}7t=7Gd9akO3@$bx>IrDz++_%lH<9L%babjT-s1OyRh5vyjJp~ni0}{~EP(z)9 z1_{w1AtV%VWMl(|wY}NBcYXK1&D?oAXXa3ZSi3?YNRwYR)yy-`Pdevg-9I@pqcowe z6=hX3Od=fDVY}Jm2pfYT@I0pDl*Q#0s%weEfc?H;I!^h`?;l#1zx|n+ed~Kz!Mz*L z-+b@Hy!GZCe)Zw+EIwz1Z9B|nQ>NpTw(YoFUU4u1G;cB%Z418vj5!g0m zQIZZ5ma8pIT@(5)O{2KXa=NY~+n4N%3V^?!&UyB73&5M-|M{!Gefapf#TSgI>IPp5 zjvw4-wOX^*qdF>Hp`KYO<5FJmPH(gG<8D| z_>4y>OyG)w9M^TpvYfV6ShmA-GD3F{ z244RLEDO>>LS2<4g8{DesA`334cRVdG#as5tr;XCLP+8;Kx@r(GA53~{s97CB0Z1W zZ@j_PdP`l`Owt5^*>sH7ihWU%V9^6N%hJ9HPClP}r!gMWl zqp51eG#&O2K-Y2l{ERe-$oB;Ylazzm7=X*g0OjHv1wOA0RL3xp6vf$SgP?wv#a_|YSL z;V>K~oSiQSe3#Z(jMD*FpxchWeEbC8bCIsY(cz4IUorpB1=MG(zAxzO3DN!HhsM1B zKE;buROGRC*BswU*gTW?+YRCI3HwJ+=(HyJ`q#)`JjXsvd0D^Ut?&HA>gx$%fAG^@ zE%fz-=(~dJp7_!I0pYvvlFdJ%NkZ~q$DP{)R)6b|SwVPwf`0gCKKS*cSDvu@2Dt8t z@SS^@Aiy7tiTr?}nbB?{q!&Xl#%UDpJ72xwiQWx-=84dgz+88C4_}wS9rLCfXWm^VSw9# zPz|<-NT&j=KV~{RAdbTR0Y3A@!E3Kk&Mj=;M{jbJ?x?Yl#!xOBWZMxWaQRf<@I>zb z*FE7Zk7y;xu0z)?R+FJDO(0{O)fP*%3|oUS=9MRU2e|Hu^ww>#Y{(r->7d+}C<)oG zEo3?Y$Hfg}8m(V>qW3v)-4oT*e`18gD$gl(&DPE!sc0RA%GSsGL!G{*TlCE9mQq-VJ>B r+utx3%gq;hVs*9sFHbyq`htH0we=U2>i%d(00000NkvXXu0mjfgPGa@ diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_base_s.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_base_s.png deleted file mode 100644 index 1c6a0cc03c599d79d1040188305142a847385ead..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1517 zcmVj1Zb=m*`1$s$D zK~z}7t=3DA9Y+~};kT-*Z`J2EGskCU?C}^A;}FRK6hs6PAhG6$uwliL{}APOuwa4M zM+#CT!vdltM0le3ZWGVtobJ6t%xq@A|DzrP3qbxb+h^oiEAKQ-u{5d&-AM0K!o7&*zW$emy3 zqA14mLfY04>j+~ENiwId4OMCg!;sbfO-^4t=Q;4@7k9t$k6(^lu5J?e9;Hc<(s6Kb zgw`?8lW#XhE2Q*^B8@4x)J?;~2Pf2Z z$8#%ywuR!(atjmNJ>n(TN^^2ZZzp!-%$R zaBjfbo?&o+C5~fevqJ{k;<^DLJ^HSqX?mh4qVIyp0jn9k-@Ca0`wc6a7j zr?|K{1uS70VoZUMii3k=Vx15_xIaE1&r_~mJw(TvbaTex{xy=MLV5w|W{pxIeh?5v z0n^!nx~|FdEyK_=*lK)$vn|PFhLn;p(v)?Bvjcg0%IeA?ZP!y28CA7qvDn2|K3VpH zwyCJ=X8a`_hJn)L>@5$_I>y?bx@lPMUZJWCMZQ5PkNJE_Q&%7)ySw{H&(gKyHz0#B z#NqMa{yjG9HHX)3uv#5bH#IL_JY%o}i^VQUl5k~pL|wOZO-&d?%ohiv1H`S{KXXl; zF<%^#ZoXnNT_9zEwJl9uqI^XdYJ~7m!M|^QX;SRaGV~3PAAcf71&lqxSWl?;eq-J8 zr;f8vOQNvD-)uOZ-ryuiY14?Ew>0Zd46?WEzB}dOUcr1JaZk?p)q6L^SWk@Jz*tYH zu>qGo@y_0FnfySLf0+~L7QHPvo*nZKyQVG!mTzk=KI-|v{Q8wAMh9H>g#NiEo;j-B z2qk>l(Bo7M2#?fozy9J7TS|))7U?_<+lv@QO7Z z3tZ9S*&fezINLB#K;NTWfLs@7J>~SpQ!4WsHt^CDzVCBwdPuG`b+{#peY~F?dm*Fk;0*4O>%3&d_O_WCa5?>&lK@O zW5WS|8+bvH`od#X!4 z^{LA37)_`6u8VKmgr0{| zieKNpEe3DAr5aaXM11#~r`O;52IA$b;>sqB;iXpZlDQ)69gpl zIWIRF=(^6z@-n{flVll({XS`$vbC{+X__Qi#;y0>1K_8(|3rQF4gh(QFyFZcKzA@; z5XXF03{BG*O(w)~Oz8W_qQH(KWKrO|E)RP>e9xmE1Pq5m4h|3TT$kR_5yCJ4_{)P1 z{>OU&WP^do9)$qBzr8JZMvOeq32YnRvd~SF`CEQ|K~ zI$55hYZ?GQe)UyeyLt26!h<*7LjB?WX9JjqK>@sQ;R3c{P?RNxt|QBmdKlu{Hnk|? zV!Mr0ikk1EltKeEar)w&PKWMbaBkr|NkDsc1q{=+@ogI^CBEz8IS#|=l=*y)CIq%^ zV_Oz+nqmmSqr*dnaZD73IJyqNA3ylu6ANd90psm|Jrh8D``R_tYPB$Rot32}ydXdV znv|qP!DuwXa~%92z_l!nheL!?cwxv+3Al>uhdrl4Tj){e6<6 zpnr0LPKT;7=JPqe?^BB+MsZADmPDS1E(F)FT;b04 zHWNTdNhu|kWnq;iwrS#6R&@Z^wvlDYhxhMONJ$CQf`GwjglpRvy3TkyWvN!f^*n^G zGo8&?URpxH^8x5|yI7Wmp=szsfTpoptI<6;;BzZ0w3a{9wUKvyN%~K$f6)VIl=Q5 zd=d5G4${hqlMeMS-=I7+(H1Uz^#|~`d;I9Z@1OWYWq>oE$ch5-wJntEAlBBm2(ojUgV%3zV`kQji^{OI(aGoPpo z@WdzX-9wvLs5nRH9-4FzaSo#l%c}t%NCV4ho%0Ffc>tXGgn04l>3p4ru!u2>5n`o< zN_E6a4J;Q?Z;<^nd*Tz7EAX^WsGVJut|5E7$jKvy**@e4$i)!VKSDJl)ZNZGpD>=s zG&}Q&AKv{ft>Y$v?-L)+uuYQ(JAbB-lFOT$IDg;aWPHNqtu2OeeEJVk`50F8iOS>n od#}8ry8ZsA`h;nkpXn3-0d>~-FGE>tWB>pF07*qoM6N<$g4p%+-v9sr diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_mid.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid.png deleted file mode 100644 index 2e16a4b22e38076f2ae3e2d9961d024d66feb105..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1901 zcmV-z2a@=SP)=6 zPm$RF2*F^G^}w=_O3~zYlSw66Tu9?;Y$EgFyTsfam12=tGzvzYYN-UkLMpYQe&X@R zIeF|T*~}ujXMad%S0^LauC9xK_4Kjh7y?*rHgr|R&~<9MPAZi`5TKMVP%{ifS!OAp z2jKLvHK4co0)YK{tQKVKg zICJbMgQrdj+#$YOxM1GX)WU30#ba?3pRe&^ZHzytS~}2n5?HE-fLsoK%$xg4G7VI~NBDj|?F@T^O3i^=ntTas4^~xuqq% zJ|CJ|W%8Skvf1w^mrk$G1Gg534;^B9;s%)D@_1+vppd)S=eJItKsOAkmJ=HiTj5 zG`F-+&gTh_k2ChK^J@~f+*(Xc&oKGH1T|f!kjqgnmJsUZngptP4ap_b{qpbm{LjBd zsK1|@rvL8>+|FpX!{qoV_wLz4_?aJYN|FhO$JqJlPp$IGe!h+- z=HhXDJ|BUApG+=KI-TY#U;Ucd<$N06B8f^$W9lkqR{MXK~)s6S_zMhvAM;M*YE%2Z^7uuFhheEamY^UhJnZD!zxNl zjF00GMN~~A*xSp{wJV5ran%QQf9^q3`7lp}?%qanCWcZjgT+Fyvx~ZEpeR)e*({o( zP%~;sP8Y2m9Z0gwhUMJ-;6tWA&`L)rL^yJTCRtw26S-WDEj}NmQi*D{%4{sgY&^~* z`}dQG&k!CR!*VzsH6x~J0^It%{l5FnFF*Ozns+e2xVW4r^8b-1{H?7d=H^&Pr?ER6 zw6q3LE9DjW!usY5zh<_(AArk+If{k`z*0U>BobLu0ZmaD9T~ovCo~nUs$jR^ zOcT*zN0KDsGc#BOuscMq3=S^m3+vUBrCa#8hR>e4V=qWfCsjou z80w;{w}%Ex1EIctsuh)dp@2h@*u8fjWu=N?7=#7}0F$<@?W_NUcLYH|ayrp89jnd0 zB2QQZs45l4hlg;wT=-gB(Nqn$+f6c=#4yc`6EF+|yVZ&y2*hGBN`*Y8Y2xvE$t07s z1pL??BI$(%)L4visf6Tok>wtC!wGmSuYS`l#so#tGC71FOx>CfP}3Y!uV1BRgFb%4M7$59MNsYDL9rwUA0A zZpv=65l_sKo}XWt2ksQHXq3p~ItCERW| zZGix@k;ujsP)bD#r6Q)Tlgnl?>vcR{FO^D}h6XFeVi5roYl8*%re-djJ%c1k$W4vN zZuiC&=-IK8zMdZTJ@5bm;Pv|v8XAaBOi(D~vDs{hqQt=Vom5IinzwA>GY>zEQ>F4$-ZwlA_k7`tW->OtYMd96^JuC@qq_;w=|q%e nbX_OAut2c4m+06iqFvMOpJ~07N7u znXE%Dmqp5mgf=tNvux<@WTr4f&x6;CoA*dtCVE;Wx*XB0w{UX~Ns^GZ4Qh*Z0FJ+W0B(Qm!Y#MmU4PYxSO0;#kPz^f-;qqI<_=G9SzLL?t$Kvs#4r*fam9 zTE#$0q!<}{i<#M3(kTN?)3|>1=9)u(``07MwX1KUC<;*$(OmSo_10~!oElmaxLDcL z8V#yt57S7ar8G2ELsi9^0Q{hd>6mo=B+vezK7o-okYW7Z8Mv3w?p5c{U1ZzNEqI6O zyl7lxa(a>{zWNw9ULRc>z~Mh0NDRXOMIdEJy*SGO=xo(n1NL z2vUZDb#}oIQH^0~MrLD3!?M9O_;jU00D&Kp2GRs!rgCWb-b?`69J?jn0j^ z5B@6{92(;0)nSA#a5D~}46$94IBZiXdQ2A!OG1nlCT!$N_U*DVb_4T1@g0Zo226pUV)8<}G zGtKz;1g_&!E|&3qA2;hTG&I7V2X~RuQ@nZY2I9K+QsO7K5`dNWpZdzf$v40EWU>~3 zNXE-~B3h9r#>d`S&J>EOuw~n3TCD)tidN+d?f1Vv#?HPa-~LzS%rYgl#X4gXV{0-X z!;rz@;iWuL^oR!%R83)SehwK*!cby5X@Vdi-?5Y%-Wi`<&KJt=M+cI8cb0QUue`5y z?EUiYCt zI>>e9h{6~*XA^~z4I4VKEQ?CHisyM~DHWj#@?BZx3Uk<5lSZvU5QM~WjJjSCx_Rs1 zBcJ~Gk`Kf&PR3?#W{ygwf~pE486l;lyimb%O>EmCiei#>8%0YH>jjYQatVR}P}s8N zL #x-NZNHxox~+Ho7pwlNHYW}`)Mu83)+N!s95>+1&)$q2vYBZR_KVVY{iW4bU) zsaPQlB`sfKq;)LEf_6erZx2E!Z0PPp2(f+uT^lihB=AFIC^3yRqAivzUD3$rvuK)5 z&|E2uf9+gDS9M}FrrGf6-_b`xg6&uot8*0Ri?sZJ&W*YCuVCLd9!-jc(p`4m rtOXc`PNnFPw$dm9OlRr3(%%0AV&YqoEeI8f00000NkvXXu0mjfC&hES diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_d.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_d.png deleted file mode 100644 index a2962ef426e20dba19bb80545063a461d5d8dfd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1805 zcmV+o2lDudP)F(*Ry1S~nb`Ew%9$A^OJ>i|I z^ws~E>jn;+$g$UGc&gYK-w@U6-^eZO@8*nkMr1<$GKgIvLchu zWofoL_`Xl2Q~*)JbzIVhPQB5h(QMJ__OPA7bpncvu4$xGDge87?c~hV72+u5sc-(3 z(XmmEzB_SS1mu7I>j-h+Q>hf0oo`|F98^U@S7qWD+FhHOxkYqEMiM0e-m9s%x&RCh zmGQj^e)Ig3Bo}9Rdfzyy8|2o*sviCN#l1<_>QJvQlS&(OI~HfpU**7mjtkr+tY7U( zvLAVv{@g6$h{>`y$F?V4SlLg$`D5Geb9U+?p6_GZF0w2U1s(ve{OQG{)3LZVJih|mSyqFC+_8$1Lrw*;tZE&YC`^7`_?4CihwFh1inYN z+b5gN5C$Puw+}$G+2Z7>3F0WEzT84p6y_Fc04&Wf;5ZJ;jV9lIQ=wGIlS%8h=YgAF z{_>B5v|1LvAE3x0sdNh04*~e&%YR?B)^|NLRRO>>bBs?;vHyFIBJ8+_@9cdWKZx&~ zz`x%-{l0RowPsm;Y{!M!ggt*d4nRJm-?<6b>NEc*tWsdDKCgurp4*eWee?uz95Yld z&}ds+yEezEsp)lzi#NZtT1^_wHje92t1sg^Hmahm{}-anP`SYVm%hX=cHfJksdzWM zb4LmsICNx{(I##(+FH0aJIA(dV|@Ml2N@k5D3wYSO9jrIndGawk;H+|@$s{~dgxX^RI4=%P3Ct${{qkc_%HxNmE!H0 zaPJSkk(`=5&yMY5%r92Sqz%%U41N$1crJbrQK^)eo}K5?cpS^%COXTxe<`-+EbcHApD4IED zXJ*+nQlW1Ts4iQ#Z1CXrO-aGb;&}n?z$2ecBPkMA$3~Jx5)x9HM!9HGt2YVah>VfK zwjIhvlMTzc>;A3D{r8PgE}ER4{4c}9Am+{GS zi1ow!lEl530NniiiAT04UwLYGvhF#S#Fab|1mP`tqTlc1dme_a5QhQnuDvQ>$lrbb z&y0QOBmmC*1(x5rzOn0v%q%RetH8kXxp?6+l}eFZE{z{XXsU>+s`Tsuil$>KGLj?_ z1YKlF;^f5CO1=;t**TV^(H4zCJ*em58EA3DVON?dbHXWnyz8@ZH9)* zNRo^|f+&f&u7~5exPt-n3ron88$4E>ZXc`H$Iw(<$3YMTG8qHgc1fjliUpJ9#qvrn*!`Q51T;K2a1Ph!W*efiMOm zrEOdRK>#zC#T&R}b2$`MW8eh@Q9`fVr%))+YPHE_4P;p*W26YfkaDR=CT(n-KuT9p zHI1#KqcqzVp65|Avj9}eMZz$^c3gUW7eRo5AE2r#u45C&@y1)w?Kz}$jitp!q6A#m zL)TRLPMdNePrvV=sw$E!6GaiarjsNQ1J|L}=xm&Tsw&JcR*91YQIya$4R{AyJw8KxjBL` zq*yGXC=zeH^)9k36Gt&+Grw^U5XYEip2t7+D30qhR5DkxK)qHY3}bpdn`*U&=LhJj z%I81(7&{->&cOFKu0RmQE8~1*s7TSwuNvo?t|LhzR diff --git a/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_s.png b/src/main/resources/assets/bloodmagic/textures/models/pillar_mid_s.png deleted file mode 100644 index 3ebb670cf2feeb990dbf6b85c99fad726569a592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1794 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 BzG46X diff --git a/src/main/resources/assets/bloodmagic/textures/models/steadfastcrystal.png b/src/main/resources/assets/bloodmagic/textures/models/steadfastcrystal.png deleted file mode 100644 index 7f93d339cfce404b5e4df1463e0cf076fb81dbd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMj0P)D+r9>D>_X;f1H000McNliru-~${E9T0E2a;E?Q0&7V` zK~y-)CDKcl+(ZyS(HHrXRI08j+6LnZBlg8M*aLg?)Q8jH?$R$MWkv=A?i#NA`Nv=8 zf+MA#E+l*$fPl4t3=vX7PO$k2n$e>mQ8?Jy_Jxp!5m({z@(TACq`P2q#SH@he(Vv6 z==`9S6|Wg`VX!Bd60Y|b2v_9x3lbt$8u81BE{a6Yc<TR!7lOHjnL%lIiCm;7TE{SSoLNbOr@MH(cqA$L-;8Du)!-7}gwt+OW0IT4NkWlJyMtj%Jk< z6LtvOydxsy%k#!+VdM9uYxQ7;hckdupvX7jVH5N6*{0ck+jF z{nV504oBx{Tc*{9MWeO~u~D+2*@)3&X0+N6XT(bc;MfW!X98Ws44%_W`YGYlK>kq( zNvTB%qoBF4+eT~9T_fHi$3A1nPCyK)g*s)1-#yWUV>vi?p=QOh@_f$32ZRt%HJUR@ zKK_4zW;g`7jx6iW>ubUnW19+9Dz#SV6%$83GI={_=Z0=G9GReR@A%6FTPLRX7fgki zgzAjyPKq3yy0iXs;*%mcTFuzDA?r$LdT=}sE~Svqjs5Y3bnVfzpwo_>J2(f)A;F=0 zf#(AA!Zb~U*!Sp~spm#;&_3Qc)`*zL)&n^!c1<7w{rkkuo${PnwgtTMA2`@{bUKJ0 Q4gdfE07*qoM6N<$f}gia_y7O^ diff --git a/src/main/resources/assets/bloodmagic/textures/models/vengefulcrystal.png b/src/main/resources/assets/bloodmagic/textures/models/vengefulcrystal.png deleted file mode 100644 index 5f70782552f9056a8c51ecc3290a56823d0fb971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 737 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 1.8.9 und 1.9.4 (und höher) hat sich sehr viel geändert. Deshalb mussten die Bücher neu geschrieben werden. Da der ultimative Plan für diese Dokumente ist, jedes Buch in Form eines Forschungsjournals / tatsächlichen Buches zu haben, wird es eine Weile dauern, bis diese Dokumente ausgearbeitet sind. Daher werde ich dieses Buch regelmäßig aktualisieren, um die notwendigen Lücken zu schließen. Es wird als geschmackloser Müll anfangen (Ja.... nicht die appetitlichste Illustration für Dokumente, aber was auch immer!), aber langsam wird es in eine Geschichte über einen Haufen Blutmagier auf einer Entdeckungsreise verwandelt werden.\n\tAber genug davon, ich muss in den Charakter kommen. Mein Name ist Tiberius, und ich bin ein Blutmagier, auch bekannt als der Architekt. Dieses Buch enthält alle meine Forschungen über das ätherische Phänomen "Seelennetzwerk" sowie die physikalischen Eigenschaften einiger der wichtigsten Geräte, an die jeder Blutmagier im Training gewöhnt sein sollte. Von der Kunst, die Struktur eines mächtigen Blutaltars zu entwerfen, über die Feinheiten, Lebenskraft zu opfern, um die Macht eines Magiers zu erhöhen, bis hin zu den Kräften, die durch arkane Glyphen und Siegel gewonnen wurden, habe ich neue Wege entdeckt, überarbeitet und erschaffen, um sich selbst zu neuen Höhen zu trainieren.\n\tAlso trete ein, Blutmagier, denn ein neues Universum erwartet dich...\n\t Ja, Magus sagt, dass ich ein wenig grandios werden kann, aber was kannst man da schon machen? -guide.bloodmagic.entry.architect.bloodaltar.info.1=Der Blutaltar ist eines der zentralsten Geräte in der Mod. Es gibt zwei Hauptanwendungen für den Altar: entweder um bestimmte Gegenstände herzustellen, die für den Fortschritt durch die Mod notwendig sind, oder um die Blutkugel aufzufüllen. Bei beiden Aktionen muss der Spieler das Becken mit Lebensessenz füllen, die aus zwei verschiedenen Quellen gewonnen werden kann: Monstern und friedlichen Kreaturen und der eigenen Gesundheit des Spielers. -guide.bloodmagic.entry.architect.bloodaltar.info.2=Um deine eigene Lebensessenz in das Becken zu bringen, musst du dir einen Opferdolch basteln und es mit der rechten Maustaste neben dem Altar klicken. Dies nimmt ein Herz der Gesundheit und fügt einem nicht aufgerüsteten Altar insgesamt 200 LP hinzu. "LP" steht für "Life Points" oder Lebenspunkte, das ist ein Maß dafür, wie viel Lebenskraft für eine Operation verwendet wird - nein, es ist nicht wie YuGi-Oh. Der Blutaltar hat eine Kapazität von 10.000 LP. Wenn du dann mit der rechten Maustaste auf den Altar klickst, kannst du einen Gegenstand in das Becken legen, und wenn es sich um einen gültigen Gegenstand handelt, wird der Altar den Herstellungsprozess starten.\n\tDer Altar fertigt einen Gegenstand, indem er die LP im Becken verbraucht, wenn der Altar eine ausreichend hohe Ausbaustufe besitzt. Wenn genügend LP vorhanden sind, wird der Altar mit jedem Tick ein wenig LP aus dem Becken ablassen und den Fortschritt der Herstellung erhöhen, indem er rote Partikel aussendet. Wenn sich keine LP mehr im Becken befindet, gibt der Altar graue Partikel ab und der Herstellungsprozess verliert an Fortschritt, was überhaupt nicht gut ist! Schließlich, wenn der Altar eine Blutkugel füllt, wird der Altar violette Partikel emittieren, um anzuzeigen, dass er LP aus dem Becken absaugt.\n\tTatsächlich gibt es insgesamt drei Tanks im Blutaltar: den Haupttank, der eine Standardkapazität von 10 kLP hat, wie zuvor angegeben, sowie einen Eingangstank und einen Ausgangstank, die beide 10% der Gesamtkapazität des Haupttanks haben. Standardmäßig alle 20 Ticks werden die LP im Eingangstank mit 20LP/s in den Haupttank und die LP im Haupttank mit 20LP/s in den Ausgangstank übertragen. Wie der Name schon sagt, nimmt der Eingangstank die LP auf, die in den Altar gepumpt wird und als Puffer dient, um die Übertragungsgeschwindigkeit von außen zu begrenzen, und der Ausgangstank kann mit Hilfe von Rohren aus dem Altar gezogen werden. -guide.bloodmagic.entry.architect.ash.info=Obwohl nicht unbedingt Teil des Gesamtthemas dieses Buches, ist Arcane Ash notwendig, um durch die Mod zu kommen und einige der leistungsfähigeren Geräte zu bekommen. Diese Asche wird mit der Höllenfeuer-Schmiede und Dämonischen Willen hergestellt, wenn du also neu in diesem Konzept bist, konsultiere bitte das "Dämonenkind". Im Wesentlichen ist dies eine Möglichkeit, Gegenstände aus zwei getrennten Gegenständen herzustellen: einem Reagenz, das als Katalysator dient, und einem sekundären Gegenstand.\n\tDie Asche hat insgesamt zwanzig Verwendungen, bevor du eine weitere herstellen musst. Wenn du mit der rechten Maustaste auf den Boden (oder eine Wand, obwohl sie nur eine Richtung darstellt) klickst, zeichnest du einen einfachen Kreis aus Asche ein. Wenn du die Asche erneut mit einem Gegenstand anklickst, wird dieser "in die Asche gelegt" - vorausgesetzt, dieser Gegenstand ist ein gültiger Katalysator, ändert der Kreis seine Form, um anzuzeigen, dass er für den nächsten Gegenstand bereit ist. Wenn sie sich nicht ändert, dann hast du etwas falsch gemacht.\n\t Sobald sie sich verändert hat, kannst du das zweite Element hinein legen. Wenn dieses Element mit dem ersten Element übereinstimmt, beginnt sich der Kreis zu drehen und führt je nach dem Rezept, an dem er arbeitet, verschiedene Aktionen aus. Nach einer Weile, wenn es richtig ausgeführt wird, wird ein Gegenstand herauskommen. Alle Rezepte für das Arkane Asche-Handwerk (ich nenne es Herstellung mit der Alchemischen Anordung) können in JEI gefunden werden, indem man die Verwendungen für Arkane Asche überprüft - der erste Gegenstand ist der Katalysator, und der zweite Gegenstand ist der sekundäre Gegenstand. -guide.bloodmagic.entry.architect.divination.info=Das Siegel der Weissagung ist eines der nützlichsten Werkzeuge in der Mod, das dir viele Werte vermitteln kann, die dein Leben einfacher machen. Dieses Siegel wird aus einem Stück Redstone und eine leeren Tafel (hergestellt im Blutaltar) mit einer Alchemischen Anordnung hergestellt.\n\tWenn du mit dem Siegel in der Hand auf einen Blutaltar rechts klickst, kannst du die aktuelle Stufe, die Menge der LP im Hauptbecken sowie die maximale Kapazität des Blutaltars sehen. Wenn du erneut mit dem Siegel auf den Altar klickst, wird der vorherige Text des Siegels überschrieben, was bedeutet, dass es keinen Spam in deinem Chat geben wird. Wenn du mit dem Siegel mit der rechten Maustaste in die Luft klickst, wird dir das Siegel die aktuelle Menge an LP in deinem LP-Netzwerk anzeigen. Obwohl dies zunächst eher alltäglich ist, wird diese Funktion allein es sehr wahrscheinlich machen, dass du dieses Siegel immer bei dir behalten wollen wirst. -guide.bloodmagic.entry.architect.soulnetwork.info=Das Seelennetzwerk (allgemein als LP-Netzwerk abgekürzt) ist der Begriff für die Verbindungen zwischen dem Spieler und allen Gegenständen und Strukturen, mit denen er seine Seele verbunden hat. Wenn ein Blutmagier mächtiger wird, nimmt die Kraft seiner Seele zu und verdickt diese Bindungen. Diese Verbindungen sind ätherische Stränge der Seele, und nur die mächtigsten der Blutmagier sind in der Lage, diese in ihrer physischen Form zu sehen. Bis jetzt hat noch kein Magier diese Fähigkeit erreicht.... \n\tIm Spiel ist das Seelen-Netzwerk direkt an den Spieler gebunden. Die Daten werden innerhalb der Welt gespeichert, und jeder Spieler hat nur ein einziges Netzwerk - die in das Netzwerk eingesetzten LP werden nicht in einem Element gespeichert, sondern in einem einzigen Pool platziert und gezogen.\n\tUm Dinge an dein Netzwerk zu binden, ist der gängigste Weg, einfach mit der rechten Maustaste auf ein Element zu klicken, das ein Netzwerk verwendet, um sich selbst zu aktivieren. Sobald der Gegenstand gebunden ist, zeigt er an, dass er sich im Besitz von Ihnen befindet und nie mehr losgebunden werden kann (mit der aktuellen Technologie). Wenn dieser Gegenstand verwendet wird und ihm LP-Kosten zugeschrieben werden, werden die LP aus dem Netz des Eigentümers genommen. Wenn nicht genügend LP in diesem Netzwerk vorhanden ist, wird die fehlende LP direkt der Gesundheit des Benutzers (nicht dem des Besitzers) entnommen. Man sollte die Verwendung solcher Gegenstände mit Vorsicht genießen, wenn nur eine geringe Menge an LP vorhanden ist - es könnte tödlich enden. -guide.bloodmagic.entry.architect.weakorb.info.1=Was nützt ein Magier ohne Machtquelle? Eine Blutkugel ist ein Gerät, das physische LP verbraucht und in das LP-Netzwerk des Besitzers überträgt. Obwohl es sich selbst nicht um eine Batterie handelt, dient es als Leitung, um die Energiereserven des Blutmagiers aufzufüllen. -guide.bloodmagic.entry.architect.weakorb.info.2=Die Schwache Blutkugel ist die erste solche Kugel, die du machen kannst. Indem du einen Diamanten in einen Blutaltar mit 2 kLP einsetzt, kannst du diese Kugel erschaffen. Wenn die Kugel gebunden und in einen Altar gelegt wird, in dem sich eine LP befindet, wird sie aus dem Becken gesaugt und die LP direkt in das Netzwerk übertragen. Jede Kugel hat eine maximale Kapazität, die nur durch fortgeschrittene Runen auf dem Altar erweitert werden kann. Für die Schwache Blutkugel beträgt diese maximale Kapazität 5 kLP.\n\tBlutkugeln können auch direkt vom Spieler gefüllt werden, indem man einfach mit der rechten Maustaste darauf klickt - das überträgt ein Herz der Gesundheit in die Kugel und gibt dir 200LP. Das kann nicht über die maximale Kapazität der Kugel hinausgehen. Eine Blutkugel kann nur durch ihre Altarebene oder höher gefüllt werden; das bedeutet, dass, wenn du eine T3-Kugel hast, sie in einen Altar gefüllt werden muss, der größer oder gleich T3 ist. Ein einfacher T1-Altar würde in dieser Situation nicht ausreichen. -guide.bloodmagic.entry.architect.incense.info.1=Man wird schnell feststellen, dass die Geschwindigkeit der LP-Generierung zunehmend belastend werden kann. Sicher, indem du dem Blutaltar spezielle Runen hinzufügst, kannst du den Ertrag der Selbstopferung erhöhen, aber das kann trotzdem ein langsamer Prozess sein. Wenn es nur einen Weg gäbe, um die Menge an LP, die du von dir selbst bekommen kannst, weiter zu erhöhen?\n\tHier kommt der Räucheraltar ins Spiel. Der Räucheraltar fungiert als zentraler Punkt für eine ruhige Gegend und beruhigt die Seele selbst mit den sanften Wellen, die aus dem Becken kommen. Du hast zwar keine Ahnung, woher dieser Geruch kommt, aber wass kann schon schief gehen?\n\tDas Ziel dieses Blocks ist es, einen Bereich der Ruhe zu schaffen, um zu erhöhen, wie viel LP du von einem Herz deiner Gesundheit bekommst.Wenn du in der Nähe des Blocks (etwa fünf Blöcke) bist, werden Feuerpartikel ausgesendet, um zu zeigen, dass er funktioniert - wenn du von dieser Ruhe betroffen bist, wird sich dein Opferdolch verwandeln, um anzuzeigen, dass du eine erhöhte Ausbeute am Blutaltar hast. Dieser Vorgang dauert etwa 5 Sekunden, und du erkennst, dass du fertig bist, daran dass die Feuerpartikel nicht mehr auftreten. Bei deiner nächsten Opferung am Blutaltar wirst du 90%% deiner maximalen Gesundheit auf einmal opfern und LP in den Altar pumpen, proportional zur Menge der geopferten Gesundheit, multipliziert mit einem Bonus, der davon abhängt, wie ruhig die Umgebung ist: dieser Bonus ist standardmäßig +20%%.\n\tAls Nebenbemerkung kann das Siegel der Weissagung auf dem Räucheraltar verwendet werden, um die Menge der Ruhe sowie die Menge eines Bonus zu bestimmen, die der aktuelle Altar gibt. -guide.bloodmagic.entry.architect.incense.info.2=Natürlich sind nur 20%% schön und gut, aber es kann durch die Erweiterung des Einflussbereichs des Räucheraltars noch erhöht werden. Wenn man eine Reihe von drei Holzpfadblöcken zwei Blöcke vom Räucheraltar entfernt in jede der Himmelsrichtungen platziert (wobei darauf zu achten ist, dass sich alle Pfadblöcke auf der gleichen y-Ebene befinden, bis zu fünf Blöcke nach oben oder unten vom Räucheraltar), kann man einen Bereich definieren. Jeder Block, der sich in diesem Bereich befindet (ein Block, der horizontal den gleichen Abstand zum Räucheraltar hat, wie die Pfadblöcke horizontal und auf der gleichen Ebene oder bis zu zwei Blöcke höher von den Pfadblöcken), kann zur Ruhe des Räucheraltars beitragen. Eine weitere Zeile mit Pfadblöcken kann nach der gleichen Regel hinter dieser ersten Zeile eingefügt werden: Die neue Zeile muss sich alle auf der gleichen y-Ebene befinden, und die gesamte Zeile muss innerhalb von 5 Blöcken vertikal von der vorherigen Zeile mit Pfadblöcken liegen. Das bedeutet, dass Grundrisse wie Pyramiden, umgekehrte Pyramiden oder fortgeschrittenere Treppenstrukturen möglich sind.\n\tAlle Pfadblöcke haben einen maximalen Abstand zum Räucheraltar, um wirksam zu sein. Die Holzpfadblöcke können bis zu drei Reihen vom Räucheraltar aus arbeiten. Steinpfade arbeiten bis zu fünf, abgenutzte Steinpfade sieben und Obsidianpfade neun Blöcke vom Ursprung entfernt. An einem bestimmten Punkt musst du also bessere Pfadblöcke verwenden, um deinen Ruhebereich zu erweitern, aber du kannst höhere Pfadblöcke anstelle von niedrigeren Pfadblöcken verwenden, nur nicht umgekehrt. Nur bestimmte Blöcke können die Ruhe eines Gebietes beeinflussen, und es gibt verschiedene Arten von Ruheblöcken. Wenn du eine Nutzpflanze wie z.B. Kartoffeln in das Gebiet legst, erzeugst du ein wenig Ruhe (mit der Kategorie Nutzpflanzen). Wenn du jedoch wieder eine andere Ernte wie Kartoffeln oder sogar Karotten hinzufügst, wirst du weniger Ruhe bekommen. Wenn du etwas aus einer anderen Ruhekategorie hinzufügst, bekommst du den vollen Effekt. Aber das Hinzufügen von mehr Material mit der gleichen Kategorie hat eine abnehmende Wirkung. Deshalb ist es am besten, so viele verschiedene Arten von Ruhe wie möglich zu verwenden, um aus einem bestimmten Gebiet die größtmögliche Ruhe herauszuholen: Pflanzen, Baumstämme, Blätter, Lava, Netherrack, Ackerland, Wasser, Lebensessenz und andere sortierte Dinge. -guide.bloodmagic.entry.architect.bloodrune.info.1=Während du dich durch die Mod arbeitest, wirst du langsam lernen, dass der schlichte Blutaltar vor dir nicht stark genug ist, um deine wahren Ambitionen zu erfüllen. Indem man spezielle Blöcke, die als Blutrunen bekannt sind, um den Altar legt, kann man die Stärke des Altars beträchtlich erhöhen, indem man höhere Stufen von Rezepten freischaltet und gleichzeitig die Fähigkeiten des Altars selbst erhöht.\n\tUm den Altar auf seine zweite Stufe aufzurüsten, muss man 8 Blutrunen um den Altar und eine Stufe tiefer legen. Wenn du über die genaue Konfiguration verwirrt bist, kann dir der Gegenstand "Inspectoris Scandalum" die genaue Platzierung der Blöcke, die für die nächste Ebene benötigt werden, zeigen. Jede der Runen in einem Blutaltar kann gegen jede Upgrade-Rune getauscht werden (die einzige Ausnahme ist, dass man die Eck-Runen auf Stufe 2 nicht als Upgrade-Runen verwenden kann - ab T3 kann man diese verwenden). Es gibt Runen, die die Geschwindigkeit des Herstellens, die Kapazität des Altars sowie die Effizienz des Opferns am Altar beeinflussen. Diese Runen sind in ihren jeweiligen Einträgen zu finden. -guide.bloodmagic.entry.architect.inspectoris.info.1=Wörtlich "Blockleser" in Latein, soll dieser Gegenstand mehr Informationen über die komplexeren Blöcke in der Mod geben, wenn die Blöcke in der Welt sind. Derzeit ist die einzige Implementierung für diesen Gegenstand der Blutaltar, und durch einfaches Klicken mit der rechten Maustaste auf einen Blutaltar in der Welt wird er dir zeigen, welche Blöcke in der Welt für die nächste Altarebene erforderlich sind. Wenn du dann mit der rechten Maustaste auf den Altar klickst, zeigt der Altar Geisterblöcke in der Welt an, die genau zeigen, wo die Blutrunen und die Säulen benötigt werden, um diese Ebene zu erreichen. Wenn man die angezeigte Schicht auf 1 setzt, wird das Hologramm entfernt. -guide.bloodmagic.entry.architect.runeSpeed.info.1=Die Geschwindigkeitsrune übt einen Druck auf das Becken des Altars aus und zwingt den Umwandlungsprozess, so dass das Herstellen viel schneller geht. Jede Geschwindigkeitsrune erhöht den Verbrauch des Altars um +20% pro Rune, wodurch die Geschwindigkeit des Altars effektiv erhöht wird. Dies beeinflusst auch die Geschwindigkeit, mit der die Blutkugeln vom Altar gefüllt werden. -guide.bloodmagic.entry.architect.water.info.1=Das Wassersiegel ist, wie der Name schon sagt, in der Lage, Feuchtigkeit aus der Luft zu sammeln, um an der Kontaktstelle am Boden eine Wasserquelle zu schaffen. Außerdem kann man durch Anklicken einer Maschine, die eine Flüssigkeit aufnimmt, bis zu 1000mB Wasser in die Maschine einfüllen, und das zu den gleichen Kosten, als ob man sie auf den Boden stellen würde. In jeder Hinsicht wirkt es wie ein unendlicher Eimer Wasser - es funktioniert jedoch nicht, wenn man es in eine Maschine legt. 50LP pro Anwendung. -guide.bloodmagic.entry.architect.lava.info.1=Das Yang zum Yin des Wassersiegels, dieses Siegel erwärmt den Fels in der Umgebung und sammelt ihn an einer Stelle und bildet eine Quelle der Lava, wo das Siegel Kontakt aufnimmt. Ein ähnlicher Prozess findet statt, wenn man mit einer Flüssigkeit aufnehmenden Maschine interagiert und bis zu 1000mB Lava im Inneren der Maschine für die gleichen Kosten erzeugt. Aus irgendeinem Grund verbrennt die Hand nicht, wenn man es benutzt, aber es bedeutet nicht, dass es eine kluge Wahl ist, darin zu baden! 1000LP pro Anwendung. -guide.bloodmagic.entry.architect.lavaCrystal.info.1=Der Lavakristall ist ein Stein, in dessen Mitte sich ein Stück Lava befindet, das seine Wärme nicht verliert. Wenn es als Brennstoffquelle in einem Ofen platziert wird, "brennt" es für eine Menge, die ausreicht, um einen einzelnen Gegenstand in einem Standard-Ofen zum Preis von 50 LP aus dem Netz des Eigentümers zu kochen. Wenn das Netzwerk nicht genügend Energie hat (oder wenn es keinen Besitzer gibt), wird der Kristall einfach nicht brennen und dem Besitzer aufgrund der Belastung Übelkeit zufügen.\n\tDieser Kristall wird für jede Festbrennstoffverbrennungsmaschine funktionieren, die jeden Brennstoff akzeptiert. -guide.bloodmagic.entry.architect.apprenticeorb.info.1=Während du die verschiedenen Geräte benutzt, wirst du schnell feststellen, dass deine maximale Kapazität von 5kLP in deinem LP-Netzwerk schnell erschöpft sein wird. Hier wirst du anfangen, nach einem stärkeren Orb für dein Netzwerk zu suchen.\n\tDie Blutkugel des Lehrlings benötigt einen Stufe-2-Altar und hat eine maximale Kapazität von 25kLP. Es erlaubt außerdem, mächtigere Gegenstände und Runen zu erstellen. -guide.bloodmagic.entry.architect.dagger.info.1=Nach einer Weile der Stärkung durch Selbstopferung, kannst du versuchen, das Blut der Mobs zu opfern. Das Opfermesser, wenn es auf einen Nicht-Boss und Nicht-Spieler neben einem Blutaltar angewendet wird, tötet das Wesen mit einem Schlag und pumpt das ganze Blut in den Altar, wobei es je nach Qualität des Mobs in eine Lebenselixier umgewandelt wird. Normalerweise neigen feindliche Mobs dazu, viel mehr LP zu geben als friedliche Mobs. -guide.bloodmagic.entry.architect.runeSacrifice.info.1=Die Rune der Opferung, wie der Name schon sagt, erhöht den Ertrag aller Aktivitäten, die die Gesundheit der Mobs als Gegenleistung für LP opfern. Jede Rune bietet eine +10%%ige Ertragssteigerung, additiv. -guide.bloodmagic.entry.architect.runeSelfSacrifice.info.1=Ähnlich wie bei der Rune der Opferung erhöht die Rune der Selbstopferung den Ertrag der vom Spieler bereitgestellten LP. Jede Rune bietet eine +10%%ige Ertragssteigerung, additiv. -guide.bloodmagic.entry.architect.holding.info.1=Wie du feststellen wirst, gibt es eine Menge nützlicher Zeichen, die verfügbar sind - einige sind umschaltbar, andere aktiv. Dadurch wird das Inventar schnell verstopft. Dieses Siegel kann bis zu fünf weitere Siegel (nein, es kann keine anderen Siegel der Aufbewahrung halten) in seinem internen Inventar halten. Durch Drücken der "Aufbewahrungstaste", Standard 'H', kann die Benutzeroberfläche des Siegels geöffnet werden, um die gehaltenen Siegel neu anzuordnen. Wenn man das Scrollrad verschiebt und benutzt, während es ausgerüstet ist, fährt man durch die enthaltenen Siegel. Sobald du auf dem Siegel landest, das du benutzen willst, kannst du das Siegel so benutzen, als ob es das ausgewählte wäre! Natürlich kannst du mehrere Siegel der Aufbewahrung haben, jedes mit seinem eigenen Inventar. Um festzustellen, welches auf einen Blick welches ist, kann das Siegel mit Hilfe des Alchemietisches eingefärbt werden. Um dies zu tun, wird das Siegel entweder mit einem Farbstoff oder mit einem Namensschild in der gewünschten Farbe im Format 0xZZZZZZ für den Namen im Alchemietisch platziert. -guide.bloodmagic.entry.architect.air.info.1=Das Luftsiegel nutzt eine rudimentäre Form der Spaltung, um durch die Spuren von Wasserdampf in der Luft einen gleichmäßigen Luftstrom hinter dem Benutzer zu erzeugen und ihn nach vorne zu treiben. Im Wesentlichen kann man mit diesem Siegel eine beträchtliche Strecke vorwärts starten. Es ist zu beachten, dass das Siegel die Fallhöhe des Benutzers nur dann aufhebt, wenn es benutzt wird, d.h. dass man die Landung in Bodennähe halten will! -guide.bloodmagic.entry.architect.void.info.1=Wie der Name schon sagt, erzeugt das Siegel der Leere an der Kontaktstelle ein Vakuum, das die Flüssigkeitsquelle, an der es verwendet wird, aufsaugt und die Quelle vollständig zerstört. Dies ist wahrscheinlich am besten in Verbindung mit dem Wassersiegel oder dem Lavasiegel zu verwenden. -guide.bloodmagic.entry.architect.greenGrove.info.1=Durch die Verwendung von Blut als einfacher Wachstumskatalysator wird das Siegel des Grünen Hains die Wachstumsgeschwindigkeit von Pflanzen in der näheren Umgebung erhöhen, während es aktiviert ist. Um das Siegel zu aktivieren, klickt man mit der rechten Maustaste darauf, um zwischen aktiviert und deaktiviert zu wechseln (leicht erkennbar am Tooltip oder an den leuchtenden Symbolen auf dem Siegel). Man beachte, dass das Siegel alle paar Sekunden ein wenig LP vom Benutzer absaugen wird, um das beschleunigte Wachstum zu fördern. Es kann auch für den Anbau von hohem Gras oder anderen Nutzpflanzen verwendet werden, genauso wie Knochenmehl. -guide.bloodmagic.entry.architect.fastMiner.info.1=Wie jeder gute Blutmagier wissen sollte, hat Blut einen hohen Anteil an Eisen in sich. Wenn man geschickt genug ist, kann man Blut manipulieren, während es noch im Körper ist - es sollte jedoch beachtet werden, dass nur die fortgeschrittensten Blutmagier das Blut derjenigen verdrehen können, die nicht willens sind.\n\tIm Prinzip verwendet man es, um die Funktionen des eigenen Körpers zu beschleunigen. Durch die Magnetisierung des Eisens im Blut des Benutzers erhöht das Siegel der Eile die Geschwindigkeit des Abbaus drastisch, indem es Eile II anwendet, während es aktiviert ist. Dieser Magnetismus ist zu schwach, um Dinge außerhalb des eigenen Körpers zu beeinflussen, aber er reicht aus, um Obsidian mit beachtlicher Geschwindigkeit abzubauen. -guide.bloodmagic.entry.architect.seer.info.1=Wenn man am Blutaltar herumbastelt, kann man sich manchmal in den verborgenen Feinheiten seines Wirkens verlieren, die das Siegel der Weissagung nicht zu erahnen scheint. Hier kommt das Siegel des Sehers ins Spiel. Im Wesentlichen ein Upgrade zum Wahrsager-Siegel, bietet dieses Siegel zusätzliche Informationen über verschiedene Eigenschaften des Altars. Diese reichen von der Geschwindigkeit des Altars über die aktuelle LP bis hin zum aktuellen Fortschritt des gefertigten Gegenstandes. Es gibt auch Informationen über das LP-Netzwerk des Spielers. -guide.bloodmagic.entry.architect.magicianOrb.info.1=Eine neue Stufe, eine neues Blutkugel. Dieses Mal musst du, um im Mod weiter zu kommen, die Blutkugel des Magiers selbst herstellen. Im Standardrezept kann man sehen, dass es 25kLP braucht, um es zu fertigen, aber die maximale Kapazität des Blutaltars ist 10kLP. Das bedeutet, dass du für eine erfolgreiche Herstellung LP in den Altar einfügen musst, während er gerade das Orb herstellt. Bereite dich darauf vor, denn es kann eine schwierige Aufgabe sein, wenn du nicht alles hast, was du brauchst! -guide.bloodmagic.entry.architect.capacity.info.1=Man ist sich nicht ganz sicher, wie es funktioniert, aber die Rune der Kapazität erhöht die Kapazität des Blutaltars zusätzlich um 2 kLP. Vielleicht gibt es eine Art Resonanzeffekt, der das Volumen der LP verringert, so dass man mehr in das statische Becken packen kann? Es gibt dir eine Idee, wie du es weiter verbessern kannst, aber....\n\tEs sollte wiederholt werden, dass die Größe der Eingangs- und Ausgangspuffer 10% der maximalen Kapazität des Haupttanks beträgt, also werden diese Runen auch die Pufferkapazitäten erhöhen. -guide.bloodmagic.entry.architect.displacement.info.1=Standardmäßig ist die Übertragung von LP zwischen Puffer- und Haupttank auf 20LP/s begrenzt. Für Systeme, die LP entfernen und dem Altar wieder hinzufügen wollen, ist diese Geschwindigkeit ein träges Kriechen. Da kommt diese Rune ins Spiel. Die Rune der Verlagerung erhöht die Menge an LP, die pro Operation übertragen wird. Jede Rune multipliziert die Transferrate mit 1,2x und stapelt multiplikativ. Eine Rune wäre also 24LP pro Operation, zwei Runen wären 28,8LP pro Operation und drei Runen 34,56LP. Wenn du 20 Runen auf einem Altar hast, überträgt dieser bis zu 767 LP pro Operation - das würde einen vollen Altar in nur 13 Sekunden leeren. -guide.bloodmagic.entry.architect.affinity.info.1=Auf den ersten Blick gewährt das Siegel der Elementaffinität einfach Immunität gegen Feuer, Ertrinken und Schäden aus der Höhe, wenn es aktiviert ist. Die Bedienung ist jedoch viel nuancierter. Dieses Siegel erzeugt eine dünne Luftbarriere um den Benutzer herum, indem es den Schweiß (und bei Bedarf Blut) des Benutzers verwendet und den Körper von den harten Elementen fernhält. Diese Luftbarriere wirkt als Puffer zwischen der Haut und dem Feuer oder der Lava und zirkuliert bei Bedarf, um eine Überhitzung zu verhindern. Es füllt auch die Lunge unter Wasser, um den Druck des Körpers und des umgebenden Wassers auszugleichen. Bei einem Sturz aus großer Höhe verschiebt sich die Luft schließlich unter die Füße und dämpft den Sturz. -guide.bloodmagic.entry.architect.lamp.info.1=Es gibt eine ganze Reihe von "Unreinheiten" im Körper und im Blut eines Menschen. Indem du einige Edelgase erntest und sie mit einer Wärmequelle umhüllst, kannst du eine Lichtkugel erzeugen, die über eine große Entfernung geschleudert werden kann und an der Oberfläche haften bleibt, auf die sie auftrifft.\n\tDas Siegel der Blutlampe hat zwei Verwendungszwecke: du kannst entweder direkt auf einen Block klicken und eine Lichtquelle platzieren oder ein Projektil abfeuern, das eine Lichtquelle an der Kontaktstelle erzeugen wird. Diese Lichtquellen können wie Fackeln in einem Schlag zerbrochen werden. -guide.bloodmagic.entry.architect.magnetism.info.1=Dieses Siegel magnetisiert das Eisen im Blutkreislauf des Benutzers, um kleine Gegenstände in Richtung des Siegels zu ziehen, was eine schnelle und schmerzfreie Aufnahme ermöglicht. Im Wesentlichen wirkt dies wie ein Gegenstandsmagnet, aber anstatt Gegenstände in Richtung des Spielers zu "saugen", veranlasst es den Spieler, den Gegenstand aus der Ferne aufzunehmen, so dass Gegenstände nicht überall herumfliegen müssen. Zum Glück ist der Magnetismus so abgestimmt, dass er keine lebenden Objekte anzieht, so dass man keine Creeper findet, die einen plötzlich mit Mach 3 umarmen wollen. - -guide.bloodmagic.entry.architect.peritia.info.1=Bestimmte Aktionen in der Welt beeindrucken den Menschen: Das Töten von Monstern, Bergbauelementen und das Schmelzen von Barren oder Nahrungsmitteln kann zu Erfahrungen führen, die sich über einen längeren Zeitraum angesammelt haben. Durch einige arkane Mechanismen, einige Strukturen und Geräte können dir diese Erfahrungen tatsächlich entzogen werden, um ihre eigenen Prozesse zu fördern. Es kann daher nützlich sein, diese Erfahrungen in irgendeinem Medium zu speichern. Obwohl einige Behälter Erfahrung als physische Substanz speichern, erlaubt der Peritia-Foliant der Person, ihre Erfahrungen in das Buch zu schreiben - indem er in den Band schreibt, werden die Seiten mit deinen Gedanken und vergangenen Handlungen durchdrungen und sie für den späteren Gebrauch gespeichert. Wenn du dann diese Erfahrungen zurückgewinnen möchtest, kannst du deine Hand auf die Seite halten und sie zurücksaugen; dies wird die Schrift von der Seite entfernen und diese Aktionen zurück in dein Gedächtnis übertragen.\n\tNun für den tatsächlichen Gebrauch; indem du auf den Wälzer in deiner Hand klickst, kannst du einen Erfahrungslevel im Buch speichern (oder auf den Anfang des Levels, wenn du Teilerfahrung hast). Mit einem Rechtsklick auf den Wälzer kannst du das nächste Level erreichen, wenn genügend Erfahrung im Buch gespeichert ist. Die Gesamterfahrung sowie die entsprechende gespeicherte Stufe wird im Tooltip des Folianten angezeigt. -guide.bloodmagic.entry.architect.livingArmour.info.1=Jeder Person in Minecraft, besonders in den neueren Versionen der Welt, wird bewusst, dass eine gute Rüstung einen Unterschied zwischen Leben und Tod bedeutet. Normalerweise wählt man bei der Auswahl einer Rüstung einen statischen Satz von Vorteilen - bietet diese Rüstung mehr Schutz? Bekomme ich die Fähigkeit, zu fliegen, wenn ich das trage? Kann ich wirklich hoch springen oder mich schnell bewegen? Das sind alles gültige Optionen für eine Rüstung, aber man kann nie ein Set bekommen, das genau auf seine Bedürfnisse zugeschnitten ist. Zumindest das dachten die Leute. Ein Set Lebendiger Rüstung ist eine konstruierte Lebensform, die mit einer einfachen Eisenrüstung integriert ist. Wenn es getragen wird, geht es eine symbiotische Beziehung mit dem Benutzer ein - wenn man sich bewegt, bewegt es sich. Wenn man angreift, greift es an. Wenn man isst, spürt es das und kompensiert es. Und genau wie ein normaler menschlicher Körper beginnt es zu wachsen und zu stärken, je nachdem, was man tut, indem man es durch seine Handlungen trainiert.\n\tLass mich ein Beispiel nennen: Wenn du eine neue Rüstung ausrüstest und viel herumläufst, wirst du feststellen, dass du ein Upgrade auf der Brustplatte namens "Schnelle Füße" erhältst - dieses Upgrade bietet eine stufenweise Erhöhung deiner Geschwindigkeit, während die folgenden Stufen einen größeren Schub bringen. Du wirst auch feststellen, dass die "Upgrade-Punkte" jetzt "3/100" lauten - jedes Upgrade erfordert eine Anzahl von Upgrade-Punkten, und die Brustplatte hat eine maximale Anzahl von Punkten, die sie halten kann. Wenn ein Upgrade, das du erhalten kannst, nicht mit der Anzahl der kostenlosen Upgrade-Punkte erhältlich ist, die du hast, kann es nicht erworben werden. Behalte im Hinterkopf, dass die Lebende Rüstung nur trainiert wird, wenn du eine vollständige Rüstung anhast, und die Effekte der Rüstung nur wirksam werden, wenn eine vollständige Rüstung verwendet wird.\n\tDie maximale Anzahl von Aufrüstungspunkten kann auf verschiedene Weisen verändert werden. Eine von ihnen ist es, alchemistische Zubereitungen zu kreieren, die die Bindungen zwischen dem Benutzer und der Lebenden Rüstung stärken und die Anzahl der Punkte, die man auf einer bestimmten Ausrüstung haben kann, enorm erhöhen. Ein Beispiel ist der "Trank der Engelsmacht", der die maximale Punktzahl auf 200 erhöht. Informationen über diese Gebräue und wie man sie herstellt, können in "Der Alchemist" gefunden werden. -guide.bloodmagic.entry.architect.upgradeTome.info.1=Manchmal ist man mit den Aufrüstungen, die man für die Lebende Rüstung erhalten hat, nicht zufrieden. Mit dem Ritual "Klang der reinigenden Seele" (weitere Informationen unter "Der Ritualmeister") können alle Aufrüstungen von der Rüstung entfernt und in Form von "Thesen der Lebenden Rüstung" erhalten werden. Klicke mit der rechten Maustaste darauf, während du einen kompletten Satz Lebende Rüstung trägst (und Platz für die Aufrüstung hast), um die Eigenschaft zu deiner Rüstung hinzuzufügen. Diese Thesen können auch in einem Amboss kombiniert werden - wenn man zwei der exakt gleichen Thesen (gleiches Upgrade, gleiche Stufe) in einem Amboss kombiniert, kann man eine einzelne These erhalten, die eine Stufe höher ist. Wenn du also Schnelle Füße II mit einem anderen Schnelle Füße II kombinierst, erhälst du Schnelle Füße III. Diese These kann dann in gleicher Weise auf die Rüstung aufgebracht werden. -guide.bloodmagic.entry.architect.teleposer.info.1=Der Teleposer ist ein Gerät, das nicht nur Objekte, sondern auch Entitäten teleportiert. Um einen Teleposer einzurichten, benötigst du mindestens zwei Teleposer und einen Telepositionsfokus. Einer der Teleposer fungiert als das Ziel und der andere als der Anfang. Um das einzurichten, musst du zuerst den Fokus an dich binden, indem du mit der rechten Maustaste darauf klickst. Dann klickst du mit der rechten Maustaste auf den Ziel-Teleposer, um seine Position (und Dimension) zu speichern, und fügst dann den Fokus in den beginnenden Teleposer ein, indem du mit der rechten Maustaste auf den Teleposer ohne Fokus in deiner Hand klickst und den Fokus in das GUI platzierst.\n\tMit einem starken Redstonesignal kann ein Teleposer aktiviert werden, wodurch die Teleposer alle Entitäten und Blöcke tauschen, vorausgesetzt, dass ein Teleposer an der Zielposition existiert.\n\tDu kannst entweder einen Teleposer haben, der einen Fokus hat, beide Teleposer haben Fokusse, die miteinander verbunden sind, oder du kannst einen Teleposer haben, der mit einem anderen Teleposer verbunden ist, der nicht mit ersteren verbunden ist, also abhängig davon, wie du sie einrichtest, kannst du sehr komplizierte Systeme haben.\n\tBeachte, dass der Teleposer derzeit nur die Blöcke und Entitäten vertauscht, die sich direkt über dem Block befinden, und die Größe hängt vom Fokus ab - der T1-Fokus vertauscht nur den Block über dem Teleposer, der T2-Fokus vertauscht einen 3x3x3-Bereich über dem Teleposer usw. -guide.bloodmagic.entry.architect.boundTool.info.1=Ähnlich wie bei der Gebundenen Klinge werden diese gebundenen Werkzeuge (Spitzhacke, Axt und Schaufel) irgendwann modifiziert, um besser in die Mod zu passen. Wie bei der Klinge haben die Werkzeuge einen aktiven und einen inaktiven Modus, zwischen denen man durch Klicken mit der rechten Maustaste umschalten kann.\n\tEtwas, das diese Werkzeuge haben, ist etwas, das man "Beast Mode" nennt. Wenn du die rechte Maustaste gedrückt hältst, kannst du das Werkzeug aufladen und einen mächtigen Spalt freisetzen, der sofort die Blöcke zerbricht, die von dem gegebenen Werkzeug gebrochen werden können - wenn es vollständig aufgeladen ist, ist das ein 11x11x11 Würfel über dir zu einem Preis von 10kLP. Sei vorsichtig mit diesem mächtigen Werkzeug, da es dein letztes sein kann! -guide.bloodmagic.entry.architect.weakShard.info.1=Alles, was Leben hat, kann die ätherischen Verbindungen haben, die als das Seelen-Netzwerk bekannt sind. Wie aus euren Erfahrungen hervorgeht, können auch nicht-lebende Dinge ein Seelen-Netzwerk haben, wie Siegel und Rituale; aber diese Verbindungen sind die stärksten in den Geschöpfen und natürlich den Menschen. Wenn du ein Monster mit einer Gebundenen Klinge angreifst, wird ihr Seelen-Netzwerk vorübergehend hart und ein Stück davon wird nach dem Tod bleiben. Dieses Stück hat die Form eines Schwachen Blutsplitters, so benannt nach der Tatsache, dass sein rötlicher Farbton der Farbe der Schwachen Blutkugel entspricht. An diesem Punkt ist es nicht klar, ob es stärkere Formen von Blutsplittern gibt, aber man kann sagen, dass dies sehr hilfreich wäre, um die Macht des eigenen Seelen-Netzwerks zu erhöhen. -guide.bloodmagic.entry.architect.masterOrb.info.1=Eine der Anwendungen für diese erhöhte Affinität zum Seelennetzwerk ist die Verwendung des Schwachen Blutsplitters in einer neuen Blutkugel: der Blutkugel des Meisters. Diese Kugel hat eine maximale Kapazität von 1 Million LP und ermöglicht so dem Besitzer den Zugriff auf mächtigere Gegenstände und Rituale. Vielleicht sind Meteore doch in Reichweite... -guide.bloodmagic.entry.architect.runeOrb.info.1=Diese Rune kann zunächst als etwas nutzlos angesehen werden. Durch die Verdickung der Verbindungen zwischen der Blutkugel im Altar und dem Seelennetzwerk erhöht die Rune der Kugel die maximale Kapazität einer Blutkugel, die von einem Blutaltar gefüllt wird, um +2%% pro Rune. Für so etwas wie die Schwache Blutkugel ist das nur eine Kapazität von +100LP, für die Blutkugel des Meisters ist das jedoch eine bemerkenswerte Kapazität von +20kLP pro Rune. Wenn du eine hochrangige Blutkugel und Platz für ein paar zusätzliche Runen auf deinem Altar hast, kann das etwas sein, das dein Netzwerk abrunden wird. -guide.bloodmagic.entry.architect.suppression.info.1=Das Siegel der Verdrängung verwendet die Technologie, die in einem Teleposer verwendet wird, um Flüssigkeiten, die sich in seiner Nähe befinden, vorübergehend zu verdrängen. Dazu werden die Flüssigkeiten in einer Kugel um den Benutzer herum in eine verstecktes Taschendimension teleposiert und die Flüssigkeit durch Luft ersetzt. Da das Feld des Teleposers überladen wird, ist die Teleposition vorübergehend - wenn der Benutzer den Bereich, in dem die Flüssigkeit entfernt wurde, verlässt oder das Siegel deaktiviert, springt die Flüssigkeit an die Stelle zurück, an der sie vorher war, als ob nichts geschehen wäre, vorausgesetzt, es gibt dort keine neu platzierten Blöcke. Dies ermöglicht einen ausgefallenen Transport zu Fuß, unter Wasser zu gehen, anstatt durch das Wasser zu schwimmen oder sogar die roten Seen des Nethers zu teilen. -guide.bloodmagic.entry.architect.haste.info.1=Zucker und Koffein sind interessante Chemikalien, die der menschliche Körper verarbeiten kann. Das eine dient als Energiereservoir, das schnell verbrannt wird, während der andere die Wachsamkeit erhöht und den Zugang zu Energie auf andere Weise ermöglicht. Indem diese chemischen Prozesse nachgeahmt werden, um mehr chemische Energie freizusetzen, ermöglicht das Siegel der Hast dem Benutzer, seine Bewegungsfähigkeit zu erhöhen. \n\tWährend es aktiviert ist, kann der Benutzer viel schneller laufen und deutlich höher springen. Darüber hinaus bietet das Siegel auch "Step Assist", das es dem Benutzer ermöglicht, einen Block hohe Grate zu überwinden, ohne zu springen. Es ist wie ein automatisches Springen, nur weniger schlecht. -guide.bloodmagic.entry.architect.severance.info.1=Teleportation ist eine dieser seltsamen Mächte, die die Menschen nicht vollständig erklären können. In den meisten Fällen kann die Teleportation als eine temporäre Verwerfung in der Raumzeit beschrieben werden, die zwei Orte im Raum miteinander verbindet, so dass das betreffende Objekt einfach auf die andere Seite "treten" kann. Das Siegel der Endertrennung versucht, diese Verzerrung zu stoppen, die die Teleportation erfordert, und verhindert, dass Kreaturen sich teleportieren, wenn sie in der Nähe des Benutzers sind. Dies stoppt nicht einige der größeren Teleportationsmittel wie Portale, aber es wird Endermen daran hindern, ihre Kräfte zu nutzen, sich in der Nähe des Nutzers zu teleportieren. -guide.bloodmagic.entry.architect.teleposition.info.1=Das Telepositionssiegel hat einen Teleposer und Fokus in seiner Struktur. Wenn du mit der rechten Maustaste auf einen Teleposer mit diesem Siegel klickst, kannst du die Koordinaten und Abmessungen an das Siegel binden. Wenn du nun mit der rechten Maustaste auf das Siegel klickst, wird es dich direkt zum Teleposer teleportieren (falls dieser vorhanden ist). Leider scheint es nicht möglich zu sein, eine Rückfahrt zu machen.... -guide.bloodmagic.entry.architect.compression.info.1=Ein Bergarbeiter wird schnell feststellen, dass sein Inventar während einer langen Expedition mit Redstone Staub, Lapis und anderen Materialien gefüllt wird. Die meisten von ihnen haben Rezepte, die sie zu Speicherblöcken wie Redstone-Blöcken und Diamantblöcken komprimieren, aber sie benötigen normalerweise eine Werkbank, um sie zu kombinieren. Dieses Siegel faltet ein kleines Kompressionsfeld im Inventar des Benutzers, wenn es aktiviert wird, und komprimiert Gegenstände auf die niedrigste Anzahl von Slots, die für das Inventar benötigt werden. Das heißt, wenn du 63 Redstone Staub hast, wird es nichts bewirken. Wenn du jedoch 64 Staub hast, werden 9 von ihnen zu einem Block aus Redstone komprimiert. Das ist zwar technisch nicht die ideale Situation, wenn du genau einen Stapel Redstone-Staub hast, aber es garantiert, dass du nicht durch volle Taschen im Staub zurückbleiben. Wenn andere Mods vorhanden sind, funktioniert dies auch für andere Rezepte. -guide.bloodmagic.entry.architect.bridge.info.1=Wenn aktiviert und während der Benutzer auf festem Boden steht, verfestigt das Siegel der Phantombrücke die Luft unter dem Benutzer, so dass er sie betreten kann, wodurch im Wesentlichen eine Phantombrücke entsteht. Wenn du in der Luft kriechst, bildet sich die Brücke direkt unter dir, so dass du dich in der Luft fangen kannst, falls du fällst. Obwohl eine gewisse Kalibrierung notwendig ist, um es sowohl für die vertikale als auch für die horizontale Bewegung bei schnellen Bewegungen effektiver zu machen (da die Entstehung der Brücke verzögert wird), ist es ein ausgefallener Weg, um effektiv zu verschiedenen Bereichen zu fliegen. -guide.bloodmagic.entry.architect.mimic.info.1=Mimics sind arkane Konstrukte, die dazu bestimmt sind, das nachzuahmen, worauf sie eingestellt sind. Wenn die Mimik mit irgendeiner Form von Block in Kontakt kommt, verschieben ihre Moleküle ihre Orientierung, um die Form, das Aussehen und das Gefühl des Blocks anzunehmen. Allerdings werden nicht alle Eigenschaften kopiert: Ein normaler Mimikblock, der mit Glowstone in Berührung kommt, gibt beispielsweise kein Licht ab.\n\tBei normalem Gebrauch gibt es zwei Möglichkeiten, einen Mimikblock zu benutzen. Der erste ist, den Mimikblock zu platzieren und dann mit der rechten Maustaste mit dem Block, der kopiert werden soll, auf die Mimik zu klicken. Dadurch wird der Block innerhalb der Mimik platziert und die Mimik nimmt die "Standard"-form des Blocks an. Wenn also ein Mimikblock mit einer Treppe angeklickt wird, wird sich die Mimik immer auf die gleiche Weise orientieren.\n\tDie zweite Methode ist, den Mimikblock in der Hand zu halten und auf den zu ersetzenden Block zu klicken. Dadurch wird der Block durch die Mimik ersetzt und die Mimik hat genau die gleiche Ausrichtung wie der ersetzte Block. Das kann man bei Treppen und Truhen sehen, aber auch bei anderen orientierungsabhängigen Blöcken wie z.B. Holzstämmen.\n\tEs gibt einige verschiedene Varianten der Mimikblöcke. Der Opake Mimikblock ist die Standardmimik, das die Form und die allgemeinen Eigenschaften von Blöcken annehmen kann - Licht kann sich jedoch nicht durch diese hindurchbewegen, daher sollte man mit Glas vorsichtig sein. Der ätherische opake Mimikblock kann ohne Probleme durchlaufen werden, da dieser keine Hitbox hat, die perfekt für versteckte Türen ist. Klare Mimikblöcke funktionieren genauso wie ihre undurchsichtigen Varianten, lassen aber Licht durch sie hindurch, auch wenn es völlig fest erscheint. Schließlich ist der Leuchtende Mimikblock undurchsichtig und fest, aber egal, was sich darin befindet, er strahlt ein starkes Licht aus. Keine dunklen Bereiche mehr in deiner Basis ohne Fackel-Spam! Es gibt eine spezielle Variante der Mimik, vor der du dich in Acht nehmen solltest: der Empfindsame Mimikblock. Wenn ein Spieler zu nahe an einen von diesen in der Welt kommt, wird dieser aufstehen und mit einem hohen Grad an Grausamkeit angreifen. Diese sind in verschiedenen Bereichen vorzufinden, aber sie sind besonders von Verliesen angetan. Wenn man eine Truhe nachahmt, sollte man jedoch vorsichtig sein: Sie beißen....\n\t***Nur Kreativmodus***\n\tEs gibt einige interessante Funktionen, die du jedem Mimikblock hinzufügen kannst, wenn du dich im Kreativmodus befindest. Wenn du mit der rechten Maustaste auf eine platzierte Mimik mit einem Trank oder einer Trankflasche klickst, kannst du die Mimik so einstellen, dass sie Tränke um sie herum erzeugt, wenn ein Spieler in der Nähe ist. Wenn es eine normale Mimik ist und du auf die Ost- oder Westseite klickst, kannst du den Radius, in dem der Trank entsteht, vergrößern oder verkleinern. Wenn du auf die Nord- oder Südseite klickst, kannst du den Radius vergrößern oder verkleinern, den die Mimik vor dem Erstellen der Tränke nach Spielern um sie herum sucht. Wenn es sich um einen empfindsamen Mimikblock handelt, kannst du überall auf den Mimikblock klicken, um den Erkennungsradius für Spieler zu vergrößern oder zu verkleinern - wenn sich ein Spieler in diesem Bereich befindet und den Block sehen kann, wird die Mimik erstellt und den Spieler anfallen.\n\tEine weitere Sache ist, dass, wenn der Block auf die Mimik gesetzt wird, während der platzierende Spieler im Kreativmodus ist, wird der Block, der nachgeahmt wird, NICHT fallen gelassen, wenn die Mimik zerstört wird.\n\tZu guter Letzt wird die Mimik, falls sie auf irgendeinem Inventar oder eine Kiste gesetzt wird, diese Kiste bzw. das Inventar samt Inhalt fallen lassen, sobald sie besiegt wurde - eine reguläre Mimik wird stattdessen den Inhalt auf dem Boden verteilen, falls sie zerstört werden sollte. -guide.bloodmagic.entry.architect.downgrade.info=Bitte lese den Eintrag "Sühne der belasteten Seele" in "Der Ritualmeister" für eine detaillierte Erklärung darüber, was diese sind und wie man sie erhält. - -guide.bloodmagic.entry.architect.augmentedCapacity.info=Die Rune der erweiterten Kapazität funktioniert ähnlich wie die Rune der Kapazität in dem Sinne, dass sie die Kapazität des Blutaltars erhöht. Allerdings werden mehrere Runen auf dem gleichen Altar miteinander in Resonanz treten, was die Kapazität exponentiell erhöht, je mehr es gibt. Eine Rune allein wird die Kapazität des Altars um +10%% erhöhen, aber das funktioniert multiplikativ mit anderen Runen mit erhöhter Kapazität: Wenn es zwei Runen gibt, ist es eine Zunahme um +21%%, drei Runen um +33,1%%, usw.\n\tUnglücklicherweise ist dieser multiplikative Effekt nicht mit der Rune der Kapazität stapelbar, was bedeutet, dass man immer noch nur den Bonus von +2kLP pro Rune erhält. -guide.bloodmagic.entry.architect.charging.info=Die Aufladungsrune ist eine jener Schönheiten, die den Betrieb des Blutaltars vollständig in etwas verwandeln wird, das als nützlicher für die Herstellung aus einem Guss angesehen werden kann. Durch das langsame Absaugen der LP vom Blutaltar beginnt die Aufladungsrune mit der Speicherung von "Aufladung", einem internen Wert des Blutaltars, der mit dem Siegel des Sehers sichtbar ist. Wenn der Blutaltar genügend Ladung hat, wenn er etwas zum Herstellen bekommt, wird er die erforderliche Ladung sofort verwenden und den Gegenstand sofort herstellen. Wenn nicht genügend Ladung vorhanden ist, wird die Ladung verwendet, um den Fortschritt des Gegenstands in einem Verhältnis von 1:1 Ladung:LP zu erhöhen. Die maximale Ladungsmenge, die im Blutaltar gespeichert werden kann, ist eine Funktion der Anzahl der Ladungsrunen, die er mit der aktuellen Kapazität des Altars multipliziert hat (die Kapazität des Altars tritt nur in Kraft, wenn sie größer als 20k ist). Die Rate, die er auflädt, hängt auch direkt von der Geschwindigkeit des Altars ab, mal der Anzahl der Aufladungsrunen, die er hat, und er wird LP alle 20 Ticks (eine Sekunde) in Charge umwandeln. Wenn ihr also einen Blut-Altar mit dieser Rune entwerfen wollt, dann müsst ihr alle synergistischen Beziehungen, die sie hat, sorgfältig abwägen. -guide.bloodmagic.entry.architect.acceleration.info=Im Gegensatz zu den meisten Runen funktioniert die Beschleunigungsrune nur dann am besten, wenn sie mit anderen Runen gepaart wird, und ihre Wirkung nimmt nur begrenzt zu. Was diese Rune tut, ist, dass sie die Anzahl der Verarbeitungs-Ticks erhöht, die in einem bestimmten Zeitraum auftreten können, insbesondere wenn es um die Rune der Verlagerung und die Aufladungsrune geht. Für jede hinzugefügte Rune verringert sich die Anzahl der Ticks vor dem nächsten Verarbeitungs-Tick um eins. Zum Beispiel verdrängt die Rune der Verdrängung standardmäßig Flüssigkeiten mit einer Geschwindigkeit von einer Operation pro 20 Ticks - bei 10 Beschleunigungsrunen würde dies mit einer Geschwindigkeit von einer Operation pro 10 Ticks geschehen.\n\tDie maximale Anzahl der Beschleunigungsrunen, die derzeit von Bedeutung sind, ist natürlich 19 - wenn du so viele hast, werden die Rune der Verdrängung und die Aufladungsrune beide ihre Effekte jeden Tick aktivieren. Noice! - -guide.bloodmagic.entry.architect.tier3.info=Es ist bekannt, dass ein Altar der Stufe 3 erfordert, dass man vier Säulen mit Glowstoneblöcken aus dem Nether bedeckt. Was nicht durchweg verstanden wird, ist, dass man stattdessen Seelaternen verwenden kann. Wenn du dich also sehr weit weg vom Nether befindest, aber Zugang zu den Ozean-Tempeln hast, kannst du andere Wege nutzen, um dich in der Blutmagie weiterzuentwickeln. - -# Demon Kin Entries -guide.bloodmagic.entry.demon.intro=Bella Highborn -guide.bloodmagic.entry.demon.snare=Dämonischer Wille und Fallen -guide.bloodmagic.entry.demon.forge=Höllenfeuerschmiede -guide.bloodmagic.entry.demon.petty=Winziges Juwel des Tartaros -guide.bloodmagic.entry.demon.sword=Empfindsames Schwert -guide.bloodmagic.entry.demon.lesser=Kleines Juwel des Tartaros -guide.bloodmagic.entry.demon.reactions=Unerwartete Reaktionen -guide.bloodmagic.entry.demon.sentientGem=Empfindsame Rüstung -guide.bloodmagic.entry.demon.routing=Gegenstands-Routing -guide.bloodmagic.entry.demon.aura=Dämonische Willensaura -guide.bloodmagic.entry.demon.types=Verschiedene Typen von Wille -guide.bloodmagic.entry.demon.crucible=Dämonenschmelztiegel -guide.bloodmagic.entry.demon.crystallizer=Dämonenkristallisierer -guide.bloodmagic.entry.demon.cluster=Dämonische Kristallgruppen -guide.bloodmagic.entry.demon.pylon=Dämonenpylon -guide.bloodmagic.entry.demon.gauge=Dämonischer Auramesser - -# Demon Kin Entry Texts -guide.bloodmagic.entry.demon.intro.info=Mein Name ist Bella Highborn, und ich bin bekannt als das Dämonenkind. Vor einigen Monaten wurde mein Dorf von einer Welle von Dämonen angegriffen, die alle anderen Menschen töteten und dabei jedes einzelne Gebäude zerstörten. Ich erinnere mich nicht viel von dem Angriff, außer den Schmerzensschreien, da jede Person, die ich kannte, diese Welt für eine glücklichere verließ. Glücklicherweise hörten mich die Dämonen nicht, als ich mich unter die Obstkörbe im Keller der Kirche von Intactilis kauerte und verzweifelt versuchte, meine Schreie davon abzuhalten, sich dem Chor anderer Stimmen anzuschließen. Es gab einen schrecklichen Moment, als ich versehentlich den Räucheraltar der Kirche niedergerissen habe und ein Dämon in das Heiligtum kam, unbeirrt von dem, was wir für einen heiligen Ort hielten. Es war ein riesiges vierbeiniges Monster, mit geschwungenen Stoßzähnen, die an einem hervorstehenden Mund vorbei hingen, wobei der Speichel auf gezackte Schwerter tropfte, die seine Krallen ersetzten. Es hat sich im Raum umgesehen und ich schwöre, dass wir uns für eine Sekunde gegenseitig in die Augen gesehen haben, aber dann ist es einfach weggegangen, als ob es nichts gehört oder gesehen hätte. Alles danach war verschwommen. Es war ein ganzer Tag, bevor jemand kam, um zu sehen, was passiert ist. Eine Handelskarawane sah den Rauch in der Ferne und beschloss, den langen Weg an den Dämonen vorbei zu gehen. Viele der Händler wollten mich nicht einmal anschauen, weil sie befürchteten, dass es ein schlechtes Omen war, weil ich es allein schaffte, unbeschadet zu überleben. Aber zwei Brüder beschlossen, Mitleid mit mir zu haben und den Rest der Karawane davon zu überzeugen, mich mitfahren zu lassen. Ich musste den Zauberstab und das Medaillon der Priesterin verkaufen, aber ich schaffte es, einen sicheren Weg in ein Dorf zu finden, das weit genug vom Pfad der Zerstörung der Dämonen entfernt war. -guide.bloodmagic.entry.demon.snare.info.1=Magus sagte mir eines Tages, dass jedes Lebewesen eine Seele hat: Menschen, Hühner, Schafe und sogar Creeper haben diese Lebenskraft, die dem Körper den Willen zum Leben geben würde. Es scheint, dass Magus in seiner Zeit viele Experimente gemacht hat und sogar von einem mächtigen Magier gehört hat, der diese Seelen in leere Gefäße wie Zombies verwandeln könnte. Aber das ließ mich fragen: Wenn Zombies und Skelette keine Seelen hatten, warum hatten sie dann den Willen zu leben? Was animierte sie, damit sie versuchen würden, jedes Lebewesen zu jagen und zu töten?\n\tEs kam alles zu Dämonischen Willen zurück, jedes einzelne Mal. Alles "Lebende" musste einen Willen haben, um zu überleben, aber es bedeutete nicht, dass es ihr eigener sein musste. Als ich das zu Magus brachte, dachte er ein wenig darüber nach, brachte dann eine Tafel und Kreide heraus (von wo, wer weiß) und begann, einige Notizen über andere Formen der Magie zu zeichnen. "In der Thaumaturgie", sagte er, während er die Form eines Strohmannes skizzierte, "sind Golems animierte Wesen, die beauftragt sind, viele alltägliche Operationen durchzuführen. Sie leben, atmen und können sogar sterben, wenn sie bei ihren Herren in Ungnade fallen. In der gegenwärtigen Iteration der Thaumaturgie, und ja, es gab im Laufe der Jahrhunderte mehrere Versionen dieser Kunst, würde der Magier dessen Willen in die unbelebte Schöpfung einfließen lassen und sie zum Leben erwecken.\n\t "Dies, Bella, ist wie Golems arbeiten: durch eine Einprägung von Willen."\n\tAlso wenn ein Golem durch die Einprägung des Willens einer anderen Entität in dessen leere Hülle leben kann, vielleicht bringt eine andere Entität die Körper der Toten als Skelette und Zombies zurück ins Leben. An diesem Punkt zitterte ich und erinnerte mich kurz daran, was in meinem alten Dorf geschah. Nur ein Dämon kann etwas so Grausames tun. Aber um diese Hypothese zu testen, brauchte ich mehr Beweise. -guide.bloodmagic.entry.demon.snare.info.2=Mit etwas Anleitung von Magus und Tiberius, als er mir eine Hand von seiner eigenen Arbeit geben konnte, machte ich mir eine rudimentäre Schlinge aus Eisen, Schnur und ein wenig Redstone. Tiberius, der die Thaumaturgie als disziplinübergreifende Magie seiner Wahl vertieft studierte, sagte, dass die Falle in der Lage sein sollte, den Willen einer Entität zu stören, die ein animiertes Objekt kontrolliert. "Ich habe damit herumgealbert, als ich mit Golems spielte", sagte er lächelnd. Wir alle wussten, wie gut das ausgegangen ist. "Redstone schien die Verbindung zwischen meinen Golems und meinem Willen, sie zu bewegen, zu stören. Theoretisch, wenn etwas die Zombies oder Skelette kontrolliert, solltest du in der Lage sein, den Willen abzuschneiden."\n\tEr sagte, dass alles, was ich tun musste, war, es zu werfen - wenn es funktionierte, sollte etwas weißer Staub für eine gewisse Zeit aus dem Wesen strömen. "Also musst du es töten, wenn das passiert, damit wirklich etwas passiert. Aber die Schlinge könnte nur zu 25%% der Zeit funktionieren, also sei ein wenig großzügig mit ihnen!", nachdem ich sechzehn von ihnen hergestellt hatte, ging ich während der Nacht mit meinem Schwert aus. Es war ziemlich heikel: Ich musste mehrere Zombies ausfindig machen, mich ducken und ihnen ausweichen, während ich ein paar Fallen auf sie warf. Sobald die weißen Partikel von ihnen abgelöst wurden, tötete ich sie schnell und nahm die Überreste ihrer Körper auf. Eine kleine Menge einer blauen viskosen Flüssigkeit schien in dem körnigen Staub zu liegen, der mir zu mir rufen zu schien. Ich hob es auf, und es schien, als käme eine jenseitige "Präsenz" aus der Flüssigkeit. Als ich die Proben schnell verstaute, entschied ich mich, sie tiefer zu betrachten, als ich nach Hause kam. Es schien, dass die Größe und Form jedes "Dämonischen Willens" variierte, als ob die Qualität des Willens von der Quelle abhängt. Mit einer völlig willkürlichen Maßeinheit scheint der Wille, den ich von den Fallen bekommen habe, zwischen null und fünf "Willensqualität" zu liegen. Ich bin mir noch nicht sicher, wofür ich diese Substanz verwenden kann, aber sie ist trotzdem sehr faszinierend. Ich kann nicht sagen, ob dies der Abdruck des Willens eines Dämons ist, oder nur ein zufälliger Kristall, der in ihren Körpern gefunden wurde. Mehr Forschung ist notwendig. -guide.bloodmagic.entry.demon.forge.info.1=Ich habe mehrere Wochen damit verbracht, den Nutzen und die Eigenschaften des dämonischen Willens zu erforschen. In den letzten Tagen gab es einige Erfolge, aber nur selten. Tiberius fragte mich neulich, ob er eine Probe des dämonischen Willens für ein paar seiner anderen Experimente nehmen könnte: Er erwähnte, dass es das sein könnte, was er brauchte, um einen neuen Blutaltar zu bauen, um das ramponierte Becken zu ersetzen, das wir in Magus' Keller benutzten, da der Versuch, dieses alte Ding mit nur Stein zu replizieren, nie den richtigen Behälter für unsere Blutmagie zu schaffen schien.... Mit anderen Worten, er denkt, es könnte helfen. Es war keine komplette Verschwendung. Ich habe verschiedene Alchemie-Lehrbücher zu "Äquivalente Umwandlung" und den vielen verschiedenen Möglichkeiten, Materie zu manipulieren, konsultiert. Ich sprach auch mit ein paar Alchemisten, die vorbeikamen, und sie gaben mir ein paar Tipps, wie man Materie und Energie dekonstruieren kann, um sie genauer zu studieren. (Als Nebenbemerkung muss ich sagen, dass ich die dunkelviolette Rüstung liebte, die ein Alchemist trug - schon beim Betrachten fühlte ich mich, als würde ich von einem dichten Gegenstand angezogen. Von Tiberius mal ganz abgesehen!) Durch die Verwendung dieser einfachen Anordnungen mit den kleinen Proben, die ich hatte, konnte ich sehen, dass es Möglichkeiten gab, die Energiequelle im Inneren des dämonischen Willens anzuzapfen. Ich brauchte nur die richtige Konfiguration. -guide.bloodmagic.entry.demon.forge.info.2=Gerade heute habe ich es geschafft, eine Struktur zu entwickeln, von der ich glaubte, dass sie Elemente mit diesem rohen Willen zusammenfügen würde. Als "Höllenfeuerschmiede" bezeichnet, verwendet die Struktur eine einfache, in das Glas geschnitzte Alchemische Anordnung, um bis zu vier Gegenstände miteinander zu verschmelzen und sie mit dämonischem Willen zu injizieren. Das Stück dämonischen Willens wird auf der rechten Seite platziert und die vier Zutaten werden um den Kreis gelegt. Es scheint, dass es viele verschiedene "Rezepte" in dieser Schmiede gibt, aber es gibt einige Bedingungen für diese. Für den Anfang gibt es ein Minimum an dämonischen Willen, der in der Probe sein muss, damit sich die Gegenstände verbinden können - wenn es nicht genug Willen in der Struktur gibt, scheint nichts zu passieren. Zunächst scheint es, dass, obgleich es eine minimale Menge des Willens benötigt, die meisten Rezepte nicht den gesamten Willen der Probe verwenden. Einige Rezepte benötigen eine große Menge an dämonischem Willen, um den Prozess zu starten, aber nur ein wenig wird in der Herstellung verwendet, wenn überhaupt. Einige Rezepte scheinen in großen Mengen sehr einfach zu erstellen zu sein, aber andere... nicht so sehr. -guide.bloodmagic.entry.demon.petty.info.1=Ich ging auf eines meiner nun allnächtlichen Abenteuer, um etwas dämonischen Willen zu sammeln, als ich anfing, eines der größten Probleme mit der Sammelmethode zu erkennen: meine Tasche wurde immer voller von all den Proben! Aus irgendeinem Grund, vielleicht weil die ultimative Quelle des dämonischen Willens für jede Probe anders ist, würde der Wille nicht in eine überschaubare Form komprimiert. Zumindest die physische Manifestation des Willens. Also ging ich zur Arbeit mit der Höllenfeuerschmiede, die sich in meiner Ecke des Hauses befand, schob einige von Tiberius' weniger unangenehmen Experimenten beiseite und besorgte einige Rohstoffe für mein eigenes Studium. Eines Tages werde ich Tiberius eine eigene Schmiede machen, da ich es satt habe, den ganzen Staub, der meinen Arbeitsplatz bedeckt, von seinen "arkanen Experimenten" loszuwerden. Es ist mir egal, dass du "versuchst, die Kluft zwischen den ätherischen Strängen des Seelen-Netzwerks und der physischen Konstruktion der Schiefertafeln zu überbrücken", hol deine verdammte Asche aus meinen Sachen! -guide.bloodmagic.entry.demon.petty.info.2=Wie auch immer, es dauerte eine Weile, um Materialien zu finden, die am ehesten mit dem dämonischen Willen in Resonanz kamen, um ihn besser zu speichern. Lapis scheint der am leichtesten verfügbare Leiter dieser Energie zu sein, der als Weg für den zu kanalisierenden Willen dient. Nachdem ich etwas Redstone als Abschirmung gegen elektrische Felder in der Luft hinzugefügt hatte (zwei Energien zusammengenommen scheinen katastrophale Auswirkungen zu haben, zumindest sagte Magus das), Gold als Dämpfungsmittel und Glas als einfaches Gehäuse, gelang es mir, einen sehr einfaches "Juwel des Tartaros" zu schaffen. Das heißt "ein Juwel aus der Unterwelt, Tartaros." Nach weiteren Tests fand ich heraus, dass dieses Juwel bis zu einer Willensqualität von 64 halten könnte. Als ich danach versuchte, den dämonischen Willen aufzuheben, schien dieser direkt in den Edelstein zu gehen, wenn er nicht voll war - danach schien der Wille einfach... zu verschwinden. Praktisch für meinen Rucksack, aber sonst ein Rätsel. Ich erfuhr auch, dass, wenn ich den Edelstein in meiner Hand halte und mich konzentriere (Rechtsklick), ungefähr 10% der maximalen Kapazität des Edelsteins in andere Edelsteine fließen würde, die ich auf meiner Person hatte. Ich denke, diese letzte Eigenschaft ist sehr hilfreich, besonders wenn wir andere, mächtigere Juwele entdecken sollten. -guide.bloodmagic.entry.demon.sword.info.1=Meine Fallen haben sich wieder verheddert.\n\tEs scheint keine Rolle zu spielen, wie sehr ich versuche, das Design zu verbessern, die rudimentäre Schlinge scheint nie perfekt zu funktionieren. Es verheddert sich nur die meiste Zeit, und wenn ich es endlich schaffe, einen Zombie damit zu treffen, ist es wahrscheinlicher, dass es nicht funktioniert als dass es tut, was es soll. Um mich davon abzuhalten, mir selbst die Haare auszureißen, ging ich wieder zur Schmiede und machte mich sofort an die Arbeit.\n\tNun, nicht sofort, schließlich musste ich zuerst noch die Asche entfernen. -guide.bloodmagic.entry.demon.sword.info.2=Ich fusionierte die Fähigkeit des Winzigen Juwels des Tartaros, dämonischen Willen zu halten mit einem eisernen Schwert und schuf eine Klinge, die.... sehr stumpf war und kaum mehr Schaden anrichtete als meine Faust. Ich war eigentlich sehr enttäuscht über das Ergebnis, denn es dauerte eine lange Zeit, mit der Schmiede herumzuexperimentieren, sodass sie durch die Belastung, ein Winziges Tatarisches Juwel als Energiequelle zu nutzen, nicht überhitzte.\n\tDoch sobald ich mein Tartarisches Juwel aufhob, begann das Schwert mit einer neuen Energie zu leuchten. Es scheint, dass je höher die Menge des dämonischen Willens, die ich an meiner Person habe, desto mehr Schaden ich mit dem Schwert anzurichten scheine und desto mehr Dämonischer Wille kann von den Kreaturen absorbiert werden. Wann immer du kein Juwel hast, ist die Quantität des Willens sehr.... gering.\n\tNach einem kleinen Test kam ich zu einer anderen Erkenntnis: Je nachdem, was ich töte, bekomme ich unterschiedliche Mengen von Willen. Es scheint proportional zur Menge der maximalen Gesundheit, die das Monster hat - eine Spinne, da sie eine maximale Gesundheit von 8 Herzen hat, gibt 80%% des Willens eines Zombie, der 10 Herzen hat. Das liegt wahrscheinlich daran, dass diese Monster mehr Willen benötigen, um zu animieren. Ich sollte das für spätere Erkenntnisse beachten. -guide.bloodmagic.entry.demon.lesser.info.1=Ich habe mich heute mit Tiberius unterhalten und einige seiner Projekte besprochen. Ich muss sagen, wenn wir über seine Forschung sprechen, scheint es, dass er immer weiter und weiter und weiter geht! Wie auch immer, eine der jüngsten Erfindungen, über die er sprechen wollte, waren seine Siegel: Bis jetzt ist es ihm gelungen, ein Wassersiegel und ein Lavasiegel zu erschaffen, wobei er die Höllenfeuerschmiede benutzte, die ich schließlich für ihn konstruiert habe, um sie zu erschaffen. Ich war mir nicht ganz sicher, wie er sie tatsächlich hergestellt hat - ich wusste, dass er experimentierte, indem er einige Zutaten nahm und sie in der Schmiede mit dem Weinstein als Katalysator kombinierte, aber ich habe ihn noch nicht aktiv experimentieren sehen. Nun, ich habe endlich einen Einblick bekommen, wofür er diese verdammte Asche benutzt.\n\tMal sehen, ob ich genau nachahmen kann, was er gesagt hat. Ahem. "Durch die Verwendung des Dämonenwillens, der in diesen Edelsteinen enthalten ist, um die Inhaltsstoffe umzuwandeln, entsteht eine Reaktion zwischen Dingen, die normalerweise nichts tun, wenn sie kombiniert werden. Indem ich diese erzwungene Synergie nutze, bin ich in der Lage, mehrere arkane Symbole in Muster einzuschreiben, die die Energie zu lenken, die ich selbst hinzufüge, um die gewünschte Aufgabe zu erfüllen." Obgleich es niedergeschrieben nicht sehr anschaulich ist, stell dir sich vor, wie ich das sage, während ich eine Brille den Nasenrücken hochschiebe. Ich bin mir nicht sicher, ob er normalerweise so ist, aber ich schwöre, er wird komplett... wissenschaftlich, wenn er mir die Dinge erklärt. Nach der zugegebenermaßen auffälligen Demonstration kam er dann zum Kern der Diskussion. "Wenn ich versuche, diesen Prozess mit einigen fortschrittlicheren Materialien zu replizieren, scheint es, dass die Reagenzien... explodieren, wenn sie der Alchemischen Anordnung hinzugefügt werden. Sie scheinen sehr instabil zu sein. Ich denken, dass die Zutaten nicht richtig miteinander verschmolzen werden - vielleicht ist nicht genug Energie in der Schmiede, um sie richtig zu verschmelzen."\n\tNachdem ich ein paar Minuten darüber nachgedacht habe, machte ich an die Arbeit - wie ich in einem früheren Eintrag erwähnt habe, dachte ich, dass ein stärkeres Juwel erforderlich wäre, aber ich habe immer noch nicht genau herausgefunden, wie ich das auf elegante Weise machen könnte. Also beschloss ich, dass ein brachialer Ansatz dafür ausreichen würde! -guide.bloodmagic.entry.demon.lesser.info.2=Ich nahm einen Block Lapis, einen Block Redstone und einen Diamanten sowie einen leeres winziges Tartarisches Juwel, das ich herumliegen hatte - Teil eines vergangenen Experiments, das.... nicht gerade gut lief. Alles, was ich dazu sagen kann, ist, dass ich überrascht bin, dass Magus Löcher in einer festen Betonwand einfach verschwinden lassen kann. Dann kombinierte ich diese vier Gegenstände in der Höllenfeuerschmiede mit einem gefüllten winzigen Juwel, um als Energiequelle zu dienen - ein Minimum von 60 Wille scheint erforderlich zu sein. Nach ein wenig Mühe, eine optimale Anordnung zu finden, setzte ich sie dann zusammen und beobachtete, wie der leere Weinstein innerhalb der Schmiede zu wachsen begann.\n\tNur nebenbei, ich versuchte, einen Block Gold statt einen Diamanten zu nutzen, um das Juwel wachsen zu lassen, jedoch scheint es, dass eine weitere Kristallstruktur vorteilhafter ist.\n\tDieses neue, "Geringe Juwel des Tataros" scheint eine wesentlich höhere Kapazität zu besitzen, indem es fähig ist, bis zu 256 Rohen Willen halten zu können. Hoffentlich ist das genug, um Tiberius' Bedarf an großen Mengen an Willen für eine Weile zu stillen. Aber leider scheint es, dass ich dieses Juwel auffüllen muss. Eine weitere lange Nacht liegt vor mir! -guide.bloodmagic.entry.demon.reactions.info=Ich bin heute in einem Krankenbett aufgewacht und habe Schmerzen. Ich öffnete die Augen und sah das dumpfe Magenta, das die Decke des "Mächtige Flüche"-Flügels des Krankenhauses in Veteres bildete, der unserem Dorf am nächsten gelgenen Stadt. Ich war nicht gerade beunruhigt über diese Information: es hat mich so verwirrt, dass ich irgendwie hier gelandet bin, während ich scheinbar nur mit Kratzern und blauen Flecken bedeckt war, plus einem einfachen Gips auf meinem linken Bein. Jemand muss einen "Ossa Fracta"-Fluch auf mich geworfen haben oder so, denn es könnte nur ein einfacher gebrochener Knochen sein! Als Magus mit einer der Schwestern mit einem ernsten Gesicht reinkam, wusste ich, dass es etwas drastischeres war. Anscheinend habe ich einen kleinen Rückschlag mit einem meiner Experimente mit dem neuen Geringen Tatarischen Juwel erlitten und eine kleine, aber kräftige Explosion ausgelöst. So viel konnte ich leicht verstehen, aber das war es nicht: Die Mischung aus Obsidian, Eisen und Diamant, die ich benutzte, beschichtete meinen linken Unterschenkel und bildete eine starre Schale, die nicht entfernt werden konnte. Der Gips, den ich auf meinem Bein hatte, war eigentlich kein Gips, sondern eine Art Runenmatrix, die die hellblaue Schale bedeckte. Ich fragte, was Magus dachte, obwohl ich mir ziemlich sicher war, was passiert war. "Ich glaube", sagte er und blickte auf die Krankenschwester, die ihm aufmerksam zuhörte, bevor sie mich ansah, "dass es einfach eine Art Rückstand ist, der auf Diamanten basiert, was der Hauptgrund dafür ist, dass wir ihn nicht entfernen können. Es ist auch mit etwas... jenseitiger Energie verwebt, was der Hauptgrund dafür ist, dass du hier bist, anstatt in einem Bett in der örtlichen Klinik - das Konglomerat ist seit dem Eldritch-Vorfall ziemlich streng in Bezug auf unbekannte Energie, die direkt mit Menschen in Verbindung ist, also mussten wir sicherstellen, dass es keine Probleme gab. "Ich sehe..." Normalerweise kümmert sich Magus nicht viel um Formalitäten wie z.B. sicherzustellen, dass das Konglomerat über unbekannte Energien informiert ist - ich experimentiere schon eine ganze Weile mit Dämonischen Willen, und es ist nicht so, dass das Konglomerat an unsere Tür klopft, um diese Magie registrieren zu lassen. Ich werde hier nicht viel ins Detail gehen, da ich nicht sehr versiert in der Politik bin, aber ich weiß, dass Magus nur sparsam daran teilnimmt. Das bedeutete, dass die Macht dieses Willens Magus sehr beunruhigte, vielleicht durch einige seiner vergangenen Erfahrungen...?\n\t "Ah gut, genug davon im Moment", sagte Magus und krempelte die Ärmel seiner Roben hoch. "Ich habe versucht, die Schale zu brechen, als ich sie zum ersten Mal sah, offensichtlich nachdem ich überprüft hatte, was sie war. Letztes Mal hatte es keine Wirkung, aber jetzt..." Es gab eine glühende Hitze auf meinem linken Bein, begleitet von einem blendenden roten Licht, als Magus seine Hände auf die blaue Schale schröpfte. Nach einem Moment, der sich wie eine Ewigkeit anfühlte, aber nur ein paar Sekunden gedauert haben muss, begann die Schale zu reißen und zu brechen und zerfiel. Ehrlich gesagt, es war irgendwie enttäuschend. versuchte ich aufzustehen, aber Magus schob mich mit einem kleinen Stoß zurück ins Bett. "Bella, du musst bleiben und dich ausruhen. Du kannst später mit deiner Forschung an den Juwelen fortfahren." Ich war zunächst verärgert, aber das ging schnell vorbei, da ich viel Zeit zum Nachdenken hatte. Der einzige Grund, warum Magus nicht in der Lage war, genau das Gleiche vorher zu tun, war wahrscheinlich, dass ich nach der Explosion immer noch mein Tartarisches Juwel bei mir hatte. Was auch immer mit meinem Bein geschah, musste direkt an den Dämonischen Willen gebunden sein, und sobald mein Juwel genommen wurde, konnte die Schale entfernt werden. Es brachte mich zum Nachdenken... -guide.bloodmagic.entry.demon.sentientGem.info.1=Nach ein paar Tagen "dringend nötiger Bettruhe", die von Magus vorgeschrieben und durchgesetzt wurde, beschloss ich, ein wenig zu recherchieren, vor allem über die empfindsame Ausrüstung, die ich bisher gemacht habe. Es gibt einfach so viel, dass ich nicht über das empfindsame Schwert und den Dämonenwillen im Allgemeinen Bescheid weiß. Sicher, wir wissen etwas von der Theorie, aber wenn man bedenkt, dass Magus und ich diejenigen waren, die die Theorie entwickelt haben, ist es schwer zu sagen, was genau sie ist. Magus sagte mir, dass er immer, wenn er einen Lehrling nimmt, darauf besteht, dass sie neben der Forschung, die er betreibt, eine andere Form der Magie lernen müssen. Tiberius bot mir an, Botanik zu lernen, aber ich spottete über die Idee - ein paar Blumen werden mir nicht viel helfen, wenn ich gegen Dämonen kämpfen muss! -guide.bloodmagic.entry.demon.sentientGem.info.2=Das Juwel der Empfindsamen Rüstung ist ein umschaltbarer Gegenstand, mit dem du deine empfindsame Rüstung an- und ablegen kannst. Wenn du mit der rechten Maustaste auf das Juwel klickst, während du mindestens 16 Dämonenwille in deinem Inventar hast, wird deine Rüstung durch einen Satz empfindsame Rüstung ersetzt, die alle Verzauberungen der ersetzten Rüstung kopiert - wenn du das Juwel wieder deaktivierst, erhältst du deine ursprüngliche Rüstung zurück. Das funktioniert auch, wenn du überhaupt keine Rüstung anhast. Die empfindsame Rüstung wirkt anfangs wie eine einfache eiserne Rüstung, die keine zusätzlichen Fähigkeiten außer Schutz bietet. Ähnlich wie andere empfindsame Werkzeuge bietet die Rüstung jedoch mehr Schutz, wenn du mehr Dämonenwille in deinem Besitz hast. Dies macht den Schutz wirklich mächtig, wenn man eine große Menge an Dämonenwille angesammelt hat. Der Nachteil dabei ist, dass jeder Treffer, den du nimmst, ein kleines Stück Dämonenwille aus deinen tatarischen Juwelen extrahiert, und wenn du zu niedrig wirst, wird deine Rüstung wieder in ihre ursprüngliche Form zurückkehren. Könnte unangenehm werden! -guide.bloodmagic.entry.demon.routing.info=Der Gegenstandstransport in der Blutmagie kommt von der Verbindung von Strängen des Dämonischen Willens zwischen Verteilerknoten, die als Leitungen dienen, um Gegenstände von einem Inventar in ein anderes zu transferieren. Lassen Sie uns zunächst erklären, wie jedes einzelne Element funktioniert: Jedes Verteilersystem benötigt einen Haupt-Verteilerknoten, der als Gehirn des Systems fungiert. Ein Eingangsknoten gibt Elemente in das System ein, und ein Ausgangsknoten gibt Elemente aus Ihrem System aus, und ein normaler Verteilerknoten hat keine spezielle Funktion.\n\tUm ein Netzwerk zu erstellen, musst du Knoten durch Shift-Klicken mit dem Knoten-Router miteinander verbinden. Solange ein Knoten irgendeinen Weg zu einem anderen Knoten verfolgen kann (und wenn er mit einem Haupt-Verteilerknoten verbunden ist), können sie miteinander kommunizieren.\n\tAllgemein kann gesagt werden, dass Gegenstände aus einem Inventar neben einem Eingangsknoten gezogen und in ein Inventar neben einem Ausgangsknoten gelegt werden. Um festzulegen, was wohin geht, sollte ein Filter verwendet werden. Durch Klicken auf eine der Schaltflächen in der Schnittstelle des Knotens kann ausgewählt werden, was in der angegebenen Richtung in das Inventar gelangt (N steht für Norden usw.). Wenn ein Gegenstandsfilter in den linken Schlitz des Knotens gesetzt wird, kann die Anzahl und Art der Elemente angeben werden, mit denen der Knoten auf Grundlage des Filters interagieren kann. Wenn ein Filter auf einen Eingabefilter gesetzt wird, können nur solche Gegenstände aus dem Bestand gezogen (es wird mindestens der angegebene Betrag zurückbehalten, wenn eine Menge angegeben ist). Wenn ein Filter auf einen Ausgabefilter gesetzt wird, kann nur diese Art von Gegenständen in das Inventar gelegt werden, bis zu einem Maximum der angegebenen Menge.\n\tEs gibt vier verschiedene Filterarten:\n\tPräzise - Der Gegenstand muss genau übereinstimmen, einschließlich NBT und Metadaten\n\tMod - Der Gegenstand passt, wenn er von einem der gefilterten Mods stammt.\n\tIgnoriere NBT - Der Gegenstandsfilter berücksichtigt keine NBT-Daten\n\tOre Dictionary - Jeder Gegenstand, der mit einer Ore Dictionary-Referenz der Filter übereinstimmt, ist erlaubt.\n\tDu solltest zwei Nummern sehen, wenn du den Filter in einen Knoten einsetzt: Die Menge und die Priorität. Wenn du auf einen der Gegenstände im Filter klickst, erscheint der Name des ausgewählten Gegenstands und darunter dessen Anzahl. Durch Setzen dieser Nummer kann dem Filter mitgeteilt werden, wie viele dieser Gegenstände im angeschlossenen Inventar auf Lager gehalten werden (entweder bis zu diesem Betrag, wenn es sich um einen Ausgabeknoten handelt, oder um den Betrag, der im Inventar verbleibt, wenn es sich um einen Eingabeknoten handelt). Wenn der Betrag des Filters auf 0 gesetzt ist, wird jede Menge für diesen bestimmten Filter erlaubt. Eingabeknoten ziehen so viel wie möglich aus dem Inventar, und Ausgabeknoten entziehen so viel wie möglich.\n\tDie zweite Zahl ist die Priorität des Knotens, geändert durch die Pfeiltasten daneben. Diese Nummer ist für jede Seite des Knotens unterschiedlich. Der Knoten, der die NIEDRIGSTE NUMMER im Netzwerk hat, wird zuerst verwendet. -guide.bloodmagic.entry.demon.aura.info=Wenn ein Wesen normal getötet wird, verdunstet es mit der Zeit und kehrt zu dessen Schöpfer zurück. Wenn es mit einer Schlinge gefangen wird, wird es aus dem Ätherischen in diese Ebene gezogen und steckt irgendwie fest. Wir haben dessen Programmierung im Grunde gebrochen, und es hat alle Aktionen eingefroren. Wenn wir es verbrennen, kehrt es in einen ätherischen Zustand zurück und kann den normalen Betrieb wieder aufnehmen. Wenn dieser Wille in die Luft gespritzt wird, können wir ihn auf verschiedene Weise nutzen. Einige von ihnen sind einfacher Natur, während andere ziemlich mächtig sind. Jedes Stück hat seinen eigenen gespeicherten Willen, wobei jede Art von Willen einzeln gespeichert ist (mehr dazu in einem anderen Abschnitt). Dieser Wille kann von anderen Blöcken und Gegenständen aufgerufen und manipuliert werden. -guide.bloodmagic.entry.demon.types.info=Bis jetzt ist die einzige Art von Dämonenwille, die wir besprochen haben, der rohe Wille. Wie der Name schon sagt, ist es die roheste und unverfälschteste Form des Willens, die es gibt, aber das bedeutet nicht, dass es rein ist. Tatsächlich nimmt Dämonischer Wille viele verschiedene Formen an: Roh ist der Typ, mit dem wir es normalerweise zu tun haben, aber es gibt auch korrosiv, zerstörerisch, rachsüchtig und standhaft. Der rohe Wille besteht aus einer Mischung aller vier dieser Typen und vielleicht mit anderen, noch unentdeckten Typen, aber wenn man sie einmal in diese verschiedenen Willenstypen aufgeteilt hat, scheint es unmöglich, sie zu rekombinieren.\n\tEs ist noch nicht klar, ob diese verschiedenen Typen von Willen aus verschiedenen Quellen stammen, aber wir kennen den Prozess der Erzeugung dieser verschiedenen Typen von Willen. Das Ritual "Resonanz des facettierten Kristalls" kann einen rohen Willenskristall in seine reinen Teile zerlegen, mehr dazu im entsprechenden Eintrag in "Der Ritualmeister". Ein Gerät, um rohe Willenskristalle zu erhalten, ist der Dämonenkristallisierer, dessen Eintrag weiter unten zu finden ist. Es mag mehr Arten von Willen geben, aber sie sind entweder nicht rein genug oder können einfach nicht in dieser Form erschaffen werden.\n\tKorrosiv repräsentiert den Wunsch, alle Dinge um sich herum zu zerstören, entweder mit Säure oder durch zermalmende Kraft. Wer diesen Willen beherrscht, kann lähmende Status-Effekte ausüben und ist immun gegen schreckliche Gifte.\n\tRachsüchtig kann als das Verlangen angsehen werden, ein Ziel ohne Ermüdung zu jagen. Normalerweise kann dies entweder als eine erhöhte Geschwindigkeit des Körpers gesehen werden, die Beute zu suchen, oder um sicherzustellen, dass ein Ziel nicht in der Lage ist, zu entkommen, während es ständig angegriffen wird.\n\tZerstörerisch, wie du wahrscheinlich ahnst, ist pure Kraft. Wenn dieser Wille richtig eingesetzt wird, können Angriffsstärke und allgemeine körperliche Fähigkeiten gewonnen werden. Es kann auch verwendet werden, um Dinge zu zerquetschen und zu zerschlagen, wenn es in anderen Anwendungen verwendet wird.\n\tStandhaft ist das Verlangen, sich von Schaden zu schützen. In den meisten Fällen sind die Herren dieses Willens das defensive Bollwerk der Gruppe, das in der Lage ist, mächtigen Angriffen standzuhalten und sie nicht einmal zu spüren. Wenn du am Leben bleiben musst, durch Rüstung oder durch Rituale, ist dies eine Wahl, die in Betracht gezogen werden sollte. -guide.bloodmagic.entry.demon.crucible.info=Der Dämonenschmelztiegel ist ein Gerät, das in der Lage ist, den Dämonenwille in einem tartarischen Juwel und anderen Gegenständen zu verbrennen, um ihn in die Aura des Chunks, in dem er sich befindet, zu injizieren. Es gibt verschiedene Möglichkeiten, den Tiegel zu benutzen: Eine der einfachsten Möglichkeiten ist es, ein tartarisches Juwel in den Tiegel zu legen, indem man mit der rechten Maustaste darauf klickt und ein solches Juwel in der Hand hält. Der Tiegel entleert dann den Willen aus dem Juwel, bis entweder die Aura mit dieser Art von Willen gesättigt ist (standardmäßig maximal 100) oder bis das Juwel leer ist.\n\tEin anderer Modus ist, das enthaltene Juwel zu benutzen, um den Willen aus der Aura zu ziehen - dies geschieht, indem man ein starkes Redstonesignal an den Tiegel anlegt und dann wird das enthaltene Juwel versuchen, so viel Willen wie möglich zu entziehen.\n\tZu guter Letzt kann ein einzelnes Stück dämonischen Willens verbrannt werden, solange die Aura genügent Platz bietet. Ein Beispiel dafür ist ein Willenskristall, der einen Wert von 50 hat. -guide.bloodmagic.entry.demon.crystallizer.info=Wie zuvor besprochen, ist die Dämonen-Aura die ätherische Manifestation des Dämonenwillens, und die Substanz, die man erhält, wenn man einen Mob tötet, ist dessen physische Manifestation. Der Dämonenkristallisierer fungiert als Ankerpunkt für den Dämonenwillen in der Aura, sodass sich dieser daran physisch manifestieren kann und verwandelt den ätherischen Willen wieder in eine physische Form als Kristalle.\n\tSicher wundert es dich, warum man den Willen nicht einfach aus einem tartarischen Juwel in einen Kristall formen kann. Denn indem wir den Willen in seine ätherische Form transformieren, reinigen wir ihn und erlauben dem Willen, seinen normalen Betrieb wieder aufzunehmen - denke daran, dass wir die Programmierung des Willens einfrieren, wenn wir ein Monster mit Dämonenwillen töten, so dass es nicht tun kann, wozu es ausgesandt wurde. Durch die Umwandlung in die ätherische Form in der Aura wird der Wille aktiver, und das ist der Wille, der vom Kristallisierer ergriffen wird. Schaut es einfach nicht komisch an.\n\tDamit der Dämonenkristallisierer funktioniert, muss er in einem Chunk mit einem hohen Anteil an Dämonen-Willen (80) eines bestimmten Typs stehen. Nach einer gewissen Zeit wird er den Willen der Aura verbrauchen, um eine Gruppe Dämonenkristalle mit einem einzigen Turm zu erschaffen. Es gibt zwei Möglichkeiten, wie der Kristallisierer wirken kann: Er kann einen Kristall aus einem bestimmten Willenstyp (korrosiv, zerstörerisch, rachsüchtig und unerschütterlich) bilden, wenn es genug Willen dieses bestimmten Typs gibt, oder er wird den rohen Willen aus der Aura nehmen, um einen Kristall zu erschaffen. In früheren Inkarnationen des Geräts war es möglich, rohen Willen aus der Aura in andersartige Kristalle zu verwandeln. Das ist jedoch nicht mehr der Fall: Ihr könnt immer noch neue Türme eines bestimmten, angestrebten Willens erschaffen, wenn es genug davon in der Aura gibt, aber ihr müsst andere Mittel suchen, um die vielen Aspekte vom rohen Willen zu trennen. Siehe den Eintrag "Resonanz des facettierten Kristalls" in "Der Ritualmeister" für weitere Details. -guide.bloodmagic.entry.demon.cluster.info=Der Dämonen-Kristallhaufen kann entweder von einem Dämonen-Kristallisator oder in der Höllenfeuer-Schmiede mit Dämonen-Will-Kristallen erschaffen werden. Handwerkliche Cluster können auf jeder festen Oberfläche, wie z.B. dem Boden, den Wänden und den Decken platziert werden. Es gibt maximal sieben Türme auf dem Kristall, wenn er ausgewachsen ist, und wenn er mit einer Spitzhacke gebrochen wird, wird er die Türme als Dämonen-Will-Kristalle fallen lassen. Wenn du jedoch mit der rechten Maustaste auf den Cluster klickst, wenn du einen Weinstein mit mehr als 1024 rohem Willen in ihm hast, kannst du einen einzelnen Turm aus dem Cluster abbrechen, ohne den Cluster selbst zu brechen; dies wird niemals den Hauptturm aus dem Cluster brechen.\n\tWenn der Cluster zu seinen eigenen Geräten zurückkehrt, wird er einen Willen des gleichen Typs aus der Aura absaugen, um sich langsam zu entwickeln. Es gibt zwei Rituale, die benutzt werden, um diese Kristalle zu züchten und zu ernten: die "Versammlung der Verlassenen Seelen" und der "Riss des gebrochenen Kristalls ". Um herauszufinden, wie man sie benutzt, finde diese in "Der Ritualmeister". -guide.bloodmagic.entry.demon.pylon.info=Wie ihr vielleicht wisst, bleibt die Dämonen-Aura in ihrem eigenen Chunk, wenn es keine äußeren Einflüsse gibt. Nun, das ist einer dieser Einflüsse. Der Dämonenpylon fungiert als Leuchtfeuer für den Willen in der Aura und zieht den Willen aus den benachbarten Chunks (die Chunks, die in den vier Himmelsrichtungen direkt daneben liegen, nicht diagonal) in seinen Chunk. Der Pylon wird versuchen, den Willen in seinem Chunk mit seinem Nachbarn auszugleichen, so dass der Chunk des Pylons für jeden Willenstyp so viel Willen hat wie sein höchster Nachbar. Dieser Prozess geschieht jedoch nur in eine Richtung: Wenn der benachbarte Teil weniger Wille hat als der Teil des Pylons, wird der Wille nicht auf die Nachbarn übertragen. -guide.bloodmagic.entry.demon.gauge.info=Um zu sagen, wie viel Wille du in einem bestimmten Chunk hast, brauchst du einen Dämonischen Auramesser. Wenn sich dieser in deinem Inventar befindet, zeigt die Anzeige den Willen in dem Chunk an, welcher auf fünf Balken oben links auf dem Bildschirm abgebildet wird. Wie viel es genau ist, kann an der Verschiebung erkannt werden; rechts neben den Balken erscheinen Zahlen, die den Betrag auf die nächste ganze Zahl gerundet darstellen. - - - -# Alchemy Entries -guide.bloodmagic.entry.alchemy.intro=Einführung -guide.bloodmagic.entry.alchemy.ash=Arkane Asche -guide.bloodmagic.entry.alchemy.speed=Bewegungs-Anordnung -guide.bloodmagic.entry.alchemy.updraft=Aufwind-Anordnung -guide.bloodmagic.entry.alchemy.bounce=Abprall-Anordnung -guide.bloodmagic.entry.alchemy.turret=Skelettgeschütz-Anordnung -guide.bloodmagic.entry.alchemy.buff=Effekt-Anordnungen -guide.bloodmagic.entry.alchemy.fastMiner=Anordnung der Eile -guide.bloodmagic.entry.alchemy.furnace=Anordnung des Brennenden Ofens -guide.bloodmagic.entry.alchemy.teleport=Teleportations-Anordnung -guide.bloodmagic.entry.alchemy.standardTurret=Geschütz-Anordnung -guide.bloodmagic.entry.alchemy.laputa=Splitter von Laputa - - -# Alchemy Entry Texts -guide.bloodmagic.entry.alchemy.intro.info=Mein Name ist Vlad Highborn, und ich bin ein Blutmagier. Ich habe die komplizierte Funktionsweise der Alchemie und den Prozess des "Äquivalenten Austausches" studiert, der alle Aspekte der Magie regelt. Grundsätzlich kann man nichts aus dem Nichts erschaffen, obwohl viele es bei der Suche nach einem bestimmten Stein versucht haben. Das ist offensichtlich nicht gut ausgegangen, denn auch heute werden viele Leute durch eine Fälschung getäuscht. Natürlich reicht es nicht aus zu sagen, dass ich Alchemist bin, denn eines der wichtigsten Dinge, die ich tue, ist das Studium der Blutmagie mit dem Ritualmeister und dem Architekten, die beide diese Titel durch ihre eigenen Verdienste erworben haben. Magus und Tiberius waren im Laufe der Jahre damit beschäftigt, ihre eigenen Werke aufzunehmen, obwohl ich nicht glaube, dass Magus alles in einem Buch niedergeschrieben hat - ich habe noch keinen wirklichen Beweis gefunden. Von den Anwendungen der Arkanen Asche bis hin zu den komplizierten Funktionen des Alchemietisches findest du alles, was du über einige der komplexeren Elemente der Welt wissen musst. Nicht alles, was du wissen musst, ist in diesem Buch - für ein vollständiges Verständnis über Blutmagie musst du die anderen Einträge in diesem ganzen Band lesen. Du wirst keine Lügen zwischen diesen Seiten finden. -guide.bloodmagic.entry.alchemy.ash.info=Arkane Asche ist notwendig, um Alchemische Anordnungen zu erzeugen, mächtige Kreise, die verschiedene Effekte erzeugen können. Diese Asche wird mit der Höllenfeuerschmiede und Dämonenwilen hergestellt, wenn dir dieses Konzept also neu ist, konsultiere bitte das "Dämonenkind". Die Asche hat insgesamt zwanzig Verwendungen, bevor du eine weitere herstellen musst. Wenn du mit der rechten Maustaste auf den Boden (oder eine Wand, obwohl sie nur eine Richtung darstellt) klickst, schreibst du einen einfachen Kreis aus Asche ein. Wenn du die Asche erneut mit einem Gegenstand anklickst, wird dieser "in die Asche gelegt" - vorausgesetzt, dass dieser Gegenstand gültig ist, ändert sich die Form des Kreises, um anzuzeigen, dass er für den nächsten Gegenstand bereit ist. Wenn es sich nicht ändert, dann hast du etwas falsch gemacht. Sobald es sich verändert hat, kannst du den zweiten Gegenstand hineinlegen. Wenn dieser Gegenstand mit dem ersten übereinstimmt, beginnt sich der Kreis zu drehen und führt je nach dem Rezept, an dem er arbeitet, verschiedene Aktionen aus. Jeder Effekt, der nicht der Herstellung eines neuen Gegenstands dient, der mit diesen Arrays durchgeführt werden kann, kann in diesem Buch gefunden werden, und selbst wenn sich das Rezept durch Dritte ändert, wird es hier aktualisiert angezeigt. Die angezeigten Artikel sind die Reihenfolge, in der sie platziert werden müssen. -guide.bloodmagic.entry.alchemy.speed.info=Die Bewegungs-Anordnung erzeugt in dessen Zentrum einen kleinen Luftwirbel und nutzt eine kleine Menge an Energie, um diesen aufzuheizen. Danach, wenn ein Tier oder eine andere Art von Wesen in seinen Wirkungsbereich kommt, wird es in der Richtung, in die es durch die Kraft der Luft gebracht wurde, nach vorne geschleudert. Außerdem beseitigt das Array bei einem Sturz aus großer Höhe den Sturzschaden, der entstanden wäre. Sei einfach auf eine leichte Bewegung vorbereitet. Die Bewegungsrichtung ist in Richtung des Pfeils auf der Anordnung. Es sollte auch beachtet werden, dass du eine viel größere Distanz gewinnen wirst, wenn du auf das Array fällst oder springst, als wenn du einfach in sein Gebiet gehst. Das hat mit den Turbulenzen deiner Bewegungen zu tun, die eine viel größere Reaktion hervorrufen. -guide.bloodmagic.entry.alchemy.updraft.info=Mit den gleichen Prinzipien wie das Movement Array, lässt diese Anordnung eine Entität, die darauf trifft, in die Luft steigen. Natürlich muss jeder Benutzer vorsichtig sein, denn der Weg nach unten kann etwas beschwerlich sein! -guide.bloodmagic.entry.alchemy.bounce.info=Durch die Verwendung einer Wärmequelle in der Nähe des Zentrums, die nach unten gedrückt wird, versucht diese Anordnung, den Untergrund zu erweichen. Danach wandelt es Kohlenstoff und Wasserstoff in ein gummiartiges Material im Inneren der Erde um. Diese Kombination führt dazu, dass jede Entität, auf der Oberfläche aufprallt und der Sturzschaden beseitigt wird, der sonst entstehen würde. Dieses Aufprallen kann durch einfaches Schleichen gestoppt werden und dämpft dennoch den Sturz. -guide.bloodmagic.entry.alchemy.turret.info=Durch die Verwendung des Dämonenwillens, der immer noch ein Mob kontrolliert, kannst du den Verstand eines Skeletts übernehmen, um es dazu zu bringen, deine Befehle auszuführen. Wenn sich ein Skelett innerhalb des Bereichs dieser Anordnung befindet, wird es als Wachposten fungieren und feindliche Monster in der Nähe angreifen. Leider ist dieser Anordnung immer noch sehr experimentell, so dass es möglicherweise nicht sehr gut oder konsequent funktioniert. -guide.bloodmagic.entry.alchemy.buff.info=Durch rigorose Studien erkennt man, dass Alchemische Anordnungen ein breites Anwendungsspektrum haben. Bis jetzt ist es dir gelungen, mächtige Gegenstände durch Herstellung mit Alchemischen Anordnungen zu erschaffen, sowie ein paar Anordnungen, die funktionelle Vorteile wie schnelle Bewegung und schwache Formen der Teleportation bieten. Eine der Anwendungen, die du bisher noch nicht genutzt hast, ist die Bereitstellung mächtiger Stärkungszauber durch ein aktives Array.\n\t "Sträkungsanordnungen" sind die allgemeine Bezeichnung für Alchemische Anordnungen, die den Spielern in ihrem Wirkungsbereich einige Stärkungszauber bieten. Diese Wirkungsbereiche haben tendenziell einen sehr großen Radius, der nicht manipulierbar ist (im Gegensatz zu Ritualen). Da Alchemische Anordnungen jedoch kein Konzept eines Seelen-Netzwerks haben, müssen sie ihre Wirkung auf andere Weise entfalten: hauptsächlich durch direkte Blutopfer. Vereinfacht ausgedrückt bedeutet dies, dass die Anordnung, wenn es einen Stärkungszauber anwendet, dem Spieler, auf den es gewirkt wird, Schaden zufügt (HP nimmt). Aufgrund der direkten Natur dieser Opfer ist die HP -> Stärkungszauber-Konvertierung für Spieler im frühen Spiel viel günstiger als ähnliche Buffs im Mod. Wenn zum Beispiel ein Stärkungszauber von einem Siegel 100 LP für 10 Sekunden Aktivierung kostet, kann ein stärkerer Stärkungszauber von dem Array für 30 Sekunden für 1 HP angewendet werden (das sind 100 LP in einem T1-Altar ohne Runen). Dies kann in den frühen Stufen als viel effizienter angesehen werden, während es in den späteren Stufen nicht so effizient ist. Wegen des stationären Charakters der Arrays werden sie jedoch einen stärkeren Effekt haben als ihre Siegelgegenstücke, so dass man sie vielleicht noch im späten Spiel verwenden möchte. -guide.bloodmagic.entry.alchemy.fastMiner.info=Wenn es darum geht, ein großes Stück Land auszuheben, ist es manchmal am besten, es einfach von Hand zu machen. Für diese Gelegenheiten ist diese Anordnung genau das Richtige für dich. Die Anordnung wendet einen Eile III Stärkungszauber auf Spieler innerhalb eines Radius von 10 Blöcken an und kostet den Benutzer 1 HP pro 30 Sekunden. Da es sich um einen allgemeinen Eile-Effekt handelt, erhöht es auch dein Angriffstempo im Wirkungsbereich, obwohl du vorsichtig sein musst, da auch andere Spieler davon profitieren werden! -guide.bloodmagic.entry.alchemy.furnace.info=Eines der vielen Probleme, auf die du zu Beginn deines Abenteuers stoßen könntest, ist die Unfähigkeit, deine Öfen in Betrieb zu halten. Ein angezündeter Ofen kann den Unterschied zwischen einem vollen Magen und starken Waffen oder dem Verhungern in einer Höhle bedeuten. Die Anordnung des Brennenden Ofens, wie der Name schon sagt, wird eine dringend benötigte Wärmequelle für jeden Ofen in der Nähe sein. Indem die Anordnung direkt neben einem gewöhnlichen Ofen platziert wird (es können mehrere sein), wird diese dem Ofen Brennstoff liefern, wenn ein Vorgang abgeschlossen werden kann - nichts wird passieren, wenn es neben einem leeren oder vollen Ofen steht, hauptsächlich zu deinem Schutz. \n\tNatürlich kommt das nicht ohne seine Kosten: wenn sich eine Person in der Nähe aufhält (innerhalb eines Radius von 10 Blöcken), wird die Anordnung ein halbes Herz für bis zu zwei Prozesse im Ofen verbrauchen. Dies wird hilfreich sein, um entweder einen schnellen Biss zu bekommen oder einen vollen Erzstapel zu schmelzen, aber leider hast du keine Möglichkeit gefunden, der Anordnung irgendwelche Sicherheitsmaßnahmen hinzuzufügen... -guide.bloodmagic.entry.alchemy.teleport.info=Das Teleportations-Anordnung dient als Möglichkeit, sofort von einem Ort zum anderen zu reisen, mit einigen spezifischen Einschränkungen. Wenn ein Spieler oder eine andere Entität auf die Anordnung tritt, sucht diese bis zu 20 Blöcke entfernt in der Richtung, in die es zeigt, nach einer anderen Alchemischen Anordnung (die nicht aktiv sein muss). Wenn es der Anordnung gelingt, ein Ziel zu finden, wird sie die Entität sofort zur gefundenen Anordnung teleportieren, sogar durch Wände hindurch. Das Studium dieses Arrays hat gezeigt, dass es weitere Einschränkungen gibt: Wegen der Natur des Biegens des Raum-Zeit-Gefüges wird eine Teleportations-Anordnung nicht etwas teleportieren, das innerhalb von 2 Sekunden teleportiert wurde. Dies soll allen Komponenten Zeit geben, sich in gewünschter Weise neu zu ordnen. -guide.bloodmagic.entry.alchemy.standardTurret.info=Die Macht, spitze Gegenstände auf weit entfernte Monster zu werfen, kann nicht hoch genug eingeschätzt werden. Die Geschütz-Anordnung ist in der Lage, ein feindliches Monster in der Nähe zu spüren und durch die Verwendung komplexer alchemistischer Mechanismen einen Pfeil zurückzuziehen und abzufeuern, um sein Ziel zu treffen. Die Anordnung sucht nach einem Inventar direkt darunter. Findet sie entweder einen normalen oder einen getränkten Pfeil, wird er aus dem Inventar abgezogen und auf einen Mob geschossen, der sich in einem Radius von 32 Blöcken befindet. \n\t(Aufgrund einer dummen Minecraft-Physik, bei der Pfeile von Wesen abprallen, die zu nahe am Entstehungsort sind, wird der Turm auch nur auf einen Mob feuern, der mehr als 3 Blocks entfernt ist. Denke daran!) -guide.bloodmagic.entry.alchemy.laputa.info=Es gibt eine Geschichte über ein verlorenes Königreich, das so fortgeschrittene Magie hatte, dass es durch die Wolken fliegen konnte. Obwohl dieses Königreich inzwischen zu Staub zerfallen ist, haben es einige Zeichnungen dieser Burg am Himmel geschafft, exquisite Details über die Mechanismen zu liefern, die sie zu der Legende werden ließen, die sie ist. \n\tDer Splitter von Laputa wandelt die Lebensessenz, die sich in der Erde befindet, in eine mehr aviäre Form um, wodurch die Umgebung in der Luft schwebt. Während das zugrundeliegende Prinzip einfach ist, verursachen die Variationen der Lebensessenz in der Erde ein wenig Inkonsistenz in der Art und Weise, wie viel Land bewegt wird. Das Array bewegt die Erde in einem kugelförmigen Radius zwischen 4 und 8 Blöcken über sich selbst um einen zufälligen Versatz zwischen einem und 5 Blöcken plus dem doppelten Radius des Effekts. Es sollte beachtet werden, dass, sobald der Effekt beginnt, alle Elemente, die zur Aktivierung des Arrays verwendet werden, verloren gehen. diff --git a/src/main/resources/assets/bloodmagicguide/lang/en_US.lang b/src/main/resources/assets/bloodmagicguide/lang/en_US.lang deleted file mode 100644 index 19683fb1..00000000 --- a/src/main/resources/assets/bloodmagicguide/lang/en_US.lang +++ /dev/null @@ -1,270 +0,0 @@ -# Book Information -guide.bloodmagic.title=Sanguine Scientiem -guide.bloodmagic.display=Sanguine Scientiem -guide.bloodmagic.author=Blood Magic -guide.bloodmagic.welcome=Blood Magic - -# Page Information -guide.bloodmagic.page.bloodAltar=Blood Altar Recipe -guide.bloodmagic.page.soulForge=Hellfire Forge Recipe -guide.bloodmagic.page.tier=Tier: %d -guide.bloodmagic.page.lp=LP: %d -guide.bloodmagic.page.minimumWill=Minimum Will: %f -guide.bloodmagic.page.drainedWill=Drained Will: %f -guide.bloodmagic.shapelessOrb=Shapeless Orb Recipe -guide.bloodmagic.shapedOrb=Shaped Orb Recipe -guide.bloodmagic.page.alchemyArray=Alchemy Array - - -# Categories -guide.bloodmagic.category.architect=The Architect -guide.bloodmagic.category.ritual=The Ritual Master -guide.bloodmagic.category.demon=The Demon Kin -guide.bloodmagic.category.spell=The Battle Mage -guide.bloodmagic.category.alchemy=The Alchemist - -# Ritual Master Entries -guide.bloodmagic.entry.ritual.intro=Introduction -guide.bloodmagic.entry.ritual.basics=The Basics of Rituals -guide.bloodmagic.entry.ritual.ritualStone=Ritual Stones -guide.bloodmagic.entry.ritual.masterRitualStone=Master Ritual Stone -guide.bloodmagic.entry.ritual.activationCrystal=Activation Crystals -guide.bloodmagic.entry.ritual.diviner=The Ritual Diviner -guide.bloodmagic.entry.ritual.fullSpring=Ritual of the Full Spring -guide.bloodmagic.entry.ritual.lava=Serenade of the Nether -guide.bloodmagic.entry.ritual.greenGrove=Ritual of the Green Grove -guide.bloodmagic.entry.ritual.magnetism=Ritual of Magnetism -guide.bloodmagic.entry.ritual.crusher=Ritual of the Crusher -guide.bloodmagic.entry.ritual.highJump=Ritual of the High Jump -guide.bloodmagic.entry.ritual.speed=Ritual of Speed -guide.bloodmagic.entry.ritual.wellOfSuffering=Well of Suffering -guide.bloodmagic.entry.ritual.featheredKnife=Ritual of the Feathered Knife -guide.bloodmagic.entry.ritual.regen=Ritual of Regeneration -guide.bloodmagic.entry.ritual.harvest=Reap of the Harvest Moon -guide.bloodmagic.entry.ritual.interdiction=Ritual of Interdiction -guide.bloodmagic.entry.ritual.containment=Ritual of Containment -guide.bloodmagic.entry.ritual.suppression=Dome of Suppression -guide.bloodmagic.entry.ritual.expulsion=Aura of Expulsion -guide.bloodmagic.entry.ritual.zephyr=Call of the Zephyr -guide.bloodmagic.entry.ritual.laying=Laying of the Filler -guide.bloodmagic.entry.ritual.timberman=Crash of the Timberman -guide.bloodmagic.entry.ritual.meteor=Mark of the Falling Tower -guide.bloodmagic.entry.ritual.downgrade=Penance of the Leadened Soul -guide.bloodmagic.entry.ritual.crystalSplit=Resonance of the Faceted Crystal - -# Ritual Master Entry Text -guide.bloodmagic.entry.ritual.intro.info=Good evening. My name is Magus Arcana. I have had many guises over the years: a thief and a vigilante, a wizard and a warrior, a roaming nomad and even a politician. The title that I hold nowadays is one that many cannot comprehend, that at the very mention of it brings forth images of brutality that in some cases have been earned but in many others are misguided. I am of course talking about being a Blood Mage, though my friends simply call me Magus whereas my enemies refer to me as The Ritual Master.\n\tMy students have been pestering me for many months now, attempting to get me to document all of the myriad adventures that I have had in some form of book for me to distribute among any aspiring mages. I had been resistant, but it was Tiberius who put it best: "Although you may not see the value of it yourself, hearing the intricacies of any sort of craft from a man who has achieved mastership of the field will prove invaluable for future generations. It doesn't matter how accurately someone else retells it, if you don't have the utmost confidence in a source the gold sand could be nothing more than sulfur." You could tell he was delving into a bit of alchemy at that point, but since he was my first student for a long time I tend to value his opinion.\n\tSo, aspiring Blood Mage, training in the arcane that many yet do not fully understand, lend me your ears for these are words worth heeding: the field that you are studying has many aspects, and without careful consideration you may find your tools lacking. Therefore make sure to review this book often - I have put many enchantments on the tome that you carry with you so that whenever I write in my master copy the words will change for you.\n\tSo sit back, relax, and enjoy the teachings of a very old man. You may learn more than you've bargained for. -guide.bloodmagic.entry.ritual.basics.info=Modern day rituals are a lot different from those that were conducted centuries past. There was a time when people would inscribe arcane constructs out of dust on the ground and dance around until they got what they wanted. I even remember one hermit witch who gathered energy from her garden. I laughed at it all until she sicced her pet owl on me. \n\tThe rituals that Blood Mages use require the precise alignment of marked stones to focus and transform the power that a mage pumps into it. One day, my apprentice Tiberius was rummaging through some of the old artifacts that I had procured over the years in the closet of his new room. There was a vial of liquid Etherium that I haven't touched in ages (I was meaning to get back to that, but I haven't had any time) as well as a crystal ball that always seemed to say "Tuesday" when you peered through the glass. When one of the boxes that was labeled "Runic Dust" was knocked over a small red gem tumbled out and knocked against Tiberius's foot. Immediately a bright ruby light emanated from it and reacted with the dust in the box that he was carrying.\n\tNaturally, an explosion occurred. The unfocused energy that Tiberius inadvertently released through the gem sparked the runic dust and stones around him, and without a means of containing the power it simply was pushed outwards. After a few days in the medical ward, Tiberius and I started to get to work.\n\tThrough a mixture of several sleepless nights and a hardy helping of caffeine (I've really got to thank Mister Player for the coffee supply, I salute your efforts for a more awake tomorrow!) we eventually perfected the key ingredients for all rituals.\n\tThrough our experimentation, we learned that we needed four different things: we needed a bunch of ritual stones placed around an area in a set pattern, a few different inks that are applied to the ritual stones to help further specify the pattern, a central ritual stone that acts as a central conduit of power, and a crystal that activates the ritual. I think it's best to talk about these one by one. -guide.bloodmagic.entry.ritual.ritualStone.info.1=The Ritual Stone acts as a simple receptacle for magical energy, shaping it and further redirecting it in different ways depending on how the stone is configured. When you start off, there are five different stones that you have access to: Blank (the base stone that does not have any markings applied), Water, Fire, Air, and Earth. Every single ritual will have a number of these, and depending on how they are arranged around the Master Ritual Stone the overall effect will be different. -guide.bloodmagic.entry.ritual.ritualStone.info.2=In order to inscribe the correct symbols onto the ritual stones you must have a set of inscription tools. I have since developed a method for people to more easily apply the correct inks to the ritual stones while placing them in the correct configuration, but if one were to wish to do this manually they can use these tools. When you activate a ritual stone with one of the inscription tools in your hand (right clicking on the stone) you will apply some ink to the stone, changing it to the same type as the tool. In early tiers, you only have access to the base four colours, however once you become more powerful you will have more tools at your disposal. -guide.bloodmagic.entry.ritual.masterRitualStone.info=As with most magics, without a guiding force the effect of the ritual will either become uncontrollable or simply will not work at all. Thus, in order to control the rituals a Master Ritual Stone is required (I usually abbreviate this to "MRS" in my notes, but saying it in public is a little awkward. "I need more mrs please!"). The MRS takes in power from the owner's Soul Network and pushes it through the ritual stones, thus performing the ritual. \n\tAttaching the Soul Network to a large stone that we don't hold in our hands proved to be a bit tricky. I managed to do this one time by meditating on top of the stone in the lotus position, focusing my power through the stone and trying to link the tendrils of my network into the inner workings of the ritual. Although I got it working for a few minutes, all I was really awarded was a pair of wet pants as water condensed onto the ritual stones. I've learned to not meditate on any of my experiments again. -guide.bloodmagic.entry.ritual.activationCrystal.info.1=Instead of waiting an hour at a time to meditate a ritual active, we took the red gem that fell out of the box originally and started to analyze it. Tiberius was certain that it had the ability to "establish links between the corporeal realm of our reality and the incorporeal essence that is the manifested Soul Network." Sometimes I wonder if it was a good idea to have him become my apprentice, but it is times like these that I see his knack for the more arcane aspects of magic. Oh, I should probably write what he meant in English: by using this crystal, we could link our soul networks to the Master Ritual Stone in order to supply it with energy. -guide.bloodmagic.entry.ritual.activationCrystal.info.2=Thus we had ourselves a Weak Activation Crystal and a means in which to recreate its structure. The main ingredient for the crystal is another crystal that can be linked to my Soul Network: a Lava Crystal. Then, by quickly inscribing some instructions onto the crystal's surface the Blood Altar can do the rest of the work to transmute it into an activation crystal. Naturally, this crystal has to be bound to the user's soul network in order to function. When the ritual's stones are laid correctly around the MRS, the user should touch the activation crystal to the MRS and push out enough energy to jump start the ritual in question. If you have enough LP inside of your Soul Network the ritual will activate. If you do not, or if the stones are not laid out correctly, the ritual will simply not activate and no LP cost is incurred. -guide.bloodmagic.entry.ritual.diviner.info.1=After discerning the size and layout of many rituals I started to find it a little bothersome to continually consult my notes in order to build the rituals. That is why I worked to create a device that would allow anyone to simply place down the stones in the correct position through simple gestures and movements. I've placed this entry further up the list chronologically because it is best for people to learn of this item before starting with the actual construction of rituals. Otherwise they may find out that they don't have everything they need, or will summon a meteor from hell instead of a fresh bottle of spring water. -guide.bloodmagic.entry.ritual.diviner.info.2=The Ritual Diviner is essentially an encyclopaedia for rituals. By cycling through the diviner (shift-left click and shift-right click) you can select a different ritual from its store of knowledge. Gazing into the diviner will also tell you some simple information about the ritual. If you have Ritual Stones on your person and you touch the diviner onto the MRS (right click) you can place a stone for the ritual you want to construct. Doing this enough times will net you a completed ritual! -guide.bloodmagic.entry.ritual.fullSpring.info=A few years ago a travelling merchant stopped by the village near my house, peddling his wares to all who were willing to part with their coin. There was a drought at the time and the crops were dying, so the merchant brought forth a silver talisman with a blue gem set inside of it. "This, my friends," he said with great zeal, "will make sure that your rivers will not dry out! By using alchemy I can bring forth water from the very air!"\n\tUnfortunately for the village it seemed that the gem was a simple piece of sapphire, and before anyone realized that they were tricked he was already several miles away. I tend to not intervene in the affairs of the village because they tend not to like my magic, but in this case I made an exception. After I had a lovely chat with the "alchemist," I spent a few hours meditating near the irrigation channels. By condensing the water vapour in the air I managed to create enough water to keep the crops watered until the next downfall. This wasn't exactly an efficient method and I was drained for the next few days, using some of the water from the channel to rehydrate myself.\n\tRemembering this, I employed the same principles to create the Ritual of the Full Spring. By channeling a small amount of energy into the ritual, it condenses the moisture in the air around it to produce a source of water on top of the master ritual stone. The cost to activate the ritual is fairly insignificant, and the maintenance even more so. \n\tThe water's range can be expanded by using the ritual tinkerer and even placed in a different location, so one does not need to worry about where a ritual is placed if they are worrying about aesthetics. The miracles of magic! -guide.bloodmagic.entry.ritual.lava.info=Lava, perhaps one of the most rudimentary power sources. I tend not to use it much in my own research because it can be a little difficult to work with - it's not like you can use a simple iron bucket to pick some up! \n\tOne of the local tinkerers came by my house one day asking me if there were any sources nearby since they recently acquired some new hardware that they needed to power. I said that there were a few but most of them were already owned, but I decided to come to his place to look at the contraption.\n\tIt was a smeltery at least 5 metres high and just as wide, hooked up to several tanks that stood empty and barren. Although I wasn't entirely sure on how it operated I could tell that the raw heat of lava would be perfect for it - electricity would work well if it was modified correctly, but I could tell this wasn't from Immersive Industries. \n\tAfter a small chat with the tinkerer money changed hands and I asked him to stand back as I prepared my ritual stones. To enact what I wished I took four fire stones and arranged them in a cross around the master ritual stone and then pushed hard with my activation crystal while imagining the process in my head. In theory, it should be simple: take some rocks from deep in the earth and compress them with some energy, causing them to melt under the intense pressure and turn molten. This lava could them be retrieved off of the ritual stone and the process can be repeated.\n\tWhile simple in theory, in practice it was a little difficult. For my simple network at the time, the activation cost was quite steep because of the initial pressure required, and the drain for each source of lava was not something I was prepared for. (20000 LP to activate, 500 LP per source block)\n\tI staggered out of the building with a grin on my face, however: the tanks were full of lava, enough to keep the tinkerer in business for a couple fortnights until he could procure a more permanent source of lava. I made sure to pick up my ritual stones after I finished, though. \n\t----------\n\tWith no modifications to the ritual, the ritual will attempt to place a source of lava on the block directly above itself at a cost of 500 LP every tick if there is room, displacing liquids if they are flowing. This placement range, by default, can be expanded to a maximum of 9 blocks at a maximum distance of 3 away from the ritual.\n\tBy augmenting the ritual with Raw Will, the LP cost will decrease in proportion to the Will that is in the Aura, consuming Will proportional to the amount of LP that is saved. Using this Will can also grant the ability to place lava directly into a block's internal tanks, at a rate comparable to normal ritual operations.\n\tCorrosive Will causes the ritual to invert the invincibility granted from fire immunity, causing all entities that are immune to fire within a set area to be damaged severely based on the amount of Will in the Aura. Those that are not immune to fire are unhurt by this effect.\n\tWhen Vengeful Will is applied to the ritual, a volatile gas is released and causes all non-player entities within its specified range to be affected by Fire Fuse. When the timer of the debuff goes to 0, the entity will explode, forcefully propelling them into the air with explosive force.\n\tDestructive Will increases the maximum range and volume that the ritual may influence. The more Will you have, the more lava blocks that can be placed by a single ritual. Thankfully, the ritual does not drain any Destructive Will, however if your Will drops and the ritual's maximum range is lower than what you set it at, the ritual will not work at all until fixed.\n\tFinally, Steadfast Will grants all players within its range a Fire Resistance buff, whose time applied and cost in Will is affected by the amount of Will in the Aura. Careful note should be taken, because if you are affected by Fire Resistance you can be damaged by the ritual's Corrosive effect. -guide.bloodmagic.entry.ritual.greenGrove.info=Last week I started to teach Tiberius his cross-disciplinary magic. Every apprentice that I have had has had to learn another form of magic while learning Blood Magic. It doesn't matter much which one they choose as long as it does not consume some form of finite resource - I used to employ a form of magic from the Ars clan from the far East, but since the world's source of Etherium was consumed into scarcity it died out long ago. \n\tTiberius decided to learn Thaumaturgy, which employs using the magic of the world to perform your magic. This is a good counterbalance to Blood Magic, which uses the magic of life. As such, these magics use different means to perform the same tasks. To demonstrate I decided to highlight the differences to Tiberius when it comes to crop growth.\n\t"Thaumaturgy uses a growth catalyst that is fueled by the essentia Herba," I state while pointing towards the Essentia Flowchart that was pinned to the classroom wall. Sure, Tiberius was sitting at the only desk there, but sometimes a guy has to have some fun. "A small trickle of Aura and this essentia stimulates the photosynthetic process of the plant, encouraging it to grow by giving it more solar energy. This process requires that the soil is well fertilized, or else the crop can simply wither and die."\n\tI then take four earth and water ritual stones and place them in a circle around a master ritual stone. "Conversely, Blood Magic uses a different process." While speaking, I activate the ritual and cover it with some simple dirt. "By using your life force or the energy of animals, you can fertilize the plants in such a way that they don't need as much fertilizer. In essence, it force-feeds the plants so that they always have a high concentration of nutrients."\n\tI throw a few seeds onto the dirt and cover them slightly, uncorking and emptying a vial of water from inside my robes. "This process doesn't need any extra sunlight, because it uses a different source of energy. Though it does work much better when there is some light - the plant isn't exactly used to these sorts of conditions!"\n\tA few shoots have already poked their leaves out of the dirt while I was explaining, seemingly waving in response. I felt the mild strain on my body as each new leaf sprouted, minor each time but when accumulated it started to stack up. Once I finished the class I cleared up the dirt from the experiment and decided to have a nice stroll to the village: I had a bushel of wheat that needed selling. \n\t----------\n\tThe Ritual of the Green Grove, as the name may suggest, accelerates the rate of growth of plants that are nearby. By using the player's blood as a rich fertilizer, it will attempt to grow anything that it deems as a plant, such as wheat and carrots, growing anything within its range periodically. Through default operations, the ritual will look at the 3x3 area two blocks above itself and attempt to grow each block with a 30%% success rate every second. If manipulated with the Ritual Tinkerer, the ritual can handle a maximum of 81 crops at a time within a 5 block radius of the MRS. As another note\n\tWhen augmented with Demon Will, there are several effects that can be obtained. If Raw Will is used, the ritual will perform all operations at an accelerated rate, consuming 0.05 Will per successful growth and increasing its speed relative to how much Will is in the Aura.\n\tIf infused with Vengeful Will, the ritual will consume 0.05 Will per successful growth and will increase the chance that a given operational tick will be successful on the plant. By default without Will it is 30%%, but for instance if you have 100 Vengeful Will the rate will increase to 80%%.\n\tDestructive Will increases the effective maximum range of the ritual, meaning the more Will you have the more crops/plants a single ritual can handle. Thankfully, the ritual does not drain any Destructive Will, however if your Will drops and the ritual's maximum range is lower than what you set it at, the ritual will not work at all until fixed.\n\tSteadfast Will grants the ability to set an area around the ritual that will be automatically tilled and hydrated. Additionally, any seed that is within this range will be planted on a nearby block if possible. This costs a small amount of Steadfast Will, and its effects do not scale with Will in the Aura.\n\tWhen Corrosive Will is used in the ritual, the fundamental nature of the ritual may shift. When supplied and the new range is properly set, any mobs that enter in the ritual's area of influence will have the "Leech" effect applied. Every few ticks, the plants near the mobs will be damaged and the mob will be damaged proportionally. Fertilizing with mobs directly can prove beneficial! Every 10 seconds that the debuff is applied per mob, 0.2 Corrosive Will will be consumed. -guide.bloodmagic.entry.ritual.magnetism.info=The Ritual of Magnetism is the bread and butter of anyone who enjoys quarries. The ritual creates a revolving magnetic field, pulling up the rich ores from the ground underneath it and placing the contents in its area. This does not displace any rock, so no gaping holes will appear in the land - assuming that the land isn't made up entirely of ore. The ritual operates once every 40 ticks and costs 50LP per successful operation.\n\tThe default radius that this ritual operates is 3 blocks in each cardinal direction, giving an area of 7x7 blocks centered on the MRS. Because the ritual currently does not have any Will augments, you can only increase the radius of effect for the ritual by placing a valuable block directly underneath the MRS. If an iron block is used the radius becomes 7. If a gold block is used, the radius becomes 15. Finally, if a diamond block is used the radius expands to 31, meaning any ores below the ritual in a 63x63 area will be slowly pulled up into its 3x3x3 volume above the MRS. -guide.bloodmagic.entry.ritual.crusher.info=The Ritual of the Crusher's operation is rather simple. The ritual needs to have some form of inventory linked to it, which when unaltered simply sits on top of the MRS. While in operation, the ritual will look inside of its crushing range (by default the 3x3x3 area below the ritual) and break one block at a time at a rate of once every 2 seconds at the cost of 7 LP per successful operation. The broken blocks will then be transferred to the linked inventory - if there is no room for the items, they will instead be spewed on top of the chest.\n\tWhen fueled with Raw Will, the ritual will work at a faster rate based on the total amount of Will in the Aura. While sped up, it will consume 0.05 Raw Will per successful operation.\n\tDestructive Will causes blocks that are broken by the ritual to have Fortune applied to it. Currently the fortune level does not vary and is instead level 3 regardless of the Will amount. This will consume 0.2 Will per successful operation, regardless of whether it was useful.\n\tSteadfast Will will instead cause blocks to be broken with the Silk Touch effect. This costs 0.02 Will per operation, and will override the Destructive effect where possible.\n\tCorrosive Will makes it so that blocks that are broken by the ritual will be processed with some form of cutting fluid. This means that for instance if it is an iron block the result will be two pieces of iron sand. The current "cutting fluids" that the ritual uses are: Basic Cutting Fluid and Explosive Powder. The ritual consumes a different amount of Will based on what was used, and will only consume the Will if the effect applies. This overrides Silk Touch where applicable.\n\tVengeful Will causes it so that when a successful operation takes place the inventory has its contents compressed similar to the Sigil of Compression: if there is 65 redstone dust inside of the chest, one block of redstone will be crafted and 56 dust will remain. Will is only consumed when this is successful, and it costs 0.2 Will. -guide.bloodmagic.entry.ritual.highJump.info=This ritual uses a huge burst of air to propel all those who walk on top of it into the sky. What is more, if the user lands in the ritual's area of effect they will not suffer any fall damage. Players who sneak inside this ritual also are not affected.\n\tThe ritual costs 5LP per entity per tick of successful operation, so it won't cost anything if it doesn't fling people in the air. -guide.bloodmagic.entry.ritual.speed.info=As the name may suggest, the Ritual of Speed is used for transportation of various sorts. The ritual may be placed in the direction of any of the cardinal directions and any entities within its range will be launched in the direction that the ritual is pointing. When looking at a ritual, this direction is where the dusk ritual stone is. By default, the ritual has a radius of 2 blocks from the MRS, though this can be expanded or contracted when using a ritual tinkerer. This will apply a speed of 3 blocks/tick in the direction of the ritual and 1.2 blocks/tick vertically.\n\tIf the ritual is fueled with Raw Will, the speed of the ritual is increased substantially based on the Will that is in the Aura. For instance, the speed will be doubled if there is 100 Will inside of the Aura. For each successful operation, 0.1 Will is consumed.\n\tVengeful Will prevents the ritual from moving adult mobs, and Destructive Will prevents the ritual from moving child mobs. If either one of these are used, players are also prevented from using the ritual. If both of them are used, however, the effect is that only players may use the ritual and mobs cannot. These augmentations can be used effectively for sorting animal farms or even getting rid of those pesky child zombies in your sacrificial pen. The ritual will consume 0.05 Will for each type that is in effect on successful operation, so if a child enters the ritual space when you use Destructive Will it will not cost Will or LP. -guide.bloodmagic.entry.ritual.wellOfSuffering.info=For those of you who prefer to use mobs instead of your own health, the Well of Suffering damages all living non-player entities in a 10 block radius and places the health in a connected altar. The ritual will look for a blood altar within its range, checking 5 blocks horizontally and 10 blocks vertically unaltered. When it finds an altar, it will store its location internally - if there isn't an altar nearby, the ritual will not work. The ritual will deal 1 HP per entity and place 25 LP into the altar (100 for peaceful animals), which can be augmented with Sacrifice runes. -guide.bloodmagic.entry.ritual.featheredKnife.info=The Ritual of the Feathered Knife taps into the user's body, draining away their life force in order to fill a blood altar nearby. The ritual will look for a blood altar within its range, checking 5 blocks horizontally and 10 blocks vertically unaltered. When it finds an altar, it will store its location internally - if there isn't an altar nearby, the ritual will not work. When a player then enters within the ritual's damage range, which by default is a radius of 15 blocks horizontally and 20 blocks vertically, the ritual will damage the player for 1HP and then place that health into the connected altar directly (respecting blood runes). There are some safety mechanisms on the ritual, which cause it to not work on a player with less than 30%% of their max health. Unaugmented, the ritual does this once every second.\n\tThere are a few useful augmentations that you can use if you use Demon Will. If Raw Will is consumed by the ritual, the ritual will attempt to damage players within its range at a faster rate, operating twice per second. The ritual will consume 0.05 Raw Will per successful operation.\n\tIf you have more than 10 Steadfast Will in the Aura, the ritual will increase its safety threshold and instead will not work on players with less than 70%% health. This function currently does not consume Will.\n\tIf you have more than 10 Vengeful Will in the Aura, the ritual will remove some of its safety limitations, causing it to work on players until they only have 10%% of their maximum health left. If the ritual also has Steadfast Will augmented onto it the threshold will still be 70%% for the owner of the ritual only. This function currently does not consume Will.\n\tWhen Destructive Will is applied to the ritual, the ritual becomes a lot more efficient with its HP to LP conversion. The amount of LP that is added to the altar per health point increases based on the Will in the Aura, up to a maximum of +20%% for 100 Destructive Will. This effect stacks multiplicatively with runes, Living Armour Upgrades, and Incense. This consumes 0.05 Destructive Will per HP sacrificed.\n\tSpeaking of incense, if Corrosive Will is used in the ritual the ritual will respect the effects of incense on you. If you do not have the Soul Fray debuff on and you are empowered by an Incense Altar, the ritual will consume all of your HP up to the set threshold and pump all of the resultant LP into the altar. It will also remove the incense that you incurred and apply Soul Fray onto you. This effect stacks with the Destructive Will buff. -guide.bloodmagic.entry.ritual.regen.info=Arguably one of the best rituals for any potential Blood Mage who wishes to use his own life force to fuel his magic, the Ritual of Regeneration casts a veil of energy around itself, healing entities that find themselves within its range. Every 2.5 seconds the ritual will cast Regeneration I on living entities in its 15 block radius, costing 100LP per player and 10LP per other living entities for the 2.5 seconds of regen. \n\tIf Corrosive Will is used to augment the ritual a second range will be available, a "vampiric range". Any non-player entities within this range will be randomly damaged in order to directly heal players within the regular healing range. This costs 0.04 Will to use and will transfer 1HP per operational tick. -guide.bloodmagic.entry.ritual.harvest.info=This ritual will seek any harvestable plant block within its range (default is the 9x9x5 high area above the MRS) and try to harvest it, replanting any seeds if the plant can drop seeds. All of the drops from the plant will appear where the plant was harvested. The ritual will attempt to harvest plants once every 5 ticks and will cost 20LP per successful operation.\n\tPlants that can be harvested include, but are not limited to: pumpkins, wheat, carrots, potatos, nether wart, cactus, reeds. Keep in mind that the ritual makes no assumptions about the thing it is harvesting - it can only harvest mod-added crops if the mod in question registers a harvesting handler with the mod. -guide.bloodmagic.entry.ritual.interdiction.info=Based on an archaic alchemical device of legend, the Ritual of Interdiction attempts to forcibly push all non-player mobs away from the center of the ritual. By default, all mobs that are within two blocks of the MRS are pushed away from the MRS by setting their velocity. It should be noted that mobs within this range are not affected by fall damage, though that safety net wears off as soon as they are pushed away. -guide.bloodmagic.entry.ritual.containment.info=The opposite of Interdiction, the Ritual of Containment attempts to pull mobs within its area of effect towards the space above the MRS, suspending them in the air where they cannot move. The default range of the ritual is a 3 block horizontal radius from the bottom of the master stone to the top of the top-most runes, though this range can of course be altered.\n\tThis ritual costs 1LP per mob pulled every tick. -guide.bloodmagic.entry.ritual.suppression.info=The Dome of Suppression "suppresses" all liquids in a set radius, able to temporarily replace fluids in a hemisphere with a 10 block radius with air. If the ritual is turned off, this fluid will return in the same state it was before. This costs 2LP per operational tick. -guide.bloodmagic.entry.ritual.expulsion.info=If you play on a server you can face a situation where you have unwanted player visitors. Sometimes force fields and giant bloody rotors are not enough of a deterrent and they still manage to get into your base. This ritual attempts to alleviate this through the use of teleportation magic!\n\tIf a player that is not the owner enters the range of the ritual (default 12 block radius) the ritual will teleport the player randomly within a radius of 100 blocks away. However, if there is a chest on top of the MRS with a bound item from a player that player will be exempted from the teleportation, acting effectively like a whitelist.\n\tThe ritual costs 2000LP per successful teleportation. -guide.bloodmagic.entry.ritual.zephyr.info=Modelled after an ancient sword of proverb, the Call of the Zephyr uses the power of wind to collect the items that are around it and place them inside of the linked chest (default is right above the MRS). This is done instantly, meaning that the items are teleported directly into the inventory - no need to worry about weird suction effects!\n\tThe default item radius is 5 blocks away from the MRS. -guide.bloodmagic.entry.ritual.laying.info=As many are aware, being able to place blocks can be important in various automation tasks. This ritual takes the items/blocks from the connected chest (defaults to on top of the MRS) and places the blocks within the ritual, which is a radius of 2 on the same level as the MRS. This can be useful if you are trying to lay out saplings for a tree farm or if there are other blocks that must be placed. The ritual takes 50LP per successful operation. -guide.bloodmagic.entry.ritual.timberman.info=Got wood? This ritual has you covered. The Crash of the Timberman tethers a spectral entity using the LP of the owner to harvest the leaves and logs of all trees within its range and places the results inside of the connected chest. It will try to find all "trees" in a 10 block horizontal radius and up to 30 blocks above the MRS (by default) and use 10LP per felled block. -guide.bloodmagic.entry.ritual.meteor.info=For all intents and purposes, this is one of the most powerful rituals currently in the game. It costs one million LP to activate and can only be used once before needing to be reactivated. The ritual, once specific sacrifices are made, pulls a meteor from outer space and causes it to plummet towards the ground, causing a large explosion once it hits something solid. Because these meteors are not from the Overworld, they can hold a rich ore density never seen anywhere else.\n\tSacrifices can include: an iron block, a gold block, a diamond. This is configurable by the modpack or user. -guide.bloodmagic.entry.ritual.downgrade.info=In order to gain more power, sometimes you have to sacrifice something in return. The Penance of the Leadened Soul does just that - by sacrificing a few items to an unseen entity, you may reduce the effectiveness of some aspect of your Living Armour and get an increase in the number of upgrade points as compensation. When you construct the ritual you have to place an item frame on the top-most Blank ritual stone facing towards the Master Ritual stone, and some sort of inventory (see: chest) on top of the Dusk ritual stone. To acquire a Living Armour Downgrade, you then have to place the key item in the item frame and the consumables in the chest. Once the ritual is activated, you can sneak on top of the Master Ritual Stone at any time and acquire the downgrade.\n\tIn the case of the Quenched Living Armour Downgrade, its key item is a water bottle (placed in the item frame) and the recipe is Dragon's Breath (placed in the chest). The key item is never consumed, but the recipe is.\n\tIn order to view the recipe for the downgrades you can look them up in JEI - check the usage of the Master Ritual Stone and you will see the recipes for the Penance ritual. Also you can just check the recipe for the max level downgrade in JEI and then check the usage of the key item - the key item is always the same for the specific downgrade. -guide.bloodmagic.entry.ritual.crystalSplit.info=Once Demon Will has crystalized, there is no way to split it into its many aspects - or so I've thought until now. The "Resonance of the Faceted Crystal" works by separating the many aspects inside of an unaspected (or raw) crystal cluster by using the different aspected ritual stones. \n\tIn order to use the ritual, an unaspected crystal cluster has to be placed two blocks above the Master Ritual Stone. In other words, you can place a crystallizer on top of the MRS and a crystal cluster on top of that and it should work well. Next, you must make sure that there are no blocks directly above the four elemental-based ritual stones, and then wait for the crystal cluster to grow. \n\tAfter the cluster has grown a total of five or more spires, the ritual will split these spires off and create one spire each of Corrosive, Steadfast, Vengeful, and Destructive Will on top of the aspected ritual stones. If the unaspected cluster is allowed to grow further and these new clusters remain intact, the process will repeat and more spires will be added. \n\tThe mechanism for this process is quite simple. When the Raw Will crystal has at least five spires, the ritual breaks off four of these spires and converts the Will into its more incorporeal form. This Will is then pushed threw the final spire of the cluster, which forces the different aspects of the Will into more localized clumps of the particular aspect. This Will is then gathered into the ritual stones, which act as bases for which the new aspected crystal clusters can grow from. - -# Architect Entries -guide.bloodmagic.entry.architect.intro=Foreword -guide.bloodmagic.entry.architect.bloodaltar=The Blood Altar -guide.bloodmagic.entry.architect.ash=Arcane Ash -guide.bloodmagic.entry.architect.divination=Divination Sigil -guide.bloodmagic.entry.architect.soulnetwork=Soul Network -guide.bloodmagic.entry.architect.weakorb=Weak Blood Orb -guide.bloodmagic.entry.architect.incense=Incense Altar -guide.bloodmagic.entry.architect.bloodrune=Upgrading your Altar -guide.bloodmagic.entry.architect.inspectoris=Inspectoris Scandalum (Block Reader) -guide.bloodmagic.entry.architect.runeSpeed=Speed Rune -guide.bloodmagic.entry.architect.water=Water Sigil -guide.bloodmagic.entry.architect.lava=Lava Sigil -guide.bloodmagic.entry.architect.lavaCrystal=Lava Crystal -guide.bloodmagic.entry.architect.apprenticeorb=Apprentice Blood Orb -guide.bloodmagic.entry.architect.dagger=Dagger of Sacrifice -guide.bloodmagic.entry.architect.runeSacrifice=Rune of Sacrifice -guide.bloodmagic.entry.architect.runeSelfSacrifice=Rune of Self Sacrifice -guide.bloodmagic.entry.architect.holding=Sigil of Holding -guide.bloodmagic.entry.architect.air=Air Sigil -guide.bloodmagic.entry.architect.void=Void Sigil -guide.bloodmagic.entry.architect.greenGrove=Sigil of the Green Grove -guide.bloodmagic.entry.architect.fastMiner=Sigil of the Fast Miner -guide.bloodmagic.entry.architect.seer=Seer's Sigil -guide.bloodmagic.entry.architect.magicianOrb=Magician Blood Orb -guide.bloodmagic.entry.architect.capacity=Rune of Capacity -guide.bloodmagic.entry.architect.displacement=Displacement Rune -guide.bloodmagic.entry.architect.affinity=Sigil of Elemental Affinity -guide.bloodmagic.entry.architect.lamp=Sigil of the Blood Lamp -guide.bloodmagic.entry.architect.magnetism=Sigil of Magnetism -guide.bloodmagic.entry.architect.peritia=Tome of Peritia -guide.bloodmagic.entry.architect.livingArmour=Living Armour -guide.bloodmagic.entry.architect.upgradeTome=Living Armour Upgrade Tomes -guide.bloodmagic.entry.architect.teleposer=Teleposer -guide.bloodmagic.entry.architect.boundBlade=Bound Blade -guide.bloodmagic.entry.architect.boundTool=Bound Tools -guide.bloodmagic.entry.architect.weakShard=Weak Blood Shard -guide.bloodmagic.entry.architect.masterOrb=Master Blood Orb -guide.bloodmagic.entry.architect.runeOrb=Rune of the Orb -guide.bloodmagic.entry.architect.suppression=Sigil of Suppression -guide.bloodmagic.entry.architect.haste=Sigil of Haste -guide.bloodmagic.entry.architect.severance=Sigil of Ender Severance -guide.bloodmagic.entry.architect.teleposition=Teleposition Sigil -guide.bloodmagic.entry.architect.compression=Sigil of Compression -guide.bloodmagic.entry.architect.bridge=Sigil of the Phantom Bridge -guide.bloodmagic.entry.architect.mimic=Mimics -guide.bloodmagic.entry.architect.downgrade=Living Armour Downgrades - -guide.bloodmagic.entry.architect.augmentedCapacity=Rune of Augmented Capacity -guide.bloodmagic.entry.architect.charging=Charging Rune -guide.bloodmagic.entry.architect.acceleration=Rune of Acceleration - -guide.bloodmagic.entry.architect.tier3=Tier 3 Under da Sea - -# Architect Entry Texts -guide.bloodmagic.entry.architect.intro.info=Hello, everyone. My name is Tiberius. You can probably tell by this entry that the book is not exactly complete, and you would be right. Because of the 1.7.10 -> 1.8.9 and 1.9.4 (and above) updates, a lot of stuff has changed in the mod. As such, the books have had to be rewritten. Because the ultimate plan for these documents is to have each book in the form of a research journal / actual book, these documents will take a while to flesh out. As such, I am going to be updating this book periodically in order to fill in the necessary gaps. It will start as flavourless garbage to start with (Yeah... not the most appetizing of illustrations to go with for documents, but whatever!), but slowly it will be morphed into a story about a bunch of blood magi on a journey through discovery.\n\tBut enough about that, I need to get into character. *Cough cough*\n\tMy name is Tiberius, and I am a Blood Mage, and also otherwise known as The Architect. This book contains all of my research regarding the ethereal phenomenon called the "Soul Network," as well as the physical properties of some of the most central devices that any Blood Mage in training should be accustomed to. From the art of laying out the structure of a powerful Blood Altar, to the intricacies of sacrificing life force to increase a mage's power, and further to the powers gained through arcane glyphs and sigils, I have discovered, revised, and created new ways into train one's self to new heights.\n\tSo enter, Mage, for a new realm awaits you!\n\t...Yeah, Magus says that I can get a little grandiose, but what can you do? -guide.bloodmagic.entry.architect.bloodaltar.info.1=The Blood Altar is one of the most central devices in the mod. There are two main uses for the altar: either for crafting certain items essential for progressing through the mod, or for filling up one's Blood Orb. Both of these actions require the player to fill up the basin with Life Essence, which can be extracted from two different sources: monsters and peaceful creatures, and the player's own health. -guide.bloodmagic.entry.architect.bloodaltar.info.2=To add your own Life Essence into the basin, you need to craft yourself a Sacrificial Dagger and right click it while next to the altar. This will take a heart of health and add a total of 200LP to the unupgraded altar. "LP" is Life Points, which is a measure of how much life force is used in a task - no, it is not like YuGi-Oh. The Blood Altar has a capacity of 10,000LP. If you then right-click on the altar, you can place an item into the basin, and if it is a valid item the altar will start the crafting process.\n\tThe altar crafts an item by consuming the LP in the basin if the altar is a high enough tier. If there is enough LP, the altar will drain a bit of LP from the basin each tick and increase the progress of the crafting, emitting red particles. If there is no longer any LP in the basin, the altar will emit gray particles and the crafting will start to lose progress, which is not good at all! Finally, if the altar is filling up a Blood Orb, the altar will emit purple particles to indicate it is syphoning LP from the basin.\n\tThere are actually a total of three tanks in the Blood Altar: the main tank, which has a default capacity of 10 kLP as previously indicated, as well as an input tank and an output tank which both have 10%% of the total capacity of the main tank. Every 20 ticks by default, the LP in the input tank will transfer to the main tank at 20LP/s, and the LP in the main tank will transfer to the output tank at 20LP/s. As the names suggest, the input tank accepts the LP that is pumped into the altar acting as a buffer to limit the speed of transferring from outside sources, and the output tank can be pulled from using pipes out of the altar. -guide.bloodmagic.entry.architect.ash.info=Although not strictly part of the overall theme of this book, Arcane Ash is necessary in order to progress through the mod and get some of the more powerful devices available. This ash is crafted using the Hellfire Forge and Demon Will, so if you are new to this concept please consult the "Demon Kin." In essence, this is a way to craft items out of two separate items: a reagent of some sort to act as a catalyst, and a secondary item. \n\tThe ash has a total of twenty uses before you need to craft another. When you right click on the ground (or a wall, though it will only render one direction), you will inscribe a simple circle out of ash. If you click on the ash again with an item, it will be "placed inside of the ash" - assuming that this item is a valid catalyst, the circle will change shape to represent that it is ready for the next item. If it doesn't change shape, then you did something wrong.\n\tOnce it has changed shape, you can then place in the secondary item. If this item matches with the first item, the circle will start rotating and performing different actions depending on the recipe it is working on. After a while, if properly executed, an item will pop out.\n\tAll of the recipes for the Arcane Ash crafting (I call it Alchemy Array Crafting) can be found in JEI by checking the uses for Arcane Ash - the first item shown is the catalyst, and the second item is the secondary item. -guide.bloodmagic.entry.architect.divination.info=The Divination Sigil is one of the most useful tools in the mod, able to tell you many values that will make your life easier. This sigil is crafted using a piece of redstone and a blank slate (crafted in the Blood Altar) using an alchemy array.\n\tWhen you right click a Blood Altar with the sigil, you can see the current tier, amount of LP inside of the main basin, as well as the max capacity of the Blood Altar. Spam-clicking the altar with the sigil will overwrite the previous text from the sigil, meaning that there will not be any spam in your chat.\n\tIf you right click in the air with the sigil, the sigil will tell you the current amount of LP that is in your Soul Network. Although this is rather mundane to start with, this function alone will make it very likely that you will want to keep this sigil on you at all times. -guide.bloodmagic.entry.architect.soulnetwork.info=The Soul Network (commonly abbreviated as SN) is the term for the connections between the player and all of the items and structures that they have linked their soul to. When a blood mage becomes more powerful, the strength of their soul increases and thickens these bonds. These connections are ethereal strands of the soul, and only the most powerful of Blood Magi are able to see these in their physical form. To date, no mage has attained this ability...\n\tIn-game, the Soul Network is tied directly to the player. The data is stored inside of the world, and every player has only a single network - the LP placed into the network is not stored in any item, but is instead placed and drawn from a single pool. \n\tTo bind things to your network, the most common way is to simply right click an item that uses a network to power itself. Once bound, the item will indicate that it is owned by you and it can never be unbound (with current technology). If this item is used and it has an LP cost attributed to it, it will take the LP from the owner's network. If there is not enough LP in this network, it will take the missing LP directly from the user's health (not the owner's). Be careful when using items when you have a low amount of LP - it could end up being deadly. -guide.bloodmagic.entry.architect.weakorb.info.1=What good is any mage without a power source? A Blood Orb is a device that consumes physical LP and transfers it into the owner's Soul Network. Although not a battery itself, it does act as a conduit in order to fill up the power reserves of the blood mage. -guide.bloodmagic.entry.architect.weakorb.info.2=The Weak Blood Orb is the first such orb that you can make. By infusing a diamond inside of a Blood Altar with 2 kLP, you can create this orb. When bound and placed inside of an altar with some LP in it, the orb will syphon from the basin and transfer that LP directly into the network. Each orb has a maximum capacity that can only be extended by advanced runes on the altar. For the Weak Blood Orb, this maximum capacity is 5 kLP.\n\tBlood Orbs can also be filled directly from the player by simply right-clicking with them - this will transfer a heart of health into the orb and give you 200LP. This cannot increase past the orb's maximum capacity.\n\tA Blood Orb can only be filled by its tier of altar or higher; this means that if you have a T3 orb, it has to be filled in an altar that is greater than or equal to T3. A simple T1 altar would not do in this situation. -guide.bloodmagic.entry.architect.incense.info.1=One will quickly find that the speed of LP generation can become increasingly burdensome. Sure, by adding special runes to the Blood Altar you are able to increase the yield of self-sacrificing, but this can be a slow process all the same. If only there was a way to further increase how much LP you can get from yourself?\n\tEnter the Incense Altar. The Incense Altar acts as a central point for a tranquil area, calming the soul itself with the gentle wafts that emanate from the basin. Where this scent comes from you aren't entirely sure, but what could possibly go wrong?\n\tThe goal of this block is to create an area of tranquility to increase how much LP you get from a heart of health. When you are near the block (about five blocks) fire particles will be emitted to show that it is working - when you are affected by this tranquility, your Sacrificial Dagger will transform to indicate that you have an increased yield at the Blood Altar. This process takes about 5 seconds, and you will know you are finished when the fire particles stop appearing. At this point, if you use your Sacrificial Dagger at the Blood Altar you will sacrifice 90%% of your maximum health all at once and pump LP into the altar proportional to the amount of health sacrificed multiplied by a bonus based on how tranquil the surrounding area is: this bonus is +20%% by default.\n\tAs a side note, the Divination Sigil can be used on the Incense Altar to determine the amount of Tranquility as well as how much of a bonus the current altar gives. -guide.bloodmagic.entry.architect.incense.info.2=Of course just an additional 20%% is all well and good, but it can be further expanded by expanding the range of influence of the Incense Altar. If you place a row of three Wooden Path blocks two blocks away from the incense altar in each of the cardinal directions (making sure that all path blocks are on the same y-level, up to five blocks up or down from the incense altar) you can define an area. Any block placed within this area (a block that is the same distance horizontally away from the Incense Altar as the path blocks are horizontally, and on the same level or up to two blocks higher vertically from the path blocks) can add to the Tranquility of the Incense Altar. Another row of path blocks can be added past this initial row following the same rule: the new row must all be on the same y-level as each other, and the entire row has to be within 5 blocks vertically from the previous row of path blocks. This means that layouts such as pyramids, inverted pyramids, or more advanced staircase structures are possible.\n\tAll path blocks have a maximum distance that they can be from the Incense Altar in order to take effect. The Wooden Path blocks are able to work up to a total of three rows from the Incense Altar. Stone paths work up to five, worn stone paths seven and obsidian paths to nine blocks from the origin. So at a certain point you have to use better path blocks to extend your tranquility area, however you can use higher tiered path blocks in place of lower tiered path blocks, just not the other way around.\n\tBack to Tranquility. Only certain blocks are able to affect the Tranquility of an area, and there are different types of Tranquility blocks. If you place a crop such as potatoes in the area, you add a bit of Tranquility (using the Crops category). However, if you add another crop like potatoes again or even carrots, you will get less tranquility. Adding something from a different Tranquility category, you get the full effect. But adding more stuff using the same category has diminishing returns. Therefore in order to get the most Tranquility out of a certain area, it is most optimal to mix and match using as many different types of Tranquility as possible.\n\tSome things that add Tranquility are: Crops, logs, leaves, lava, netherrack, farmland, water, Life Essence, and other assorted things. -guide.bloodmagic.entry.architect.bloodrune.info.1=As you go through the mod you'll slowly learn that the humble blood altar before you is not powerful enough for you to fulfil your true ambitions. By placing special blocks known as Blood Runes around the altar you are able to expand the altar's strength significantly, unlocking higher tiers of recipes as well as allowing you to augment the abilities of the altar itself.\n\tTo upgrade the altar to its second tier, you need to place 8 blood runes around the altar and one level lower. If you are confused about the precise configuration, the item "Inspectoris Scandalum" can tell you the precise placement for the blocks required for the next tier.\n\tAlthough a blank rune is fine for simply getting your altar upgrade and running to a higher tier, it is advantageous to use upgrade runes for your altar. Each of the runes in a blood altar may be swapped out for any upgrade rune (the only exception to this is that at Tier 2 you cannot use the corner runes as upgrade runes - T3 onwards you can use these). There are runes that affect the speed of crafting, the capacity of the altar, as well as the efficiency of sacrificing at the altar. These runes can be found in their respective entries. -guide.bloodmagic.entry.architect.inspectoris.info.1=Literally "Block Reader" in Latin, this item's purpose is to give you more information about the more complex blocks in the mod when the blocks are in the world. Currently the only implementation for this item is the Blood Altar, and by simply shift-right clicking on a Blood Altar in the world it will tell you what blocks are required in the world for the next altar tier.\n\tIf this method doesn't suit you, you may shift-right click the item in the air to cycle through the tiers. If you then shift-right click on the altar, the altar will display ghost blocks in the world, showing exactly where the blood runes and the pillars are required in order to achieve that tier. If you set the displayed tier to 1, it will remove the hologram. -guide.bloodmagic.entry.architect.runeSpeed.info.1=The speed rune applies a pressure to the altar's basin, forcing the transmutation process so that crafting is a lot quicker. Each speed rune increases the consumption of the altar by +20%% per rune, effectively increasing the speed of the altar. This also affects the speed at which the blood orbs are filled by the altar at the same rate per rune. -guide.bloodmagic.entry.architect.water.info.1=The Water Sigil, as the name suggests, is able to gather moisture from the air to create a source of water at the point of contact on the ground. What is more, by clicking on a machine that accepts a fluid, you can insert up to 1000mB of water into the machine for the same cost as if you put it on the ground. For all intents and purposes, it acts as an infinite bucket of water - it won't work if you place it inside of a machine, however. 50LP per use. -guide.bloodmagic.entry.architect.lava.info.1=The Yang to the Water Sigil's Yin, this sigil heats up the rock in the local area and gathers it in one place, forming a source of lava where the sigil makes contact. A similar process occurs when you interact on a fluid-accepting machine, generating up to 1000mB of lava inside of the machine for the same cost. For some reason your hand is not burnt when you use it, however it doesn't mean that it is a wise choice to take a bath in it! 1000LP per use. -guide.bloodmagic.entry.architect.lavaCrystal.info.1=The lava crystal is a stone that has a piece of lava encased in the center of it that does not lose its heat. When placed as a fuel source inside of a furnace, it will "burn" for an amount that is enough to cook a single item in a standard furnace at the cost of 50LP from the owner's network. If the network does not have enough power in it (or if there is no owner) the crystal will simply not burn and will inflict nausea on the owner due to the strain.\n\tThis crystal will work for any solid fuel burning machine that accepts any fuel. -guide.bloodmagic.entry.architect.apprenticeorb.info.1=While out using the various devices, you will quickly realise that your 5kLP maximum capacity in your Soul Network will quickly run out. This is where you will start looking for a more powerful orb for your network.\n\tThe Apprentice Blood Orb requires a Tier 2 altar, and has a maximum capacity of 25kLP. It also allows you to create more powerful items and runes. -guide.bloodmagic.entry.architect.dagger.info.1=After a while of strengthening yourself through the use of self-sacrifice, you may be keen to attempt to try sacrificing the blood of mobs. The Dagger of Sacrifice, when used on a non-boss, non-player entity next to a Blood Altar, will kill the entity in one hit and pump all of the blood into the altar, converting it into life essence depending on the quality of the mob. Normally, hostile mobs will tend to give much more LP than peaceful mobs. -guide.bloodmagic.entry.architect.runeSacrifice.info.1=The Rune of Sacrifice, as the name may imply, increases the yield of all activities that sacrifice the health of mobs in return for LP. Each rune provides a +10%% increase in yield, additively. -guide.bloodmagic.entry.architect.runeSelfSacrifice.info.1=Similar to the Rune of Sacrifice, the Rune of Self Sacrifice increases the yield of LP provided from the player. Each rune provides a +10%% increase in yield, additively. -guide.bloodmagic.entry.architect.holding.info.1=As you will start to realize, there are a lot of useful sigils that are available - some toggleable, others active use. Because of this your inventory will quickly become clogged up. This need is filled by the Sigil of Holding.\n\tThis sigil can hold up to five other sigils (no, it cannot hold other Sigils of Holding) in its internal inventory. By pressing the "Holding" key, default 'H', you can open up the sigil's GUI to rearrange the sigils that are held. If you shift and use the scroll-wheel while it is equipped, you will cycle through the contained sigils. Once you land on the sigil that you want to use, you can use the sigil as if it was the one selected! \n\tNaturally, you can have multiple Sigils of Holding, each with their own inventory. To help determine which one is which at a glance, you can dye the sigil using the Alchemy Table. To do this, either place the Sigil of Holding in the Alchemy Table with a dye, or the sigil with a name tag with the colour that you want in 0xZZZZZZ format for the name. -guide.bloodmagic.entry.architect.air.info.1=The Air Sigil uses a rudimentary form of fission to generate a steady stream of air behind the user by the traces of water vapour in the air, propelling them forward. In essence, by using this sigil you can be launched forward a considerable distance. It should be noted that the sigil will only cancel the user's fall distance when used, so if you want to stick the landing you have to use it close to the ground! -guide.bloodmagic.entry.architect.void.info.1=As the name suggests, the Void Sigil will create a vacuum at the point of contact which will suck up the liquid source that it is used on, completely destroying the source. This is probably best used in conjunction with the Water Sigil or the Lava Sigil. -guide.bloodmagic.entry.architect.greenGrove.info.1=By using your blood as a simple growth catalyst of sorts, the Sigil of the Green Grove will increase the growth speed of any plants in a nearby area while activated. To activate the sigil, shift-right click it to toggle between activated and deactivated (easily seen by the tooltip or by the glowing symbols on the sigil). Keep in mind that every few seconds the sigil will syphon a bit of LP from the user to fuel the accelerated growth.\n\tIf used directly on a plant, the sigil will apply a bone-meal effect. This can be used to grow tall grass or other crops, just the same as bone-meal. -guide.bloodmagic.entry.architect.fastMiner.info.1=As any good Blood Mage should be aware of, blood has a high amount of iron within it. If skilled enough, one can manipulate blood while it is still within the body - it should be noted, however, that only the most advanced Blood Mages can twist the blood of those that are unwilling.\n\tOne of the principle uses is to accelerate the functions of one's own body. By magnetising the iron in the user's blood, the Sigil of the Fast Miner increases the speed of mining dramatically, applying Haste II while activated. This magnetism is too weak to affect things outside of one's own body, however it is sufficient enough to mine obsidian at a considerable speed. -guide.bloodmagic.entry.architect.seer.info.1=When tinkering around with the Blood Altar, you can sometimes get lost in the hidden intricacies of its operation that the Divination Sigil seems to be unable to divine. This is where the Seer's Sigil comes into play. Essentially an upgrade to the Divination Sigil, this sigil provides additional information about different stats of the altar. These range from the speed of the altar, the current LP, as well as the current progress of the crafted item. It also gives info about the player's soul network. -guide.bloodmagic.entry.architect.magicianOrb.info.1=Another tier, another Blood Orb. This time, in order to progress further in the mod you will have to craft yourself the Magician Blood Orb. In the default recipe you can see that it takes 25kLP in order to craft, however the maximum capacity of the Blood Altar is 10kLP. This means that for a successful craft to occur you will need to add LP into the Altar while it is in the process of crafting the orb. Be prepared, since it can be a difficult task if you do not have everything you need! -guide.bloodmagic.entry.architect.capacity.info.1=You are not exactly sure how it works the way it does, but the Rune of Capacity increases the capacity of the Blood Altar by 2kLP additively. Perhaps there is some sort of resonance effect that decreases the volume of the LP, therefore allowing you to pack more into the static basin? It does give you an idea on how to improve it further, though...\n\tIt should be reiterated that the size of the input and output buffers are 10%% of the maximum capacity of the main tank, so these runes will increase the buffer capacities as well. -guide.bloodmagic.entry.architect.displacement.info.1=By default, the transfer of LP between the buffer and main tanks is limited to 20LP/s. For systems that want to remove and re-add LP to the altar this speed is a sluggish crawl. That is where this rune comes into play.\n\tThe Displacement Rune increases the amount of LP transferred per operation. Each rune multiplies the transfer rate by 1.2x, stacking multiplicatively. So one rune would be 24LP per operation, two runes would be 28.8LP per operation, and three runes 34.56LP. If you have 20 runes on an altar, this jumps all the way up to 767LP per operation - that would clear a full altar in only 13 seconds. -guide.bloodmagic.entry.architect.affinity.info.1=At first glance, the Sigil of Elemental Affinity simply grants immunity to fire, drowning, and damage from heights while activated. Its operation is a lot more nuanced, however. This sigil creates a thin barrier of air around the user by using the sweat (and when required, blood) from the user, keeping the body away from the harsh elements. \n\tThis air barrier acts as a buffer between the skin and the fire or lava, circulating when required to prevent overheating. It also fills the lungs while under water to equalize the pressure of the body and the surrounding water. Finally, when falling from a large height, the air will shift to below the person's feet, acting as a cushion to dampen the fall. -guide.bloodmagic.entry.architect.lamp.info.1=There are quite a few "impurities" within the body and a person's blood. By harvesting some noble gases and encasing them with a source of heat, you can generate a ball of light that can be flung a large distance, sticking to the surface that it impacts with.\n\tThe Sigil of the Blood Lamp has two uses: you can either directly click a block and place a light source or fire a projectile that will generate a source of light at the point of contact. These light sources can be broken just like torches in one hit. -guide.bloodmagic.entry.architect.magnetism.info.1=This sigil magnetizes the iron in the blood stream of the user to attract small objects towards the sigil, allowing a quick and painless pickup. In essence this acts as an item magnet, but instead of actually "vacuuming" up items towards the player, it causes the player to pick up the item from a distance, so items don't need to fly around the place. Thankfully the magnetism is tuned so that it does not attract living objects, so you won't find creepers suddenly wanting to hug you at Mach 3. - -guide.bloodmagic.entry.architect.peritia.info.1=In the world, certain actions impress experiences on a person: slaying monsters, mining elements, and smelting ingots or food can give experience that is accumulated over a period of time. Through some arcane mechanisms, some structures and devices actually drains these experiences from you in order to fuel their own processes. It can therefore be useful to store these experiences in some medium.\n\tAlthough some containers store experience as a physical substance, the Tome of Peritia allows the person to transcribe their experiences into the book - by writing in the tome, the pages are imbued with your thoughts and past actions, storing them away for later use. If you then want to acquire these experiences back, you can hold your hand to the page and syphon them back; this will remove the writing from the page and transmit those actions back to your memory.\n\tNow for the actual usage; by shift-right clicking the tome in your hand, you can store a level of experience into the book (or down to the level if you have a partial level). Right clicking with the tome will grant you up to the next level if there is enough experience stored in the book. The total experience, as well as the equivalent level stored, is displayed on the tooltip of the tome. -guide.bloodmagic.entry.architect.livingArmour.info.1=Any person in Minecraft, especially with the newer incarnations of the world, will know that a good set of armour means difference between life and death. Usually when you pick a set of armour you choose a static set of benefits - does this armour offer more protection? Do I get flight when I wear this? Can I jump really high, or move really fast? These are all valid options on a set of armour, but you can never get a set that is tailored exactly to your needs. At least that is what they thought.\n\tA set of Living Armour is an engineered lifeform that is integrated with a simple set of iron armour. When worn, it enters a symbiotic relationship with the user - when you move, it moves. When you attack, it attacks. When you eat, it senses this and compensates. And just like a normal human body, it will start to grow and strengthen depending on what you do, being trained by your actions. \n\tLet's give an example. If you equip a new set of armour on and run around a lot, you will notice that you will receive an upgrade on the chest plate called "Quick Feet" - this upgrade provides an incremental increase to your speed at level 1, while subsequent levels provide a larger boost. You will also notice that the "Upgrade Points" now read "3/100" - each upgrade requires a number of upgrade points to be applied, and the chest plate has a maximum number of points that it can hold. If an upgrade that you can get is not obtainable with the number of free upgrade points you have it cannot be gained. \n\tKeep in mind that the Living Armour will only be trained when you have a full set of armour on, and the armour's effects will only take effect when a full set of armour is used.\n\tThe maximum number of upgrade points can be modified by a few different means. One of them is to create alchemical concoctions that will strengthen the bonds between the user and the Living Armour, vastly increasing the number of points you can have on a given set of equipment. One such example is the "Draft of Angelus," which increases the maximum number of points to 200. Information about these brews, as well as how to create them, can be found in "The Alchemist". -guide.bloodmagic.entry.architect.upgradeTome.info.1=Sometimes you may not be happy with the upgrades that you have gotten on your Living Armour. By using the ritual "Sound of the Cleansing Soul" (more information can be found in "The Ritual Master"), you can remove all of the upgrades from the armour and receive them in the form of "Upgrade Tomes". If you right-click these while wearing a full set of Living Armour (and while you have space for the upgrade) you can add the upgrade to your armour. \n\tThese tomes may also be combined in an anvil - if you combine two of the exact same upgrade tomes (same upgrade, same level) together in an anvil, you can get a single tome that is one level higher. So if you combine Quick Feet II with another Quick Feet II, you will get Quick Feet III. This can then be applied to the armour in the same way. -guide.bloodmagic.entry.architect.teleposer.info.1=The Teleposer is a device that teleports not just entities but blocks as well. In order to set up a Teleposer, you need at least two Teleposers and one Teleposition focus. One of the Teleposers acts as the Destination, and the other acts as the Beginning.\n\tTo set this up, you need to first bind the focus to you by right clicking it. You then right click the focus onto the Destination Teleposer to save its location (and dimension) and then insert the focus into the Beginning Teleposer by right clicking the Teleposer without a focus in your hand and placing the focus inside of the GUI.\n\tPowering the Beginning Teleposer (the one with the focus) with a strong redstone signal will cause the Teleposers to swap the entities and blocks (including any content in the tiles such as chest inventories) between the Teleposers, assuming that there is a Teleposer at the Destination. \n\tYou can either have one Teleposer have a focus, have both of the Teleposers have foci that are linked to each other, or you can have one Teleposer linked to another Teleposer that is not linked to it, so depending on how you set them up you can have very intricate systems.\n\tKeep in mind that currently the Teleposer will only swap the blocks and entities that are right above the block, and the size depends on the focus - the T1 focus only swaps the block on top of the Teleposer, the T2 focus swaps a 3x3x3 area above the Teleposer, etc. -guide.bloodmagic.entry.architect.boundBlade.info.1=The Bound Blade is an artifact from the past, a blade that is created by binding an entity to a sword in the same process that creates the Living Armour. It should be noted that this, as well as the Bound Tools, will change in later versions of the mod.\n\tThe sword has an active and inactive mode, which can be toggled by shift-right clicking. The sword does not deal any damage at all when inactive, but while active there will be a small LP drain over time. Likewise, when you damage a mob you will drain LP from your network. Sure, you have a lot of damage, but it may kill you!\n\tWhen a monster is killed, the monster has a chance to drop a Weak Blood Shard. These shards are used in order to upgrade your Blood Altar to a T4 altar. -guide.bloodmagic.entry.architect.boundTool.info.1=Similar to the Bound Blade, these Bound Tools (pickaxe, axe, and shovel) will eventually be modified to fit better in the mod. Like the Blade, the tools have an active and inactive mode that can be toggled between by shift-right clicking them. \n\tSomething that these tools have is something called "Beast Mode". If you hold right click, you can charge up the tool and unleash a powerful cleave that will instantly break the blocks that can be broken by the given tool - when fully charged, this is an 11x11x11 cube above you at a cost of 10kLP. Be careful with this powerful tool, since it may be your last! -guide.bloodmagic.entry.architect.weakShard.info.1=Everything that has life can have the ethereal connections that is known as the Soul Network. As seen in your experiences, non-living things can also have a Soul Network attached to them, such as sigils and rituals; however, these connections are the strongest in creatures and, naturally, humans. \n\tWhen you attack a monster with a Bound Blade, their Soul Network temporarily hardens and a piece of it will remain after death. This piece takes the form of a Weak Blood Shard, so named after the fact its reddish hue matches the colour of the Weak Blood Orb. At this point, it is not clear if there are stronger forms of blood shards, but you can tell that this would be very helpful in increasing the power of your own Soul Network -guide.bloodmagic.entry.architect.masterOrb.info.1=One of the uses for this increased affinity for the Soul Network is to use the Weak Blood Shard in a new blood orb: the Master Blood Orb. This orb has a maximum capacity of 1 million LP, and thus allows the wielder of the orb to access more powerful items and rituals. Perhaps meteors are not out of your reach... -guide.bloodmagic.entry.architect.runeOrb.info.1=Initially, this rune can be seen as somewhat useless. By thickening the ties between the blood orb in the altar and the Soul Network, the Rune of the Orb increases the maximum capacity of a blood orb filled by a Blood Altar by +2%% per rune, additively. For something like the Weak Blood Orb, this is just +100LP capacity, however for the Master Blood Orb this is a remarkable +20kLP capacity per rune. If you have a high tier blood orb and a few extra runes to spare on your altar, this may be something to round out your network. -guide.bloodmagic.entry.architect.suppression.info.1=The Sigil of Suppression uses the technology that is used in a Teleposer in order to temporarily displace fluids that are near it when active. This is done by teleposing the liquids in a sphere around the user to a hidden pocket dimension, replacing the liquid with air. Unfortunately, because you are overcharging the field used by the Teleposer, the teleposition is temporary - if the user walks away from the area that the liquid was teleposed away from or deactivates the sigil, the liquids will pop back where they were before as if nothing has happened, assuming that there are no newly-placed blocks there. This allows for fancy transportation when on foot, walking under the water instead of swimming through it or even parting the red seas of the Nether. -guide.bloodmagic.entry.architect.haste.info.1=Sugar and caffeine are interesting chemicals that the human body can process. One acts as a reservoir of energy that is quickly burned, whereas the other increases your wakefulness and allows you to access energy in other means. By mimicking these chemical processes to unleash more chemical energy, the Sigil of Haste allows the user to increase their movement abilities. \n\tWhile activated, the user can run a lot faster and is able to jump significantly higher. What is more, the sigil also offers "Step Assist," which allows the user to step up one block high ridges without needing to jump. It's like auto-jump, but less sucky. -guide.bloodmagic.entry.architect.severance.info.1=Teleportation is one of those odd powers that people can't fully explain. In most instances, teleportation can be described as a temporary warp in space-time, linking two places in space together so that the object in question can simply "step" through to the other side. The Sigil of Ender Severance attempts to stop this warping that teleportation requires, preventing creatures from teleporting when they are around the user. This does not stop some of the larger means of teleportation such as portals, but it will prevent Endermen from using their powers to warp around the user. -guide.bloodmagic.entry.architect.teleposition.info.1=The Teleposition Sigil has a contained Teleposer and focus in its structure. If you right click a Teleposer with this sigil, you can bind the coordinates and dimension to the sigil. Now, whenever you right click the sigil it will telepose you directly to the Teleposer (if it is there). Unfortunately, it doesn't seem like you are able to do a return trip... -guide.bloodmagic.entry.architect.compression.info.1=A miner will quickly find that during a long expedition their inventory will become filled with redstone dust, lapis, and several other materials. Most of these have recipes that will compress them down to storage blocks such as redstone blocks and blocks of diamonds, however they normally require a crafting table in order to combine them. \n\tThis sigil creases a miniature field of compression in the inventory of the user when activated, compressing items down to the lowest number of slots needed for the inventory. What this means is that if you have 63 redstone dust it will not do anything. However, if you have 64 dust it will compress 9 of them into a block of redstone. While this is technically not the ideal situation if you have exactly a stack of redstone dust, it will guarantee that you aren't left in the dust due to full pockets. If other mods are present this will work for other crafting recipes as well. -guide.bloodmagic.entry.architect.bridge.info.1=When activated and while the user is on solid ground, the Sigil of the Phantom Bridge solidifies the air beneath the user so that they may walk on it, essentially creating a Phantom Bridge. When you are shifting in the air, the bridge will instead form directly underneath you, allowing you to catch yourself in the air if you were falling. Although some calibration is needed in order to make it more effective for vertical travel as well as horizontal travel when moving quickly (due to lag messing up the creation of the bridge), it is a fancy way to effectively fly to different areas. -guide.bloodmagic.entry.architect.mimic.info.1=Mimics are arcane constructs that are designed to mimic whatever they are set to. When the mimic comes into contact with some form of block, its molecules shift their orientation in order to take on the shape, look, and feel of the block. Not all of the properties are copied, however: for instance, a normal mimic block when coming into contact with glowstone will not emit any form of light. \n\tWith normal use, there are two ways to use a mimic block. The first is placing the mimic block down and then right-clicking the mimic with the block that you want it to copy. This will place the block inside of the mimic and have the mimic take on the -default- shape of the block. So if a mimic is clicked with a stair, the mimic will always orient themselves in the same way.\n\tThe second method is to hold the mimic block in your hand and shift-click the block you want to replace. This will replace the block with the mimic and the mimic will have the exact same orientation that the replaced block had. This can be seen with stairs and chests, as well as other orientation-dependent blocks such as logs.\n\tThere are a few different variants of the normal mimics. The Opaque Mimic is the default mimic, able to take on the form and general properties of blocks - light cannot travel through these, however, so care should be taken with glass. The Ethereal Opaque Mimic can be walked through without any trouble because it has no hitbox, which is perfect for hidden doorways. Clear Mimic blocks work the same as their opaque variants, however they allow light through them even if it appears completely solid. Finally, the Lighted Mimic block is opaque and solid, but no matter what is placed inside of it, it will emit a strong light. No more dark areas in your base without torch spam!\n\tThere is one special variant of the mimic that you have to be wary of: the Sentient Mimic. If a player comes too close to one of these in the world, it will get up from where it is and attack you with a high degree of ferocity. These can be found in a variety of areas, but they are especially fond of dungeons. If one is mimicking a chest, however, be careful: they bite.\n\t***Creative Usage Only***\n\tThere are a few interesting features you can add to any mimic block when you are in creative mode. If you right click on a set mimic with a potion or potion flask, you can set the mimic to spawn potions around it if a player is nearby. If it is a regular mimic and you click on the east or west side, you can increase or decrease the radius that the potion will spawn in. If you click on the north or south side, you can increase or decrease the radius that the mimic will check for players around it before spawning the potions. Finally, clicking on the top or bottom of the block will increase or decrease the potion spawning interval, which is the number of ticks between dropped potions.\n\tIf the mimic is a sentient mimic, you can click the mimic anywhere to increase or decrease the detection radius for players - if a player is within this area and they can see the block, the mimic will spawn and jump at the player. \n\tAnother thing is that if the block is placed on the mimic while the placer is in creative, the block that is being mimicked will NOT drop when the mimic is destroyed.\n\tFinally, if the mimic is placed on any inventory or chest, the sentient mimic will place the chest on the ground with its contents once defeated - the regular mimic will instead just spew the contents everywhere when broken. -guide.bloodmagic.entry.architect.downgrade.info=Please see the entry "Penance of the Leadened Soul" in "The Ritual Master" for a detailed explanation about what these are as well as how to obtain them. - -guide.bloodmagic.entry.architect.augmentedCapacity.info=The Rune of Augmented Capacity functions similar to the Rune of Capacity in the sense that it increases the capacity of the Blood Altar. However, multiple runes on the same altar will begin to resonate with each other, increasing the capacity exponentially the more there are. One rune by itself will apply a +10%% increase to the capacity of the altar, however this functions multiplicatively with other Runes of Augmented Capacity: if there are two runes, it is a +21%% increase, three runes is +33.1%% increase, etc.\n\tUnfortunately, this multiplicative effect does not stack with the Rune of Capacity, meaning you will still only get the +2kLP bonus per rune. -guide.bloodmagic.entry.architect.charging.info=The Charging Rune is one of those beauties that will completely change the operation of the Blood Altar to something that can be seen as more useful for one-stop crafting. By syphoning off the LP from the Blood Altar slowly, the Charging rune begins storing "Charge," an internal value of the Blood Altar that can be seen using the Sigil of Sight. If the Blood Altar has enough Charge when it gets something to craft, it will use the required Charge up immediately and craft the item instantaneously. If there is not enough Charge, the Charge is all used to increase the progress of the item at a 1:1 Charge:LP ratio. \n\tThe maximum amount of Charge that can be stored in the Blood Altar is a function of the number of Charging Runes that it has multiplied by the current capacity of the altar (the capacity of the altar only comes into effect if it is greater than 20k). The rate that it charges is also related directly to the speed of the altar times the number of Charging Runes it has, and it will convert LP into Charge once every 20 ticks (one second). So if you were to design a Blood Altar with this rune, careful consideration will have to be made for all of the synergistic relationships that it has. -guide.bloodmagic.entry.architect.acceleration.info=Unlike most runes, the Rune of Acceleration works best only when paired with other runes, and its effects only increase to a limited amount. What this rune does is it increases the number of processing ticks that can occur in a given period of time, specifically when it comes to the Displacement Rune and Charging Rune. For each rune added, the number of ticks before the next processing tick decreases by one. For instance, by default the Displacement Rune displaces liquids at a rate of one operation per 20 ticks - with 10 Runes of Acceleration, this would occur at a rate of one operation per 10 ticks.\n\tObviously the maximum number of Acceleration Runes that presently matter is 19 - if you have this many, the Displacement Rune and Charging Rune will both activate their effects each tick. Noice! - -guide.bloodmagic.entry.architect.tier3.info=It is well known that a Tier 3 altar requires you to cap four pillars with glowstone blocks from the Nether. What is not as thoroughly understood is that you can actually use Sea Lanterns instead. So if you find yourself very far away from going to the Nether but have access to ocean temples, you can use other ways to advance yourself in Blood Magic. - -# Demon Kin Entries -guide.bloodmagic.entry.demon.intro=Bella Highborn -guide.bloodmagic.entry.demon.snare=Demon Will and Snares -guide.bloodmagic.entry.demon.forge=Hellfire Forge -guide.bloodmagic.entry.demon.petty=Petty Tartaric Gem -guide.bloodmagic.entry.demon.sword=Sentient Sword -guide.bloodmagic.entry.demon.lesser=Lesser Tartaric Gem -guide.bloodmagic.entry.demon.reactions=Unexpected Reactions -guide.bloodmagic.entry.demon.sentientGem=Sentient Armour -guide.bloodmagic.entry.demon.routing=Item Routing -guide.bloodmagic.entry.demon.aura=Demon Will Aura -guide.bloodmagic.entry.demon.types=Different Will Types -guide.bloodmagic.entry.demon.crucible=Demon Crucible -guide.bloodmagic.entry.demon.crystallizer=Demon Crystallizer -guide.bloodmagic.entry.demon.cluster=Demon Crystal Cluster -guide.bloodmagic.entry.demon.pylon=Demon Pylon -guide.bloodmagic.entry.demon.gauge=Demon Will Aura Gauge - -# Demon Kin Entry Texts -guide.bloodmagic.entry.demon.intro.info=My name is Bella Highborn, and I am known as the Demon Kin. Several months ago my village was attacked by a wave of demons, killing all other people while destroying every single building. I don't remember much from the attack, other than the screams of pain as each and every person I knew left this world for a happier one. Thankfully the demons did not hear me as I cowered underneath the fruit baskets in the basement of the church of Intactilis, trying desperately to keep my screams from joining the chorus of other voices. \nThere was one horrible moment when I accidentally knocked down the incense altar of the church and a demon came bounding into the sanctuary, unperturbed by what we assumed was a sacred place. It was a huge four-legged monster, with curved tusks hanging past a jutting mouth, saliva dripping onto serrated swords taking the place of his claws. It took a look around the room and I swear it locked eyes with me for a solid second, but then it just simply left as if it neither heard nor saw anything. Everything afterwards was a blur. \nIt was a full day before anyone came to see what happened. A trading caravan saw the smoke in the distance and decided to take the long way around past the demons. Many of the traders didn't even want to look at me, fearing that because I alone managed to survive unscathed it was a bad omen. But two brothers decided to take pity on me and try to convince the rest of the caravan to consider having me ride along. It took me selling the priestess's wand and locket, but I managed to buy safe passage to a village far enough away from the demons' path of destruction. -guide.bloodmagic.entry.demon.snare.info.1=Magus was telling me one day that every living being has a soul: humans, chicken, sheep, and even creepers have this life force that would give the body the will to live. It seems that Magus has done a lot of experiments in his time, and has even heard of a powerful mage that could take these souls and transfuse them into empty vessels such as zombies. But that made me wonder: if zombies and skeletons did not have souls, how is it that they had a will to live? What animated them so that they would try to hunt down any living creature and try to kill them? \n\tIt all came back to will, each and every single time. Anything "living" had to have a will in order to survive, but it didn't mean that it had to be their own. When I brought this up to Magus he pondered a little, and then brought out a blackboard and chalk (from where, who knows) and started to sketch some notes about other forms of magic. "In Thaumaturgy," he said while sketching out the form of a straw man, "golems are animated beings that are tasked to perform many mundane operations. They live, breathe, and can even die if they fall out of favour with their masters. In the current iteration of Thaumaturgy, and yes there have been several versions of this art over the centuries, the magician would imbue their will into their inanimate creation and bring them to life.\n\t"That, Bella, is how golems operate: by an imbuement of will."\n\tSo if a golem could live by another entity imbuing its will into an empty shell, maybe some other entity is imbuing its will into the bodies of the dead, bringing zombies and skeletons into existence. At this point I shivered, remembering briefly what happened in my old village. Only a demon could do something so cruel. But to test this hypothesis, I needed more proof. -guide.bloodmagic.entry.demon.snare.info.2=With some direction from Magus, and Tiberius when he could lend a hand from his own work, I made myself a rudimentary snare out of some iron, string, and a bit of redstone. Tiberius, who studied Thaumaturgy in-depth as his cross-discipline magic of choice, said that the snare should be able to disrupt the will of an entity that is controlling an animated object. "I was messing around with this when playing around with golems," he said with a smile. We all knew how well that turned out. "Redstone seemed to disrupt the connection between my golems and my will for them to move. In theory, if something is controlling the zombies or skeletons, you should be able to cut off the will."\n\tHe said that all I needed to do was to throw it - if it worked, some white dust should stream off of the entity for a period of time. "So you have to kill it after this happens in order for anything to really happen. But the snare might only work 25%% of the time, so be slightly liberal with them!"\n\tAfter crafting sixteen of them, I went out with my sword during the night. It was quite tricky, actually: I had to track down several zombies, ducking and dodging their lumbering swipes while chucking a few snares at them. Once the white particles came off of them, I killed them swiftly and picked up what was left of their bodies. A small amount of a blue viscous fluid seemed to lay in the gritty dust, beckoning to me. I picked it up, and it seemed like there was some otherworldly "presence" coming from the fluid. Quickly stowing the samples away, I elected to look at them more deeply when I got back home. \n\tIt seemed that the size and shape of each "Demonic Will" varied, as if the quality of the will depended on the source. Using a completely arbitrary unit of measurement, the Will that I got from the snares seem to range from zero to five "Will Quality". I am not sure what I can use this substance for yet, but it is very intriguing none the less. I can't tell if this is the imprint of the will of some sort of demon, or just a random crystal found in their bodies. More research is needed. -guide.bloodmagic.entry.demon.forge.info.1=I have spent several weeks researching the uses and properties of demonic will. There has been some success these past few days, however it has been infrequent. Tiberius asked me the other day if he could take a sample of demonic will for a few of his other experiments: he mentioned that it might be what he needed to construct a new blood altar to replace the beat-up basin that we were using in Magus's basement, since trying to replicate that old thing with just stone never seemed to create the right... receptacle for our blood magic. In other words, he thinks it may help.\n\tIt hasn't been a complete waste, however! I consulted several different alchemy textbooks discussing "Equivalent Exchange" and the many different ways to manipulate matter. I also talked to a couple of alchemists that were passing by, and they gave me a few tips on how to deconstruct matter and energy in order to study it more closely. (As a side note, I must say I loved the dark purple armour that one alchemist was wearing - just looking at it made me feel like I was being pulled by a dense object. Not talking about Tiberius, either!) From using those simple arrays with the little samples that I had, I managed to see that there were ways to actually tap into the power source inside of the demonic will. I just needed the right configuration. -guide.bloodmagic.entry.demon.forge.info.2=Just today, I managed to get a structure that I believed would fuse together items using this raw will. Dubbed the "Hellfire Forge", the structure uses a simple alchemy array carved into the glass on the top of it to fuse up to four items together while injecting it with demonic will. The piece of demonic will is placed on the right-hand side and the four ingredients are placed around the circle. It appears that there are many different "recipes" available in this forge, but there are some gating effects on these. \n\tFor starters, there is a minimum amount of demonic will that has to be in the sample in order for the items to combine - if there isn't enough will in the structure, nothing seems to happen. Next, it seems that although there is a minimum amount of will needed, most of the recipes don't drain the entire sample of its will. Some recipes need a vast amount of demonic will in order to start the process, but only a little bit is used in the crafting, if any at all. Some recipes seem to be very easy to create in large quantities, but others... not so much. -guide.bloodmagic.entry.demon.petty.info.1=I went out on one of my now-daily nighttime adventures in order to harvest some demonic will when I began to realize one of the major problems with the collection method: my bag kept on getting full from all of the samples! For some reason, perhaps because the ultimate source of the demonic will is different for each sample, the will would not compress into a more manageable form. At least the physical manifestation of the will. \n\tThus, I went to work with the hellfire forge that was nestled in my corner of the house, pushing aside some of Tiberius's least unpleasant experiments and getting some raw materials for my own study. One of these days I am going to make Tiberius his own forge, since I am tired of trying to get rid of all of the dust that coats my workplace from his "arcane experiments". I don't care that you are "trying to bridge the gap between the ethereal strands of the Soul Network and the physical construction of the slates", get your damned ash out of my stuff! -guide.bloodmagic.entry.demon.petty.info.2=Anyway, it did take a while in order to find materials that were most likely to resonate with the demonic will in order to store it in a better manner. Lapis seems to be the most readily available conductor of this energy, acting as a pathway for the will to be channeled. After adding some redstone to act as a shielding from electric fields in the air (adding two energies together seem to cause disastrous effects, at least that is what Magus said), gold as a dampening agent, and glass as a simple housing, I managed to create a very simple "Tartaric Gem". This means "a gem from the underworld, Tartarus."\n\tAfter further tests, I found out that this gem could hold up to a will quality of 64. (When I presented these findings to Magus, he remarked that it seemed like a nice, round number.) When I tried to pick up demonic will afterwards, it seemed to go directly into the gem unless full - after that, the will just seemed to... disappear. Convenient for my backpack, but otherwise a mystery. I also learned that if I hold the gem in my hand and focused (right clicked), about 10%% of the maximum capacity of the gem would flow into other gems I had on my person. I think this last feature is very helpful, especially if we were to find other, more powerful tartaric gems. -guide.bloodmagic.entry.demon.sword.info.1=My snares got tangled again.\n\tIt doesn't seem to matter how much I try to improve the design of them, the rudimentary snare never seems to work perfectly. It just gets tangled most of the time, and when I finally do manage to hit a zombie with it it's more likely to not work than work. In order to stop myself from pulling my own hair out, I went to the forge again and got to work right away.\n\tWell, not right away, since I had to first clean the ash off the top of it again. -guide.bloodmagic.entry.demon.sword.info.2=I infused the demon will-holding capabilities of the petty tartaric gem with an iron sword, and managed to create a blade that... was very dull and hardly did more damage than my fist. I was actually very disappointed with the outcome, because it took a long time of fiddling with the forge so that it would not overheat from the strain of using a petty tartaric gem as its power source.\n\tHowever, as soon as I picked up my Tartaric gem, the sword started to glow with a new energy. It seems that the higher the amount of demonic Will I have on my person, the more damage I seem to do with the sword as well as the more demon will that drops. Whenever you don't have a gem, the Will amount is very... miniscule.\n\tAfter a bit of testing I came to another realization: depending on what I kill, I receive different amounts of Will. It seems proportional to the amount of maximum health that the monster has - a spider, since it has a max health of 8 hearts gives 80%% the Will of a zombie, which has 10 hearts. This is probably because these monsters require more Will to animate. I should keep this in mind for later. -guide.bloodmagic.entry.demon.lesser.info.1=I was chatting with Tiberius today, discussing some of the projects that he is working on. I must say, when we start talking about his research it seems that he just keeps going on and on and on! Anyway, one of the recent inventions he wanted to talk about was his sigils: so far he managed to create a Water Sigil and a Lava Sigil, using the Hellfire Forge I finally constructed for him as a means to create them. I wasn't entirely sure how he actually made them - I knew he experimented by taking some ingredients and combining them inside of the forge using the tartaric gem as a catalyst, but I haven't actually seen him actively experimenting yet. Well, I got some insight finally as to what he uses that blasted ash for.\n\tLet's see if I can mimic what he said properly. Ahem. "By using the Demon Will contained inside of these gems to transmute the ingredients, a reaction occurs between things that normally don't do anything when combined. By harnessing this forced synergy, I am able to inscribe several arcane symbols in patterns that will direct the energy that I add myself to perform the desired task." Although it doesn't show well in writing, picture me saying this while pushing glasses up the bridge of my nose. I'm not sure if he's normally like this, but I swear he gets all... science-y when he explains things to me.\n\tAt any rate, he showed me how he created a Water Sigil by demonstrating it to me. After the, admittedly flashy, demonstration, he then got to the meat of the discussion. "When I try to replicate this process with some more advanced materials, it seems that the reagents tend to... explode when added to the alchemy array. They seem very unstable. My thinking is that the ingredients aren't getting properly fused together - perhaps there is not enough energy in the forge to fuse them properly."\n\tAfter thinking about this for a few minutes, I got to work - as I mentioned in a previous entry, I figured that a more powerful Tartaric gem would be required, but I still haven't figured out exactly how I could do this in an elegant way. So, I decided that a brute-force approach would be sufficient for this! -guide.bloodmagic.entry.demon.lesser.info.2=I took a block of lapis, block of redstone, and a diamond as well as an empty petty Tartaric gem that I had lying around - part of a past experiment that... didn't exactly go very well. All I can say about it is that I am surprised Magus can make holes in a solid concrete wall simply disappear. I then combined these four items in the Hellfire forge with a filled petty Tartaric gem to act as a power source - a minimum of 60 Will seems to be needed. After a bit of effort trying to find an optimal arrangement, I then set them together and watched as the empty Tartaric gem started to grow inside of the forge.\n\tJust as a side note, I tried using a block of gold instead of a diamond to grow the gem, but it seems that having another crystal structure was more beneficial.\n\tThis new, "Lesser Tartaric gem" seems to have a much larger capacity, able to hold a total of 256 raw Will. Hopefully this is enough to sate Tiberius's need for large amounts of Will for a while. But alas it seems that I will need to fill up this gem. Another long night is ahead of me! -guide.bloodmagic.entry.demon.reactions.info=I woke up in a hospital bed today, aching something fierce. I opened my eyes and saw the dull magenta that made up the ceiling of the "Intense Curse" wing of the hospital in Veteres, which is the closest major city to our village. I wasn't exactly worried by this information: it more so puzzled me that I somehow ended up here while seemingly only covered in scrapes and bruises, plus a simple cast on my left leg. Someone must have cast an "Ossa Fracta" curse on me or something, since all it could be was a simple broken bone! \n\tWhen Magus came in with one of the nurses with a solemn face, I knew it was something more drastic. Apparently, one of my experiments with the new Lesser Tartaric gem rebounded and created a small but forceful explosion. That much I could understand easily enough, but that wasn't it: the mixture of obsidian, iron and diamond that I used coated my lower left leg, forming into a rigid shell that couldn't be removed. The cast that I had on my leg wasn't actually a cast, but some form of runic matrix covering the light-blue shell. \n\tCalmly, I asked what Magus thought, even though I was pretty sure what had occurred. "I think," he said, giving a side-long glance towards the nurse that was listening intently before looking back at me, "that it is simply some sort of residue that is diamond-based, which is the main reason we can't remove it. It is also laced with a bit of... otherworldly energy, which is the main reason that you are here instead of a bed at the local clinic - the Conglomerate is rather stringent about unknown energy directly contacting people, ever since the Eldritch Incident, so we had to make sure that there wasn't any issues."\n\t"I see..." Normally Magus doesn't bother much with formalities such as making sure that the Conglomerate is informed about unknown energies - I've been experimenting with Demon Will for quite a while, and it isn't like the Conglomerate came knocking on our door to have this magic registered. I won't go into much detail here, since I am not well versed in politics, but I know that Magus partakes in it only sparingly. This meant that the power from this Will concerned Magus a lot, perhaps through some of his past dealings...?\n\t"Ah well, enough about that for now," Magus said, rolling up the sleeves of his robes. "I tried to break the shell when I first saw it, obviously after checking what it was. It didn't have an effect last time, but now..."\n\tThere was a searing heat on my left leg, accompanied by a blinding red light as Magus cupped his hands on top of the blue shell. After what felt like an eternity, but what must have been only a couple of seconds, the shell started to crack and fracture, falling apart. Honestly, it was kind of anticlimactic. \n\tI tried to get up, but Magus pushed me back into the bed with a small shove. "Bella, you need to stay and rest. You can work with your research on the gems later." I was initially annoyed, but that soon passed as I had a lot of time to think. The only reason that Magus wasn't able to do the exact same thing earlier was probably because I still had my Tartaric gem on my person after the explosion. So whatever happened to my leg had to be directly tied to the demon Will, and as soon as my gem was taken the shell was able to be removed. It got me thinking... -guide.bloodmagic.entry.demon.sentientGem.info.1=After a few days of some "well needed bed rest," prescribed and enforced by Magus, I decided to do a bit of research primarily on the sentient equipment that I have made so far. There is just so much that I do not know about the sentient sword as well as Demon Will in general. Sure, we know some of the theory, but considering that Magus and I were the ones that developed the theory in the first place it is hard to tell how accurate it is.\n\tFor this, I needed to get creative. Magus told me that whenever he takes an apprentice, he insists that they must learn another form of magic alongside the research that he is doing. Tiberius offered for me to learn Botany, but I scoffed at the idea - a bunch of flowers weren't going to help me much when fighting demons! -guide.bloodmagic.entry.demon.sentientGem.info.2=The Sentient Armour Gem is a toggleable item that is used to equip and unequip your Sentient Armour. When you right-click with the gem while you have a minimum of 16 Demon Will in your inventory, your armour will be replaced with a set of Sentient Armour that copies all of the enchants from the armour that you replaced - when you activate the gem again, your original armour is returned to you. This also works when you have no armour on at all to begin with.\n\tThe Sentient Armour initially acts as a simple set of iron armour, yielding no additional abilities besides protection. Similarly to other sentient tools, however, the armour provides more protection when you have more Demon Will in your possession. This makes the protection provided really powerful when you have a large quantity of Demon Will accumulated. The downside to this is that every hit you take will syphon a small bit of Demon Will from your Tartaric gems, and if you get too low your armour will revert back to its original form. Could be bad! -guide.bloodmagic.entry.demon.routing.info=Item transport in Blood Magic comes from linking strands of Demonic Will between routing nodes, which act as conduits in order to transfer items from one inventory to another. To start off with, let us explain how each individual item works.\n\tEvery single routing system needs a Master Routing node, which acts as the brains of the system. An Input Routing node inputs items into your system, and an Output Routing node outputs items from your system, and a regular routing node doesn't have any special function.\n\tTo form a network, you need to shift-click a node with your Node Router and then shift click another node that you want to connect. This links the two nodes together. As long as a node can trace some form of route to another node (and if it is connected to a Master Routing node) they can "talk" to each other.\n\tAs a rule of thumb, items are pulled from an inventory next to an input node and are pushed into an inventory next to an output node. In order to set what goes where, a filter should be used. By clicking on one of the buttons in the node's interface you can select what goes into the inventory in the given direction (N indicates North, etc). If you place an Item Filter into the left-most slot of the node you can specify the quantities and types of items that the node may interact with based on the filter. If you set a filter on an input filter, you can only pull those types of items from the inventory (keeping at least the given amount if you specify a quantity). If you set a filter on an output filter, you can only push those types of items into the inventory, up to a max of the quantity specified.\n\tThere are four types of filters: \n\tPrecise - The item needs to be matched exactly, including NBT and metadata\n\tMod Item - The item matches if it is from one of the filered mods.\n\tIgnore NBT - The item filter does not take into account any NBT\n\tOre Dictionary - Any item that matches one of the ore dictionary references of the filters are allowed.\n\tThere are two numbers that you will be able to see when you insert the filter into the routing node: the quantity and the priority. When you click on one of the items in the filter, the name of the item you have selected will appear and right below that is the quantity of items. By setting this number you can tell the filter how many of this type of item it will keep in stock in the connected inventory (either filling to that amount if it is an output node or making sure it keeps that amount left in the inventory if it is an input node). If you decrease the filter's amount to 0, you can set so that the filter allows "Everything," as in any amount, for that particular filter. Input nodes will pull as much as it can from the inventory, and output nodes will push as much as possible.\n\tThe second number is the priority of the node, altered by the arrow buttons next to it. This number is different for each side of the node. The node that has the LOWER NUMBER in the network will be used first. -guide.bloodmagic.entry.demon.aura.info=When an entity is killed normally, it evaporates over time and returns to the creator. When captured in a snare, it is pulled into this plane from the ethereal and is sort of stuck. We have, for all intents and purposes, broken its programming and it has frozen all action. When we burn it, it returns to an ethereal state and is able to resume normal operations. If this Will is injected into the air, we can then harness it in a variety of ways. Some of them are mundane in nature, whereas others are quite powerful.\n\tDemon Will when injected into the air stays within the chunk that it was put in without migrating. Each chunk has their own stored Will, with each type of Will stored individually (more on that in a different section). This Will can be accessed and manipulated by other blocks and items. -guide.bloodmagic.entry.demon.types.info=So far, the only type of Demon Will that we have discussed is raw Will. As the name suggests, it is the most raw and unadulterated form of Will there is, but this does not mean that it is pure. In fact, Demon Will takes on many different forms: Raw is the type we deal with normally, but there is also Corrosive, Destructive, Vengeful, and Steadfast. Raw Will is composed of a mixture of all four of these types, and perhaps mixed with other as of yet undiscovered types, but once split into these different Will types it seems impossible to recombine them.\n\tIt is not clear yet whether these different types of Will come from different sources, however we do know the process of generating these different types of Will. The Ritual "Resonance of the Faceted Crystal" can split a Raw Will Crystal into its pure parts, more on that in the corresponding entry in "The Ritual Master". A device able to obtain Raw Will Crystals is the Demon Crystallizer, whose entry can be found further down.\n\tEach of these four types of Will represent different aspects of one's desire. There may be more types of Will, however they are either not pure enough or simply cannot be created in this form.\n\tCorrosive represents the desire to break down all things around oneself, either with acid or by crushing force. One who can master this Will can wield debilitating status effects and are immune to horrible poisons.\n\tVengeful can be viewed as the desire to seek a target without tiring. Usually, this can be seen either as an increased speed of the body to seek their prey or to make sure that a target is not able to get away as you continually attack them.\n\tDestructive, as you can probably tell, is pure force. Attack strength and overall physical prowess can be gained if this Will is properly harnessed. It can also be used to crush and smash things when used in other applications.\n\tSteadfast is seen as the desire to prevent damage to oneself. In most cases, masters of this Will are the defensive bulwark of the party, able to withstand powerful attacks and not even feel it. If you need to stay alive, through your armour or by rituals, this is one choice that should be considered. -guide.bloodmagic.entry.demon.crucible.info=The Demon Crucible is a device that is able to burn the Demon Will inside of a Tartaric Gem and other items in order to inject it into the Aura of the chunk that it is in. There are a few different ways to use the crucible: one of the simplest ways is to place a Tartaric Gem inside of the crucible by right clicking on it with a gem in your hand. The crucible will then in that case drain the Will from the gem until either the Aura is saturated with that type of Will (a max of 100 by default) or until the gem is empty.\n\tAnother mode is to use the contained Tartaric Gem to drain the Will from the Aura - this is done by applying a strong redstone signal to the crucible and then the contained gem will attempt to drain as much Will as possible.\n\tFinally, a discrete piece of Will can be burned in the crucible if there is enough room in the Aura of that type. One example of this is a Demon Will Crystal, which has a value of 50. -guide.bloodmagic.entry.demon.crystallizer.info=As discussed previously, Demon Aura is the ethereal manifestation of Demon Will, and the substance obtained when killing a mob is its physical manifestation. The Demon Crystallizer acts as an anchoring point for Demon Will in the Aura to latch on to, transforming the ethereal Will back into a physical form once again in the form of a crystal.\n\tYou may be curious why you do not just take the Will from a Tartaric Gem directly and form a crystal from it. That is because by transforming the Will to its ethereal form we purify it and allow the Will to attempt to resume its normal operations - keep in mind that when we kill a monster with Demon Will attached to them, we freeze the programming of the Will so that it cannot do what it was sent out to do. By converting it into the ethereal form in the Aura, the Will becomes more active, and that is the Will that is grabbed by the crystallizer. Just don't look at it funny.\n\tIn order for the Demon Crystallizer to work it must be in a chunk with a high amount of Demon Will (80) of a particular type, and after a certain amount of time it will consume the Will from the Aura in order to create a Demon Crystal Cluster with a single spire. There are two ways for the Crystallizer to work: it can form a crystal from an aspected type of Will (Corrosive, Destructive, Vengeful, and Steadfast) if there is enough Will of that particular type, or it will take Raw Will from the Aura to create a crystal. \n\tIn previous incarnations of the device it was possible to transform Raw Will from the Aura into differently aspected crystals. However, that is no longer the case: you can still create new spires of a certain aspected Will if there is enough of it in the Aura, however you will need to look into other means to separate the many aspects from Raw Will. See the entry on "Resonance of the Faceted Crystal" in The Ritual Master for more details. -guide.bloodmagic.entry.demon.cluster.info=The Demon Crystal Cluster can either be created by a Demon Crystallizer or by crafting one in the Hellfire Forge with Demon Will Crystals. Crafted clusters can be placed on any solid surface, such as the floor, walls, and ceilings. There are a max of seven spires on the crystal when fully grown, and when broken with a pickaxe it will drop the spires as Demon Will Crystals. However, if you right-click the cluster when you have a Tartaric Gem with more than 1024 Raw Will inside of it, you can break off a single spire from the cluster without breaking the cluster itself; this will never break the main spire from the cluster.\n\tWhen left to its own devices, the cluster will syphon some Will of the same type from the Aura to grow itself slowly. This process is a bit slow, but there is a minor net gain.\n\tThere are two rituals that are used to grow and harvest these crystals: the "Gathering of the Forsaken Souls" and the "Crack of the fractured Crystal". In order to find out how to use them, please refer to The Ritual Master. -guide.bloodmagic.entry.demon.pylon.info=As you may know, Demon Aura remains in its own chunk if there are not any outside influences. Well, this is one of those influences. The Demon Pylon acts as a beacon for Will in the Aura, pulling the Will from neighbouring chunks (those chunks that are directly next to it in the four cardinal directions, not diagonal) into its chunk. The Pylon will attempt to equalize the Will in its chunk with its neighbour so that the Pylon's chunk has as much Will as its highest neighbour for each Will type. This process only happens one way, however: if the neighbouring chunk has less Will in it than the Pylon's chunk, the Will will not transfer the other direction. -guide.bloodmagic.entry.demon.gauge.info=In order to tell how much Will you have in a given chunk you need to have a Demon Will Gauge. When in your inventory, the gauge will display the Will in the chunk that you have in five bars in the top-left corner of the screen. You can tell how much there is exactly by shifting; numbers will appear to the right of the bars to give the amount rounded to the nearest whole number. - - - -# Alchemy Entries -guide.bloodmagic.entry.alchemy.intro=Introduction -guide.bloodmagic.entry.alchemy.ash=Arcane Ash -guide.bloodmagic.entry.alchemy.speed=Movement Array -guide.bloodmagic.entry.alchemy.updraft=Updraft Array -guide.bloodmagic.entry.alchemy.bounce=Bouncing Array -guide.bloodmagic.entry.alchemy.turret=Skeleton Turret Array -guide.bloodmagic.entry.alchemy.buff=Buff Arrays -guide.bloodmagic.entry.alchemy.fastMiner=Fast Miner Array -guide.bloodmagic.entry.alchemy.furnace=Burning Furnace Array -guide.bloodmagic.entry.alchemy.teleport=Teleportation Array -guide.bloodmagic.entry.alchemy.standardTurret=Turret Array -guide.bloodmagic.entry.alchemy.laputa=Shard of Laputa - - -# Alchemy Entry Texts -guide.bloodmagic.entry.alchemy.intro.info=My name is Vlad Highborn, and I am a Blood Mage. I have studied the intricate workings of alchemy and the process of "Equivalent Exchange," which governs all aspects of magic. Basically, you cannot create something from nothing, although many have tried when searching for a particular stone. That obviously didn't end well, because people are clamoring for a fake variant even today. Of course simply saying that I am an alchemist isn't enough, because one of the main things I do is study Blood Magic with The Ritual Master and The Architect, both of whom have achieved those titles by their own merits. Magus and Tiberius have been busy recording their own works over the years, although I don't think Magus has everything written down in a book - I have yet to find any actual proof.\n\tMy book deals with all things alchemical in Blood Magic. From the uses of Arcane Ash to the intricate workings of the Alchemy Table, you will find everything you need to know about some of the more complex elements in the world. Not everything you need to know is in this book - for a full understanding about Blood Magic, you will need to read the other entries in this entire tome.\n\tBut for now, I hope you enjoy my research notes. You shan't find any lies between these covers. -guide.bloodmagic.entry.alchemy.ash.info=Arcane Ash is necessary in order to create alchemy arrays, powerful circles that are able to provide various effects. This ash is crafted using the Hellfire Forge and Demon Will, so if you are new to this concept please consult the "Demon Kin." \n\tThe ash has a total of twenty uses before you need to craft another. When you right click on the ground (or a wall, though it will only render one direction), you will inscribe a simple circle out of ash. If you click on the ash again with an item, it will be "placed inside of the ash" - assuming that this item is valid, the circle will change shape to represent that it is ready for the next item. If it doesn't change shape, then you did something wrong.\n\tOnce it has changed shape, you can then place in the secondary item. If this item matches with the first item, the circle will start rotating and performing different actions depending on the recipe it is working on. \n\tEvery non-crafting effect that can be performed using these arrays can be found in this book, and even if the recipe changes through 3rd party means it will show updated here. The items shown are the order they need to be placed in. -guide.bloodmagic.entry.alchemy.speed.info=The Movement Array creates a small vortex of air at its center and uses a small amount of energy to heat it up. After that, once an animal or any other type of entity walks into its area of effect, they will be launched forward in the direction that it was placed in by the force of the air. What is more, if fallen onto from a large height, the array will eliminate the fall damage that would have incurred. Just be prepared for some mild motion afterward. \n\tThe direction of motion is in the direction of the arrow on the array.\n\tIt should also be noted that you will gain a much greater distance if you fall or jump onto the array than if you simply walked into its area. This has to do with the turbulence from your movements causing a much greater reaction. -guide.bloodmagic.entry.alchemy.updraft.info=Using the exact same principles as the Movement Array, this array launches the entity that steps on top of it vertically in the air. Naturally, any user would have to be careful because the way down may be a little arduous! -guide.bloodmagic.entry.alchemy.bounce.info=By using a source of heat near its center that is pushed downward, the array attempts to soften the ground underneath it. After it has done this, it then converts carbon and hydrogen into a rubbery material inside of the earth. This combination causes any entity to impact the surface to bounce in the air and eliminating the fall damage that would otherwise be sustained. This bouncing can be stopped by simply shifting, and it will still cushion your fall. -guide.bloodmagic.entry.alchemy.turret.info=By utilizing the Demon Will that is still controlling a mob, you can take over the mind of a skeleton in order to make it do your bidding. If a skeleton finds itself inside of the area of this array, it will act as a sentry and attack hostile monsters nearby. Unfortunately this array is still highly experimental, so it may not work very well or consistently. -guide.bloodmagic.entry.alchemy.buff.info=Through rigorous study, you realize that alchemical arrays have a wide range of applications. So far, you have managed to create powerful items through crafting arrays, as well as a couple of arrays that provide functional benefits such as rapid movement and weak forms of teleportation. However, one of the uses that you have yet to tap into is providing powerful buffs through an active array.\n\t"Buff Arrays" are the general term for alchemy arrays that provide some buff to players within its area of effect. These areas of effect tends to have a very large radius which cannot be manipulated (unlike Rituals). However, because alchemy arrays have no concept of a Soul Network, they have to power their effects through other means: mainly through direct blood offerings. In simplified terms, this means that whenever the array will apply a buff, it will damage (take HP) from the player that it is cast on. \n\tBecause of the direct nature of these sacrifices, the HP -> buff conversion is a lot more favourable for players in the early game compared to similar buffs in the mod. For instance, if a buff from a sigil cost 100 LP for 10 seconds of activation, a more powerful buff can be applied by the array for 30 seconds for 1 HP (which is 100 LP in a T1 altar with no runes). This can be seen as a lot more efficient in the early tiers, while during the later tiers it is not as efficient of an effect. However, because of the stationary nature of the arrays, they will tend to provide a stronger effect than their sigil counter parts, so people may wish to still use it in the late-game. -guide.bloodmagic.entry.alchemy.fastMiner.info=When tasked with carving out a large area of land, sometimes it is best to just do it by hand. For those occasions, this array is for you. The array applies a Haste III buff to players within a 10 block radius, costing the user 1 HP per 30 seconds. Because it is a general Haste buff, it will also increase your attack speed while in its area of effect, though you will have to be careful since other players will benefit from this too! -guide.bloodmagic.entry.alchemy.furnace.info=One of the many problems that you may encounter in the beginning of your adventure is the inability to keep your furnace lit. A lit furnace can mean the difference between having a full stomach and strong weapons or starving in a cave. \n\tThe Burning Furnace array, as the name implies, will provide a much needed heat source for any nearby furnace. By placing the array directly adjacent to a vanilla furnace (it can be next to multiple), it will provide fuel to the furnace if an operation is able to be completed - nothing will happen if it is next to an empty or a full furnace, mainly for your protection. \n\tThis does not come for free, however: when a person is nearby (within a 10 block radius), it will take away half a heart of health in order to cook up to two things in the furnace. This will be helpful to either get a quick bite or to smelt a full stack of ore, but unfortunately you haven't found a way to add any safety measures to the array... -guide.bloodmagic.entry.alchemy.teleport.info=The Teleportation Array acts as a way to travel instantly from one location to another with a few specific limitations. When a player or other entity steps onto the array, the array will search up to 20 blocks away in the direction it is facing for another alchemy array (which does not need to be active). If the array manages to successfully find a destination, it will then teleport the entity to its found array instantly, even through walls. \n\tStudying this array has shown that there are further limitations added to it: because of the nature of bending the fabric of space-time, a Teleportation Array will not teleport something that has teleported within 2 seconds. This is to allow time for all components to rearrange themselves in a desirable manner. -guide.bloodmagic.entry.alchemy.standardTurret.info=The power of flinging pointy objects at far away monsters cannot be overstated. The Turret Array is able to sense a nearby hostile monster and by utilizing complex alchemical mechanisms it is able to draw back and fire an arrow in order to strike its target. \n\tThe array searches for an inventory directly beneath it. If it finds either a normal or tipped arrow it will syphon from its container and fire at a mob that is within a 32 block radius. \n\t(Due to some silly Minecraft physics that has arrows bounce off of entities that are too close to where they spawn, the turret will also only fire on a mob that is greater than 3 blocks away. Keep that in mind!) -guide.bloodmagic.entry.alchemy.laputa.info=There exists a story of a lost kingdom that had such advanced magic that it could fly through the clouds. Although this kingdom has since crumbled to dust, a few drawings of this castle in the sky has managed to provide exquisite detail as to the mechanisms that allowed it to become the legend that it is. \n\tThe Shard of Laputa converts the life essence that is found within the earth into a more avian form, causing the surrounding area to levitate in the air. While the underlying principle is simple, the variations of the life essence in the earth cause a bit of inconsistency in how much land is moved. The array will move the earth in a spherical radius between 4 and 8 blocks up above itself a random offset between one and 5 blocks plus twice the radius of the effect. \n\tIt should be noted that as soon as the effect starts, all items used to activate the array will be lost. diff --git a/src/main/resources/assets/bloodmagicguide/lang/zh_CN.lang b/src/main/resources/assets/bloodmagicguide/lang/zh_CN.lang deleted file mode 100644 index 37b61615..00000000 --- a/src/main/resources/assets/bloodmagicguide/lang/zh_CN.lang +++ /dev/null @@ -1,270 +0,0 @@ -# Book Information -guide.bloodmagic.title=血染知书 -guide.bloodmagic.display=血染知书 -guide.bloodmagic.author=血魔法 -guide.bloodmagic.welcome=血魔法 - -# Page Information -guide.bloodmagic.page.bloodAltar=血之祭坛合成 -guide.bloodmagic.page.soulForge=狱火熔炉合成 -guide.bloodmagic.page.tier=层级:%d -guide.bloodmagic.page.lp=LP: %d -guide.bloodmagic.page.minimumWill=启动所需意志:%f -guide.bloodmagic.page.drainedWill=合成消耗意志:%f -guide.bloodmagic.shapelessOrb=无序宝珠合成 -guide.bloodmagic.shapedOrb=有序宝珠合成 -guide.bloodmagic.page.alchemyArray=炼金法阵 - - -# Categories -guide.bloodmagic.category.architect=缔造者 -guide.bloodmagic.category.ritual=仪式大师 -guide.bloodmagic.category.demon=恶魔之子 -guide.bloodmagic.category.spell=战法师 -guide.bloodmagic.category.alchemy=炼金术士 - -# Ritual Master Entries -guide.bloodmagic.entry.ritual.intro=序 -guide.bloodmagic.entry.ritual.basics=仪式入门 -guide.bloodmagic.entry.ritual.ritualStone=仪式石 -guide.bloodmagic.entry.ritual.masterRitualStone=主仪式石 -guide.bloodmagic.entry.ritual.activationCrystal=激活水晶 -guide.bloodmagic.entry.ritual.diviner=仪式推测杖 -guide.bloodmagic.entry.ritual.fullSpring=涌泉仪式 -guide.bloodmagic.entry.ritual.lava=下界夜曲 -guide.bloodmagic.entry.ritual.greenGrove=绿丛仪式 -guide.bloodmagic.entry.ritual.magnetism=磁力仪式 -guide.bloodmagic.entry.ritual.crusher=挖掘仪式 -guide.bloodmagic.entry.ritual.highJump=高跳仪式 -guide.bloodmagic.entry.ritual.speed=速移仪式 -guide.bloodmagic.entry.ritual.wellOfSuffering=苦难之井 -guide.bloodmagic.entry.ritual.featheredKnife=羽刀仪式 -guide.bloodmagic.entry.ritual.regen=重生仪式 -guide.bloodmagic.entry.ritual.harvest=满月收割 -guide.bloodmagic.entry.ritual.interdiction=禁止仪式 -guide.bloodmagic.entry.ritual.containment=牵制仪式 -guide.bloodmagic.entry.ritual.suppression=抑液仪式 -guide.bloodmagic.entry.ritual.expulsion=驱逐氛场 -guide.bloodmagic.entry.ritual.zephyr=和风之唤 -guide.bloodmagic.entry.ritual.laying=铺设仪式 -guide.bloodmagic.entry.ritual.timberman=伐林仪式 -guide.bloodmagic.entry.ritual.meteor=坠星标位 -guide.bloodmagic.entry.ritual.downgrade=沉重灵魂的忏悔 -guide.bloodmagic.entry.ritual.crystalSplit=结晶共鸣 - -# Ritual Master Entry Text -guide.bloodmagic.entry.ritual.intro.info=晚上好,我就是马格斯·阿尔卡纳。在外人看来我有很多身份:盗贼、自警团、巫师、战士、吟游诗人、甚至政治家。而现在,只有少数人清楚地知道我的头衔——只需提及一下,那臆想中的残暴图景就可以令人闻风丧胆——纵使这个说法有一半是误导,但这个说法有一半的确是真相。诚然,我说的便是作为职业存在的血法师。我的朋友一般都直呼我的名,而我的敌人一般称我为仪式大师。\n\t/cut现在呢,我的学生们,为了让我把毕生所学传播给下一代有志者们,缠在我身边已有数月了。我一直在坚守秘密,但提比略对此的评论更为精辟:“尽管你自己还看不到你自己的潜力,但不论是在什么魔法领域中,那些已臻化境的大师们的故事总是对下一代人有好处的。然而,重现奇迹的细节其实并没有那么重要。若是没有对魔法能量的绝对自信,即便是金沙,也不过是一堆硫磺粉而已。”当然你可以认为/cut他已经触碰到了炼金术的真谛,但他毕竟是我的第一个学生,我有时候也会认真思考他的想法。\n\t所以呢,那些仍在苦苦寻找前进的道路的年轻血法师们,且听我一言:血魔法的领域之广阔不是常人可以理解的,若不加思考地前进,很快你就会遇到瓶颈。因此,请务必时常翻阅这本书——这本书上有我的魔法,只要我写下来新的内容,你们就能立刻看到。\n\t/cut诸位请坐。不要紧张,试着去感受老一辈血法师的教诲。或许会比你讨价还价求到的东西还要有用。 -guide.bloodmagic.entry.ritual.basics.info=现在的魔法仪式已经和几百年前大不一样了。曾几何时,人们用粉末在地上组成魔法阵,并在旁边起舞,直到获得想要的东西。我甚至记得有一位从她自家花园中收集魔法能量的隐士。我一直都在嘲笑这种魔法,直到她把她的猫头鹰丢过来监视我。\n\t而血魔法师的仪式呢,需要用到一种带特殊标记的石头,并且需要按指定方式精确摆放,方能转化注入的能量。有一/cut天,我的学徒提比略在他的新房间里翻找我过去的仪式资料。那里有一罐从未开封过的液态Etherium(我好像说过很多次要把它取回来但每次说完就忘了),以及一个透过镜片看时总像是在说“星期二”的水晶球。当有一个标有“符文尘埃”的箱子被打翻后,一颗小小的红色宝石滚了出来,滚到了提比略的脚下。霎那间,它发出的明亮的红宝石的光芒和他抱着的箱子里的粉末发生了反应。\n\t/cut——自然地,瞬间爆炸。提比略不小心释放出的没有聚焦的能量激活了符文尘埃和周围的仪式石,在没有容纳能量的装置的情况下,它们只能向外扩散。在几天的治疗后,提比略和我又开始了工作。\n\t在经历了数个不眠之夜,和高效的咖啡因的帮助下(啊,感谢Player先生的咖啡,感谢他给我带来的更加精神的明天!),我们终于找出了所有仪式所需的关键材料。\n\t/cut根据实验,我们需要至少四种材料:按照一定样式摆放的仪式石;若干种不同的墨水,用于刻画仪式细节;置于仪式中央的特殊仪式石,用于传递能量;以及用于激活仪式的水晶。我觉得有必要将各个仪式全部详细地解说一遍。 -guide.bloodmagic.entry.ritual.ritualStone.info.1=仪式石便是魔法能量的容器:根据石头的不同,可将能量塑造为各种形状,或导向不同的地方。仪式石分五种:空白(没有任何铭文)、水、火、风和土。每个仪式都会用到若干不同种类的仪式石,每个仪式所需的布局也不尽相同。 -guide.bloodmagic.entry.ritual.ritualStone.info.2=为仪式石画上正确的铭文需要一些工具。我早已研究出一种快速建造正确仪式的办法,但如果有人想自己动手搭建的话还是可以用这些工具的。手持合适的工具右击仪式石便可为其画上铭文。一开始你只能制作出其中四种工具,随着修行的深入你会得到更高级的工具的制作方法的。 -guide.bloodmagic.entry.ritual.masterRitualStone.info=和大部分魔法一样,仪式需要引导,否则其力量会变得无法控制,或者仪式本身会彻底失效。有鉴于此,仪式需要由主仪式石控制(我的笔记中通常会以缩写"MRS"表记,但也只能这样写写而已。试想:你喊一声“麻烦一下,我需要更多的MRS”...然后尴尬症就犯了。)主仪式石会从其主人的灵魂网络中抽取能量,并扩散至每一块仪式石上,从而启动仪式。\n\t把灵魂网络和一块大石头绑一块有点麻烦。我曾经成功/cut过一次:在主仪式石顶上盘腿打坐,将能量聚集于石头上并尽力将灵魂网络和仪式连在一起。虽说成功持续了几分钟,但我的裤子却因为水在仪式石上冷凝而湿透了。于是我得到了一个教训:不要试图在实验中进行任何冥想。 -guide.bloodmagic.entry.ritual.activationCrystal.info.1=于是我们停止了冥想,转而去研究那颗从箱子里滚出的红色宝石。提比略确信它有“将我们所在的肉体世界和主宰灵魂网络的精神世界连接在一起”的能力。我一直在想到底要不要收他作学徒,但我的确能看出他对于那些晦涩难懂的魔法的理解。啊,我想我有必要翻译一下,他想表达的是:我们可以用这水晶将灵魂网络和主仪式石连在一起,以给仪式提供能量。 -guide.bloodmagic.entry.ritual.activationCrystal.info.2=于是我们得到了虚弱激活水晶,以及复制它的办法。它的原料是另一种可以与灵魂网络链接的水晶:熔岩水晶。只需要迅速在上面刻好必须的图案,血之祭坛就可以将它变成激活水晶。自然地,它也需要和使用者的灵魂网络绑定。在仪式正确摆放后,只需手持熔岩水晶右击主仪式石就可以开始了。当然,这需要有足够多的LP作为支撑。如果没有足够多的LP,仪式不会发动,也不会因此消耗LP。 -guide.bloodmagic.entry.ritual.diviner.info.1=在不断发现新的仪式过程中,我愈发感到建造仪式的枯燥。这也是为什么我制作出这样一个工具的原因——这样所有人都可以通过简单的手势和动作来快速部署仪式了。按时间顺序来说这个应该放在诸仪式的后面来讲,但我决定提到前面,因为我觉得先学习这个的使用会更好。没人会想在临阵时才发现仪式石没带够,抑或原本只是想变出一瓶水结果却召唤了陨石吧。 -guide.bloodmagic.entry.ritual.diviner.info.2=仪式推测杖的本质是本仪式的百科全书。你可以通过一些操作(按住Shift左击或右击)来在不同仪式间切换,仔细看的话你还会得知一些基础信息。在你带着仪式石的时候,手持推测杖右击主仪式石,便可在正确位置放置一块仪式石。只需要不断右击就可以完成仪式了! -guide.bloodmagic.entry.ritual.fullSpring.info=几年前,有一个旅行商人路过我附近的一个村子,并向众人兜售他的各种小东西。那个村子大概有很长时间没下雨了,庄稼也快旱死了,商人见此便掏出了一个镶有蓝色宝石的银制护符。“看这个!”,他的声音中带着几分激动,“这个东西可以让河流永不干涸!我可以用炼金术从空气中变出水!”\n\t然而村民们觉得那宝石好像只是普通的蓝宝石而已。等他们反应过来上当受骗时那/cut个商人已经消失得无影无踪了。我起初并不打算干涉此事——因为他们似乎并不喜欢我的魔法——但这次我破了个例。在和“炼金术士”进行了愉快的交流后,我在灌溉渠旁打坐了数小时。我成功通过冷却空气中水蒸气的办法给庄稼们带来了足够多的水——足够撑到下一个旱季。自然这个方法并不靠谱,因为我自己已经被打坐给榨干了,不得不靠自己造出来的水来重新调整。\n\t/cut我再次想起了这个事,并按照同样的方法制作了涌泉仪式。给仪式灌注少量能量,仪式便可将附近空气中的水分聚集起来,并在主仪式石上方产生一个水源。激活仪式需要的能量并不多,维持其运转的能量更是可以忽略不计。\n\t水的范围和放置的位置都是可以用仪式调整钳调整的,所以那些对美观表示担忧的魔法师们不要担心了。这便是魔法的力量! -guide.bloodmagic.entry.ritual.lava.info=熔岩——恐怕是最普通的能量来源了吧。我平日的研究中很少使用熔岩,因为它其实并非是普通的铁桶就能装起来的东西!\n\t有一天,当地的一名铁匠找到我,并向我打听附近的能量源的事情。他说他们最近新造了一个大家伙,需要大量能量来运转。我回答道,“有倒是有,但它们并非无主之物。”我决定去亲眼看一下这个所谓的大家伙到底是何方神圣。\n\t/cut那是...一个至少五公尺(5米)见方的冶炼炉,上面还连着几个空空如也的储罐。虽然我不知道这玩意儿到底是怎么工作的,但我的直觉告诉我,熔岩的热量用在这里正合适——电力是绝对不行的,绝对不行。除此之外,我只知道这不是沉浸工业公司的产品。\n\t在经过短暂的讨价还价后,铁匠付了一笔费用,我便开始叫他们稍微让开一下,以便准备搭建仪式。按我的想法,我将/cut四块火之仪式石和主仪式石摆成十字,脑海中不断想象整个过程的同时,我用力将激活水晶推向了主仪式石。理论上这个过程应该十分简单:仪式不断地将大地深处的石头挖出来,在巨大的压力下熔融成熔岩。这样制成的熔岩可以直接从仪式石中提取出来,然后仪式本身还可以自维持这种类似挤压的过程。\n\t然而这只是理论。说起来容易做起来难:当时我使用的简/cut易网络完全不适合拿来为这个仪式供应魔力,不仅挤压熔岩需要的压力巨大(需要20000LP启动仪式),抽取熔岩的开支也不小(每产生一格熔岩需要500LP)。\n\t我摇摇晃晃地走出了铁匠们的基地,脸上带着一丝欣慰。那些储罐里的熔岩足够铁匠们用到他们找到新的岩浆来源了。当然,我也没忘记带走我的仪式石。\n\t---------------\n\t/cut在没有外力影响下,这个仪式会不断尝试在主仪式石上方生成一格熔岩,并消耗500LP。一般情况下,熔岩生成的范围可以扩展到仪式本身三格开外。\n\t在原生意志的影响下,LP消耗和大气中意志的浓度成反比,同时会不断消耗意志,意志的消耗速度与节约的LP数量成正比。使用原生意志还可以让仪式自动将熔岩放置进各式液体容器中,速度大抵保持不变。\n\t/cut腐蚀意志会反转火焰免疫的效果。换言之,那些平时对火焰免疫的生物,在这个仪式的影响下会失去火焰免疫的属性;而那些无法抵抗火焰的生物则会对火焰免疫。\n\t复仇意志会令此仪式释放出一种挥发性气体,这种气体会影响任何不是玩家的生物。在这种气体的作用范围内的生物都会获得“缓燃引线”的效果。当这个效果的倒计时归零时,这个生物会爆炸,强行将生物赶回空气当中。\n\t/cut破坏意志可以强化这个仪式的各种属性。大气中这种意志的含量越多,仪式能放置的岩浆源数量也就越多。更喜人的是这个仪式并不会消耗破坏意志。然而,当大气中的意志数量下降,而且仪式的最大范围小于你设定的范围时,仪式就会停止工作,必须进行手动修复。\n\t最后,坚毅意志会令仪式范围内的玩家获得火焰抗性,时效和空气中意志的浓度成正比。另外有一点要注意,腐蚀意/cut志的反转效果会抵消掉坚毅意志所带来的火焰抗性。 -guide.bloodmagic.entry.ritual.greenGrove.info=上星期我开始为提比略讲授跨领域的魔法。除了血之魔法外,我的每个学徒都学过一些其它形式的魔法。其实,学什么魔法都没有关系,只要它不浪费资源就好——我曾经使用过来自遥远的东方的Ars部落的魔法,但是因为Etherium之源几乎被榨干了,所以这个计划也就夭折了。\n\t提比略决定学习神秘学,一门利用世界本身的魔法来创造属于自己的魔法的魔法。它/cut正好和血之魔法相抗衡——后者使用的是生命本身具有的魔法。为了解释清楚,我决定用作物生长为例子,展示两门魔法之间的差别。\n\t“在神秘学中,魔法师会使用以Herba源质炼成的生长催化剂,”我一边这样说着,一边指着教室墙上挂着的一幅源质合成图;诚然这节课其实只有提比略一个学生,但人总还是需要点乐趣的,“一小股灵气和源质混合在一起可以刺激植物的/cut光合作用,从而令植物吸收更多的光能,以此加速其生长。然而,这需要保证作物生长在肥沃的土地上,否则作物最终只能枯萎死亡。“\n\t然后我找来了土仪式石和水仪式石各四块,摆出一个圆形,并在圆心处放置主仪式石。“血魔法与之正好相反,”我一边说着,一边激活了主仪式石,并在上面盖上了一层泥土。“你可以用你自己的生命力,或者别的动物的生命力,来加速作/cut物的生长,从而节约一般肥料的使用。本质上来讲,这个仪式会不断给予植物养分,从而使其养分保持在一个较高水平。”\n\t我向土中撒了几粒种子,小心翼翼地用土盖好,然后从贴身法袍中掏出一个水瓶,拔开瓶塞然后将水洒在了泥土上。“这个过程不需要阳光,因为它用到了另一种形式的能量。尽管如此,阳光还是很有用的——毕竟作物一开始不是这样生/cut长的嘛!”\n\t在我解释的时候,有几点绿色的东西就已经冒出了土堆。每有一片新叶长出,我都会感受到一丝压力,虽然不大,但会不断积累。下课后,我开始清理实验用的土堆,然后决定去村子里走一圈:我现在有几斗小麦要卖。\n\t---------------\n\t绿丛仪式,正如其名,以血法师之血为养料,加速仪式附近之植物,诸如小麦、胡萝卜之类,/cut的生长。默认,仪式只在3x3范围内寻找合适的目标,每秒大概只有30%%的概率成功催生。用仪式调整钳调整后可寻找5x5范围内的至多81棵作物。\n\t另外,恶魔意志对这个仪式也有效果。原生意志会加快其工作速度,效果取决于浓度,但每次催生会多消耗0.05点意志。\n\t若辅以复仇意志,仪式依旧会在每次催生时多消耗0.05点意志,但会增加催生成功的概率。/cut之前提到默认概率是30%%,但若是你有100点复仇意志,这个概率会上升至80%%。\n\t破坏意志可以提高仪式的工作范围,这意味着你的一个仪式可以覆盖到更多的作物上。而且这个仪式不会消耗破坏意志!然而,若是意志的浓度下降,而你设定的范围比仪式最大的工作范围还大,那仪式就会停止工作,需要手动修复。\n\t/cut坚毅意志会让仪式在催熟作物的同时保证耕地已经过翻整且保持湿润。另外,若是仪式的工作范围内有掉在地上的种子,坚毅意志会让仪式自动用那些种子来补种。自然地,这个效果会消耗意志,但消耗速度是固定的。\n\t腐蚀意志的效果则完全反转了这个仪式的工作原理——植物会在这种意志的影响下转而去主动吸血,就像水蛭那样。具体来说:每一刻,若植物附/cut近若有怪物,那么植物和怪物都会受到伤害,且两者伤害成正比。事实上直接用怪物当作植物的养料是有效的!另外,每个怪物上每有10秒中的负面效果,就会消耗0.2点腐蚀意志。 -guide.bloodmagic.entry.ritual.magnetism.info=磁力仪式可谓是采石场必备。这个仪式会制造出一旋转的磁场,将深埋地下的丰富矿藏吸到地面上。这个仪式并不会吸走石头,所以地面上也不会因此出现大洞,前提是地下并非全是矿石。这个仪式每2秒就会试着吸一个矿石,每成功吸取一个矿石便消耗50LP。\n\t/cut默认,这个仪式的工作范围是以主仪式石为中心的7x7正方形区域(即半径为3)。目前,意志还不能影响这个仪式的工作,所以你只能通过在主仪式石正下方放置某种价值高昂的方块来提高其工作范围。一个铁块可以让半径增加到7。金块则是增加到15。钻石效果最好,可以将其工作范围拓展为63x63,届时你只需要看着仪式慢悠悠地把矿石吸到主仪式石上方3x3的空间里就好了。 -guide.bloodmagic.entry.ritual.crusher.info=挖掘仪式的运行十分简单:只需要将箱子之类的东西放在主仪式石正上方,它就可以消耗LP并不断挖掘主仪式石正下方3x3x3范围内的方块了。仪式每2秒会尝试挖掘,如果成功,会消耗7LP。挖下来的方块会放进与仪式链接的容器中,如果容器已满,就会掉在那个容器的上面。\n\t若以原生意志驱动仪式,仪式将会工作得更快,但每次成功挖掘时都会多消耗0.05点原生意志。\n\t/cut破坏意志会令仪式在挖掘方块时拥有时运的效果。目前来看,不论提供多少意志,时运的等级永远是三,并且每次成功挖掘都会多消耗0.2点此种意志。\n\t坚毅意志会令仪式在挖掘方块时拥有精准采集的效果。每次成功挖掘都会多消耗0.2点此种意志。\n\t腐蚀意志会令仪式在挖掘方块时经过某种液体的浸洗。/cut这种液体带有粉碎的效果,换言之——此时你挖掘的铁矿时会变成两堆铁砂。目前这种液体可以是基础切削油或爆炸火药。根据所有液体的不同,仪式消耗的意志数量也不同。这个效果会覆盖精准采集的效果。\n\t/cut复仇意志的效果和压挤印记差不多,即会压缩挖下来的东西。举例:箱子里现在有65红石,一次挖掘后会将其中9个红石压缩为一红石块,留下56红/cut石。仅当压缩成功时仪式才会消耗0.2点复仇意志。 -guide.bloodmagic.entry.ritual.highJump.info=这个仪式会用强大的气流将走在上面的人送上天。另外,这个仪式还会令摔下来的人免受掉落伤害。潜行即可规避仪式的效果。\n\t每次成功产生气流时,仪式都会以5LP/tick的速度消耗LP;若没能产生气流,则不会消耗LP。 -guide.bloodmagic.entry.ritual.speed.info=仪式如其名,速移仪式可用来加速移动。仪式本身可以指向任意方向,而在仪式的生效范围内的实体都会朝仪式所指的方向加速。仪式的指向由那块薄暮仪式石的位置确定。默认,工作范围是半径二格见方,但可以用仪式调整钳调整。水平方向上的速度加成是3方块/tick,垂直方向上则是1.2方块/tick。\n\t以原生意志驱动的速移仪式会使生物获得更快的速度。/cut当周围充满原生意志(即100点)时,速度会翻一番。每次加成都会消耗0.1点意志。\n\t复仇意志将会迫使仪式对成年动物无效,而破坏意志会迫使仪式对幼年动物无效。复仇和破坏意志都会令仪式对玩家无效。若同时使用这两种意志,则仪式只会对玩家有效。这些特性对于动物农场,甚至是过滤小僵尸都是十分有用的。仪式只有在成功加速时消耗0.05点意志。换言之,/cut对于幼年动物来说,仪式不会消耗破坏意志,也不会消耗LP——因为这时的仪式不会对幼年动物有效。 -guide.bloodmagic.entry.ritual.wellOfSuffering.info=对于那些不想用自己的血来补充LP供应的血法师,苦难之井便是他们的选择:这个仪式会将方圆十格范围内的非玩家实体的生命聚集到血之祭坛里。苦难之井只会在上下十格、水平方向上方圆五格的范围内寻找血之祭坛。如果找不套祭坛,仪式不会工作。仪式每消耗1LP便可从怪物上抽出25LP;若是针对非敌对的生物,则可抽出100LP;具体数量会受到献祭符文的增幅的影响。 -guide.bloodmagic.entry.ritual.featheredKnife.info=羽刀仪式像是一把直插使用者身上的刀,抽取其血液,并为附近的血之祭坛补充能量。一般,羽刀仪式首先会在以主仪式石为中心的11x11x21的范围内寻找一座祭坛——若找不到祭坛,仪式不会工作;找到祭坛后仪式会记下这个祭坛的位置。当有玩家进入仪式的范围(默认为31x31x41)后,仪式会每秒对玩家造成一点伤害,并将其转化为LP送入祭坛中。这个过程会受到血之符文的影响。伤害玩家的速度可/cut以调整。不要担心,这个仪式也有安全保护机制:它不会攻击那些只剩下百分之三十不到的生命值的玩家。\n\t有数种恶魔意志可以影响这个仪式的工作。比如,原生意志——它可以提高仪式的工作速度,准确地说是一秒攻击玩家两次。但每次攻击时会多消耗0.05点原生意志。\n\t若周围的灵域中有至少十点坚毅意志,仪式会将安全阈值/cut从百分之三十提高到百分之七十。这层保护不会多消耗意志。\n\t若周围的灵域中有至少十点复仇意志,仪式会逐步降低安全阈值至百分之十。若同时有至少十点坚毅意志,那么后者的百分之七十的阈值将只对仪式的主人有效果。和坚毅意志一样,这个效果不会多消耗意志。\n\t/cut若仪式附近的灵域中有破坏意志,这个仪式的生命值转LP的效率会有所提高。转化率的增幅与破坏意志的含量成正比,最高为五分之一,对应100点破坏意志。这个效果可以与符文、束灵护甲升级和熏香叠加。每转化一点HP,会多消耗0.05点破坏意志。\n\t说到熏香——腐蚀意志会令熏香的效果与此仪式叠加。若你身上没有“魂飞魄散”效果,并且你正好处在熏香的效果/cut范围内,你的生命值会被直接扣至安全阈值,并将转化出的LP一次性注入祭坛中,并给予你魂飞魄散的效果。此效果可与破坏意志叠加。 -guide.bloodmagic.entry.ritual.regen.info=虽然仍有争议,但这重生仪式对于那些想用自己的血来驱动魔法的血法师们来说,仍然是一个不错的选择,因为它会利用血法师的魔法在仪式范围内产生治疗光环的效果,藉由此治愈仪式范围内的生物,包括血法师他们自己。仪式每2.5秒会给15格范围内的生物附加生命回复I的效果;对于玩家来说它会消耗100LP,对于其它生物来说是10LP。\n\t/cut腐蚀意志会给仪式再加上一个“吸血鬼范围”。此时,仪式会对所有非玩家生物随机造成伤害,并藉由此治疗玩家。每一个工作的tick中它都会消耗0.04点腐蚀意志并将1点生命值转移到玩家身上。 -guide.bloodmagic.entry.ritual.harvest.info=这个仪式可以收获默认以仪式石上方9x9x5范围内的所有作物,并将收获到的种子补种回去。所有收获到的物品都会掉落在原地。仪式工作频率为5tick尝试一次,每次成功收获都会消耗20LP。\n\t可以收获的作物包括但不限于:南瓜、小麦、胡萝卜、土豆、地狱疣、仙人掌、甘蔗等。时刻记住,这个仪式并不会对它正在收割的作物作任何假设——只要它被认为是一/cut种可以收割的作物,这个仪式就可以收割。(译注:更精确地说,是指有对应的HarvestHandler支持的作物。) -guide.bloodmagic.entry.ritual.interdiction.info=在传说中的古代炼金术设备的基础上,我们研发出了这个仪式,可将任何不是玩家的生物赶出仪式所覆盖的范围。默认,任何距离此仪式的主仪式石不超过两格的非玩家生物的移动速度都会被此仪式干涉到。要注意的是,尽管仪式范围内的生物不会被掉落伤害影响,但一旦超出了仪式的覆盖范围,保护就会失效。 -guide.bloodmagic.entry.ritual.containment.info=和禁止仪式正好相反,牵制仪式会试图将所有生物全部拉进仪式上方的范围中,并困住它们,使其无法移动。默认范围是水平方向上3格见方,从最低的仪式石到最高的仪式石为止。这个范围可以调整。\n\t/cut默认,仪式的消耗是每个生物每tick1LP。没有在拉生物时不会消耗LP。 -guide.bloodmagic.entry.ritual.suppression.info=抑液仪式会压制其影响范围内的所有液体——换言之,将范围内的液体全替换为空气。它的工作范围大约是半径10格的上半球。工作时,LP消耗速度为2LP/tick。仪式停止工作时会将所有被替换的液体全部放置回去。 -guide.bloodmagic.entry.ritual.expulsion.info=假如你在玩服务器时,你发现,出于种种理由,你需要拒绝某些玩家的造访,然后你发现力场护盾和杀人不眨眼的巨型转子根本不能阻挡他们。那么就是这个仪式出场的时刻了!在传送魔法的帮助下这个仪式会大大缓解你的问题!\n\t若有玩家进入此仪式的范围内,并且这个玩家并不是仪式的主人,那么这个玩家就会被随机传送到半径100格的范围中的某个地方。当然这个仪/cut式还有一种类似白名单的功能:在主仪式石上放一个箱子,然后将那些与不想被传送的玩家绑定的物品放进箱子里,这些玩家就不会被传送走了。\n\t每传送成功一次会消耗2000LP。 -guide.bloodmagic.entry.ritual.zephyr.info=和风之唤——以一把古剑的名字命名——可以藉由风的力量将附近的物品卷起来并送入与之链接的箱子里(默认,只需要把箱子放在主仪式石正上方即可)。这个过程大概一瞬间就可以完成,所以你不用担心有什么奇怪的吸力问题!\n\t默认的工作范围是主仪式石方圆5格之内的方形。 -guide.bloodmagic.entry.ritual.laying.info=很多时候,自动化任务需要某种自动放置方块的手段。这个仪式便可以从附近的箱子中(默认,是主仪式石正上方)取出方块并放置在仪式的内部。具体来说,是放置在距离主仪式石两格远的地方,且高度相同。十分适合在建造树场时用于自动种树苗。每放置一个方块消耗50LP。 -guide.bloodmagic.entry.ritual.timberman.info=种了一堆树?想必你需要这个仪式。伐林仪式会将仪式持有者的LP用来驱使一个无形的幽灵,以砍伐附近的树木,并将砍下来的木头放入附近的箱子里。默认,它的工作范围是主仪式石往上30格,每个水平方向上各延伸10格形成的长方体。每砍掉一块木头需要消耗10LP。 -guide.bloodmagic.entry.ritual.meteor.info=就目前来说,这个仪式是所有仪式中最强大的仪式之一。激活此仪式需要消耗一百万LP,并且还有一段冷却时间。然而它的效果也十分强大——只需提供合适的祭品,它就可以从宇宙中召唤一颗陨石并直接砸向地面。诚然,这样一个大家伙会在地面上造成大爆炸,但因为它来自宇宙中,所以可能会包含大量稀有矿石。 \n\t/cut可用的祭品包括铁块、金块和钻石。(事实上,可用的祭品是可以被整合作者或用户控制的) -guide.bloodmagic.entry.ritual.downgrade.info=为了获得更强大的力量,你或许需要献祭某种东西作为交换。而这“沉重灵魂的忏悔”的任务正是如此——将一些物品献祭给一个虚无缥缈的实体,你便可以以束灵护甲的属性下降为代价,来换取更多的升级点数。仪式落成后,你需要在最高的空白仪式石挂一个面朝主仪式石的物品展示框,然后在薄暮仪式石上放一个能装东西的方块(例如箱子)。要献祭的物品需要放入那个装东西的地方,而核心物品/cut应挂入物品展示框内。仪式激活后,你便可以蹲在主仪式石上并获得降级后的物品。\n\t举例,对于淬火降级来说,核心物品是个水瓶,需要献祭的物品是龙息。\n\t所有可用的降级都可以通过JEI查询到——查询主仪式石的用途即可。另外,对于一个特定的降级来说,核心物品是一定的,所以你也可以选择查询某个物品来定位某个降级所需的祭品。 -guide.bloodmagic.entry.ritual.crystalSplit.info=晶化恶魔意志一旦形成,就不能再重新分解成其他类型的意志——至少我之前是这么认为的。“结晶共鸣”仪式可以利用四元素仪式石,从原生恶魔意志中分离出各种其他类型的恶魔意志。\n\t首先要在主仪式石上方两格处放置原生意志晶簇。你可以在主仪式石上放一座结晶坛,结晶坛上放置恶魔晶簇,这样就可以了。然后,确保四种元素的仪式石上不能有方块/cut遮挡,确认完后就可以等待结晶生长了。\n\t晶簇长出五瓣后,这个仪式就会将四瓣晶簇分离出去,此时四元素仪式石上会长出腐蚀、坚毅、恶意和破坏四种类型的恶魔晶簇各一瓣。若中间的原生晶簇仍能继续生长,且周围的四种其他类型的晶簇仍然保持完整,那么这个过程就会持续下去。\n\t这个过程的工作原理很简单,/cut原生意志晶簇有五瓣或者更多瓣的时候,仪式会收割其中的四瓣,转化为更无形的存在。然后,新产生的意志就会被推出原生恶魔晶簇的范围,迫使类型相近的意志聚集在一起。不同类型的意志最终会在仪式石上集结,而仪式石本身也是可供某种非原生意志生长的基础。 - -# Architect Entries -guide.bloodmagic.entry.architect.intro=前言 -guide.bloodmagic.entry.architect.bloodaltar=血之祭坛 -guide.bloodmagic.entry.architect.ash=奥术粉灰 -guide.bloodmagic.entry.architect.divination=占卜印记 -guide.bloodmagic.entry.architect.soulnetwork=灵魂网络 -guide.bloodmagic.entry.architect.weakorb=虚弱气血宝珠 -guide.bloodmagic.entry.architect.incense=熏香祭坛 -guide.bloodmagic.entry.architect.bloodrune=祭坛升级 -guide.bloodmagic.entry.architect.inspectoris=指示之书 -guide.bloodmagic.entry.architect.runeSpeed=速度符文 -guide.bloodmagic.entry.architect.water=水之印记 -guide.bloodmagic.entry.architect.lava=熔岩印记 -guide.bloodmagic.entry.architect.lavaCrystal=熔岩水晶 -guide.bloodmagic.entry.architect.apprenticeorb=学徒气血宝珠 -guide.bloodmagic.entry.architect.dagger=牺牲匕首 -guide.bloodmagic.entry.architect.runeSacrifice=献祭符文 -guide.bloodmagic.entry.architect.runeSelfSacrifice=牺牲符文 -guide.bloodmagic.entry.architect.holding=集持印记 -guide.bloodmagic.entry.architect.air=风之印记 -guide.bloodmagic.entry.architect.void=虚空印记 -guide.bloodmagic.entry.architect.greenGrove=绿丛印记 -guide.bloodmagic.entry.architect.fastMiner=速掘印记 -guide.bloodmagic.entry.architect.seer=见解印记 -guide.bloodmagic.entry.architect.magicianOrb=法师气血宝珠 -guide.bloodmagic.entry.architect.capacity=增容符文 -guide.bloodmagic.entry.architect.displacement=转位符文 -guide.bloodmagic.entry.architect.affinity=元素印记 -guide.bloodmagic.entry.architect.lamp=血光印记 -guide.bloodmagic.entry.architect.magnetism=磁引印记 -guide.bloodmagic.entry.architect.peritia=经验之书 -guide.bloodmagic.entry.architect.livingArmour=束灵护甲 -guide.bloodmagic.entry.architect.upgradeTome=束灵护甲升级之书 -guide.bloodmagic.entry.architect.teleposer=传送器 -guide.bloodmagic.entry.architect.boundBlade=束缚之剑 -guide.bloodmagic.entry.architect.boundTool=束缚工具 -guide.bloodmagic.entry.architect.weakShard=虚弱气血碎片 -guide.bloodmagic.entry.architect.masterOrb=导师气血宝珠 -guide.bloodmagic.entry.architect.runeOrb=宝珠符文 -guide.bloodmagic.entry.architect.suppression=抑液印记 -guide.bloodmagic.entry.architect.haste=急速印记 -guide.bloodmagic.entry.architect.severance=绝影印记 -guide.bloodmagic.entry.architect.teleposition=传送印记 -guide.bloodmagic.entry.architect.compression=压挤印记 -guide.bloodmagic.entry.architect.bridge=影桥印记 -guide.bloodmagic.entry.architect.mimic=拟态 -guide.bloodmagic.entry.architect.downgrade=束灵护甲降级 - -guide.bloodmagic.entry.architect.augmentedCapacity=超容符文 -guide.bloodmagic.entry.architect.charging=充能符文 -guide.bloodmagic.entry.architect.acceleration=促进符文 - -guide.bloodmagic.entry.architect.tier3=海洋之下的三级祭坛 - -# Architect Entry Texts -guide.bloodmagic.entry.architect.intro.info=大家好,我叫提比略。你或许已经发现这本书并不完整了,但很不幸你是对的。因为1.7.10->1.8.9->1.9.4及以上的更新,血魔法也发生了巨大的变化。因此,这本书不得不重写。这本书的最终目标是一本研究笔记,或者说是一本真正的书,所以距离这本书真正完成还有一段距离。有鉴于此,我会定期填补这本书中的空白。当然了,一开始这本书里将全是读起来味同嚼蜡的文字(嘛...肯定不是那种引人入胜的字/cut啦,好啦不要在意细节),但这个情况会随着时间的推移而得到改善的,等待着你的将会是一部血法师们的心路历程。\n\t但不好意思我想我得赶紧重新切入角色当中去了。*咳嗽声*\n\t我名提比略,一名血法师,同时也以“缔造者”的名字闻名于世。这本书中包含了我对名为“灵魂网络”的自然现象的研究,以及我对血魔法师需/cut要适应的一些设备的物理特性的描述。从搭建强大的血之祭坛的技艺,到为增强法力而进行的生命献祭的种种细节,再到各种拥有强大力量的魔法符文和印记,我不断地发现新的魔法,不断地总结并找到强化自己的全新方式。\n\t来吧,新入门的魔法师们,全新的领域在等待着你!\n\t...啊马格斯说我有时候有点浮夸,但那又如何? -guide.bloodmagic.entry.architect.bloodaltar.info.1=血之祭坛便是血魔法中最核心的设备之一。它有两个主要用途:合成某些物品,或将生命源质转移到宝珠中去。然而这两个用途都需要消耗祭坛中的生命源质。自然地,也有两种补充生命源质的方式:以玩家的血提供生命源质,或以别的动物或怪物的血提供生命源质。 -guide.bloodmagic.entry.architect.bloodaltar.info.2=你需要一把牺牲匕首才能将你的血转化为生命源质并注入祭坛中。具体操作如下:首先,站在祭坛旁;然后,使用匕首伤害自己(即右击),你会损失一颗心的生命值,祭坛中会多出 200 LP。LP 是生命源质的 单位,称为生命点数(Life Point, 缩写 LP),用于刻画某种任 务需要消耗的生命力——不,和游戏王不一样。默认,普通的血之祭坛容量仅为一万。你还可以把物品放入祭坛中(右击即可),若如此做,合适的/cut物品便会触发合成进程。\n\t祭坛合成不仅需要消耗 LP,还需要一定的层级。满足 这些条件后,祭坛便会开始自动抽取 LP 用于合成,并开 始散发红色粒子效果。若合成还未完成,但此时 LP 已被 抽干,红色的粒子效果会转为灰色,合成进度也会开始倒退,所以尽量避免这种情况的出现!最后还有一点,如果你放进祭坛里的东西是气血宝珠,那么它 会散发紫色的粒子效果,表明它在向某个宝珠中灌输 LP。\n\t事实上,祭坛中有三个存储 LP 的容器:之前提到的一万容积指的是其主容器;除此之外,祭坛还有输入容器和输出容器各一,容积均为主容器容积的十分之一。默认,输入容器中的生命源质会以每秒 20 LP 的速度转移至主容器中,而主容器中的生命源质也会以同样的速度转移到输出容器中。如此一来,输入容器和输出/cut容器在祭坛中扮演的便是缓冲区的角色——它们是用来限制将生命源质输入祭坛,和从祭坛中将生命源质抽取出来的速度的。 -guide.bloodmagic.entry.architect.ash.info=尽管奥术粉灰并不是这一卷的核心,但它确实贯穿了本卷提到的很多道具的合成之中。合成奥术粉灰需要用到狱火熔炉和恶魔意志,关于这些东西的细节可以参考《恶魔之子》卷。简单来说,它是一种二元合成工具:你需要一种可充当催化剂的反应试剂,以及某种物品作为次要合成材料。\n\t一份奥术粉灰可使用二十次。对着地面或者墙壁使用便/cut可画出一个圆形的法阵(如果是墙壁,你只能在一个方向上看到法阵)。然后,对法阵中央使用合适的催化剂即可改变其形状,当然也会消耗催化剂(即,右击使用)。如果法阵没有变形,那么你肯定有什么地方搞错了。\n\t在观察到法阵变形后,你便可以放入次要物品了。合适的次要物品会启动法阵,届时你会看到法阵开始旋转,并开始产生各种变化,具体变化随法/cut阵不同而不同——但正确启动的法阵最终都会产生一种新的物品。\n\t所有用到奥术粉灰的合成——我一般管这叫炼金阵列——都可以在JEI中查询到。注意,左侧的物品一定是催化剂,而右侧的物品一定是一个次要物品。 -guide.bloodmagic.entry.architect.divination.info=占卜印记是血法师最常用的工具之一,因为它能解决你很多麻烦,具体来说是能给你一些关键数据。它的合成也很简单:只需要在炼金阵列中以红石为催化剂,以石板为次要物品合成即可。\n\t对血之祭坛使用此印记便可看到祭坛主容器中的LP数量,以及容量上限。短时间内反复使用并不会导致刷屏,只会覆盖之前的提示。\n\t/cut对着空气使用此印记的话,则能看到你的灵魂网络中的LP数量。尽管这功能看上去很普通,但你以后就会发现,你一刻也不想让这玩意离手。 -guide.bloodmagic.entry.architect.soulnetwork.info=灵魂网络(Soul Network,缩写 SN)是指玩家和各种物品以 及结构之间的灵魂上的链接。随着血法师能力的提升,灵魂网络的强度也会随之提高。就存在来说,它们是灵魂织成的一张无形的网,但最强大的血魔法师们是可以看到其物理的具现的。然而,时至今日,仍无人可达此化境...\n\t在游戏中,网络是直接与玩家绑定在一块的。玩家所在的世界早已记录下了这一切——/cut这意味着,玩家的 LP 并非是 记录在某颗气血宝珠中,而是被世界记录着;每个玩家之间的网络互相独立,互不影响。\n\t绑定的过程通常在第一次使用某个物品时就已经完成了。就目前的科技来说,一旦绑定,即便是物品的主人也无法解除。需要消耗LP的物品会直接消耗其主人灵魂网络中的LP。但,如果主人的灵魂网络中没有足够的 LP,它会从 当前使用者,而不是其主人,的身上抽取生命值以填补空缺。因此,在快没有LP的时候要小心——因为这通常会致人于死地。 -guide.bloodmagic.entry.architect.weakorb.info.1=没了魔法来源的魔法师和咸鱼有什么区别?气血宝珠便是这样一个魔法源:它可以将物理形式的生命转化成LP并输入到其主人的灵魂网络中去。它本身并非电池,相反它倒像是一根导管,可将生命力转化成血魔法师需要的魔法。 -guide.bloodmagic.entry.architect.weakorb.info.2=虚弱气血宝珠便是你能制作的第一种宝珠——只需向一粒钻石中灌注两千LP的生命力即可完成。将已绑定的宝珠放入祭坛,它就可以不断地从祭坛中抽取LP,直接输入灵魂网络中。另外,不论什么宝珠,其容量上限都只能通过一些高级符文来提升;这里注意一点,这个容量提升的效果只有在宝珠在祭坛上时才有效。对于虚弱气血宝珠,最高只能提升到五千。\n\t/cut玩家还可以通过简单地使用气血宝珠来获得LP——每一次使用都会对玩家造成一颗心的伤害并提供200LP。此法不能令网络中的LP数量突破容量上限。\n\t祭坛只可能为与自己级别相当,或者比自己级别低的气血宝珠提供LP。举例,三级的宝珠只可能在三级或更高级的祭坛中获得LP,一级的祭坛是无法胜任的。 -guide.bloodmagic.entry.architect.incense.info.1=血法师会经常发现,它们的LP产能时常跟不上消耗。当然,有特殊的符文可以提高自我献祭所产生的生命源质的数量,但这个过程依旧是如此缓慢。只有这一条路可以走了吗?\n\t下面介绍熏香祭坛。熏香祭坛本身可以以自身为中心,标记出一片静谧的土地,在这范围内,它可以借助祭坛本身散发出的余力来安抚惊扰到的灵魂。当然你不是很清楚这/cut股熏香的气息从何而来,但好像又没什么不对?先不管了。\n\t熏香祭坛的作用就是如此:利用静谧的环境来提升单颗心所创造出的生命源质的数量。在你距离熏香祭坛只有约莫五格远的地方时,它会散发出火焰颗粒以证明其已经创造出静谧区域。在它的影响范围下,你的牺牲匕首也会发生变化,以证明熏香已经发挥其效果。整个过程大约持续五秒钟,你可以通过观察火焰/cut粒子的存在来判断是否结束。此时,使用牺牲匕首献祭自己将会一次性献祭你生命值上限的百分之九十,并将对应数量的LP输入血之祭坛之中。LP数量和献祭的生命值依旧成正比,但此时它的转化率会根据附近的静谧值而有所上升;默认,增幅是百分之二十。\n\t另外,占卜印记可以揭示附近的静谧值,以及静谧所带来的具体增幅水平。 -guide.bloodmagic.entry.architect.incense.info.2=自然,百分之二十的增幅已经够多了,但熏香祭坛作用的范围还是可以继续扩展的。你只需要在熏香祭坛某个基础方向(即,正东、正西、正南、正北)两格远的地方排出一列三块高度一样木质路面即可定义一个“范围”。在此“范围”中的任意方块都有助于让这片区域更加静谧。木质路面还可以继续扩展,惟需遵守以下规则:一,每一列木质路面必须水平,即构成新一列路面的方块必须高度相同;二,新的路面必须位于上一列路面的上/cut下五格范围内。简单来说,金字塔、倒金字塔等阶梯式结构都是可以的。\n\t然而,这个范围并非可以无节制地扩张。木质路面只能叠加三列;不过不用担心,还有一种可以叠加五列的石质路面;甚至还有可以叠加九列的碎石路面和黑曜石路面。自然地,你在叠加三列木路面后就需要用石头的;然而你完全可以一开始就用石头的,只要你不是只用木路面就好。\n\t/cut回到静谧程度的问题上来。事实上只有一部分方块可以让这片区域更加静谧,而根据实验,这些方块被分成了若干种。举个例子,你在这片区域中种了土豆,土豆属于“作物”分类,然后这片区域便平静了一些。不论是你接着种土豆,或者你种起了胡萝卜,它们的效果都会随着你种的数量的增多而降低,甚至还会抵消一开始的效果,因为它们都属于“作物”。为了最好的效果,你需要尽可能使用多种不同类型的方块。/cut有助于平静的方块有这么几类:作物、原木、树叶、熔岩、地狱岩、耕地、水、生命源质、以及其他东西(原文如此)。 -guide.bloodmagic.entry.architect.bloodrune.info.1=随着你逐渐深入血魔法,你会发现你那普普通通的血之祭坛已无法满足你的需要了。但你还可以通过放置一种名为气血符文的特殊方块来提升祭坛的整体属性,进而解锁更多的合成。\n\t将血之祭坛升到2级的方法很简单:在祭坛本身往下一层放置八个一圈的气血符文。如果你实在搞不清楚具体的位置,指示之书可以帮到你——它可以以一种类似全息投影的/cut方式指明你需要放置气血符文的位置。\n\t尽管只需要空白气血符文就可以完成祭坛升级,我仍然推荐你对使用带有特殊强化的气血符文。祭坛上的每一个符文都可以被换作特殊的气血符文(唯一的例外是,二级祭坛四个角落上的特殊符文不会有效果——但在三级及以上的祭坛,这四个位置的特殊符文则可以使用)。这些带有特殊强化的气血符文可以提高/cut祭坛的合成速度、容量以及效率。有关这些特殊的气血符文的资料可以在后面的章节找到。 -guide.bloodmagic.entry.architect.inspectoris.info.1=Inspectoris Scandalum 在拉丁 语中大概的意思是“方块读取器”。事实上,它的用途是,潜行时对着某个方块使用,便可解读那些复杂结构的信息,并将其显示在你眼前。目前,它只能给出血之祭坛的相关信息:它可以给出升级祭坛所需的方块的种类,以及具体摆放位置。\n\t若你觉得一次一次查询不适合你,你可以试着潜行时对着空气使用此物以切换目标层/cut级。这样,再次按前文所述的方式使用此物,它就可以以一种类似全息投影的方式将升级所需的方块的位置投影出来。设定级别为1时可以关闭这个类全息投影的效果。 -guide.bloodmagic.entry.architect.runeSpeed.info.1=速度符文可以提高祭坛内的压力,藉由此加速嬗变过程,从而提高合成速度。每块速度符文都会提高20%%的祭坛的LP消耗速度。它同时也会影响灌注气血宝珠的速度。 -guide.bloodmagic.entry.architect.water.info.1=顾名思义,水之印记是一块可凝聚空气中水分,并将其集中于一点上的印记。除此之外,对着任何能装水的设备使用水之印记都可以向设备里面装一桶水。总而言之,它便是一个移动的无限水源。每次使用都会消耗50点LP。 -guide.bloodmagic.entry.architect.lava.info.1=若说水之印记属阴,那么,属阳的便是熔岩印记。熔岩印记可以将一片区域内的石头熔化成岩浆。若是对某个可接受流体岩浆的设备使用,这设备里就会多出一桶岩浆。尽管你拿着这个印记不会让你自燃,但这不等于你可以开始洗熔岩浴了!记得每次使用时会消耗1000LP。 -guide.bloodmagic.entry.architect.lavaCrystal.info.1=熔岩晶体是块里面存储了一团永不冷却的熔岩的石头。若将其放入熔炉中当燃料使用,它会释放出热量,这些热量正好可以烧炼一个物品,然后消耗50LP。若是它没有这么多LP可以抽取,它也不会因此损坏,还会因此给网络的主人追加一个反胃效果。\n\t这块晶体理论上在任何支持标准固态燃料的设备中都可以工作。 -guide.bloodmagic.entry.architect.apprenticeorb.info.1=随着你的新玩具越来越多,你会发现灵魂网络的五千LP上限已经开始捉襟见肘了。是时候做一颗更强大的气血宝珠了。\n\t学徒气血宝珠的制作需要二级血之祭坛,可提供2.5万LP的容量。同时,它也是合成很多更高级的物品和符文的必须。 -guide.bloodmagic.entry.architect.dagger.info.1=在不断地通过献祭自己来强化自己后,你可以开始试着献祭别的活物了。若是用这把牺牲匕首,在血之祭坛附近击中一只普通的生物(不能是BOSS,也不能是玩家),那么这个可怜的家伙就会立刻被献祭,并根据质量的不同,转化成数量不等的生命源质。一般情况下,那些敌对怪物给予的生命源质要比那些平和的动物们要多。 -guide.bloodmagic.entry.architect.runeSacrifice.info.1=献祭符文,正如其名,可提高献祭活物时获得的生命源质的数量,准确地说,是每块符文增加十分之一。 -guide.bloodmagic.entry.architect.runeSelfSacrifice.info.1=牺牲符文和献祭符文差不多,但牺牲符文是针对玩家自己的。增幅和献祭符文一样,都是百分之十。 -guide.bloodmagic.entry.architect.holding.info.1=你逐渐开始发现你有一堆各式各样的印记要带在身上了:有的需要手动开关,有的只需要放在背包里就可以一直有效果。有鉴于你的背包空间开始逐渐缩水,你可能需要一块集持印记的帮助。\n\t这集持印记的作用,便是将五个其他印记“压缩”成一个;但是你并不能在集持印记里放集持印记。默认,按下"Holding"键(默认为'H')可打开其界面,用于调整顺序。滚轮可在选中/cut的印记之间循环切换。被选中的印记可直接借助集持印记使用,毋需取出。\n\t自然地,你可以身上带若干集持印记,这些集持印记互不影响。但为了一眼就能区分,你可以考虑在炼金术桌中为其染色。染色的方式有两种:1.直接使用染料在炼金术桌中染色;2.使用十六进制数命名的命名牌,比如这样:0xFFFFFF。 -guide.bloodmagic.entry.architect.air.info.1=风之印记,简单地将水蒸气分成数股,产生强大的气流,驱使玩家前进。简单来说,你可以用这印记推动你前进。另外,这个印记可以免除掉落伤害,但只有你使用时才可以免除,所以如果你想硬着陆的话,记得要在即将摔到地上的一瞬间使用! -guide.bloodmagic.entry.architect.void.info.1=顾名思义,虚空印记会制造真空,并将附近的液体全部吸进去,并彻底销毁。建议搭配水之印记和熔岩印记使用。 -guide.bloodmagic.entry.architect.greenGrove.info.1=绿丛印记可以将你的血转化成植物生长的催化剂,进而加速附近植物的生长。激活印记的方式很简单:潜行时对着空气使用(右击)即可;相同的方式可以停止其工作(可以通过其信息提示看出它是否已被激活)。要记住,它每隔几秒钟就会抽取一次LP以补充养料。\n\t直接对作物使用的效果和骨粉无异。这样一来,这个印记也可以像骨粉一样,用于制造草丛。 -guide.bloodmagic.entry.architect.fastMiner.info.1=大部分血法师都应该注意到了,血中含有丰富的铁元素。经验丰富的血法师完全可以在不抽血的情况下直接改变其体内血液的组成——然而,需要注意的是,只有那些最顶尖的血法师才可以抵抗由此产生的排斥反应。\n\t这样一个技能有个经典的用途,提高身体的灵活性,以提高其运动速度。这速掘印记,通过用磁铁影响血液里的铁元素,可大幅提升使用者的挖掘/cut速度。其实这个效果就是急迫II的效果。虽然只能影响使用者自身,但对于挖黑曜石来说的确是好用。 -guide.bloodmagic.entry.architect.seer.info.1=你在修理血之祭坛时,时常会发觉自己早已迷失在了那些占卜印记无法察觉的细节中。所以这就是轮到见解印记登场的时刻了。见解印记实际上是占卜印记的升级版,它能看到很多占卜印记所看不到的细节,诸如祭坛的合成速度、当前的LP储量、合成进度、甚至玩家自己的灵魂网络的很多信息,这里就不作赘述了。 -guide.bloodmagic.entry.architect.magicianOrb.info.1=新的祭坛,新的宝珠。这次,为了你的新玩具,你需要一颗法师气血宝珠。不过有一点要注意,合成法师气血宝珠需要2.5万LP,但你的祭坛只有一万容量。换言之,在合成这颗宝珠时,你需要不断地补充生命源质。所以,在合成这颗气血宝珠前,请务必做好万全的准备! -guide.bloodmagic.entry.architect.capacity.info.1=虽然你并不知道具体原理,但这增容符文的确能给血之祭坛提供两千的额外容量。也许,是某种共振导致容积下降,然后你便可以往里面装入更多的容器?这样一想你倒是想到了进一步改进的方法...\n\t这里有必要再重复一遍,祭坛本身还有用于缓冲的输入和输出容器,容积均为主容器的110%%。增容符文的效果对这两个缓冲容器也有效。 -guide.bloodmagic.entry.architect.displacement.info.1=默认,血之祭坛的缓冲区和主容器之间的LP转移速度是最高20LP/s。对于那些需要频繁转移LP的祭坛来说这个速度可以说是巨大的瓶颈。这也是为什么会有转位符文的原因。\n\t转位符文可提升LP转移的速度。每个符文都可以将速度提高至原来的1.2倍,多个转位符文可以叠加。换言之,一个转位符文可以将速度提高至一次24LP,两个则为28.8LP,三个/cut则为34.56LP,而20个则会达到767LP,足以在13秒内清空一座标准祭坛里所有的生命源质。 -guide.bloodmagic.entry.architect.affinity.info.1=表面上看,元素印记不过是一个能免疫火焰、溺水和摔落伤害的印记。事实上,它的工作方式并非如此——激活此印记后,它会消耗汗水(如有必要,会是血),然后在使用者身上形成一格保护层,进而抵挡意外伤害。\n\t这层空气护盾可以缓冲火焰和熔岩的热量,也可以在必要时提供空气以防溺水,同时还可以在不慎摔落时充当无形的气垫使用。 -guide.bloodmagic.entry.architect.lamp.info.1=人和动物的血液中还是有“杂质”的。只需要收集一些稀有气体,然后辅以合适的热源,就可以在地面上产生一团明亮的光球,照耀着远处的大地。\n\t血光印记的用途有两个:或直接对着方块使用,产生一个光球;或对着空气使用,将光球发射到远处。这些光球和火把一样,可以空手打碎。 -guide.bloodmagic.entry.architect.magnetism.info.1=磁引印记可将血液中的铁元素转化为磁铁,进而将小件物品吸引到身上,免除原地打转收集物品的麻烦。就原理来看,它是真正的物品磁铁,因为它并非是把物品吸过来,而是真正直接捡起远处的物品。幸好这磁铁的磁力并不大,不然当你意外地将爬行者以3马赫的速度吸过来的时候一切就都结束了。 - -guide.bloodmagic.entry.architect.peritia.info.1=在这世界上,有某些行为可以累积一个人的经验:击杀怪物、采掘矿石、冶炼金属、烹饪食物... 同时,一些特殊的奥法设备可以直接吸收这些经验,并作为其动力使用。因此,若是有一种能存储经验的媒介,那就再好不过了。\n\t尽管有很多设备都可以将这经验转化成物理形态储存,但这本经验之书却是以书写知识的方式,将你过去所积累下/cut的经验保存下来,以供日后使用的。需要的时候,只需要手持这本书就能自动吸收书页中的知识,并将其转化为经验。\n\t具体来说,这本书是这样用的:潜行时右击即可将一级经验存入书中(若有零头,则先吸收零头)。平时右击一次可直接获得一整级经验。它所存储的经验数量可在其信息提示中找到。 -guide.bloodmagic.entry.architect.livingArmour.info.1=在这Minecraft的世界中,所有人,尤其是那些新生的人(译注:应该是指死亡后刚刚重生的玩家?),都清楚一套好的护甲的重要性。通常,护甲的属性是确定的——护甲的保护性能、飞行的能力、跳跃或跑步的增幅、诸如此类,不胜枚举。诚然有这些属性的护甲是好的,但你从未真正遇到过一套为你量身打造的护甲。至少,现在所有人都这么认为。\n\t而这束灵护甲,实际上是一/cut个被镶入铁甲中的,经过特殊改造后的活物。穿在身上时,它便会与穿戴者共生——他们将一起移动、一起攻击、甚至吃东西时它也会有所感觉。和普通的人体一样,它也会生长,也会不断地强化自己,当然也需要接受训练。\n\t先举个例子吧。当你穿上束灵护甲,并长途奔袭一段时间后,你会注意到束灵胸甲上多了一个名为“迅捷双足”的升级。这个升级可以提高你的/cut移动速度,虽然目前只有等级1,但毕竟还是可以升级的。你还会注意到它拥有了“强化点数”,目前可能是“3/100”这样子。每个升级都需要一定的强化点数,但护甲可用的强化点数有限。换言之,若是拿不出某个升级需要的点数,你是不可能获得这个升级的。\n\t记住一点,只有全套束灵护甲才能接受训练,也只有全套束灵护甲才能发挥其应有的效果。\n\t/cut束灵护甲的强化点数还是可以被人为修改的。有一种方法是利用炼金术增强穿戴者和护甲本身之间的链接,藉此大幅提升强化点数的上限,典型代表便是“祷告之始”,可将上限提升至200。关于这些炼金术的产物以及制造过程,建议参阅本书《炼金术士》一卷。 -guide.bloodmagic.entry.architect.upgradeTome.info.1=若是束灵护甲上有你不想要的升级怎么办呢?你可以使用名为“净灵之音”的仪式来清洗这些升级,并获得对应的“强化手册”。关于仪式的细节可参阅本书《仪式大师》卷。这“强化手册”的用途便是,在你身着全套束灵护甲时,直接给予护甲对应的升级。\n\t当然,这强化手册也可以在铁砧中融合——在铁砧中将两本一模一样的手册融合在一起可以获得更高一级的手册。/cut比方说,两本迅捷双足II可以融合出一本迅捷双足III。对于束灵护甲本身来说,也有类似的机制,这里不作赘述。 -guide.bloodmagic.entry.architect.teleposer.info.1=传送器,顾名思义,可以将某个物体传送至另一个地点,但这个传送器不仅可以传送生物,还能传送方块。完整的传送装置需要两个传送器和一个传送核心。其中,一个传送器充当目的地,另一个传送器充当出发地。\n\t在使用传送器之前需要一些配置。首先,你需要右击传送核心将你与其绑定。然后,手持核心右击充当目的地的传送器以记录相关信息。最终,/cut把这个记录了目的地信息的传送核心透过其GUI放入充当始发地的传送器即可。\n\t然后,给予始发地的传送器一个红石信号(准确地说,是强充能),这个传送器就会将实体和方块(如果是箱子这样带特殊数据的方块,一并保留)一股脑全部传送过去——这个过程中我们假定目的地是有传送器的。\n\t当然,你可以只让一个传送器/cut有核心,抑或两个传送器互相链接,或者更多传送器形成一条链,藉此形成更复杂的系统。\n\t不过要记住一点,传送器只传送其上方的方块,不过传送的范围是由传送核心决定的——T1的传送核心只能传送一个方块,而T2传送核心则能传送3x3x3的方块,以此类推。 -guide.bloodmagic.entry.architect.boundBlade.info.1=束缚之剑是一把用制作束灵护甲的方式制作出来的剑,可以说已有很长历史了。不过有一点要注意,包括束缚之剑在内的各种束缚工具的设定,在未来都有可能有变动。\n\t这把剑有激活模式和抑制模式,潜行时右击即可切换。在抑制状态下它并不会造成任何伤害,但是在激活模式下它是会消耗LP的。同样的,你对怪物造成伤害时,也会消耗LP。所以,在你杀死怪物的时候,/cut这把剑也有可能杀死你!\n\t然而,用这把剑杀死怪物时,会有那么一点概率获得虚弱气血碎片——这个碎片便是将祭坛升级至四级的关键。 -guide.bloodmagic.entry.architect.boundTool.info.1=和束缚之剑一样,束缚工具(包括镐、斧和锹)的属性在未来也会有所变动。和束缚之剑一样,束缚工具有两个模式,切换方式同束缚之剑,也是潜行时右击。\n\t和束缚之剑不同,束缚工具拥有“野兽模式”。手持工具右键按住不动即可蓄力,蓄力结束后工具会放出一股巨大的能量,大范围破坏方块,最高可达11x11x11,但同时也有惊人的消耗:一万LP。因此,使用时一/cut定要小心谨慎,因为搞不好这就是你最后一次使用这些工具! -guide.bloodmagic.entry.architect.weakShard.info.1=任何有生命的东西,都有一层看不见,摸不着的链接,这个现象被称作灵魂网络。实践证明,诸如印记和仪式这样的东西也是可以有链接的,然而这些链接的来源便是拥有最强链接的生物——人类。\n\t用束缚之剑攻击生物时,那些可怜生物的一部分灵魂网络会直接硬化,在它们死后也可保持其形状。这部分灵魂网络便以虚弱气血碎片的形式现身于世,它们因其颜色与虚/cut弱气血宝珠相近而得名。\n\t虽然,至今仍未找到存在更强的气血碎片的证据,但是你至少知道,这些碎片对于增强你自己的灵魂网络肯定有帮助。 -guide.bloodmagic.entry.architect.masterOrb.info.1=如何利用这种对灵魂网络十分亲和的特性呢?答案是:用虚弱气血碎片打造全新的气血宝珠——导师气血宝珠。它可以提供一百万LP的上限,它可以彻底解放你对血魔法的想象力。也许,就算是陨石,也无法阻挡你的前进了吧... -guide.bloodmagic.entry.architect.runeOrb.info.1=看上去这个符文并没什么用途。但是,这宝珠符文可以提高那些放入血之祭坛中填充的宝珠的容量上限,每块符文都可以提升百分之二。对于虚弱气血宝珠,这是微不足道的100LP。而对于导师气血宝珠,这是两万LP的增幅,效果十分显著!如果你的祭坛上还有空位的话,这个符文兴许就是你的首选。 -guide.bloodmagic.entry.architect.suppression.info.1=抑液印记,采用和传送器一样的传送科技,可以让一定范围内的液体瞬间消失。准确地说,是送入另一个迷你维度中。不幸的事,因为传送科技的限制,液体还是会回来的——比如说,在使用者走过本是液体的区域后。不过这无伤大雅,毕竟不论是在水下行走,还是在下界的熔岩之海上漫步,这印记都是十分好用的。 -guide.bloodmagic.entry.architect.haste.info.1=人体能消化的物质中有两种十分有趣:糖和咖啡因。前者是能量储备,后者可以令人保持清醒。这急速印记,便可以通过模拟化学反应的方式,释放更多的化学能,进而提升印记使用者的移动能力。\n\t印记激活后,使用者会跑得更快,跳得更高,同时还会令玩家在不用跳跃的情况下跨越比较高的障碍(实际上是个改良版本的自动跳跃)。 -guide.bloodmagic.entry.architect.severance.info.1=人们至今无法解释传送的机制。多数情况下,传送被认为是时空扭曲的一种表现形式,物体可通过两个不同时空的链接来实现瞬间移动。而这绝影印记可以阻止时空扭曲的产生,从而阻止启动此印记的玩家附近的生物发动传送技能。当然这个印记并不能阻止诸如传送门之类的东西,但阻止类似末影人这样的生物还是可以的。 -guide.bloodmagic.entry.architect.teleposition.info.1=传送印记实际上是个自带传送核心的传送器。对某个传送器使用此印记,印记会记下这个传送器的位置,再次使用印记就可以直接传送到那里去了。然而它好像没给你返程票... -guide.bloodmagic.entry.architect.compression.info.1=矿工经常面对的一个情况便是,它的背包中充满了红石粉、青金石、以及各种乱七八糟的东西。虽然可以压缩,但是并非所有矿工都会随身携带工作台。\n\t压挤印记所创造的小型压缩力场可以将各种物品压缩起来,进而节约背包空间。具体来说是这样:如果你有63份红石粉,印记不会有效果;但如果你有64份红石粉,它就会将其中63份压缩成7个红石块。虽/cut然并没腾出新的格子,但是别忘了那个占了一个格子的红石粉是可以接着放红石的。这个印记对其他Mod的类似东西也是有效果的。 -guide.bloodmagic.entry.architect.bridge.info.1=影桥印记可以将使用者脚下的空气固化成可以行走的道路,或者说,幻化出一座幻影之桥。若是你不慎踩空,影桥会直接在你脚下出现,避免严重的摔伤。尽管在使用前需要一些测量工作,同时影桥出现也会造成延迟,它仍不失为一种“飞行”的好方法。 -guide.bloodmagic.entry.architect.mimic.info.1=拟态是一种可以模仿任意给定结构的魔法结构。它本身可以根据其碰到的方块,改变自身的分子结构,从而使其本身看起来都是如假包换一样。但,并非所有的属性都可以复制:比如说,普通的拟态方块变成萤石后不能发光。\n\t一般,拟态方块有两种用法。第一种,先放置拟态方块,然后手持要伪装的方块对着拟态方块右击。这样,被伪装的方块就直接进入拟态方块的内/cut部,拟态方块也就可以伪装了。不过,这个方法只能伪装一个方块的“默认”形状。举个例子,此法伪装的楼梯都是朝同一个方向的。\n\t第二种,直接对着某个方块使用拟态方块。若如此做,拟态方块便可以做到精确伪装。还是刚才楼梯的例子,这样伪装的楼梯就会很自然,因为方向被保留了下来。\n\t事实上,拟态方块的变种有很/cut多。默认的不透明拟态方块可以模仿形状和方块的大多数属性,但光是无法照过去的。悬幽拟态方块没有碰撞箱,适合制作隐藏门。清透拟态方块可以解决玻璃的拟态问题:光线可以无视被伪装的方块的属性,穿透这种拟态方块。最后,还有一种光亮拟态方块,不论何时它都会发光。终于不用火把了!\n\t其实还有一种特殊的拟态方块:感知拟态方块。如果有玩/cut家接近,它们就会向其发动猛烈攻击。这种方块可在很多地方找到,尤其是地牢中。所以说,如果有一个感知拟态方块伪装成了箱子,请记住:它们会咬人。\n\t***创造模式限定内容***\n\t在创造模式下,拟态方块会多出来一些有趣特性。用药水或药剂瓶右击拟态方块后,可令其在有玩家在附近时产生对应的药水效果。如果这是/cut普通的拟态方块,那么:点击东面/西面可以加/减药水效果的覆盖范围;点击北面/南面可以加/减玩家的检测范围;点击上面/下面可以提高/降低药水生成间隔,即每隔多久生成一次药水效果。\n\t如果你在面对一个感知拟态方块,你可以随意点击这个拟态方块,以改变其检测玩家的范围——如果玩家在检测范围中,并且可以看到这个拟态方块,拟态方块会直接出现在玩/cut家眼前。\n\t另外,如果玩家在创造模式下将要伪装的方块放入拟态方块中,这个方块不会在拟态方块被破坏后掉落。\n\t最后的最后,如果拟态方块伪装的是一个装着东西的箱子或别的什么容器:对于感知拟态方块,在它败北后会把箱子连同内容一块放回来;对于其他拟态方块,它会在被击溃时把物品撒一地。 -guide.bloodmagic.entry.architect.downgrade.info=就护甲降级的内容,我建议你阅读《仪式大师》卷的“沉重灵魂的忏悔”一章,在那里你可以得到更详细的解释。 - -guide.bloodmagic.entry.architect.augmentedCapacity.info=和增容符文类似,超容符文也可以提升祭坛的容量。但和增容符文不同,多块超容符文会之间的共鸣会让容积呈指数级增长。具体来说,是做乘法:每一块超容符文都会给予额外10%%的容积;换言之,两块即21%%的增长,三块即33.1%%的增长,以此类推。\n\t然而,超容符文的效果不与增容符文叠加,换言之,不论有多少超容符文,每块增容符文都只提供两千LP容量。 -guide.bloodmagic.entry.architect.charging.info=有那么一些东西对于合成很有帮助,而这充能符文便是其中之一:它可以吸收 LP,并将 其转化为“充能点数”,具体数量可用见解印记看到。若是合成某些物品正好需要一定量的充能点数,那么这充能符文就可以以消耗充能点数为代价,将物品立刻合成出来。若没有足够的充能点数,它就只会按一比一的比例直接将充能点数转化为 LP 以加速 其合成。\n\t/cut血之祭坛最多可存储的充能点数数量是祭坛容积的函数,同时也充能符文的数量成正比;其中容积需要至少为两万才有效果。血之祭坛充能的速度也是和充能符文数量以及其本身的速度成正比的(即,充能速度=符文数量*祭坛本身合成速度),每一秒它都会将一定量 LP 转化为充能点数。所以,如果你的祭坛中有这块符文,合理的设计将会使你事半功倍。 -guide.bloodmagic.entry.architect.acceleration.info=和大多数符文不同,促进符文需要和别的符文搭配使用,而且它的效果不是无限制增长的。这个符文的效果是,它可以让某些符文的工作频率变高,比如说,转位符文和充能符文。具体来说,每有一个这个符文,距离下一次工作的等待时间就减一刻。换言之:如果有10块促进符文,转位符文会每10刻就转移一次液体,而默认值却是每20刻。\n\t显然,你的祭坛中只可能有19/cut块促进符文——在这种情况下,转位符文和充能符文就会一刻不停地工作。非常非常非常非常非常非常非常好! - -guide.bloodmagic.entry.architect.tier3.info=众所周知,三级祭坛的结构中,四角的柱子顶部需要四块来自下界的荧石。但有一个鲜为人知的事实:这四块荧石可以用海晶灯代替。如果地狱对你来说太过遥远,但你已经找到了海洋神殿,你可以通过这个方式来推进你的血魔法进程。 - -# Demon Kin Entries -guide.bloodmagic.entry.demon.intro=贝拉·海泊恩 -guide.bloodmagic.entry.demon.snare=恶魔意志与投网 -guide.bloodmagic.entry.demon.forge=狱火熔炉 -guide.bloodmagic.entry.demon.petty=微小的地狱魂石 -guide.bloodmagic.entry.demon.sword=感知之剑 -guide.bloodmagic.entry.demon.lesser=小型地狱魂石 -guide.bloodmagic.entry.demon.reactions=意料之外的反应 -guide.bloodmagic.entry.demon.sentientGem=感知护甲 -guide.bloodmagic.entry.demon.routing=物品路由 -guide.bloodmagic.entry.demon.aura=恶魔灵域 -guide.bloodmagic.entry.demon.types=不同种类的意志 -guide.bloodmagic.entry.demon.crucible=恶魔坩埚 -guide.bloodmagic.entry.demon.crystallizer=恶魔结晶坛 -guide.bloodmagic.entry.demon.cluster=恶魔晶簇 -guide.bloodmagic.entry.demon.pylon=恶魔导能塔 -guide.bloodmagic.entry.demon.gauge=灵域测量仪 - -# Demon Kin Entry Texts -guide.bloodmagic.entry.demon.intro.info=我的名字叫贝拉·海泊恩,以恶魔之子的身份为人知晓。数个月前我的家乡被一群恶魔侵袭,其他村民全部被杀,房屋全被破坏。我无法记起袭击时的多少细节,除了我所认识的每一个,伴随着痛苦的惨叫而前往一个更美好的世界的人们。庆幸那些恶魔没有听到,那在不容易察觉的教堂的地下室里,畏缩于果篮下的我绝望地避免着自己的尖叫声加入众人的合声。\n\t/cut可怕的瞬间,在我不慎撞倒堂的熏香祭坛时,一只恶魔突然闯入圣所,或许是这圣地的原由又镇静下来。这是只体型庞大的四足怪物,弯曲的獠牙倒悬在突出的嘴上,唾液滴在带有锯齿的剑状爪子。它环顾了四周,我发誓有那么一会它的眼睛和我对上了,但之后它就这么离开这里,仿佛完全没有看到或者听到什么。之后发生的事记忆全都模糊不清。\n\t/cut直到第二天才有人经过看到这一切。这一商队看到远处的浓烟,决定绕一大段路好避开这些恶魔。商队中许多人觉得我独自一人毫发无损地生还兴许是个坏兆头,有些甚至不愿多看我一眼。但有一对兄弟同情我的遭遇,并尽力说服商队其他成员也带上我。我卖掉了女祭司之仗与一条盒式挂坠,藉此换到了跟着前往一个远离恶魔破坏路径上的一个安全村庄的许可。 -guide.bloodmagic.entry.demon.snare.info.1=曾有一天,马格斯曾对我讲述道,世间生灵皆有灵魂:人类,鸡,羊,甚至是爬行者也存在这种给予躯体生之意志的生命力量。似乎马格斯早已在这方面做过大量实验,甚至有闻一个强大的法师,可以将获取这些灵魂并注入一个空的躯体,比如僵尸。但这也让我感到好奇:如果僵尸与骷髅并不拥有灵魂,它们如何拥有这生的意志?是什么,给予他们生气,使他们会去追捕并杀害生灵?\n\t/cut每每钻研最终还是回到了意志的问题上。任何“活物”都必须拥有使之生存下去的意志,但这不意味着那必须是它们自己的。当我把这个想法告诉马格斯的时候他考虑了一会,接着拿出一个黑板和粉笔(从哪?谁知道呢),开始速写并注上一些关于其他形式魔法的注解。“在神秘学中,”他画出一只稻草人的形态并说道,“分配于执行许多简单操作的傀儡被赋予了生气。它们活着,呼吸着,甚至可以死于不/cut再需要它们的主人。几个世纪以来,伴随着神秘学的进化,这门艺术已经有过数个版本,法师会将他们的意志注入那无生命的创造物中,给他们带来生气。\n\t“那么,贝拉,傀儡是如何运作的呢:通过意志的灌输。”\n\t所以如果可以通过他人将其意志注入一个空壳可以使傀儡获得生命,那么就有可能有什么把他们的意志注入亡者/cut的躯体,使得有了僵尸和骷髅的存在。想到这我打了个哆嗦,脑中闪过故乡的遭遇。只有恶魔会做到这么残忍的事。但要检验这个假设,我需要更多证据。 -guide.bloodmagic.entry.demon.snare.info.2=在马格斯的指引,和提比略百忙之中抽出时间为我提供的帮助下,我用铁、线和一点红石便做出了原始投网。身兼神秘使的提比略说这玩意可以切断控制生物的意志。“我拿这玩意在傀儡上瞎搞”,他带着微笑这样说道。我们都知道结果是什么样的。\n\t“红石似乎切断了我的意志和傀儡之间的联系。理论上来说,如果僵尸和骷髅身上也有意志,那这投网也可以切断。”\n\t/cut他说我只需要瞄准目标把投网丢过去就可以——如果奏效,我就能在目标生物上看到一些白色的颗粒。“然后你需要把那个可怜的目标杀死才能看到真相。但记住,大概只有四分之一的投网会对目标有效果。所以记得多备一些!”\n\t我制作了十六个投网,然后我选择在深夜出发。事实上,这项工作相当棘手:要同时追踪几个僵尸,还要闪避它们的重击,还要瞄准它们丢出投网。/cut当我看到白色的颗粒时,我迅速将僵尸们悉数斩杀,并清点了它们留下的物品。沙地上一些蓝色的粘稠液体吸引了我的注意。我捡起来看了一下,这似乎是一种超凡脱俗的存在...在快速收集好样本后我决定先返回再作进一步研究。\n\t每一份收集到的“恶魔意志”的形状和大小都不尽相同,似乎取决于它们的来源。抛开单位不谈,只做粗略的定/cut量分析的话,它们的品质可以按0到5来划分。我并不是很清楚这些物质可以用来干什么,但毫无疑问它们引起了我的注意。我也不是很清楚这究竟是恶魔的印记,抑或仅是它们身上掉落的某种晶体。我需要进一步的研究。 -guide.bloodmagic.entry.demon.forge.info.1=我已在恶魔意志上投入了数星期的时间。虽然有所进展,但情况依旧时好时坏。但有一天,提比略问我能否借用一点恶魔意志来做实验;他解释说,这很有可能是他一直在寻找的新一代血之祭坛的材料——马格斯原本的祭坛已经破旧不堪,但按古法制作的祭坛却怎么也无法使用...总而言之,他觉得我能帮上忙。\n\t事实证明他是对的。我查阅了很多讨论“等价交换”以及/cut物质嬗变的炼金术书籍;同时我还咨询了一些途经我们这里的炼金术师,他们也慷慨地给了我一些解构物质和能量的方法,以便进行深入研究。(啊,我必须承认我十分喜欢那些炼金术师的暗紫色盔甲——区区看一眼就会让人感觉要被一个质量巨大的东西拉过去一样。啊我没在说提比略!)我利用仅有的简易炼金阵列以及极少量样本便成功从恶魔意志中抽取到了能量。剩下的事情就只有合适的构造了。 -guide.bloodmagic.entry.demon.forge.info.2=就在今天,我成功制成了一种可将原生意志注入物品中的结构。我现在管这个东西叫“狱火熔炉”,实际上它只是个镶入玻璃顶层中的简易炼金术阵列,可最多同时将四个物品和原生意志融合于一体。恶魔意志需要放在右手边,显而易见的圆圈则是为物品准备的。目前来说我已掌握了若干种“配方”,但使用这炉子仍然有一些要求。\n\t对于初次使用狱火熔炉的人/cut来说,他们需要注意一些事情:一,物品融合需要提供一定数量的恶魔意志,如果数量不够,什么事都不会发生;二,前面说到物品融合需要提供一定数量的恶魔意志,但大部分配方实际都消耗不了那么多;三,有些物品的融合需要大量意志来启动,但却消耗不了多少,甚至根本不消耗;四,有些配方的产量巨大,有些...并不怎么高。 -guide.bloodmagic.entry.demon.petty.info.1=又是新一个夜晚,我又开始了日常的收割工作。但是很快我意识到了一个问题:我的背包每天都会被各种样本塞满!原因不是很清楚,也许是因为每份样本的最终来源都不一样,因此无法压缩在一起吧。至少,从它们物理表现形式来说是这样的。\n\t也因此我又回到了被丢在屋子一角的狱火熔炉旁开始为我的实验准备材料,将提比略的那些令人窒息的实验抛之/cut脑后。我这几天在为提比略准备他的熔炉,因为我已经放弃抵抗那些因为他的“奥法实验”而产生的,笼罩在我的工作室里的粉灰了。我管你是不是在“填补灵魂网络那无形的网状结构与石板的物理结构的空白”,赶快让你那些天杀的东西滚出去! -guide.bloodmagic.entry.demon.petty.info.2=不论如何,寻找合适的存储恶魔意志的材料的确费了我一番功夫。青金石似乎是一种很容易就能找到的能量导体,可以充当传导意志的通道。然后我为了避免空气中的电场的影响,加了一层红石充当“护盾”(至少,马格斯说过,将两种能量混在一起会产生灾难性后果);然后加上一些黄金充当抑性剂;并以玻璃制成外壳。最终我得到了一块“地狱魂石”。这个名字的含义便是“来自地下世界——塔尔塔罗斯 (Τάρταρος, Tartarus) ——的宝石”。\n\t经过近一步测试,我发现这个宝石的容量是64。(当我把这个结果拿给马格斯看时,他觉得这个数字是个十分完美的整数。)这样,我再试图捡起恶魔意志时它就可以自动将其收集起来了。但...这样一来意志它本身似乎就消失了。在拯救了我的背包的同时也给我带来了新的谜团呢。同时我还发现,若是我手持宝石并将精神集中于此(右击),约有/cut容量上限十分之一的意志就会流入我身上的另一个宝石中。我觉得这个性质会在我得到更强大的地狱魂石后大显身手。 -guide.bloodmagic.entry.demon.sword.info.1=我的网又出问题了。\n\t不论我怎么努力改进,这投网似乎就是不能完美工作。多数时候会打结。但即便我成功投中了僵尸,它还是有很高概率不工作。为了避免自己的头发被网缠住的命运,我决定立刻回到我的狱火熔炉旁开工。\n\t但,并非立刻开工——我首先得清理下上面的灰尘。 -guide.bloodmagic.entry.demon.sword.info.2=我将那微小的地狱魂石存储恶魔意志的能力成功注入到了铁剑里,并得到了一柄...伤害比我的拳头还低的剑。我对这个结果感到十分失望,因为我为了让以地狱魂石驱动的炼狱熔炉不过热而在一旁摆弄了很久很久。\n\t然而,当我再次拿起地狱魂石时,剑开始散发出了一种新的能量。似乎,我身上的恶魔意志越多,剑的伤害也就越高,获得的恶魔意志也就越多;倘若/cut没有地狱魂石...这剑就如同废铁一般。\n\t经过测试我又发现了一件事:击杀不同的目标获得的意志数量不一样。具体的数量和目标生物的生命上限成正比——以蜘蛛为例,它最多只有8颗心,因此杀死蜘蛛能获得的意志数量便是僵尸的百分之八十,因为僵尸最多有十颗心。或许是因为生命越多的生物动起来时需要的意志越多吧。我觉得这个事情得好好记住,以备不时之需。 -guide.bloodmagic.entry.demon.lesser.info.1=今天在和提比略聊天,聊到了最近他的一些工程。不得不承认,一旦说起他的研究,他就会说个没完没了!不管了。提比略说他最近一直在研究印记,目前他已经利用我给他造的狱火熔炉成功制成了水之印记和熔岩印记。我不是很清楚他是怎么做的——我只知道他以地狱魂石作为催化剂,将多种材料在熔炉中炼成印记,但我没亲眼目睹过他的实验过程。不过我今天总算知道了他那漫天飞舞的灰尘是/cut怎么回事。\n\t我来试着按他的方式复述一下。呃,“利用魂石中的意志来嬗变平时根本不会反应的若干原料时,发生了反应。利用这种增幅效应,我便可以刻出我所需要的铭文,以引导能量的流动,从而完成我需要完成的工作。”虽说白纸黑字难以想象,但我扶了扶眼镜后重新回想起了当时的景象...我不确定他是不是平时也这样,但我发誓,一旦跟我解释东西,他就会变成...科学家。\n\t/cut不论如何,他为我展示了水之印记的制作方式。在电光火石般的演示后,他终于进入了正题。“我在试图用更高级的材料重复相同的过程,但反应物似乎总会在我放进去的一瞬间...爆炸。看上去很不稳定。我觉得是因为他们没有正确地融合在一起——或许是能量不够吧。”\n\t我在思索了几分钟后便开始了工作——正如前文所说,我觉得我会需要更强大的地狱魂/cut石的,但我仍然在思考如何以优雅的方式完成这个工作。所以,我决定:诉诸暴力! -guide.bloodmagic.entry.demon.lesser.info.2=我找来一整块青金石、一整块红石、一颗钻石、以及一块空的地狱魂石——啊这块魂石是我在地上发现的,应该是以前某个进展不顺的实验中用的。我只记得马格斯可以让水泥墙上的洞瞬间消失。然后我将这四个物品放入狱火熔炉,并以一块满的地狱魂石供能——最终结果显示我需要至少大约60点意志。经过一系列优化,我终于确定了配方,并开始观察生长中的地狱魂石。\n\t/cut另外还有一点,我试过用金块代替钻石,但结果似乎只说明另一种水晶结构更有用。\n\t最终,我得到了全新的“小型地狱魂石”,它拥有256点容量,比微小的地狱魂石大多了。希望这颗新魂石可以满足提比略的需求吧。哎呀这玩意的容量这么高不就意味着我得花更多时间来收集恶魔意志吗?啊!又是一个漫漫长夜...! -guide.bloodmagic.entry.demon.reactions.info=我今天一早醒来发现自己躺在医院的病床上,身上有什么东西疼痛欲裂。我睁开双眼,却看到了满眼的暗洋红色——那是,Veteres——距离我们村庄最近的大城市——的一家医院的天花板。我对现在的环境倒不是怎么奇怪,因为我的目光落在了一大片擦伤和淤青上,以及我左腿上的石膏...什么人肯定对我下了名为"Ossa-Fracta"的诅咒——因为那只能是根坏掉的骨头!\n\t/cut当马格斯和一名紧绷着脸的护士走进来的时候,我就立刻明白了:我遭遇的事情比想象中的还严重。显然,我针对新制的小型地狱魂石的实验发生了反弹并引起了爆炸,虽然规模不大,但仍有杀伤力。不过我也就只能想到这点事情了:我左小腿上覆盖的黑曜石、铁和钻石制成的护甲,现在变成了某种完全无法拆除的护甲——更准确地说,是某种淡蓝的,类似符文矩阵的魔法护甲。\n\t/cut我冷静下来,并问马格斯怎么看,虽然我已然知道发生了什么。“我觉得吧,”,他说,并在认真聆听的护士看我之前瞥了护士一眼,“那是某种钻石残留物,这也是为什么我们没办法拆掉它的原因。同时,它还被某种...异域的能量束缚着,这也是为什么你现在会躺在这里,而不是当地诊所,的原因——共聚会自从上次邪术事件以来就一直对袭击人类的不明能量高度重视,我们必须保证不招惹是非。”\n\t/cut“我知道了...”平日里,马格斯是不会去操心诸如就未知能量事件照会共聚会这种正式的事情的——我已经着手研究恶魔意志多时了,也不见共聚会上门来为新的魔法能量办相关手续。我对政治不感兴趣,我也不打算透露太多消息,但我知道马格斯对此事非常谨慎——这意味着,在接下来一段时间内,马格斯都会为这意志所蕴含的能量担忧,说不定还会牵扯出陈年旧账也说不定...?\n\/cut“够了,话题到此为止,”马格斯说罢便披上了他的长袍,“我原本打算一开始就将之公之于众的,但那时它的威力还不明显,但现在...”\n\t我感受到左腿有一股热浪,就像要把我的腿烧起来一样,同时为看到马格斯捧成杯状的手盖在了蓝色的壳上,散发出耀眼的红光。几秒钟后——虽然我感觉这像是经过了永恒的时间——壳开始碎裂并脱落。说实话这个结局有些令人扫兴。\n\t/cut我试图起身,但马格斯一把把我按回床上:“贝拉,你需要休息。魂石的事情可以先放一放。”对此,一开始我是拒绝的,但我后来转而开始思考这次事故。马格斯不早点这么做的理由只能是地狱魂石在爆炸后仍留在我身上。换言之,我腿上不论发生什么,都和恶魔意志有关;只要拿去魂石,那层壳也就能被移除。我开始了沉思... -guide.bloodmagic.entry.demon.sentientGem.info.1=几天后,马格斯强制执行的“休养生息”结束了。我决定在我现有的基础上继续研究感知护甲。然而,还有很多关于感知之剑和恶魔意志的疑问没有解答。诚然,我们有一些理论上的猜想,但毕竟是马格斯和我提出的理论,我们也不知道究竟有多准确。\n\t为此我需要一点大胆的设想。马格斯告诉我说,我们在学习血之魔法时,也有必要学习另一门魔法的艺术。提比略/cut建议我去学习花之魔法,但我对此嗤之以鼻——“一堆花也能帮我击退恶魔?!” -guide.bloodmagic.entry.demon.sentientGem.info.2=感知护甲宝石是块可以让你穿卸感知护甲的工具。确保身上有16点恶魔意志,使用这块宝石(右击),便会将你身上的护甲悉数替换成一套全新的感知护甲,同时还会继承你本来护甲上的附魔效果;再次使用这块宝石就可以脱下感知护甲并换回你本来的护甲。当然,即便你身上没有护甲,这块宝石也是可以用的。\n\t感知护甲的效果一般与普通铁护甲无异,除此之外没有别/cut的效果。但,和感知工具一样,当你身上持有恶魔意志时,感知护甲的保护能力就会上升,上升幅度与意志数量成正比。也正是因为此,当你身上有海量恶魔意志时它的保护能力就会变得十分强大。但有一点需要注意,就是你每受到一次伤害,都会消耗地狱魂石中的恶魔意志,如果意志数量太低,感知护甲就可能会被打回原形。说不定是个弱点呢! -guide.bloodmagic.entry.demon.routing.info=血魔法的物品传送是以恶魔意志编织成的网的形式出现的,整张网构成了物品传输的通路,连接着每一个储存点。让我来先讲解一下每一个物品都是干什么的。\n\t每一个路由系统都有一个主控路由节点,相当于整个系统的中枢。输入节点用于将物品输入路由网络,输出节点将物品从网络中提取出来,而标准的路由节点没有任何特殊功能。\n\t/cut网络的搭建方法如下:首先,你需要在潜行时手持节点连接工具右击一个节点,然后以同样的方法右击另一个你想与之连接的节点。只要两个节点之间能找到某种通路,抑或都连接在主节点上,它们就可以互相“通信”。\n\t物品路由第一原则:物品总是从最近的输入节点进入网络,从最近的输出节点离开网络。你需要筛选器来限制物品的流向。在节点的操作界面/cut上有一个按钮可以让你进行过滤设置,可以精确到面(界面中的N指北方,以此类推)。最左边的格子还可以指定物品数量和种类。对于输入节点来说,筛选器的存在会使它们只提取筛选器指定的物品;如果你指定了数量,它们还会留下指定数量的物品,而非全部提取出来。对于输出节点来说,筛选器则让它们只接受并输出指定的物品;如果你指定了数量,那么它们最多只会输出那么多物品。\n\t/cut有四种不同类型的筛选器:\n\t精确匹配——物品的NBT和元数据必须完全匹配。\n\t按模组匹配——若物品来自指定Mod则匹配成功。\n\t忽略NBT——筛选器不比较NBT标签。\n\t矿物字典——若物品带有相同矿物字典条目则匹配成功。\n\t/cut在将筛选器放入路由节点后,你可以在路由节点上看到两个数字:数量和优先级。点击筛选器中的任何物品后即可看到其名字,正下方则会显示数量。如前文所述,这便是指定数量的地方了。若你将数量设定为0,那么就意味着“所有”——对于输入节点来说,那就是抽取所有物品;对于输出节点来说,就是提供所有物品。\n\t第二个数字便是优先级,可用一旁的箭头调整。数字越小,/cut优先级越高,物品将会首先试图前往优先级高的节点。 -guide.bloodmagic.entry.demon.aura.info=生物被杀死后,其灵魂会日渐消退,最终回归创世之神。使用投网,可以将其束缚于现世,但也有一些难度。我们现在,出于种种理由,对这些意志加以干扰并冻结其一切活性。若我们燃烧意志,它就会回归虚无。但若是我们直接将意志释放到空气中,我们便可以以更灵活的方式驾驭这股力量。有些方式十分普通,而有些方式则显得十分强大。\n\t在将恶魔意志释放到空气中/cut后,它会一直待在释放出来的那片土地上(即,那个区块),不会轻易离开。每一片土地上的不同种类的意志(关于意志的种类,后文有详述)互不影响。这些意志的存在还可以用其他的方块和物品来调整。 -guide.bloodmagic.entry.demon.types.info=到目前为止,每当我们讨论恶魔意志时,都是讨论的原生意志。这也就意味着这是天然的意志,但这并不等于它是纯的。事实上,恶魔意志有若干类型;除开原生意志,还有腐蚀、破坏、复仇以及坚毅四种意志。原生意志实质是这四种意志的混合物,也许还有一些至今没有识别的意志,但有一点可以确定,即分离后的意志很难再融合为一体。\n\t四种不同的意志的真正来源/cut至今仍然不明,但我们已经掌握了产生这四种意志的方法。将意志释放到空气中后,相同种类的意志就会开始聚集在一起。据此,只需要有一种可以收集特定种类意志的设备就可以完成任务了。接下来的几个章节中将会讲述其中一种设备——恶魔结晶坛。\n\t四种意志代表了人的四种欲望。当然我们仍然可以假定存在更多种意志,但也许它们/cut的纯度还不够,也许根本不能存在,总而言之我们目前还没发现新的意志种类。\n\t腐蚀——代表了通过各种方式——酸液、蛮力、等等——破坏万物的欲望。掌握了这种力量的人,将能自由地驱使各种疾病(换言之,各种负面效果)的力量,并令自身免受剧毒的侵蚀。\n\t恶意——可看作是——一种孜孜不倦寻找对手的欲望。通常,驾/cut驭恶意能量的人,只要锁定了目标,移动速度就会上升,使得可怜的猎物无处躲藏,只得坐以待毙。\n\t破坏——你或许已经猜到了——其实就是纯粹的力量。正确地使用这种力量可以令使用者的身体素质在短时间内获得快速提升;同时还可以用来粉碎或碾磨其他物品。\n\t坚毅——无数的观察表明——这是抵御攻击,使自身免遭伤害的/cut欲望。大多数情况下,操纵这种欲望的人,都是团队中的铜墙铁壁——任何攻击都不会伤他分毫。如果你想藉由你的护甲或仪式来保障你的存活概率,这股力量绝对是你的第一选择。 -guide.bloodmagic.entry.demon.crucible.info=恶魔坩埚可将地狱魂石中的恶魔意志散布到当地(即当前区块)的大气之中。这口坩埚有若干用途:最简单的一个就是直接将地狱魂石放入其中(右击放入)。坩埚会自动从魂石中抽取恶魔意志并散布到空气中,直到饱和(每种意志大约都会在达到100点时饱和)或者魂石本身被抽干了。\n\t此外,它还可以抽取空气中的恶魔意志并灌输进魂石中。操作方式和散布恶魔意志无/cut异,只是坩埚需要一个强的红石信号(即强充能)。\n\t最后,直接往里面投入一块恶魔意志也是可以的,不论什么形式,只要有容纳意志的空间就可以进行转化。举个例子,将晶化恶魔意志投入坩埚可产生50点意志。 -guide.bloodmagic.entry.demon.crystallizer.info=正如之前所提到的那样,恶魔灵气——通常我们会简单以“大气”指代之——是恶魔意志的空灵的存在形式,而击杀怪物获得的物质则是恶魔意志物理形式的具现。而这恶魔结晶坛,则像是一个锚点,让漂浮在大气中的恶魔意志以晶体的形态重现。\n\t你也许会问,为什么不直接用地狱魂石培养一块晶体呢?这是因为在我们将恶魔意志释放到空气中时,它身上的禁锢/cut就已经被解除了——记住,当我们杀死一个怪物时,它身上的意志也就随之被我们禁锢了。再次释放自然会令其重新恢复活力,而这结晶坛就是直接吸收这活的恶魔意志。不要太想当然啦。\n\t结晶过程需要比较高的恶魔灵气的浓度(大概是80点),并且需要一段时间。在这之后,结晶坛的上方便会长出只有一根尖的恶魔晶簇。结晶坛有两种工作方式:它既可以吸收/cut特定的一种意志然后产生对应的晶体;也可以直接吸收原生意志来产生晶体。\n\t此前结晶坛可以直接从原生意志中分离出特定类型的意志,现在你需要一些特殊的设备来做到这一点了。你可能需要参阅仪式大师卷的《结晶共鸣》一章。 -guide.bloodmagic.entry.demon.cluster.info=恶魔晶簇既可以使用恶魔结晶坛培养,也可在狱火熔炉中用恶魔结晶制作。晶簇可以在各种地方生长——地板、墙壁、甚至天花板上。完全长成的晶簇应该有七个尖,打掉后每一个尖都会变成一块结晶。然而,如果你使用含有至少1024点意志的地狱魂石来收获(右击),你便能只收获一块结晶而不影响到整棵晶簇。\n\t晶簇生长的过程中,会吸收同种恶魔灵气。虽然慢,但的确/cut是有收益的。\n\t有两种和晶簇的种植和收获相关的仪式:孤魂集会和碎晶裂纹。具体用法可以参阅《仪式大师》一卷。 -guide.bloodmagic.entry.demon.pylon.info=你或许已经发现了,在没有外力的影响下,恶魔灵气只会待在它被释放出来的那个地方(即当前区块)。而这恶魔导能塔,则为那些灵域中的意志亮起了一盏灯——一盏指引方向的灯。附近的意志在这灯的指引下会逐渐向灯靠拢,直至这些地方的意志数量保持均匀。(注:这里所谓的“附近”不含对角线上的区块,即只有与塔所在的区块相邻的四个区块会受到影响)。另外要注意的是,意志只会从多的地方流/cut向少的地方。若是什么地方的意志的浓度比附近的地方浓度低了,它就不会继续流动了。 -guide.bloodmagic.entry.demon.gauge.info=你需要一个测量仪来测定灵域中的恶魔意志浓度。只需要一直放在你的背包中,测量仪便可将浓度以五个指示器的形式显示出来(在屏幕左上角)。潜行时你还能得知具体数量,但这个结果是经过四舍五入的。 - - - -# Alchemy Entries -guide.bloodmagic.entry.alchemy.intro=序 -guide.bloodmagic.entry.alchemy.ash=奥术粉灰 -guide.bloodmagic.entry.alchemy.speed=法阵:敏捷 -guide.bloodmagic.entry.alchemy.updraft=法阵:升腾 -guide.bloodmagic.entry.alchemy.bounce=法阵:弹跳 -guide.bloodmagic.entry.alchemy.turret=法阵:骷髅炮塔 -guide.bloodmagic.entry.alchemy.buff=增益法阵 -guide.bloodmagic.entry.alchemy.fastMiner=法阵:速掘 -guide.bloodmagic.entry.alchemy.furnace=法阵:燃炉 -guide.bloodmagic.entry.alchemy.teleport=法阵:传送 -guide.bloodmagic.entry.alchemy.standardTurret=法阵:标准炮塔 -guide.bloodmagic.entry.alchemy.laputa=法阵:拉普达碎片 - - -# Alchemy Entry Texts -guide.bloodmagic.entry.alchemy.intro.info=我叫弗拉德·海泊恩,是一名血法师。我一直致力于研究炼金术的细节以及所有魔法中共同的原则——“等价交换”。简单来说,你不能无中生有,虽然很多人一直在致力于寻找那个可以无视此原则的石头。很显然,石头的寻找之旅并不顺利,因为人们总是会在惊讶声中发现石头是假货。当然,我不只是个炼金术师,我主要还是在跟仪式大师和缔造者学习血之魔法,这二位在圈内业已是颇具声望的人物了。/cut马格斯和提比略这几年来一直在记录他们的成果,但是我一直不知道马格斯是否真的记录下了他的毕生所学——既不能证明,也不能证伪。\n\t我的这本书将记录血魔法中的炼金术。从奥术粉尘,到复杂的炼金台桌,你将会在这本书中找到世间各种复杂的元素的线索。当然,为了读懂这本书,你还需要阅读其余的几本书,以对血魔法有清楚的了解。\n\t/cut就现在来说呢,我衷心希望面前的读者阅读愉快。这些书页的内容,都是如假包换的真才实学。 -guide.bloodmagic.entry.alchemy.ash.info=奥术粉尘便是炼金法阵的基础,而炼金法阵(为简便,下简称法阵)——一种圆形法阵——则拥有多种强大的功能。合成奥术粉尘需要用到狱火熔炉和恶魔意志,关于这两样东西的细节可以参考本书《恶魔之子》一卷。\n\t/cut一份奥术粉尘可使用二十次。对着地面或者墙壁使用便可画出一个圆形的法阵(如果是墙壁,你只能在一个方向上看到法阵)。然后,对法阵中央使用合适的催化剂即可改变其形状,当然也会消耗催化剂(即,右击使用)。如果法阵没有变形,那么你肯定有什么地方搞错了。\n\t在观察到法阵变形后,你便可以放入次要物品了。合适的次要物品会启动法阵,届时你会看到法阵开始旋转,并开始/cut产生各种变化,具体变化随法阵不同而不同。\n\t所有非合成的法阵用途都可以在本书中查阅到,即便合成被他人强行更改过也可以。对于需要的物品,它们都已经过排序,按照本书给出的顺序放置即可。 -guide.bloodmagic.entry.alchemy.speed.info=法阵:敏捷可以制造若干气旋,并用法力加热。此后,一旦有生物走入其中,它们就会被风的力量推向前方。此外,它还可以免除所有因此产生的掉落伤害。只需要做些运动就好了。\n\t漩涡推进的方向是阵列上箭头的方向。\n\t另外,相比于直接走入阵列中,从高处掉入阵列的效果会更好。这要归功于你掉下来时周围空气产生的流动。 -guide.bloodmagic.entry.alchemy.updraft.info=这个阵列使用和法阵:敏捷一样的原理,不过这次的方向是朝上了。自然地,使用阵列时务必小心:再下来就不是易事了! -guide.bloodmagic.entry.alchemy.bounce.info=阵列会将接近中心的热量集中到下面,进而软化地面,并最终转化为一种由碳和氢组成的橡胶状物质。这种物质会将生物弹至空中,同时也能避免掉落伤害。潜行即可避免这种神奇材料的影响,当然这不会影响摔落保护的功能。 -guide.bloodmagic.entry.alchemy.turret.info=利用那些仍然控制着怪物的恶魔意志,你可以控制一个骷髅的心智。只要有骷髅进入了这个阵列的覆盖范围,这骷髅就会化身哨兵,并向所有敌对生物开火。不过这个法阵仍在实验当中,它有时候会不管用。 -guide.bloodmagic.entry.alchemy.buff.info=经过严密的研究,你发现法阵拥有强大的应用潜力。迄今,你已成功制造了数种阵列,从加速移动,到初级的传送,应有尽有。但唯有一种阵列,你至今仍然没有着手去研究,那便是提供强大的正面增益的阵列。\n\t增益阵列实际上是指一系列可以提供范围增益效果的阵列。这些阵列产生的增益效果通常都有很大的固定覆盖范围,不受外力影响。然而,因/cut为法阵不会牵扯到灵魂网络,阵列需要别的方式来传播这种效果,通常是直接用血。换言之,当有玩家展开阵列时,玩家就会立刻受到伤害(损失生命),藉由此启动阵列。\n\t因为使用了直接献祭,前期使用这种阵列会比使用其他获取增益的手段更经济一些。距离,如果某个印记可消耗100LP并换取10秒的效果,阵列可以以1点生命的代价换来30秒同样的效果(1点生命对于一级/cut祭坛来说是100LP)。尽管到了后期,这种阵列就不会再有效率上的优势,但因为它们的位置是固定的,相比于印记,它们通常会给予更强大的效果,所以它们到了后期仍有它们的价值。 -guide.bloodmagic.entry.alchemy.fastMiner.info=遇到大范围的雕刻任务,有时候还是自己动手更划算一些。对于这种情况,这个阵列便是你的不二选择。这个阵列可为10格内的玩家提供急迫 III的效果,消耗则是每30秒1点生命值(半颗心)。因为是普通的急迫效果,所以它也可以提高你的攻击速度,不过要记住,别的玩家同样会被阵列覆盖到! -guide.bloodmagic.entry.alchemy.furnace.info=在冒险刚刚启程时可能遇到的众多问题之一,就是难以保持熔炉的燃烧。一个点着的熔炉意味着可以享受美味的食物与精炼的装备,而不是躲在洞穴中挨饿。\n\t燃炉法阵,顾名思义,可以向相邻的熔炉提供所需的充足热源。直接在一个原版熔炉旁边铺设下该法阵(可以与多个熔炉相邻),只要熔炉可以完成一次烧制,法阵便会供给燃料——如果相邻的熔炉是空的,或者已经填满,则什么都不会发生,/cut这也是为了保护你。\n\t但是,这也不是凭空能办到的:如果有人在附近(十格半径之内),消耗1点生命值(半颗心)才能维持熔炉中两个物品的冶炼。这对做点东西垫垫肚子或者冶炼一堆矿石很有帮助,但不幸的是你还没有办法在法阵上设置什么保护措施…… -guide.bloodmagic.entry.alchemy.teleport.info=法阵:传送,顾名思义可以用来在两个地点间瞬间移动,但有若干限制。当玩家或其他实体走进法阵后,法阵会沿着它的朝向搜索至多 20 方块的距离,在其中寻找另一个炼金法阵,类型不限,也不需要激活。若找到了另一个法阵,则将进入法阵的实体传送到法阵那边去,这个过程甚至可以无视中间的墙壁。\n\t进一步的研究表明,这个法阵还有另一个限制:有鉴于扭曲/cut时空的本质,这个法阵不会传送那些刚传送完两秒钟不到的物体。这样一来,这些物体就有时间来重新对自身进行调整。 -guide.bloodmagic.entry.alchemy.standardTurret.info=把尖锐物体弹射到远处的怪物上的力量实在是不能更好用了。法阵:标准炮塔可以感知附近的敌对生物的存在,并利用复杂的炼金术向其他敌对生物开火。\n\t法阵首先在其正下方搜索物品容器。若在容器中找到了箭头,或者带药水的箭头,它就会将其吸出,并使用它朝 32 格范围内的生物开火。\n\t/cut(因为 Minecraft 奇葩的物理学,箭头若生成于离生物很近的地方就会被弹开,所以炮塔只会朝至少三格开外的敌对生物开火。时刻留意这一点!) -guide.bloodmagic.entry.alchemy.laputa.info=有个关于某失落的王国的传说,这个王国的居民拥有在云中自由穿梭的魔法。虽然关于这个王国的一切现在都已不得而知,描绘了他们漂浮在空中的城堡的画卷却提供了所有让这魔法成为现实的细节。\n\t拉普达碎片(法阵)可以将地面上的生命源质气化,这种气化的生命源质可以将周围的大地举起来。尽管原理十分简单,但大地中生命源质的差异会/cut稍微影响到举起的大地的范围。这个法阵能将以法阵中心为球心,半径四到八格的球状区域内的方块,举高到两倍于半径多随机一到五格的高度。\n\t需要注意的是,法阵生效时,所有启动法阵所用的物品都会被消耗。 diff --git a/src/main/resources/assets/bloodmagicguide/lang/zh_TW.lang b/src/main/resources/assets/bloodmagicguide/lang/zh_TW.lang deleted file mode 100644 index fd3a40d4..00000000 --- a/src/main/resources/assets/bloodmagicguide/lang/zh_TW.lang +++ /dev/null @@ -1,258 +0,0 @@ -# Book Information -guide.bloodmagic.title=血染知書 -guide.bloodmagic.display=血染知書 -guide.bloodmagic.author=血魔法 -guide.bloodmagic.welcome=血魔法 - -# Page Information -guide.bloodmagic.page.bloodAltar=血之祭壇合成 -guide.bloodmagic.page.soulForge=獄火熔爐合成 -guide.bloodmagic.page.tier=層級:%d -guide.bloodmagic.page.lp=LP: %d -guide.bloodmagic.page.minimumWill=啟動所需意志:%f -guide.bloodmagic.page.drainedWill=合成消耗意志:%f -guide.bloodmagic.shapelessOrb=無序寶珠合成 -guide.bloodmagic.shapedOrb=有序寶珠合成 -guide.bloodmagic.page.alchemyArray=煉金法陣 - - -# Categories -guide.bloodmagic.category.architect=締造者 -guide.bloodmagic.category.ritual=儀式大師 -guide.bloodmagic.category.demon=惡魔使者 -guide.bloodmagic.category.spell=戰法師 -guide.bloodmagic.category.alchemy=煉金術士 - -# Ritual Master Entries -guide.bloodmagic.entry.ritual.intro=序 -guide.bloodmagic.entry.ritual.basics=儀式入門 -guide.bloodmagic.entry.ritual.ritualStone=儀式石 -guide.bloodmagic.entry.ritual.masterRitualStone=主儀式石 -guide.bloodmagic.entry.ritual.activationCrystal=驅動水晶 -guide.bloodmagic.entry.ritual.diviner=儀式推測杖 -guide.bloodmagic.entry.ritual.fullSpring=湧泉儀式 -guide.bloodmagic.entry.ritual.lava=下界夜曲 -guide.bloodmagic.entry.ritual.greenGrove=綠叢儀式 -guide.bloodmagic.entry.ritual.magnetism=磁力儀式 -guide.bloodmagic.entry.ritual.crusher=挖掘儀式 -guide.bloodmagic.entry.ritual.highJump=高跳儀式 -guide.bloodmagic.entry.ritual.speed=速移儀式 -guide.bloodmagic.entry.ritual.wellOfSuffering=苦難之井 -guide.bloodmagic.entry.ritual.featheredKnife=羽刀儀式 -guide.bloodmagic.entry.ritual.regen=重生儀式 -guide.bloodmagic.entry.ritual.harvest=滿月收割 -guide.bloodmagic.entry.ritual.interdiction=禁止儀式 -guide.bloodmagic.entry.ritual.containment=牽制儀式 -guide.bloodmagic.entry.ritual.suppression=抑液儀式 -guide.bloodmagic.entry.ritual.expulsion=驅逐氛場 -guide.bloodmagic.entry.ritual.zephyr=和風之喚 -guide.bloodmagic.entry.ritual.laying=鋪設儀式 -guide.bloodmagic.entry.ritual.timberman=伐林儀式 -guide.bloodmagic.entry.ritual.meteor=墜星標位 -guide.bloodmagic.entry.ritual.downgrade=沉重靈魂的懺悔 - -# Ritual Master Entry Text -guide.bloodmagic.entry.ritual.intro.info=晚上好,我就是馬格斯·阿爾卡納。在外人看來我有很多身份:盜賊、自警團、巫師、戰士、吟遊詩人、甚至政治家。而現在,只有少數人清楚地知道我的頭銜——只需提及一下,那臆想中的殘暴圖景就可以令人聞風喪膽——縱使這個說法有一半是誤導,但這個說法有一半的確是真相。誠然,我說的便是作為職業存在的血術士。我的朋友一般都直呼我的名,而我的敵人一般稱我為儀式大師。\n\t/cut現在呢,我的學生們,為了讓我把畢生所學傳播給下一代有志者們,纏在我身邊已有數月了。我一直在堅守秘密,但提比略對此的評論更為精闢:「儘管你自己還看不到你自己的潛力,但不論是在什麼魔法領域中,那些已臻化境的大師們的故事總是對下一代人有好處的。然而,重現奇跡的細節其實並沒有那麼重要。若是沒有對魔法能量的絕對自信,即便是金沙,也不過是一堆硫磺粉而已。」當然你可以認為/cut他已經觸碰到了煉金術的真諦,但他畢竟是我的第一個學生,我有時候也會認真思考他的想法。\n\t所以呢,那些仍在苦苦尋找前進的道路的年輕血術士們,且聽我一言:血魔法的領域之廣闊不是常人可以理解的,若不加思考地前進,很快你就會遇到瓶頸。因此,請務必時常翻閱這本書——這本書上有我的魔法,只要我寫下來新的內容,你們就能立刻看到。\n\t/cut諸位請坐。不要緊張,試著去感受老一輩血術士的教誨。或許會比你討價還價求到的東西還要有用。 -guide.bloodmagic.entry.ritual.basics.info=現在的魔法儀式已經和幾百年前大不一樣了。曾幾何時,人們用粉末在地上組成魔法陣,並在旁邊起舞,直到獲得想要的東西。我甚至記得有一位從她自家花園中收集魔法能量的隱士。我一直都在嘲笑這種魔法,直到她把她的貓頭鷹丟過來監視我。\n\t而血魔法師的儀式呢,需要用到一種帶特殊標記的石頭,並且需要按指定方式精確擺放,方能轉化注入的能量。有一/cut天,我的學徒提比略在他的新房間裡翻找我過去的儀式資料。那裡有一罐從未開封過的液態Etherium(我好像說過很多次要把它取回來但每次說完就忘了),以及一個透過鏡片看時總像是在說「星期二」的水晶球。當有一個標有「符文塵埃」的箱子被打翻後,一顆小小的紅色寶石滾了出來,滾到了提比略的腳下。霎那間,它發出的明亮的紅寶石的光芒和他抱著的箱子裡的粉末發生了反應。\n\t/cut——自然地,瞬間爆炸。提比略不小心釋放出的沒有聚焦的能量驅動了符文塵埃和周圍的儀式石,在沒有容納能量的裝置的情況下,它們只能向外擴散。在幾天的治療後,提比略和我又開始了工作。\n\t在經歷了數個不眠之夜,和高效的咖啡因的幫助下(啊,感謝Player先生的咖啡,感謝他給我帶來的更加精神的明天!),我們終於找出了所有儀式所需的關鍵材料。\n\t/cut根據實驗,我們需要至少四種材料:按照一定樣式擺放的儀式石;若干種不同的墨水,用於刻畫儀式細節;置於儀式中央的特殊儀式石,用於傳遞能量;以及用於驅動儀式的水晶。我覺得有必要將各個儀式全部詳細地解說一遍。 -guide.bloodmagic.entry.ritual.ritualStone.info.1=儀式石便是魔法能量的容器:根據石頭的不同,可將能量塑造為各種形狀,或導向不同的地方。儀式石分五種:空白(沒有任何銘文)、水、火、風和土。每個儀式都會用到若幹不同種類的儀式石,每個儀式所需的佈局也不盡相同。 -guide.bloodmagic.entry.ritual.ritualStone.info.2=為儀式石畫上正確的銘文需要一些工具。我早已研究出一種快速建造正確儀式的辦法,但如果有人想自己動手搭建的話還是可以用這些工具的。手持合適的工具右擊儀式石便可為其畫上銘文。一開始你只能製作出其中四種工具,隨著修行的深入你會得到更高級的工具的製作方法的。 -guide.bloodmagic.entry.ritual.masterRitualStone.info=和大部分魔法一樣,儀式需要引導,否則其力量會變得無法控制,或者儀式本身會徹底失效。有鑒於此,儀式需要由主儀式石控制(我的筆記中通常會以縮寫"MRS"表記,但也只能這樣寫寫而已。試想:你喊一聲「麻煩一下,我需要更多的MRS」...然後尷尬症就犯了。)主儀式石會從其主人的靈魂網絡中抽取能量,並擴散至每一塊儀式石上,從而啟動儀式。\n\t把靈魂網絡和一塊大石頭綁一塊有點麻煩。我曾經成功/cut過一次:在主儀式石頂上盤腿打坐,將能量聚集於石頭上並盡力將靈魂網絡和儀式連在一起。雖說成功持續了幾分鐘,但我的褲子卻因為水在儀式石上冷凝而濕透了。於是我得到了一個教訓:不要試圖在實驗中進行任何冥想。 -guide.bloodmagic.entry.ritual.activationCrystal.info.1=於是我們停止了冥想,轉而去研究那顆從箱子裡滾出的紅色寶石。提比略確信它有「將我們所在的肉體世界和主宰靈魂網絡的精神世界連接在一起」的能力。我一直在想到底要不要收他作學徒,但我的確能看出他對於那些晦澀難懂的魔法的理解。啊,我想我有必要翻譯一下,他想表達的是:我們可以用這水晶將靈魂網絡和主儀式石連在一起,以給儀式提供能量。 -guide.bloodmagic.entry.ritual.activationCrystal.info.2=於是我們得到了虛弱驅動水晶,以及複製它的辦法。它的原料是另一種可以與靈魂網絡鏈接的水晶:熔岩水晶。只需要迅速在上面刻好必須的圖案,血之祭壇就可以將它變成驅動水晶。自然地,它也需要和使用者的靈魂網絡綁定。在儀式正確擺放後,只需手持熔岩水晶右擊主儀式石就可以開始了。當然,這需要有足夠多的LP作為支撐。如果沒有足夠多的LP,儀式不會發動,也不會因此消耗LP。 -guide.bloodmagic.entry.ritual.diviner.info.1=在不斷發現新的儀式過程中,我愈發感到建造儀式的枯燥。這也是為什麼我製作出這樣一個工具的原因——這樣所有人都可以通過簡單的手勢和動作來快速部署儀式了。按時間順序來說這個應該放在諸儀式的後面來講,但我決定提到前面,因為我覺得先學習這個的使用會更好。沒人會想在臨陣時才發現儀式石沒帶夠,抑或原本只是想變出一瓶水結果卻召喚了隕石吧。 -guide.bloodmagic.entry.ritual.diviner.info.2=儀式推測杖的本質是本儀式的百科全書。你可以通過一些操作(按住Shift左擊或右擊)來在不同儀式間切換,仔細看的話你還會得知一些基礎信息。在你帶著儀式石的時候,手持推測杖右擊主儀式石,便可在正確位置放置一塊儀式石。只需要不斷右擊就可以完成儀式了! -guide.bloodmagic.entry.ritual.fullSpring.info=幾年前,有一個旅行商人路過我附近的一個村子,並向眾人兜售他的各種小東西。那個村子大概有很長時間沒下雨了,莊稼也快旱死了,商人見此便掏出了一個鑲有藍色寶石的銀製護符。「看這個!」,他的聲音中帶著幾分激動,「這個東西可以讓河流永不乾涸!我可以用煉金術從空氣中變出水!」\n\t然而村民們覺得那寶石好像只是普通的藍寶石而已。等他們反應過來上當受騙時那/cut個商人已經消失得無影無蹤了。我起初並不打算干涉此事——因為他們似乎並不喜歡我的魔法——但這次我破了個例。在和「煉金術士」進行了愉快的交流後,我在灌溉渠旁打坐了數小時。我成功通過冷卻空氣中水蒸氣的辦法給莊稼們帶來了足夠多的水——足夠撐到下一個旱季。自然這個方法並不靠譜,因為我自己已經被打坐給搾乾了,不得不靠自己造出來的水來重新調整。\n\t/cut我再次想起了這個事,並按照同樣的方法製作了湧泉儀式。給儀式灌注少量能量,儀式便可將附近空氣中的水分聚集起來,並在主儀式石上方產生一個水源。驅動儀式需要的能量並不多,維持其運轉的能量更是可以忽略不計。\n\t水的範圍和放置的位置都是可以用儀式調整鉗調整的,所以那些對美觀表示擔憂的魔法師們不要擔心了。這便是魔法的力量! -guide.bloodmagic.entry.ritual.lava.info=熔岩——恐怕是最普通的能量來源了吧。我平日的研究中很少使用熔岩,因為它其實並非是普通的鐵桶就能裝起來的東西!\n\t有一天,當地的一名鐵匠找到我,並向我打聽附近的能量源的事情。他說他們最近新造了一個大傢伙,需要大量能量來運轉。我回答道,「有倒是有,但它們並非無主之物。」我決定去親眼看一下這個所謂的大傢伙到底是何方神聖。\n\t/cut那是...一個至少五公尺(5米)見方的冶煉爐,上面還連著幾個空空如也的儲罐。雖然我不知道這玩意兒到底是怎麼工作的,但我的直覺告訴我,熔岩的熱量用在這裡正合適——電力是絕對不行的,絕對不行。除此之外,我只知道這不是沉浸工業公司的產品。\n\t在經過短暫的討價還價後,鐵匠付了一筆費用,我便開始叫他們稍微讓開一下,以便準備搭建儀式。按我的想法,我將/cut四塊火之儀式石和主儀式石擺成十字,腦海中不斷想像整個過程的同時,我用力將驅動水晶推向了主儀式石。理論上這個過程應該十分簡單:儀式不斷地將大地深處的石頭挖出來,在巨大的壓力下熔融成熔岩。這樣製成的熔岩可以直接從儀式石中提取出來,然後儀式本身還可以自維持這種類似擠壓的過程。\n\t然而這只是理論。說起來容易做起來難:當時我使用的簡/cut易網絡完全不適合拿來為這個儀式供應魔力,不僅擠壓熔岩需要的壓力巨大(需要20000LP啟動儀式),抽取熔岩的開支也不小(每產生一格熔岩需要500LP)。\n\t我搖搖晃晃地走出了鐵匠們的基地,臉上帶著一絲欣慰。那些儲罐裡的熔岩足夠鐵匠們用到他們找到新的岩漿來源了。當然,我也沒忘記帶走我的儀式石。\n\t---------------\n\t/cut在沒有外力影響下,這個儀式會不斷嘗試在主儀式石上方生成一格熔岩,並消耗500LP。一般情況下,熔岩生成的範圍可以擴展到儀式本身三格開外。\n\t在原生意志的影響下,LP消耗和大氣中意志的濃度成反比,同時會不斷消耗意志,意志的消耗速度與節約的LP數量成正比。使用原生意志還可以讓儀式自動將熔岩放置進各式液體容器中,速度大抵保持不變。\n\t/cut腐蝕意志會反轉火焰免疫的效果。換言之,那些平時對火焰免疫的生物,在這個儀式的影響下會失去火焰免疫的屬性;而那些無法抵抗火焰的生物則會對火焰免疫。\n\t復仇意志會令此儀式釋放出一種揮發性氣體,這種氣體會影響任何不是玩家的生物。在這種氣體的作用範圍內的生物都會獲得「緩燃引線」的效果。當這個效果的倒計時歸零時,這個生物會爆炸,強行將生物趕回空氣當中。\n\t/cut破壞意志可以強化這個儀式的各種屬性。大氣中這種意志的含量越多,儀式能放置的岩漿源數量也就越多。更喜人的是這個儀式並不會消耗破壞意志。然而,當大氣中的意志數量下降,而且儀式的最大範圍小於你設定的範圍時,儀式就會停止工作,必須進行手動修復。\n\t最後,堅毅意志會令儀式範圍內的玩家獲得火焰抗性,時效和空氣中意志的濃度成正比。另外有一點要注意,腐蝕意/cut志的反轉效果會抵消掉堅毅意志所帶來的火焰抗性。 -guide.bloodmagic.entry.ritual.greenGrove.info=上星期我開始為提比略講授跨領域的魔法。除了血之魔法外,我的每個學徒都學過一些其它形式的魔法。其實,學什麼魔法都沒有關係,只要它不浪費資源就好——我曾經使用過來自遙遠的東方的Ars部落的魔法,但是因為Etherium之源幾乎被搾乾了,所以這個計劃也就夭折了。\n\t提比略決定學習秘術學,一門利用世界本身的魔法來創造屬於自己的魔法的魔法。它/cut正好和血之魔法相抗衡——後者使用的是生命本身具有的魔法。為了解釋清楚,我決定用作物生長為例子,展示兩門魔法之間的差別。\n\t「在秘術學中,魔法師會使用以Herba源質煉成的生長催化劑,」我一邊這樣說著,一邊指著教室牆上掛著的一幅源質合成圖;誠然這節課其實只有提比略一個學生,但人總還是需要點樂趣的,「一小股靈氣和源質混合在一起可以刺激植物的/cut光合作用,從而令植物吸收更多的光能,以此加速其生長。然而,這需要保證作物生長在肥沃的土地上,否則作物最終只能枯萎死亡。「\n\t然後我找來了土儀式石和水儀式石各四塊,擺出一個圓形,並在圓心處放置主儀式石。「血魔法與之正好相反,」我一邊說著,一邊驅動了主儀式石,並在上面蓋上了一層泥土。「你可以用你自己的生命力,或者別的動物的生命力,來加速作/cut物的生長,從而節約一般肥料的使用。本質上來講,這個儀式會不斷給予植物養分,從而使其養分保持在一個較高水平。」\n\t我向土中撒了幾粒種子,小心翼翼地用土蓋好,然後從貼身法袍中掏出一個水瓶,拔開瓶塞然後將水灑在了泥土上。「這個過程不需要陽光,因為它用到了另一種形式的能量。儘管如此,陽光還是很有用的——畢竟作物一開始不是這樣生/cut長的嘛!」\n\t在我解釋的時候,有幾點綠色的東西就已經冒出了土堆。每有一片新葉長出,我都會感受到一絲壓力,雖然不大,但會不斷積累。下課後,我開始清理實驗用的土堆,然後決定去村子裡走一圈:我現在有幾斗小麥要賣。\n\t---------------\n\t綠叢儀式,正如其名,以血術士之血為養料,加速儀式附近之植物,諸如小麥、胡蘿蔔之類,/cut的生長。默認,儀式只在3x3範圍內尋找合適的目標,每秒大概只有30%%的概率成功催生。用儀式調整鉗調整後可尋找5x5範圍內的至多81棵作物。\n\t另外,惡魔意志對這個儀式也有效果。原生意志會加快其工作速度,效果取決於濃度,但每次催生會多消耗0.05點意志。\n\t若輔以復仇意志,儀式依舊會在每次催生時多消耗0.05點意志,但會增加催生成功的概率。/cut之前提到默認概率是30%%,但若是你有100點復仇意志,這個概率會上升至80%%。\n\t破壞意志可以提高儀式的工作範圍,這意味著你的一個儀式可以覆蓋到更多的作物上。而且這個儀式不會消耗破壞意志!然而,若是意志的濃度下降,而你設定的範圍比儀式最大的工作範圍還大,那儀式就會停止工作,需要手動修復。\n\t/cut堅毅意志會讓儀式在催熟作物的同時保證耕地已經過翻整且保持濕潤。另外,若是儀式的工作範圍內有掉在地上的種子,堅毅意志會讓儀式自動用那些種子來補種。自然地,這個效果會消耗意志,但消耗速度是固定的。\n\t腐蝕意志的效果則完全反轉了這個儀式的工作原理——植物會在這種意志的影響下轉而去主動吸血,就像水蛭那樣。具體來說:每一刻,若植物附/cut近若有怪物,那麼植物和怪物都會受到傷害,且兩者傷害成正比。事實上直接用怪物當作植物的養料是有效的!另外,每個怪物上每有10秒中的負面效果,就會消耗0.2點腐蝕意志。 -guide.bloodmagic.entry.ritual.magnetism.info=磁力儀式可謂是採石場必備。這個儀式會製造出一旋轉的磁場,將深埋地下的豐富礦藏吸到地面上。這個儀式並不會吸走石頭,所以地面上也不會因此出現大洞,前提是地下並非全是礦石。這個儀式每2秒就會試著吸一個礦石,每成功吸取一個礦石便消耗50LP。\n\t/cut默認,這個儀式的工作範圍是以主儀式石為中心的7x7正方形區域(即半徑為3)。目前,意志還不能影響這個儀式的工作,所以你只能通過在主儀式石正下方放置某種價值高昂的方塊來提高其工作範圍。一個鐵塊可以讓半徑增加到7。金塊則是增加到15。鑽石效果最好,可以將其工作範圍拓展為63x63,屆時你只需要看著儀式慢悠悠地把礦石吸到主儀式石上方3x3的空間裡就好了。 -guide.bloodmagic.entry.ritual.crusher.info=挖掘儀式的運行十分簡單:只需要將箱子之類的東西放在主儀式石正上方,它就可以消耗LP並不斷挖掘主儀式石正下方3x3x3範圍內的方塊了。儀式每2秒會嘗試挖掘,如果成功,會消耗7LP。挖下來的方塊會放進與儀式鏈接的容器中,如果容器已滿,就會掉在那個容器的上面。\n\t若以原生意志驅動儀式,儀式將會工作得更快,但每次成功挖掘時都會多消耗0.05點原生意志。\n\t/cut破壞意志會令儀式在挖掘方塊時擁有時運的效果。目前來看,不論提供多少意志,時運的等級永遠是三,並且每次成功挖掘都會多消耗0.2點此種意志。\n\t堅毅意志會令儀式在挖掘方塊時擁有精準採集的效果。每次成功挖掘都會多消耗0.2點此種意志。\n\t腐蝕意志會令儀式在挖掘方塊時經過某種液體的浸洗。/cut這種液體帶有粉碎的效果,換言之——此時你挖掘的鐵礦時會變成兩堆鐵砂。目前這種液體可以是基礎切削油或爆炸火藥。根據所有液體的不同,儀式消耗的意志數量也不同。這個效果會覆蓋精準採集的效果。\n\t/cut復仇意志的效果和壓擠印記差不多,即會壓縮挖下來的東西。舉例:箱子裡現在有65紅石,一次挖掘後會將其中9個紅石壓縮為一紅石塊,留下56紅/cut石。僅當壓縮成功時儀式才會消耗0.2點復仇意志。 -guide.bloodmagic.entry.ritual.highJump.info=這個儀式會用強大的氣流將走在上面的人送上天。另外,這個儀式還會令摔下來的人免受掉落傷害。潛行即可規避儀式的效果。\n\t每次成功產生氣流時,儀式都會以5LP/tick的速度消耗LP;若沒能產生氣流,則不會消耗LP。 -guide.bloodmagic.entry.ritual.speed.info=儀式如其名,速移儀式可用來加速移動。儀式本身可以指向任意方向,而在儀式的生效範圍內的實體都會朝儀式所指的方向加速。儀式的指向由那塊薄暮儀式石的位置確定。默認,工作範圍是半徑二格見方,但可以用儀式調整鉗調整。水平方向上的速度加成是3方塊/tick,垂直方向上則是1.2方塊/tick。\n\t以原生意志驅動的速移儀式會使生物獲得更快的速度。/cut當周圍充滿原生意志(即100點)時,速度會翻一番。每次加成都會消耗0.1點意志。\n\t復仇意志將會迫使儀式對成年動物無效,而破壞意志會迫使儀式對幼年動物無效。復仇和破壞意志都會令儀式對玩家無效。若同時使用這兩種意志,則儀式只會對玩家有效。這些特性對於動物農場,甚至是過濾小殭屍都是十分有用的。儀式只有在成功加速時消耗0.05點意志。換言之,/cut對於幼年動物來說,儀式不會消耗破壞意志,也不會消耗LP——因為這時的儀式不會對幼年動物有效。 -guide.bloodmagic.entry.ritual.wellOfSuffering.info=對於那些不想用自己的血來補充LP供應的血術士,苦難之井便是他們的選擇:這個儀式會將方圓十格範圍內的非玩家實體的生命聚集到血之祭壇裡。苦難之井只會在上下十格、水平方向上方圓五格的範圍內尋找血之祭壇。如果找不套祭壇,儀式不會工作。儀式每消耗1LP便可從怪物上抽出25LP;若是針對非敵對的生物,則可抽出100LP;具體數量會受到獻祭符文的增幅的影響。 -guide.bloodmagic.entry.ritual.featheredKnife.info=羽刀儀式像是一把直插使用者身上的刀,抽取其血液,並為附近的血之祭壇補充能量。一般,羽刀儀式首先會在以主儀式石為中心的11x11x21的範圍內尋找一座祭壇——若找不到祭壇,儀式不會工作;找到祭壇後儀式會記下這個祭壇的位置。當有玩家進入儀式的範圍(默認為31x31x41)後,儀式會每秒對玩家造成一點傷害,並將其轉化為LP送入祭壇中。這個過程會受到血之符文的影響。傷害玩家的速度可/cut以調整。不要擔心,這個儀式也有安全保護機制:它不會攻擊那些只剩下百分之三十不到的生命值的玩家。\n\t有數種惡魔意志可以影響這個儀式的工作。比如,原生意志——它可以提高儀式的工作速度,準確地說是一秒攻擊玩家兩次。但每次攻擊時會多消耗0.05點原生意志。\n\t若周圍的靈域中有至少十點堅毅意志,儀式會將安全閾值/cut從百分之三十提高到百分之七十。這層保護不會多消耗意志。\n\t若周圍的靈域中有至少十點復仇意志,儀式會逐步降低安全閾值至百分之十。若同時有至少十點堅毅意志,那麼後者的百分之七十的閾值將只對儀式的主人有效果。和堅毅意志一樣,這個效果不會多消耗意志。\n\t/cut若儀式附近的靈域中有破壞意志,這個儀式的生命值轉LP的效率會有所提高。轉化率的增幅與破壞意志的含量成正比,最高為五分之一,對應100點破壞意志。這個效果可以與符文、束靈護甲升級和熏香疊加。每轉化一點HP,會多消耗0.05點破壞意志。\n\t說到熏香——腐蝕意志會令熏香的效果與此儀式疊加。若你身上沒有「魂飛魄散」效果,並且你正好處在熏香的效果/cut範圍內,你的生命值會被直接扣至安全閾值,並將轉化出的LP一次性注入祭壇中,並給予你魂飛魄散的效果。此效果可與破壞意志疊加。 -guide.bloodmagic.entry.ritual.regen.info=雖然仍有爭議,但這重生儀式對於那些想用自己的血來驅動魔法的血術士們來說,仍然是一個不錯的選擇,因為它會利用血術士的魔法在儀式範圍內產生治療光環的效果,藉由此治癒儀式範圍內的生物,包括血術士他們自己。儀式每2.5秒會給15格範圍內的生物附加生命回復I的效果;對於玩家來說它會消耗100LP,對於其它生物來說是10LP。\n\t/cut腐蝕意志會給儀式再加上一個「吸血鬼範圍」。此時,儀式會對所有非玩家生物隨機造成傷害,並藉由此治療玩家。每一個工作的tick中它都會消耗0.04點腐蝕意志並將1點生命值轉移到玩家身上。 -guide.bloodmagic.entry.ritual.harvest.info=這個儀式可以收穫默認以儀式石上方9x9x5範圍內的所有作物,並將收穫到的種子補種回去。所有收穫到的物品都會掉落在原地。儀式工作頻率為5tick嘗試一次,每次成功收穫都會消耗20LP。\n\t可以收穫的作物包括但不限於:南瓜、小麥、胡蘿蔔、土豆、地獄疣、仙人掌、甘蔗等。時刻記住,這個儀式並不會對它正在收割的作物作任何假設——只要它被認為是一/cut種可以收割的作物,這個儀式就可以收割。(譯註:更精確地說,是指有對應的HarvestHandler支持的作物。) -guide.bloodmagic.entry.ritual.interdiction.info=在傳說中的古代煉金術設備的基礎上,我們研發出了這個儀式,可將任何不是玩家的生物趕出儀式所覆蓋的範圍。默認,任何距離此儀式的主儀式石不超過兩格的非玩家生物的移動速度都會被此儀式干涉到。要注意的是,儘管儀式範圍內的生物不會被掉落傷害影響,但一旦超出了儀式的覆蓋範圍,保護就會失效。 -guide.bloodmagic.entry.ritual.containment.info=和禁止儀式正好相反,牽制儀式會試圖將所有生物全部拉進儀式上方的範圍中,並困住它們,使其無法移動。默認範圍是水平方向上3格見方,從最低的儀式石到最高的儀式石為止。這個範圍可以調整。\n\t/cut默認,儀式的消耗是每個生物每tick1LP。沒有在拉生物時不會消耗LP。 -guide.bloodmagic.entry.ritual.suppression.info=抑液儀式會壓制其影響範圍內的所有液體——換言之,將範圍內的液體全替換為空氣。它的工作範圍大約是半徑10格的上半球。工作時,LP消耗速度為2LP/tick。儀式停止工作時會將所有被替換的液體全部放置回去。 -guide.bloodmagic.entry.ritual.expulsion.info=假如你在玩服務器時,你發現,出於種種理由,你需要拒絕某些玩家的造訪,然後你發現力場護盾和殺人不眨眼的巨型轉子根本不能阻擋他們。那麼就是這個儀式出場的時刻了!在傳送魔法的幫助下這個儀式會大大緩解你的問題!\n\t若有玩家進入此儀式的範圍內,並且這個玩家並不是儀式的主人,那麼這個玩家就會被隨機傳送到半徑100格的範圍中的某個地方。當然這個儀/cut式還有一種類似白名單的功能:在主儀式石上放一個箱子,然後將那些與不想被傳送的玩家綁定的物品放進箱子裡,這些玩家就不會被傳送走了。\n\t每傳送成功一次會消耗2000LP。 -guide.bloodmagic.entry.ritual.zephyr.info=和風之喚——以一把古劍的名字命名——可以藉由風的力量將附近的物品捲起來並送入與之鏈接的箱子裡(默認,只需要把箱子放在主儀式石正上方即可)。這個過程大概一瞬間就可以完成,所以你不用擔心有什麼奇怪的吸力問題!\n\t默認的工作範圍是主儀式石方圓5格之內的方形。 -guide.bloodmagic.entry.ritual.laying.info=很多時候,自動化任務需要某種自動放置方塊的手段。這個儀式便可以從附近的箱子中(默認,是主儀式石正上方)取出方塊並放置在儀式的內部。具體來說,是放置在距離主儀式石兩格遠的地方,且高度相同。十分適合在建造樹場時用於自動種樹苗。每放置一個方塊消耗50LP。 -guide.bloodmagic.entry.ritual.timberman.info=種了一堆樹?想必你需要這個儀式。伐林儀式會將儀式持有者的LP用來驅使一個無形的幽靈,以砍伐附近的樹木,並將砍下來的木頭放入附近的箱子裡。默認,它的工作範圍是主儀式石往上30格,每個水平方向上各延伸10格形成的長方體。每砍掉一塊木頭需要消耗10LP。 -guide.bloodmagic.entry.ritual.meteor.info=就目前來說,這個儀式是所有儀式中最強大的儀式之一。驅動此儀式需要消耗一百萬LP,並且還有一段冷卻時間。然而它的效果也十分強大——只需提供合適的祭品,它就可以從宇宙中召喚一顆隕石並直接砸向地面。誠然,這樣一個大傢伙會在地面上造成大爆炸,但因為它來自宇宙中,所以可能會包含大量稀有礦石。 \n\t/cut可用的祭品包括鐵塊、金塊和鑽石。(事實上,可用的祭品是可以被整合作者或用戶控制的) -guide.bloodmagic.entry.ritual.downgrade.info=為了獲得更強大的力量,你或許需要獻祭某種東西作為交換。而這「沉重靈魂的懺悔」的任務正是如此——將一些物品獻祭給一個虛無縹緲的實體,你便可以以束靈護甲的屬性下降為代價,來換取更多的升級點數。儀式落成後,你需要在最高的空白儀式石掛一個面朝主儀式石的物品展示框,然後在薄暮儀式石上放一個能裝東西的方塊(例如箱子)。要獻祭的物品需要放入那個裝東西的地方,而核心物品/cut應掛入物品展示框內。儀式驅動後,你便可以蹲在主儀式石上並獲得降級後的物品。\n\t舉例,對於淬火降級來說,核心物品是個水瓶,需要獻祭的物品是龍息。\n\t所有可用的降級都可以通過JEI查詢到——查詢主儀式石的用途即可。另外,對於一個特定的降級來說,核心物品是一定的,所以你也可以選擇查詢某個物品來定位某個降級所需的祭品。 - -# Architect Entries -guide.bloodmagic.entry.architect.intro=前言 -guide.bloodmagic.entry.architect.bloodaltar=血之祭壇 -guide.bloodmagic.entry.architect.ash=奧術粉灰 -guide.bloodmagic.entry.architect.divination=占卜印記 -guide.bloodmagic.entry.architect.soulnetwork=靈魂網絡 -guide.bloodmagic.entry.architect.weakorb=虛弱氣血寶珠 -guide.bloodmagic.entry.architect.incense=熏香祭壇 -guide.bloodmagic.entry.architect.bloodrune=祭壇升級 -guide.bloodmagic.entry.architect.inspectoris=指示之書 -guide.bloodmagic.entry.architect.runeSpeed=速度符文 -guide.bloodmagic.entry.architect.water=水之印記 -guide.bloodmagic.entry.architect.lava=熔岩印記 -guide.bloodmagic.entry.architect.lavaCrystal=熔岩水晶 -guide.bloodmagic.entry.architect.apprenticeorb=學徒氣血寶珠 -guide.bloodmagic.entry.architect.dagger=犧牲匕首 -guide.bloodmagic.entry.architect.runeSacrifice=獻祭符文 -guide.bloodmagic.entry.architect.runeSelfSacrifice=犧牲符文 -guide.bloodmagic.entry.architect.holding=集持印記 -guide.bloodmagic.entry.architect.air=風之印記 -guide.bloodmagic.entry.architect.void=虛空印記 -guide.bloodmagic.entry.architect.greenGrove=綠叢印記 -guide.bloodmagic.entry.architect.fastMiner=速掘印記 -guide.bloodmagic.entry.architect.seer=見解印記 -guide.bloodmagic.entry.architect.magicianOrb=法師氣血寶珠 -guide.bloodmagic.entry.architect.capacity=增容符文 -guide.bloodmagic.entry.architect.displacement=轉位符文 -guide.bloodmagic.entry.architect.affinity=元素印記 -guide.bloodmagic.entry.architect.lamp=血光印記 -guide.bloodmagic.entry.architect.magnetism=磁引印記 -guide.bloodmagic.entry.architect.peritia=經驗之書 -guide.bloodmagic.entry.architect.livingArmour=束靈護甲 -guide.bloodmagic.entry.architect.upgradeTome=束靈護甲升級之書 -guide.bloodmagic.entry.architect.teleposer=傳送器 -guide.bloodmagic.entry.architect.boundBlade=束縛之劍 -guide.bloodmagic.entry.architect.boundTool=束縛工具 -guide.bloodmagic.entry.architect.weakShard=虛弱氣血碎片 -guide.bloodmagic.entry.architect.masterOrb=導師氣血寶珠 -guide.bloodmagic.entry.architect.runeOrb=寶珠符文 -guide.bloodmagic.entry.architect.suppression=抑液印記 -guide.bloodmagic.entry.architect.haste=急速印記 -guide.bloodmagic.entry.architect.severance=絕影印記 -guide.bloodmagic.entry.architect.teleposition=傳送印記 -guide.bloodmagic.entry.architect.compression=壓擠印記 -guide.bloodmagic.entry.architect.bridge=影橋印記 -guide.bloodmagic.entry.architect.mimic=擬態 -guide.bloodmagic.entry.architect.downgrade=束靈護甲降級 - -guide.bloodmagic.entry.architect.augmentedCapacity=超容符文 -guide.bloodmagic.entry.architect.charging=充能符文 -guide.bloodmagic.entry.architect.acceleration=促進符文 - -# Architect Entry Texts -guide.bloodmagic.entry.architect.intro.info=大家好,我叫提比略。你或許已經發現這本書並不完整了,但很不幸你是對的。因為1.7.10->1.8.9->1.9.4及以上的更新,血魔法也發生了巨大的變化。因此,這本書不得不重寫。這本書的最終目標是一本研究筆記,或者說是一本真正的書,所以距離這本書真正完成還有一段距離。有鑒於此,我會定期填補這本書中的空白。當然了,一開始這本書裡將全是讀起來味同嚼蠟的文字(嘛...肯定不是那種引人入勝的字/cut啦,好啦不要在意細節),但這個情況會隨著時間的推移而得到改善的,等待著你的將會是一部血術士們的心路歷程。\n\t但不好意思我想我得趕緊重新切入角色當中去了。*咳嗽聲*\n\t我名提比略,一名血術士,同時也以「締造者」的名字聞名於世。這本書中包含了我對名為「靈魂網絡」的自然現象的研究,以及我對血魔法師需/cut要適應的一些設備的物理特性的描述。從搭建強大的血之祭壇的技藝,到為增強法力而進行的生命獻祭的種種細節,再到各種擁有強大力量的魔法符文和印記,我不斷地發現新的魔法,不斷地總結並找到強化自己的全新方式。\n\t來吧,新入門的魔法師們,全新的領域在等待著你!\n\t...啊馬格斯說我有時候有點浮誇,但那又如何? -guide.bloodmagic.entry.architect.bloodaltar.info.1=血之祭壇便是血魔法中最核心的設備之一。它有兩個主要用途:合成某些物品,或將生命精華轉移到寶珠中去。然而這兩個用途都需要消耗祭壇中的生命精華。自然地,也有兩種補充生命精華的方式:以玩家的血提供生命精華,或以別的動物或怪物的血提供生命精華。 -guide.bloodmagic.entry.architect.bloodaltar.info.2=你需要一把犧牲匕首才能將你的血轉化為生命精華並注入祭壇中。具體操作如下:首先,站在祭壇旁;然後,使用匕首傷害自己(即右擊),你會損失一顆心的生命值,祭壇中會多出 200 LP。LP 是生命精華的 單位,稱為生命點數(Life Point, 縮寫 LP),用於刻畫某種任 務需要消耗的生命力——不,和遊戲王不一樣。默認,普通的血之祭壇容量僅為一萬。你還可以把物品放入祭壇中(右擊即可),若如此做,合適的/cut物品便會觸發合成進程。\n\t祭壇合成不僅需要消耗 LP,還需要一定的層級。滿足 這些條件後,祭壇便會開始自動抽取 LP 用於合成,並開 始散發紅色粒子效果。若合成還未完成,但此時 LP 已被 抽乾,紅色的粒子效果會轉為灰色,合成進度也會開始倒退,所以盡量避免這種情況的出現!最後還有一點,如果你放進祭壇裡的東西是氣血寶珠,那麼它 會散發紫色的粒子效果,表明它在向某個寶珠中灌輸 LP。\n\t事實上,祭壇中有三個存儲 LP 的容器:之前提到的一萬容積指的是其主容器;除此之外,祭壇還有輸入容器和輸出容器各一,容積均為主容器容積的十分之一。默認,輸入容器中的生命精華會以每秒 20 LP 的速度轉移至主容器中,而主容器中的生命精華也會以同樣的速度轉移到輸出容器中。如此一來,輸入容器和輸出/cut容器在祭壇中扮演的便是緩衝區的角色——它們是用來限制將生命精華輸入祭壇,和從祭壇中將生命精華抽取出來的速度的。 -guide.bloodmagic.entry.architect.ash.info=儘管奧術粉灰並不是這一卷的核心,但它確實貫穿了本卷提到的很多道具的合成之中。合成奧術粉灰需要用到獄火熔爐和惡魔意志,關於這些東西的細節可以參考《惡魔使者》卷。簡單來說,它是一種二元合成工具:你需要一種可充當催化劑的反應試劑,以及某種物品作為次要合成材料。\n\t一份奧術粉灰可使用二十次。對著地面或者牆壁使用便/cut可畫出一個圓形的法陣(如果是牆壁,你只能在一個方向上看到法陣)。然後,對法陣中央使用合適的催化劑即可改變其形狀,當然也會消耗催化劑(即,右擊使用)。如果法陣沒有變形,那麼你肯定有什麼地方搞錯了。\n\t在觀察到法陣變形後,你便可以放入次要物品了。合適的次要物品會啟動法陣,屆時你會看到法陣開始旋轉,並開始產生各種變化,具體變化隨法/cut陣不同而不同——但正確啟動的法陣最終都會產生一種新的物品。\n\t所有用到奧術粉灰的合成——我一般管這叫煉金陣列——都可以在JEI中查詢到。注意,左側的物品一定是催化劑,而右側的物品一定是一個次要物品。 -guide.bloodmagic.entry.architect.divination.info=占卜印記是血術士最常用的工具之一,因為它能解決你很多麻煩,具體來說是能給你一些關鍵數據。它的合成也很簡單:只需要在煉金陣列中以紅石為催化劑,以石板為次要物品合成即可。\n\t對血之祭壇使用此印記便可看到祭壇主容器中的LP數量,以及容量上限。短時間內反覆使用並不會導致刷屏,只會覆蓋之前的提示。\n\t/cut對著空氣使用此印記的話,則能看到你的靈魂網絡中的LP數量。儘管這功能看上去很普通,但你以後就會發現,你一刻也不想讓這玩意離手。 -guide.bloodmagic.entry.architect.soulnetwork.info=靈魂網絡(Soul Network,縮寫 SN)是指玩家和各種物品以 及結構之間的靈魂上的鏈接。隨著血術士能力的提升,靈魂網絡的強度也會隨之提高。就存在來說,它們是靈魂織成的一張無形的網,但最強大的血魔法師們是可以看到其物理的具現的。然而,時至今日,仍無人可達此化境...\n\t在遊戲中,網絡是直接與玩家綁定在一塊的。玩家所在的世界早已記錄下了這一切——/cut這意味著,玩家的 LP 並非是 記錄在某顆氣血寶珠中,而是被世界記錄著;每個玩家之間的網絡互相獨立,互不影響。\n\t綁定的過程通常在第一次使用某個物品時就已經完成了。就目前的科技來說,一旦綁定,即便是物品的主人也無法解除。需要消耗LP的物品會直接消耗其主人靈魂網絡中的LP。但,如果主人的靈魂網絡中沒有足夠的 LP,它會從 當前使用者,而不是其主人,的身上抽取生命值以填補空缺。因此,在快沒有LP的時候要小心——因為這通常會致人於死地。 -guide.bloodmagic.entry.architect.weakorb.info.1=沒了魔法來源的魔法師和鹹魚有什麼區別?氣血寶珠便是這樣一個魔法源:它可以將物理形式的生命轉化成LP並輸入到其主人的靈魂網絡中去。它本身並非電池,相反它倒像是一根導管,可將生命力轉化成血魔法師需要的魔法。 -guide.bloodmagic.entry.architect.weakorb.info.2=虛弱氣血寶珠便是你能製作的第一種寶珠——只需向一粒鑽石中灌注兩千LP的生命力即可完成。將已綁定的寶珠放入祭壇,它就可以不斷地從祭壇中抽取LP,直接輸入靈魂網絡中。另外,不論什麼寶珠,其容量上限都只能通過一些高級符文來提升;這裡注意一點,這個容量提升的效果只有在寶珠在祭壇上時才有效。對於虛弱氣血寶珠,最高只能提升到五千。\n\t/cut玩家還可以通過簡單地使用氣血寶珠來獲得LP——每一次使用都會對玩家造成一顆心的傷害並提供200LP。此法不能令網絡中的LP數量突破容量上限。\n\t祭壇只可能為與自己級別相當,或者比自己級別低的氣血寶珠提供LP。舉例,三級的寶珠只可能在三級或更高級的祭壇中獲得LP,一級的祭壇是無法勝任的。 -guide.bloodmagic.entry.architect.incense.info.1=血術士會經常發現,它們的LP產能時常跟不上消耗。當然,有特殊的符文可以提高自我獻祭所產生的生命精華的數量,但這個過程依舊是如此緩慢。只有這一條路可以走了嗎?\n\t下面介紹熏香祭壇。熏香祭壇本身可以以自身為中心,標記出一片靜謐的土地,在這範圍內,它可以借助祭壇本身散發出的餘力來安撫驚擾到的靈魂。當然你不是很清楚這/cut股熏香的氣息從何而來,但好像又沒什麼不對?先不管了。\n\t熏香祭壇的作用就是如此:利用靜謐的環境來提升單顆心所創造出的生命精華的數量。在你距離熏香祭壇只有約莫五格遠的地方時,它會散發出火焰顆粒以證明其已經創造出靜謐區域。在它的影響範圍下,你的犧牲匕首也會發生變化,以證明熏香已經發揮其效果。整個過程大約持續五秒鐘,你可以通過觀察火焰/cut粒子的存在來判斷是否結束。此時,使用犧牲匕首獻祭自己將會一次性獻祭你生命值上限的百分之九十,並將對應數量的LP輸入血之祭壇之中。LP數量和獻祭的生命值依舊成正比,但此時它的轉化率會根據附近的靜謐值而有所上升;默認,增幅是百分之二十。\n\t另外,占卜印記可以揭示附近的靜謐值,以及靜謐所帶來的具體增幅水平。 -guide.bloodmagic.entry.architect.incense.info.2=自然,百分之二十的增幅已經夠多了,但熏香祭壇作用的範圍還是可以繼續擴展的。你只需要在熏香祭壇某個基礎方向(即,正東、正西、正南、正北)兩格遠的地方排出一列三塊高度一樣木質路面即可定義一個「範圍」。在此「範圍」中的任意方塊都有助於讓這片區域更加靜謐。木質路面還可以繼續擴展,惟需遵守以下規則:一,每一列木質路面必須水平,即構成新一列路面的方塊必須高度相同;二,新的路面必須位於上一列路面的上/cut下五格範圍內。簡單來說,金字塔、倒金字塔等階梯式結構都是可以的。\n\t然而,這個範圍並非可以無節制地擴張。木質路面只能疊加三列;不過不用擔心,還有一種可以疊加五列的石質路面;甚至還有可以疊加九列的碎石路面和黑曜石路面。自然地,你在疊加三列木路面後就需要用石頭的;然而你完全可以一開始就用石頭的,只要你不是只用木路面就好。\n\t/cut回到靜謐程度的問題上來。事實上只有一部分方塊可以讓這片區域更加靜謐,而根據實驗,這些方塊被分成了若干種。舉個例子,你在這片區域中種了土豆,土豆屬於「作物」分類,然後這片區域便平靜了一些。不論是你接著種土豆,或者你種起了胡蘿蔔,它們的效果都會隨著你種的數量的增多而降低,甚至還會抵消一開始的效果,因為它們都屬於「作物」。為了最好的效果,你需要盡可能使用多種不同類型的方塊。/cut有助於平靜的方塊有這麼幾類:作物、原木、樹葉、熔岩、地獄巖、耕地、水、生命精華、以及其他東西(原文如此)。 -guide.bloodmagic.entry.architect.bloodrune.info.1=隨著你逐漸深入血魔法,你會發現你那普普通通的血之祭壇已無法滿足你的需要了。但你還可以通過放置一種名為氣血符文的特殊方塊來提升祭壇的整體屬性,進而解鎖更多的合成。\n\t將血之祭壇升到2級的方法很簡單:在祭壇本身往下一層放置八個一圈的氣血符文。如果你實在搞不清楚具體的位置,指示之書可以幫到你——它可以以一種類似全息投影的/cut方式指明你需要放置氣血符文的位置。\n\t儘管只需要空白氣血符文就可以完成祭壇升級,我仍然推薦你對使用帶有特殊強化的氣血符文。祭壇上的每一個符文都可以被換作特殊的氣血符文(唯一的例外是,二級祭壇四個角落上的特殊符文不會有效果——但在三級及以上的祭壇,這四個位置的特殊符文則可以使用)。這些帶有特殊強化的氣血符文可以提高/cut祭壇的合成速度、容量以及效率。有關這些特殊的氣血符文的資料可以在後面的章節找到。 -guide.bloodmagic.entry.architect.inspectoris.info.1=Inspectoris Scandalum 在拉丁 語中大概的意思是「方塊讀取器」。事實上,它的用途是,潛行時對著某個方塊使用,便可解讀那些複雜結構的信息,並將其顯示在你眼前。目前,它只能給出血之祭壇的相關信息:它可以給出升級祭壇所需的方塊的種類,以及具體擺放位置。\n\t若你覺得一次一次查詢不適合你,你可以試著潛行時對著空氣使用此物以切換目標層/cut級。這樣,再次按前文所述的方式使用此物,它就可以以一種類似全息投影的方式將升級所需的方塊的位置投影出來。設定級別為1時可以關閉這個類全息投影的效果。 -guide.bloodmagic.entry.architect.runeSpeed.info.1=速度符文可以提高祭壇內的壓力,藉由此加速嬗變過程,從而提高合成速度。每塊速度符文都會提高20%%的祭壇的LP消耗速度。它同時也會影響灌注氣血寶珠的速度。 -guide.bloodmagic.entry.architect.water.info.1=顧名思義,水之印記是一塊可凝聚空氣中水分,並將其集中於一點上的印記。除此之外,對著任何能裝水的設備使用水之印記都可以向設備裡面裝一桶水。總而言之,它便是一個移動的無限水源。每次使用都會消耗50點LP。 -guide.bloodmagic.entry.architect.lava.info.1=若說水之印記屬陰,那麼,屬陽的便是熔岩印記。熔岩印記可以將一片區域內的石頭熔化成岩漿。若是對某個可接受流體岩漿的設備使用,這設備裡就會多出一桶岩漿。儘管你拿著這個印記不會讓你自燃,但這不等於你可以開始洗熔岩浴了!記得每次使用時會消耗1000LP。 -guide.bloodmagic.entry.architect.lavaCrystal.info.1=熔岩晶體是塊裡面存儲了一團永不冷卻的熔岩的石頭。若將其放入熔爐中當燃料使用,它會釋放出熱量,這些熱量正好可以燒煉一個物品,然後消耗50LP。若是它沒有這麼多LP可以抽取,它也不會因此損壞,還會因此給網絡的主人追加一個反胃效果。\n\t這塊晶體理論上在任何支持標準固態燃料的設備中都可以工作。 -guide.bloodmagic.entry.architect.apprenticeorb.info.1=隨著你的新玩具越來越多,你會發現靈魂網絡的五千LP上限已經開始捉襟見肘了。是時候做一顆更強大的氣血寶珠了。\n\t學徒氣血寶珠的製作需要二級血之祭壇,可提供2.5萬LP的容量。同時,它也是合成很多更高級的物品和符文的必須。 -guide.bloodmagic.entry.architect.dagger.info.1=在不斷地通過獻祭自己來強化自己後,你可以開始試著獻祭別的活物了。若是用這把犧牲匕首,在血之祭壇附近擊中一隻普通的生物(不能是BOSS,也不能是玩家),那麼這個可憐的傢伙就會立刻被獻祭,並根據質量的不同,轉化成數量不等的生命精華。一般情況下,那些敵對怪物給予的生命精華要比那些平和的動物們要多。 -guide.bloodmagic.entry.architect.runeSacrifice.info.1=獻祭符文,正如其名,可提高獻祭活物時獲得的生命精華的數量,準確地說,是每塊符文增加十分之一。 -guide.bloodmagic.entry.architect.runeSelfSacrifice.info.1=犧牲符文和獻祭符文差不多,但犧牲符文是針對玩家自己的。增幅和獻祭符文一樣,都是百分之十。 -guide.bloodmagic.entry.architect.holding.info.1=你逐漸開始發現你有一堆各式各樣的印記要帶在身上了:有的需要手動開關,有的只需要放在背包裡就可以一直有效果。有鑒於你的背包空間開始逐漸縮水,你可能需要一塊集持印記的幫助。\n\t這集持印記的作用,便是將五個其他印記「壓縮」成一個;但是你並不能在集持印記裡放集持印記。默認,按下"Holding"鍵(默認為'H')可打開其界面,用於調整順序。滾輪可在選中/cut的印記之間循環切換。被選中的印記可直接借助集持印記使用,毋需取出。\n\t自然地,你可以身上帶若干集持印記,這些集持印記互不影響。但為了一眼就能區分,你可以考慮在煉金術桌中為其染色。染色的方式有兩種:1.直接使用染料在煉金術桌中染色;2.使用十六進制數命名的命名牌,比如這樣:0xFFFFFF。 -guide.bloodmagic.entry.architect.air.info.1=風之印記,簡單地將水蒸氣分成數股,產生強大的氣流,驅使玩家前進。簡單來說,你可以用這印記推動你前進。另外,這個印記可以免除掉落傷害,但只有你使用時才可以免除,所以如果你想硬著陸的話,記得要在即將摔到地上的一瞬間使用! -guide.bloodmagic.entry.architect.void.info.1=顧名思義,虛空印記會製造真空,並將附近的液體全部吸進去,並徹底銷毀。建議搭配水之印記和熔岩印記使用。 -guide.bloodmagic.entry.architect.greenGrove.info.1=綠叢印記可以將你的血轉化成植物生長的催化劑,進而加速附近植物的生長。驅動印記的方式很簡單:潛行時對著空氣使用(右擊)即可;相同的方式可以停止其工作(可以通過其信息提示看出它是否已被驅動)。要記住,它每隔幾秒鐘就會抽取一次LP以補充養料。\n\t直接對作物使用的效果和骨粉無異。這樣一來,這個印記也可以像骨粉一樣,用於製造草叢。 -guide.bloodmagic.entry.architect.fastMiner.info.1=大部分血術士都應該注意到了,血中含有豐富的鐵元素。經驗豐富的血術士完全可以在不抽血的情況下直接改變其體內血液的組成——然而,需要注意的是,只有那些最頂尖的血術士才可以抵抗由此產生的排斥反應。\n\t這樣一個技能有個經典的用途,提高身體的靈活性,以提高其運動速度。這速掘印記,通過用磁鐵影響血液裡的鐵元素,可大幅提升使用者的挖掘/cut速度。其實這個效果就是急迫II的效果。雖然只能影響使用者自身,但對於挖黑曜石來說的確是好用。 -guide.bloodmagic.entry.architect.seer.info.1=你在修理血之祭壇時,時常會發覺自己早已迷失在了那些占卜印記無法察覺的細節中。所以這就是輪到見解印記登場的時刻了。見解印記實際上是占卜印記的升級版,它能看到很多佔卜印記所看不到的細節,諸如祭壇的合成速度、當前的LP儲量、合成進度、甚至玩家自己的靈魂網絡的很多信息,這裡就不作贅述了。 -guide.bloodmagic.entry.architect.magicianOrb.info.1=新的祭壇,新的寶珠。這次,為了你的新玩具,你需要一顆法師氣血寶珠。不過有一點要注意,合成法師氣血寶珠需要2.5萬LP,但你的祭壇只有一萬容量。換言之,在合成這顆寶珠時,你需要不斷地補充生命精華。所以,在合成這顆氣血寶珠前,請務必做好萬全的準備! -guide.bloodmagic.entry.architect.capacity.info.1=雖然你並不知道具體原理,但這增容符文的確能給血之祭壇提供兩千的額外容量。也許,是某種共振導致容積下降,然後你便可以往裡面裝入更多的容器?這樣一想你倒是想到了進一步改進的方法...\n\t這裡有必要再重複一遍,祭壇本身還有用於緩衝的輸入和輸出容器,容積均為主容器的110%%。增容符文的效果對這兩個緩衝容器也有效。 -guide.bloodmagic.entry.architect.displacement.info.1=默認,血之祭壇的緩衝區和主容器之間的LP轉移速度是最高20LP/s。對於那些需要頻繁轉移LP的祭壇來說這個速度可以說是巨大的瓶頸。這也是為什麼會有轉位符文的原因。\n\t轉位符文可提升LP轉移的速度。每個符文都可以將速度提高至原來的1.2倍,多個轉位符文可以疊加。換言之,一個轉位符文可以將速度提高至一次24LP,兩個則為28.8LP,三個/cut則為34.56LP,而20個則會達到767LP,足以在13秒內清空一座標準祭壇裡所有的生命精華。 -guide.bloodmagic.entry.architect.affinity.info.1=表面上看,元素印記不過是一個能免疫火焰、溺水和摔落傷害的印記。事實上,它的工作方式並非如此——驅動此印記後,它會消耗汗水(如有必要,會是血),然後在使用者身上形成一格保護層,進而抵擋意外傷害。\n\t這層空氣護盾可以緩衝火焰和熔岩的熱量,也可以在必要時提供空氣以防溺水,同時還可以在不慎摔落時充當無形的氣墊使用。 -guide.bloodmagic.entry.architect.lamp.info.1=人和動物的血液中還是有「雜質」的。只需要收集一些稀有氣體,然後輔以合適的熱源,就可以在地面上產生一團明亮的光球,照耀著遠處的大地。\n\t血光印記的用途有兩個:或直接對著方塊使用,產生一個光球;或對著空氣使用,將光球發射到遠處。這些光球和火把一樣,可以空手打碎。 -guide.bloodmagic.entry.architect.magnetism.info.1=磁引印記可將血液中的鐵元素轉化為磁鐵,進而將小件物品吸引到身上,免除原地打轉收集物品的麻煩。就原理來看,它是真正的物品磁鐵,因為它並非是把物品吸過來,而是真正直接撿起遠處的物品。幸好這磁鐵的磁力並不大,不然當你意外地將爬行者以3馬赫的速度吸過來的時候一切就都結束了。 - -guide.bloodmagic.entry.architect.peritia.info.1=在這世界上,有某些行為可以累積一個人的經驗:擊殺怪物、採掘礦石、冶煉金屬、烹飪食物... 同時,一些特殊的奧法設備可以直接吸收這些經驗,並作為其動力使用。因此,若是有一種能存儲經驗的媒介,那就再好不過了。\n\t儘管有很多設備都可以將這經驗轉化成物理形態儲存,但這本經驗之書卻是以書寫知識的方式,將你過去所積累下/cut的經驗保存下來,以供日後使用的。需要的時候,只需要手持這本書就能自動吸收書頁中的知識,並將其轉化為經驗。\n\t具體來說,這本書是這樣用的:潛行時右擊即可將一級經驗存入書中(若有零頭,則先吸收零頭)。平時右擊一次可直接獲得一整級經驗。它所存儲的經驗數量可在其信息提示中找到。 -guide.bloodmagic.entry.architect.livingArmour.info.1=在這Minecraft的世界中,所有人,尤其是那些新生的人(譯註:應該是指死亡後剛剛重生的玩家?),都清楚一套好的護甲的重要性。通常,護甲的屬性是確定的——護甲的保護性能、飛行的能力、跳躍或跑步的增幅、諸如此類,不勝枚舉。誠然有這些屬性的護甲是好的,但你從未真正遇到過一套為你量身打造的護甲。至少,現在所有人都這麼認為。\n\t而這束靈護甲,實際上是一/cut個被鑲入鐵甲中的,經過特殊改造後的活物。穿在身上時,它便會與穿戴者共生——他們將一起移動、一起攻擊、甚至吃東西時它也會有所感覺。和普通的人體一樣,它也會生長,也會不斷地強化自己,當然也需要接受訓練。\n\t先舉個例子吧。當你穿上束靈護甲,並長途奔襲一段時間後,你會注意到束靈胸甲上多了一個名為「迅捷雙足」的升級。這個升級可以提高你的/cut移動速度,雖然目前只有等級1,但畢竟還是可以升級的。你還會注意到它擁有了「強化點數」,目前可能是「3/100」這樣子。每個升級都需要一定的強化點數,但護甲可用的強化點數有限。換言之,若是拿不出某個升級需要的點數,你是不可能獲得這個升級的。\n\t記住一點,只有全套束靈護甲才能接受訓練,也只有全套束靈護甲才能發揮其應有的效果。\n\t/cut束靈護甲的強化點數還是可以被人為修改的。有一種方法是利用煉金術增強穿戴者和護甲本身之間的鏈接,藉此大幅提升強化點數的上限,典型代表便是「禱告之始」,可將上限提升至200。關於這些煉金術的產物以及製造過程,建議參閱本書《煉金術士》一卷。 -guide.bloodmagic.entry.architect.upgradeTome.info.1=若是束靈護甲上有你不想要的升級怎麼辦呢?你可以使用名為「淨靈之音」的儀式來清洗這些升級,並獲得對應的「強化手冊」。關於儀式的細節可參閱本書《儀式大師》卷。這「強化手冊」的用途便是,在你身著全套束靈護甲時,直接給予護甲對應的升級。\n\t當然,這強化手冊也可以在鐵砧中融合——在鐵砧中將兩本一模一樣的手冊融合在一起可以獲得更高一級的手冊。/cut比方說,兩本迅捷雙足II可以融合出一本迅捷雙足III。對於束靈護甲本身來說,也有類似的機制,這裡不作贅述。 -guide.bloodmagic.entry.architect.teleposer.info.1=傳送器,顧名思義,可以將某個物體傳送至另一個地點,但這個傳送器不僅可以傳送生物,還能傳送方塊。完整的傳送裝置需要兩個傳送器和一個傳送核心。其中,一個傳送器充當目的地,另一個傳送器充當出發地。\n\t在使用傳送器之前需要一些配置。首先,你需要右擊傳送核心將你與其綁定。然後,手持核心右擊充當目的地的傳送器以記錄相關信息。最終,/cut把這個記錄了目的地信息的傳送核心透過其GUI放入充當始發地的傳送器即可。\n\t然後,給予始發地的傳送器一個紅石信號(準確地說,是強充能),這個傳送器就會將實體和方塊(如果是箱子這樣帶特殊數據的方塊,一併保留)一股腦全部傳送過去——這個過程中我們假定目的地是有傳送器的。\n\t當然,你可以只讓一個傳送器/cut有核心,抑或兩個傳送器互相鏈接,或者更多傳送器形成一條鏈,藉此形成更複雜的系統。\n\t不過要記住一點,傳送器只傳送其上方的方塊,不過傳送的範圍是由傳送核心決定的——T1的傳送核心只能傳送一個方塊,而T2傳送核心則能傳送3x3x3的方塊,以此類推。 -guide.bloodmagic.entry.architect.boundBlade.info.1=束縛之劍是一把用製作束靈護甲的方式製作出來的劍,可以說已有很長歷史了。不過有一點要注意,包括束縛之劍在內的各種束縛工具的設定,在未來都有可能有變動。\n\t這把劍有驅動模式和抑制模式,潛行時右擊即可切換。在抑制狀態下它並不會造成任何傷害,但是在驅動模式下它是會消耗LP的。同樣的,你對怪物造成傷害時,也會消耗LP。所以,在你殺死怪物的時候,/cut這把劍也有可能殺死你!\n\t然而,用這把劍殺死怪物時,會有那麼一點概率獲得虛弱氣血碎片——這個碎片便是將祭壇升級至四級的關鍵。 -guide.bloodmagic.entry.architect.boundTool.info.1=和束縛之劍一樣,束縛工具(包括鎬、斧和鍬)的屬性在未來也會有所變動。和束縛之劍一樣,束縛工具有兩個模式,切換方式同束縛之劍,也是潛行時右擊。\n\t和束縛之劍不同,束縛工具擁有「野獸模式」。手持工具右鍵按住不動即可蓄力,蓄力結束後工具會放出一股巨大的能量,大範圍破壞方塊,最高可達11x11x11,但同時也有驚人的消耗:一萬LP。因此,使用時一/cut定要小心謹慎,因為搞不好這就是你最後一次使用這些工具! -guide.bloodmagic.entry.architect.weakShard.info.1=任何有生命的東西,都有一層看不見,摸不著的鏈接,這個現象被稱作靈魂網絡。實踐證明,諸如印記和儀式這樣的東西也是可以有鏈接的,然而這些鏈接的來源便是擁有最強鏈接的生物——人類。\n\t用束縛之劍攻擊生物時,那些可憐生物的一部分靈魂網絡會直接硬化,在它們死後也可保持其形狀。這部分靈魂網絡便以虛弱氣血碎片的形式現身於世,它們因其顏色與虛/cut弱氣血寶珠相近而得名。\n\t雖然,至今仍未找到存在更強的氣血碎片的證據,但是你至少知道,這些碎片對於增強你自己的靈魂網絡肯定有幫助。 -guide.bloodmagic.entry.architect.masterOrb.info.1=如何利用這種對靈魂網絡十分親和的特性呢?答案是:用虛弱氣血碎片打造全新的氣血寶珠——導師氣血寶珠。它可以提供一百萬LP的上限,它可以徹底解放你對血魔法的想像力。也許,就算是隕石,也無法阻擋你的前進了吧... -guide.bloodmagic.entry.architect.runeOrb.info.1=看上去這個符文並沒什麼用途。但是,這寶珠符文可以提高那些放入血之祭壇中填充的寶珠的容量上限,每塊符文都可以提升百分之二。對於虛弱氣血寶珠,這是微不足道的100LP。而對於導師氣血寶珠,這是兩萬LP的增幅,效果十分顯著!如果你的祭壇上還有空位的話,這個符文興許就是你的首選。 -guide.bloodmagic.entry.architect.suppression.info.1=抑液印記,採用和傳送器一樣的傳送科技,可以讓一定範圍內的液體瞬間消失。準確地說,是送入另一個迷你維度中。不幸的事,因為傳送科技的限制,液體還是會回來的——比如說,在使用者走過本是液體的區域後。不過這無傷大雅,畢竟不論是在水下行走,還是在下界的熔岩之海上漫步,這印記都是十分好用的。 -guide.bloodmagic.entry.architect.haste.info.1=人體能消化的物質中有兩種十分有趣:糖和咖啡因。前者是能量儲備,後者可以令人保持清醒。這急速印記,便可以通過模擬化學反應的方式,釋放更多的化學能,進而提升印記使用者的移動能力。\n\t印記驅動後,使用者會跑得更快,跳得更高,同時還會令玩家在不用跳躍的情況下跨越比較高的障礙(實際上是個改良版本的自動跳躍)。 -guide.bloodmagic.entry.architect.severance.info.1=人們至今無法解釋傳送的機制。多數情況下,傳送被認為是時空扭曲的一種表現形式,物體可通過兩個不同時空的鏈接來實現瞬間移動。而這絕影印記可以阻止時空扭曲的產生,從而阻止啟動此印記的玩家附近的生物發動傳送技能。當然這個印記並不能阻止諸如傳送門之類的東西,但阻止類似末影人這樣的生物還是可以的。 -guide.bloodmagic.entry.architect.teleposition.info.1=傳送印記實際上是個自帶傳送核心的傳送器。對某個傳送器使用此印記,印記會記下這個傳送器的位置,再次使用印記就可以直接傳送到那裡去了。然而它好像沒給你返程票... -guide.bloodmagic.entry.architect.compression.info.1=礦工經常面對的一個情況便是,它的背包中充滿了紅石粉、青金石、以及各種亂七八糟的東西。雖然可以壓縮,但是並非所有礦工都會隨身攜帶工作台。\n\t壓擠印記所創造的小型壓縮力場可以將各種物品壓縮起來,進而節約背包空間。具體來說是這樣:如果你有63份紅石粉,印記不會有效果;但如果你有64份紅石粉,它就會將其中63份壓縮成7個紅石塊。雖/cut然並沒騰出新的格子,但是別忘了那個佔了一個格子的紅石粉是可以接著放紅石的。這個印記對其他Mod的類似東西也是有效果的。 -guide.bloodmagic.entry.architect.bridge.info.1=影橋印記可以將使用者腳下的空氣固化成可以行走的道路,或者說,幻化出一座幻影之橋。若是你不慎踩空,影橋會直接在你腳下出現,避免嚴重的摔傷。儘管在使用前需要一些測量工作,同時影橋出現也會造成延遲,它仍不失為一種「飛行」的好方法。 -guide.bloodmagic.entry.architect.mimic.info.1=擬態是一種可以模仿任意給定結構的魔法結構。它本身可以根據其碰到的方塊,改變自身的分子結構,從而使其本身看起來都是如假包換一樣。但,並非所有的屬性都可以複製:比如說,普通的擬態方塊變成螢石後不能發光。\n\t一般,擬態方塊有兩種用法。第一種,先放置擬態方塊,然後手持要偽裝的方塊對著擬態方塊右擊。這樣,被偽裝的方塊就直接進入擬態方塊的內/cut部,擬態方塊也就可以偽裝了。不過,這個方法只能偽裝一個方塊的「默認」形狀。舉個例子,此法偽裝的樓梯都是朝同一個方向的。\n\t第二種,直接對著某個方塊使用擬態方塊。若如此做,擬態方塊便可以做到精確偽裝。還是剛才樓梯的例子,這樣偽裝的樓梯就會很自然,因為方向被保留了下來。\n\t事實上,擬態方塊的變種有很/cut多。默認的不透明擬態方塊可以模仿形狀和方塊的大多數屬性,但光是無法照過去的。懸幽擬態方塊沒有碰撞箱,適合製作隱藏門。清透擬態方塊可以解決玻璃的擬態問題:光線可以無視被偽裝的方塊的屬性,穿透這種擬態方塊。最後,還有一種光亮擬態方塊,不論何時它都會發光。終於不用火把了!\n\t其實還有一種特殊的擬態方塊:感知擬態方塊。如果有玩/cut家接近,它們就會向其發動猛烈攻擊。這種方塊可在很多地方找到,尤其是地牢中。所以說,如果有一個感知擬態方塊偽裝成了箱子,請記住:它們會咬人。\n\t***創造模式限定內容***\n\t在創造模式下,擬態方塊會多出來一些有趣特性。用藥水或藥劑瓶右擊擬態方塊後,可令其在有玩家在附近時產生對應的藥水效果。如果這是/cut普通的擬態方塊,那麼:點擊東面/西面可以加/減藥水效果的覆蓋範圍;點擊北面/南面可以加/減玩家的檢測範圍;點擊上面/下面可以提高/降低藥水生成間隔,即每隔多久生成一次藥水效果。\n\t如果你在面對一個感知擬態方塊,你可以隨意點擊這個擬態方塊,以改變其檢測玩家的範圍——如果玩家在檢測範圍中,並且可以看到這個擬態方塊,擬態方塊會直接出現在玩/cut家眼前。\n\t另外,如果玩家在創造模式下將要偽裝的方塊放入擬態方塊中,這個方塊不會在擬態方塊被破壞後掉落。\n\t最後的最後,如果擬態方塊偽裝的是一個裝著東西的箱子或別的什麼容器:對於感知擬態方塊,在它敗北後會把箱子連同內容一塊放回來;對於其他擬態方塊,它會在被擊潰時把物品撒一地。 -guide.bloodmagic.entry.architect.downgrade.info=就護甲降級的內容,我建議你閱讀《儀式大師》卷的「沉重靈魂的懺悔」一章,在那裡你可以得到更詳細的解釋。 - -guide.bloodmagic.entry.architect.augmentedCapacity.info=和增容符文類似,超容符文也可以提升祭壇的容量。但和增容符文不同,多塊超容符文會之間的共鳴會讓容積呈指數級增長。具體來說,是做乘法:每一塊超容符文都會給予額外10%%的容積;換言之,兩塊即21%%的增長,三塊即33.1%%的增長,以此類推。\n\t然而,超容符文的效果不與增容符文疊加,換言之,不論有多少超容符文,每塊增容符文都只提供兩千LP容量。 -guide.bloodmagic.entry.architect.charging.info=有那麼一些東西對於合成很有幫助,而這充能符文便是其中之一:它可以吸收 LP,並將 其轉化為「充能點數」,具體數量可用見解印記看到。若是合成某些物品正好需要一定量的充能點數,那麼這充能符文就可以以消耗充能點數為代價,將物品立刻合成出來。若沒有足夠的充能點數,它就只會按一比一的比例直接將充能點數轉化為 LP 以加速 其合成。\n\t/cut血之祭壇最多可存儲的充能點數數量是充能符文的數量乘以祭壇的容積,其中容積需要至少為兩萬才有效果。血之祭壇充能的速度也是和充能符文數量以及其本身的速度成正比的(即,充能速度=符文數量*祭壇本身合成速度),每一秒它都會將一定量 LP 轉化為充能點數。所以,如果你的祭壇中有這塊符文,合理的設計將會使你事半功倍。 -guide.bloodmagic.entry.architect.acceleration.info=和大多數符文不同,促進符文需要和別的符文搭配使用,而且它的效果不是無限制增長的。這個符文的效果是,它可以讓某些符文的工作頻率變高,比如說,轉位符文和充能符文。具體來說,每有一個這個符文,距離下一次工作的等待時間就減一刻。換言之:如果有10塊促進符文,轉位符文會每10刻就轉移一次液體,而默認值卻是每20刻。\n\t顯然,你的祭壇中只可能有19/cut塊促進符文——在這種情況下,轉位符文和充能符文就會一刻不停地工作。非常非常非常非常非常非常非常好! - -# Demon Kin Entries -guide.bloodmagic.entry.demon.intro=貝拉·海泊恩 -guide.bloodmagic.entry.demon.snare=惡魔意志與投網 -guide.bloodmagic.entry.demon.forge=獄火熔爐 -guide.bloodmagic.entry.demon.petty=微小的地獄魂石 -guide.bloodmagic.entry.demon.sword=感知之劍 -guide.bloodmagic.entry.demon.lesser=小型地獄魂石 -guide.bloodmagic.entry.demon.reactions=意料之外的反應 -guide.bloodmagic.entry.demon.sentientGem=感知護甲 -guide.bloodmagic.entry.demon.routing=物品路由 -guide.bloodmagic.entry.demon.aura=惡魔靈域 -guide.bloodmagic.entry.demon.types=不同種類的意志 -guide.bloodmagic.entry.demon.crucible=惡魔坩堝 -guide.bloodmagic.entry.demon.crystallizer=惡魔結晶壇 -guide.bloodmagic.entry.demon.cluster=惡魔晶簇 -guide.bloodmagic.entry.demon.pylon=惡魔導能塔 -guide.bloodmagic.entry.demon.gauge=靈域測量儀 - -# Demon Kin Entry Texts -guide.bloodmagic.entry.demon.intro.info=我的名字叫貝拉·海泊恩,以惡魔使者的身份被知曉。數個月前我的家鄉被一群惡魔侵襲,其他村民全部被殺,房屋全被破壞。我無法記起襲擊時的多少細節,除了我所認識的每一個,伴隨著痛苦的慘叫而前往一個更美好的世界的人們。慶幸那些惡魔沒有聽到,那在不容易察覺的教堂的地下室裡,畏縮於果籃下的我絕望地避免著自己的尖叫聲加入眾人的合聲。\n\t/cut可怕的瞬間,在我不慎撞倒堂的熏香祭壇時,一隻惡魔突然闖入聖所,或許是這聖地的原由又鎮靜下來。這是只體型龐大的四足怪物,彎曲的獠牙倒懸在突出的嘴上,唾液滴在帶有鋸齒的劍狀爪子。它環顧了四周,我發誓有那麼一會它的眼睛和我對上了,但之後它就這麼離開這裡,彷彿完全沒有看到或者聽到什麼。之後發生的事記憶全都模糊不清。\n\t/cut直到第二天才有人經過看到這一切。這一商隊看到遠處的濃煙,決定繞一大段路好避開這些惡魔。商隊中許多人覺得我獨自一人毫髮無損地生還興許是個壞兆頭,有些甚至不願多看我一眼。但有一對兄弟同情我的遭遇,並盡力說服商隊其他成員也帶上我。我賣掉了女祭司之仗與一條盒式掛墜,藉此換到了跟著前往一個遠離惡魔破壞路徑上的一個安全村莊的許可。 -guide.bloodmagic.entry.demon.snare.info.1=曾有一天,馬格斯曾對我講述道,世間生靈皆有靈魂:人類,雞,羊,甚至是爬行者也存在這種給予軀體生之意志的生命力量。似乎馬格斯早已在這方面做過大量實驗,甚至有聞一個強大的法師,可以將獲取這些靈魂並注入一個空的軀體,比如殭屍。但這也讓我感到好奇:如果殭屍與骷髏並不擁有靈魂,它們如何擁有這生的意志?是什麼,給予他們生氣,使他們會去追捕並殺害生靈?\n\t/cut每每鑽研最終還是回到了意志的問題上。任何「活物」都必須擁有使之生存下去的意志,但這不意味著那必須是它們自己的。當我把這個想法告訴馬格斯的時候他考慮了一會,接著拿出一個黑板和粉筆(從哪?誰知道呢),開始速寫並注上一些關於其他形式魔法的註解。「在秘術學中,」他畫出一隻稻草人的形態並說道,「分配於執行許多簡單操作的傀儡被賦予了生氣。它們活著,呼吸著,甚至可以死於不/cut再需要它們的主人。幾個世紀以來,伴隨著秘術學的進化,這門藝術已經有過數個版本,法師會將他們的意志注入那無生命的創造物中,給他們帶來生氣。\n\t「那麼,貝拉,傀儡是如何運作的呢:通過意志的灌輸。」\n\t所以如果可以通過他人將其意志注入一個空殼可以使傀儡獲得生命,那麼就有可能有什麼把他們的意志注入亡者/cut的軀體,使得有了殭屍和骷髏的存在。想到這我打了個哆嗦,腦中閃過故鄉的遭遇。只有惡魔會做到這麼殘忍的事。但要檢驗這個假設,我需要更多證據。 -guide.bloodmagic.entry.demon.snare.info.2=在馬格斯的指引,和提比略百忙之中抽出時間為我提供的幫助下,我用鐵、線和一點紅石便做出了原始投網。身兼秘術使的提比略說這玩意可以切斷控制生物的意志。「我拿這玩意在傀儡上瞎搞」,他帶著微笑這樣說道。我們都知道結果是什麼樣的。\n\t「紅石似乎切斷了我的意志和傀儡之間的聯繫。理論上來說,如果殭屍和骷髏身上也有意志,那這投網也可以切斷。」\n\t/cut他說我只需要瞄準目標把投網丟過去就可以——如果奏效,我就能在目標生物上看到一些白色的顆粒。「然後你需要把那個可憐的目標殺死才能看到真相。但記住,大概只有四分之一的投網會對目標有效果。所以記得多備一些!」\n\t我製作了十六個投網,然後我選擇在深夜出發。事實上,這項工作相當棘手:要同時追蹤幾個殭屍,還要閃避它們的重擊,還要瞄準它們丟出投網。/cut當我看到白色的顆粒時,我迅速將殭屍們悉數斬殺,並清點了它們留下的物品。沙地上一些藍色的粘稠液體吸引了我的注意。我撿起來看了一下,這似乎是一種超凡脫俗的存在...在快速收集好樣本後我決定先返回再作進一步研究。\n\t每一份收集到的「惡魔意志」的形狀和大小都不盡相同,似乎取決於它們的來源。拋開單位不談,只做粗略的定/cut量分析的話,它們的品質可以按0到5來劃分。我並不是很清楚這些物質可以用來幹什麼,但毫無疑問它們引起了我的注意。我也不是很清楚這究竟是惡魔的印記,抑或僅是它們身上掉落的某種晶體。我需要進一步的研究。 -guide.bloodmagic.entry.demon.forge.info.1=我已在惡魔意志上投入了數星期的時間。雖然有所進展,但情況依舊時好時壞。但有一天,提比略問我能否借用一點惡魔意志來做實驗;他解釋說,這很有可能是他一直在尋找的新一代血之祭壇的材料——馬格斯原本的祭壇已經破舊不堪,但按古法製作的祭壇卻怎麼也無法使用...總而言之,他覺得我能幫上忙。\n\t事實證明他是對的。我查閱了很多討論「等價交換」以及/cut物質嬗變的煉金術書籍;同時我還咨詢了一些途經我們這裡的煉金術師,他們也慷慨地給了我一些解構物質和能量的方法,以便進行深入研究。(啊,我必須承認我十分喜歡那些煉金術師的暗紫色盔甲——區區看一眼就會讓人感覺要被一個質量巨大的東西拉過去一樣。啊我沒在說提比略!)我利用僅有的簡易煉金陣列以及極少量樣本便成功從惡魔意志中抽取到了能量。剩下的事情就只有合適的構造了。 -guide.bloodmagic.entry.demon.forge.info.2=就在今天,我成功製成了一種可將原生意志注入物品中的結構。我現在管這個東西叫「獄火熔爐」,實際上它只是個鑲入玻璃頂層中的簡易煉金術陣列,可最多同時將四個物品和原生意志融合於一體。惡魔意志需要放在右手邊,顯而易見的圓圈則是為物品準備的。目前來說我已掌握了若干種「配方」,但使用這爐子仍然有一些要求。\n\t對於初次使用獄火熔爐的人/cut來說,他們需要注意一些事情:一,物品融合需要提供一定數量的惡魔意志,如果數量不夠,什麼事都不會發生;二,前面說到物品融合需要提供一定數量的惡魔意志,但大部分配方實際都消耗不了那麼多;三,有些物品的融合需要大量意志來啟動,但卻消耗不了多少,甚至根本不消耗;四,有些配方的產量巨大,有些...並不怎麼高。 -guide.bloodmagic.entry.demon.petty.info.1=又是新一個夜晚,我又開始了日常的收割工作。但是很快我意識到了一個問題:我的背包每天都會被各種樣本塞滿!原因不是很清楚,也許是因為每份樣本的最終來源都不一樣,因此無法壓縮在一起吧。至少,從它們物理表現形式來說是這樣的。\n\t也因此我又回到了被丟在屋子一角的獄火熔爐旁開始為我的實驗準備材料,將提比略的那些令人窒息的實驗拋之/cut腦後。我這幾天在為提比略準備他的熔爐,因為我已經放棄抵抗那些因為他的「奧法實驗」而產生的,籠罩在我的工作室裡的粉灰了。我管你是不是在「填補靈魂網絡那無形的網狀結構與石板的物理結構的空白」,趕快讓你那些天殺的東西滾出去! -guide.bloodmagic.entry.demon.petty.info.2=不論如何,尋找合適的存儲惡魔意志的材料的確費了我一番功夫。青金石似乎是一種很容易就能找到的能量導體,可以充當傳導意志的通道。然後我為了避免空氣中的電場的影響,加了一層紅石充當「護盾」(至少,馬格斯說過,將兩種能量混在一起會產生災難性後果);然後加上一些黃金充當抑性劑;並以玻璃製成外殼。最終我得到了一塊「地獄魂石」。這個名字的含義便是「來自地下世界——塔爾塔羅斯 (Τάρταρος, Tartarus) ——的寶石」。\n\t經過近一步測試,我發現這個寶石的容量是64。(當我把這個結果拿給馬格斯看時,他覺得這個數字是個十分完美的整數。)這樣,我再試圖撿起惡魔意志時它就可以自動將其收集起來了。但...這樣一來意志它本身似乎就消失了。在拯救了我的背包的同時也給我帶來了新的謎團呢。同時我還發現,若是我手持寶石並將精神集中於此(右擊),約有/cut容量上限十分之一的意志就會流入我身上的另一個寶石中。我覺得這個性質會在我得到更強大的地獄魂石後大顯身手。 -guide.bloodmagic.entry.demon.sword.info.1=我的網又出問題了。\n\t不論我怎麼努力改進,這投網似乎就是不能完美工作。多數時候會打結。但即便我成功投中了殭屍,它還是有很高概率不工作。為了避免自己的頭髮被網纏住的命運,我決定立刻回到我的獄火熔爐旁開工。\n\t但,並非立刻開工——我首先得清理下上面的灰塵。 -guide.bloodmagic.entry.demon.sword.info.2=我將那微小的地獄魂石存儲惡魔意志的能力成功注入到了鐵劍裡,並得到了一柄...傷害比我的拳頭還低的劍。我對這個結果感到十分失望,因為我為了讓以地獄魂石驅動的煉獄熔爐不過熱而在一旁擺弄了很久很久。\n\t然而,當我再次拿起地獄魂石時,劍開始散發出了一種新的能量。似乎,我身上的惡魔意志越多,劍的傷害也就越高,獲得的惡魔意志也就越多;倘若/cut沒有地獄魂石...這劍就如同廢鐵一般。\n\t經過測試我又發現了一件事:擊殺不同的目標獲得的意志數量不一樣。具體的數量和目標生物的生命上限成正比——以蜘蛛為例,它最多只有8顆心,因此殺死蜘蛛能獲得的意志數量便是殭屍的百分之八十,因為殭屍最多有十顆心。或許是因為生命越多的生物動起來時需要的意志越多吧。我覺得這個事情得好好記住,以備不時之需。 -guide.bloodmagic.entry.demon.lesser.info.1=今天在和提比略聊天,聊到了最近他的一些工程。不得不承認,一旦說起他的研究,他就會說個沒完沒了!不管了。提比略說他最近一直在研究印記,目前他已經利用我給他造的獄火熔爐成功製成了水之印記和熔岩印記。我不是很清楚他是怎麼做的——我只知道他以地獄魂石作為催化劑,將多種材料在熔爐中煉成印記,但我沒親眼目睹過他的實驗過程。不過我今天總算知道了他那漫天飛舞的灰塵是/cut怎麼回事。\n\t我來試著按他的方式複述一下。呃,「利用魂石中的意志來嬗變平時根本不會反應的若干原料時,發生了反應。利用這種增幅效應,我便可以刻出我所需要的銘文,以引導能量的流動,從而完成我需要完成的工作。」雖說白紙黑字難以想像,但我扶了扶眼鏡後重新回想起了當時的景象...我不確定他是不是平時也這樣,但我發誓,一旦跟我解釋東西,他就會變成...科學家。\n\t/cut不論如何,他為我展示了水之印記的製作方式。在電光火石般的演示後,他終於進入了正題。「我在試圖用更高級的材料重複相同的過程,但反應物似乎總會在我放進去的一瞬間...爆炸。看上去很不穩定。我覺得是因為他們沒有正確地融合在一起——或許是能量不夠吧。」\n\t我在思索了幾分鐘後便開始了工作——正如前文所說,我覺得我會需要更強大的地獄魂/cut石的,但我仍然在思考如何以優雅的方式完成這個工作。所以,我決定:訴諸暴力! -guide.bloodmagic.entry.demon.lesser.info.2=我找來一整塊青金石、一整塊紅石、一顆鑽石、以及一塊空的地獄魂石——啊這塊魂石是我在地上發現的,應該是以前某個進展不順的實驗中用的。我只記得馬格斯可以讓水泥牆上的洞瞬間消失。然後我將這四個物品放入獄火熔爐,並以一塊滿的地獄魂石供能——最終結果顯示我需要至少大約60點意志。經過一系列優化,我終於確定了配方,並開始觀察生長中的地獄魂石。\n\t/cut另外還有一點,我試過用金塊代替鑽石,但結果似乎只說明另一種水晶結構更有用。\n\t最終,我得到了全新的「小型地獄魂石」,它擁有256點容量,比微小的地獄魂石大多了。希望這顆新魂石可以滿足提比略的需求吧。哎呀這玩意的容量這麼高不就意味著我得花更多時間來收集惡魔意志嗎?啊!又是一個漫漫長夜...! -guide.bloodmagic.entry.demon.reactions.info=我今天一早醒來發現自己躺在醫院的病床上,身上有什麼東西疼痛欲裂。我睜開雙眼,卻看到了滿眼的暗洋紅色——那是,Veteres——距離我們村莊最近的大城市——的一家醫院的天花板。我對現在的環境倒不是怎麼奇怪,因為我的目光落在了一大片擦傷和淤青上,以及我左腿上的石膏...什麼人肯定對我下了名為"Ossa-Fracta"的詛咒——因為那只能是根壞掉的骨頭!\n\t/cut當馬格斯和一名緊繃著臉的護士走進來的時候,我就立刻明白了:我遭遇的事情比想像中的還嚴重。顯然,我針對新制的小型地獄魂石的實驗發生了反彈並引起了爆炸,雖然規模不大,但仍有殺傷力。不過我也就只能想到這點事情了:我左小腿上覆蓋的黑曜石、鐵和鑽石製成的護甲,現在變成了某種完全無法拆除的護甲——更準確地說,是某種淡藍的,類似符文矩陣的魔法護甲。\n\t/cut我冷靜下來,並問馬格斯怎麼看,雖然我已然知道發生了什麼。「我覺得吧,」,他說,並在認真聆聽的護士看我之前瞥了護士一眼,「那是某種鑽石殘留物,這也是為什麼我們沒辦法拆掉它的原因。同時,它還被某種...異域的能量束縛著,這也是為什麼你現在會躺在這裡,而不是當地診所,的原因——共聚會自從上次邪術事件以來就一直對襲擊人類的不明能量高度重視,我們必須保證不招惹是非。」\n\t/cut「我知道了...」平日裡,馬格斯是不會去操心諸如就未知能量事件照會共聚會這種正式的事情的——我已經著手研究惡魔意志多時了,也不見共聚會上門來為新的魔法能量辦相關手續。我對政治不感興趣,我也不打算透露太多消息,但我知道馬格斯對此事非常謹慎——這意味著,在接下來一段時間內,馬格斯都會為這意志所蘊含的能量擔憂,說不定還會牽扯出陳年舊賬也說不定...?\n\/cut「夠了,話題到此為止,」馬格斯說罷便披上了他的長袍,「我原本打算一開始就將之公之於眾的,但那時它的威力還不明顯,但現在...」\n\t我感受到左腿有一股熱浪,就像要把我的腿燒起來一樣,同時為看到馬格斯捧成杯狀的手蓋在了藍色的殼上,散發出耀眼的紅光。幾秒鐘後——雖然我感覺這像是經過了永恆的時間——殼開始碎裂並脫落。說實話這個結局有些令人掃興。\n\t/cut我試圖起身,但馬格斯一把把我按回床上:「貝拉,你需要休息。魂石的事情可以先放一放。」對此,一開始我是拒絕的,但我後來轉而開始思考這次事故。馬格斯不早點這麼做的理由只能是地獄魂石在爆炸後仍留在我身上。換言之,我腿上不論發生什麼,都和惡魔意志有關;只要拿去魂石,那層殼也就能被移除。我開始了沉思... -guide.bloodmagic.entry.demon.sentientGem.info.1=幾天後,馬格斯強制執行的「休養生息」結束了。我決定在我現有的基礎上繼續研究感知護甲。然而,還有很多關於感知之劍和惡魔意志的疑問沒有解答。誠然,我們有一些理論上的猜想,但畢竟是馬格斯和我提出的理論,我們也不知道究竟有多準確。\n\t為此我需要一點大膽的設想。馬格斯告訴我說,我們在學習血之魔法時,也有必要學習另一門魔法的藝術。提比略/cut建議我去學習花之魔法,但我對此嗤之以鼻——「一堆花也能幫我擊退惡魔?!」 -guide.bloodmagic.entry.demon.sentientGem.info.2=感知護甲寶石是塊可以讓你穿卸感知護甲的工具。確保身上有16點惡魔意志,使用這塊寶石(右擊),便會將你身上的護甲悉數替換成一套全新的感知護甲,同時還會繼承你本來護甲上的附魔效果;再次使用這塊寶石就可以脫下感知護甲並換回你本來的護甲。當然,即便你身上沒有護甲,這塊寶石也是可以用的。\n\t感知護甲的效果一般與普通鐵護甲無異,除此之外沒有別/cut的效果。但,和感知工具一樣,當你身上持有惡魔意志時,感知護甲的保護能力就會上升,上升幅度與意志數量成正比。也正是因為此,當你身上有海量惡魔意志時它的保護能力就會變得十分強大。但有一點需要注意,就是你每受到一次傷害,都會消耗地獄魂石中的惡魔意志,如果意志數量太低,感知護甲就可能會被打回原形。說不定是個弱點呢! -guide.bloodmagic.entry.demon.routing.info=血魔法的物品傳送是以惡魔意志編織成的網的形式出現的,整張網構成了物品傳輸的通路,連接著每一個儲存點。讓我來先講解一下每一個物品都是幹什麼的。\n\t每一個路由系統都有一個主控路由節點,相當於整個系統的中樞。輸入節點用於將物品輸入路由網絡,輸出節點將物品從網絡中提取出來,而標準的路由節點沒有任何特殊功能。\n\t/cut網絡的搭建方法如下:首先,你需要在潛行時手持節點連接工具右擊一個節點,然後以同樣的方法右擊另一個你想與之連接的節點。只要兩個節點之間能找到某種通路,抑或都連接在主節點上,它們就可以互相「通信」。\n\t物品路由第一原則:物品總是從最近的輸入節點進入網絡,從最近的輸出節點離開網絡。你需要篩選器來限制物品的流向。在節點的操作界面/cut上有一個按鈕可以讓你進行過濾設置,可以精確到面(界面中的N指北方,以此類推)。最左邊的格子還可以指定物品數量和種類。對於輸入節點來說,篩選器的存在會使它們只提取篩選器指定的物品;如果你指定了數量,它們還會留下指定數量的物品,而非全部提取出來。對於輸出節點來說,篩選器則讓它們只接受並輸出指定的物品;如果你指定了數量,那麼它們最多只會輸出那麼多物品。\n\t/cut有四種不同類型的篩選器:\n\t精確匹配——物品的NBT和元數據必須完全匹配。\n\t按模組匹配——若物品來自指定Mod則匹配成功。\n\t忽略NBT——篩選器不比較NBT標籤。\n\t礦物字典——若物品帶有相同礦物字典條目則匹配成功。\n\t/cut在將篩選器放入路由節點後,你可以在路由節點上看到兩個數字:數量和優先級。點擊篩選器中的任何物品後即可看到其名字,正下方則會顯示數量。如前文所述,這便是指定數量的地方了。若你將數量設定為0,那麼就意味著「所有」——對於輸入節點來說,那就是抽取所有物品;對於輸出節點來說,就是提供所有物品。\n\t第二個數字便是優先級,可用一旁的箭頭調整。數字越小,/cut優先級越高,物品將會首先試圖前往優先級高的節點。 -guide.bloodmagic.entry.demon.aura.info=生物被殺死後,其靈魂會日漸消退,最終回歸創世之神。使用投網,可以將其束縛於現世,但也有一些難度。我們現在,出於種種理由,對這些意志加以干擾並凍結其一切活性。若我們燃燒意志,它就會回歸虛無。但若是我們直接將意志釋放到空氣中,我們便可以以更靈活的方式駕馭這股力量。有些方式十分普通,而有些方式則顯得十分強大。\n\t在將惡魔意志釋放到空氣中/cut後,它會一直待在釋放出來的那片土地上(即,那個區塊),不會輕易離開。每一片土地上的不同種類的意志(關於意志的種類,後文有詳述)互不影響。這些意志的存在還可以用其他的方塊和物品來調整。 -guide.bloodmagic.entry.demon.types.info=到目前為止,每當我們討論惡魔意志時,都是討論的原生意志。這也就意味著這是天然的意志,但這並不等於它是純的。事實上,惡魔意志有若干類型;除開原生意志,還有腐蝕、破壞、復仇以及堅毅四種意志。原生意志實質是這四種意志的混合物,也許還有一些至今沒有識別的意志,但有一點可以確定,即分離後的意志很難再融合為一體。\n\t四種不同的意志的真正來源/cut至今仍然不明,但我們已經掌握了產生這四種意志的方法。將意志釋放到空氣中後,相同種類的意志就會開始聚集在一起。據此,只需要有一種可以收集特定種類意志的設備就可以完成任務了。接下來的幾個章節中將會講述其中一種設備——惡魔結晶壇。\n\t四種意志代表了人的四種慾望。當然我們仍然可以假定存在更多種意志,但也許它們/cut的純度還不夠,也許根本不能存在,總而言之我們目前還沒發現新的意志種類。\n\t腐蝕——代表了藉由各種方式——酸液、蠻力、等等——破壞萬物的慾望。掌握了這種力量的人,將能自由地驅使各種疾病(換言之,各種負面效果)的力量,並令自身免受劇毒的侵蝕。\n\t惡意——可看作是——一種孜孜不倦尋找對手的慾望。通常,駕/cut馭惡意能量的人,只要鎖定了目標,移動速度就會上升,使得可憐的獵物無處躲藏,只得坐以待斃。\n\t破壞——你或許已經猜到了——其實就是純粹的力量。正確地使用這種力量可以令使用者的身體素質在短時間內獲得快速提升;同時還可以用來粉碎或碾磨其他物品。\n\t堅毅——無數的觀察表明——這是抵禦攻擊,使自身免遭傷害的/cut慾望。大多數情況下,操縱這種慾望的人,都是團隊中的銅牆鐵壁——任何攻擊都不會傷他分毫。如果你想藉由你的護甲或儀式來保障你的存活概率,這股力量絕對是你的第一選擇。 -guide.bloodmagic.entry.demon.crucible.info=惡魔坩堝可將地獄魂石中的惡魔意志散佈到當地(即當前區塊)的大氣之中。這口坩堝有若干用途:最簡單的一個就是直接將地獄魂石放入其中(右擊放入)。坩堝會自動從魂石中抽取惡魔意志並散佈到空氣中,直到飽和(每種意志大約都會在達到100點時飽和)或者魂石本身被抽乾了。\n\t此外,它還可以抽取空氣中的惡魔意志並灌輸進魂石中。操作方式和散佈惡魔意志無/cut異,只是坩堝需要一個強的紅石信號(即強充能)。\n\t最後,直接往裡面投入一塊惡魔意志也是可以的,不論什麼形式,只要有容納意志的空間就可以進行轉化。舉個例子,將晶化惡魔意志投入坩堝可產生50點意志。 -guide.bloodmagic.entry.demon.crystallizer.info=正如之前所提到的那樣,惡魔靈氣——通常我們會簡單以「大氣」指代之——是惡魔意志的空靈的存在形式,而擊殺怪物獲得的物質則是惡魔意志物理形式的具現。而這惡魔結晶壇,則像是一個錨點,讓漂浮在大氣中的惡魔意志以晶體的形態重現。\n\t你也許會問,為什麼不直接用地獄魂石培養一塊晶體呢?這是因為在我們將惡魔意志釋放到空氣中時,它身上的禁錮/cut就已經被解除了——記住,當我們殺死一個怪物時,它身上的意志也就隨之被我們禁錮了。再次釋放自然會令其重新恢復活力,而這結晶壇就是直接吸收這活的惡魔意志。不要太想當然啦。\n\t結晶過程需要比較高的惡魔靈氣的濃度(大概是80點),並且需要一段時間。在這之後,結晶壇的上方便會長出只有一根尖的惡魔晶簇。結晶壇有兩種工作方式:它既可以吸收/cut特定的一種意志然後產生對應的晶體;也可以直接吸收原生意志來產生晶體。\n\t這其中的區別在於,使用原生意志時,有大約40%%概率會獲得任意一種特定類型的晶體。而這將是你獲得特定類型的意志的第一步。 -guide.bloodmagic.entry.demon.cluster.info=惡魔晶簇既可以使用惡魔結晶壇培養,也可在獄火熔爐中用惡魔結晶製作。晶簇可以在各種地方生長——地板、牆壁、甚至天花板上。完全長成的晶簇應該有七個尖,打掉後每一個尖都會變成一塊結晶。然而,如果你使用含有至少1024點意志的地獄魂石來收穫(右擊),你便能只收穫一塊結晶而不影響到整棵晶簇。\n\t晶簇生長的過程中,會吸收同種惡魔靈氣。雖然慢,但的確/cut是有收益的。\n\t有兩種和晶簇的種植和收穫相關的儀式:孤魂集會和碎晶裂紋。具體用法可以參閱《儀式大師》一卷。 -guide.bloodmagic.entry.demon.pylon.info=你或許已經發現了,在沒有外力的影響下,惡魔靈氣只會待在它被釋放出來的那個地方(即當前區塊)。而這惡魔導能塔,則為那些靈域中的意志亮起了一盞燈——一盞指引方向的燈。附近的意志在這燈的指引下會逐漸向燈靠攏,直至這些地方的意志數量保持均勻。(註:這裡所謂的「附近」不含對角線上的區塊,即只有與塔所在的區塊相鄰的四個區塊會受到影響)。另外要注意的是,意志只會從多的地方流/cut向少的地方。若是什麼地方的意志的濃度比附近的地方濃度低了,它就不會繼續流動了。 -guide.bloodmagic.entry.demon.gauge.info=你需要一個測量儀來測定靈域中的惡魔意志濃度。只需要一直放在你的背包中,測量儀便可將濃度以五個指示器的形式顯示出來(在屏幕左上角)。潛行時你還能得知具體數量,但這個結果是經過四捨五入的。 - - - -# Alchemy Entries -guide.bloodmagic.entry.alchemy.intro=序 -guide.bloodmagic.entry.alchemy.ash=奧術粉灰 -guide.bloodmagic.entry.alchemy.speed=法陣:敏捷 -guide.bloodmagic.entry.alchemy.updraft=法陣:升騰 -guide.bloodmagic.entry.alchemy.bounce=法陣:彈跳 -guide.bloodmagic.entry.alchemy.turret=法陣:骷髏炮塔 -guide.bloodmagic.entry.alchemy.buff=增益法陣 -guide.bloodmagic.entry.alchemy.fastMiner=法陣:速掘 - - - - -# Alchemy Entry Texts -guide.bloodmagic.entry.alchemy.intro.info=我叫弗拉德·海泊恩,是一名血術士。我一直致力於研究煉金術的細節以及所有魔法中共同的原則——「等價交換」。簡單來說,你不能無中生有,雖然很多人一直在致力於尋找那個可以無視此原則的石頭。很顯然,石頭的尋找之旅並不順利,因為人們總是會在驚訝聲中發現石頭是假貨。當然,我不只是個煉金術師,我主要還是在跟儀式大師和締造者學習血之魔法,這二位在圈內業已是頗具聲望的人物了。/cut馬格斯和提比略這幾年來一直在記錄他們的成果,但是我一直不知道馬格斯是否真的記錄下了他的畢生所學——既不能證明,也不能證偽。\n\t我的這本書將記錄血魔法中的煉金術。從奧術粉塵,到複雜的煉金台桌,你將會在這本書中找到世間各種複雜的元素的線索。當然,為了讀懂這本書,你還需要閱讀其餘的幾本書,以對血魔法有清楚的瞭解。\n\t/cut就現在來說呢,我衷心希望面前的讀者閱讀愉快。這些書頁的內容,都是如假包換的真才實學。 -guide.bloodmagic.entry.alchemy.ash.info=奧術粉塵便是煉金法陣的基礎,而煉金法陣(為簡便,下簡稱法陣)——一種圓形法陣——則擁有多種強大的功能。合成奧術粉塵需要用到獄火熔爐和惡魔意志,關於這兩樣東西的細節可以參考本書《惡魔使者》一卷。\n\t/cut一份奧術粉塵可使用二十次。對著地面或者牆壁使用便可畫出一個圓形的法陣(如果是牆壁,你只能在一個方向上看到法陣)。然後,對法陣中央使用合適的催化劑即可改變其形狀,當然也會消耗催化劑(即,右擊使用)。如果法陣沒有變形,那麼你肯定有什麼地方搞錯了。\n\t在觀察到法陣變形後,你便可以放入次要物品了。合適的次要物品會啟動法陣,屆時你會看到法陣開始旋轉,並開始/cut產生各種變化,具體變化隨法陣不同而不同。\n\t所有非合成的法陣用途都可以在本書中查閱到,即便合成被他人強行更改過也可以。對於需要的物品,它們都已經過排序,按照本書給出的順序放置即可。 -guide.bloodmagic.entry.alchemy.speed.info=法陣:敏捷可以製造若干氣旋,並用法力加熱。此後,一旦有生物走入其中,它們就會被風的力量推向前方。此外,它還可以免除所有因此產生的掉落傷害。只需要做些運動就好了。\n\t漩渦推進的方向是陣列上箭頭的方向。\n\t另外,相比於直接走入陣列中,從高處掉入陣列的效果會更好。這要歸功於你掉下來時周圍空氣產生的流動。 -guide.bloodmagic.entry.alchemy.updraft.info=這個陣列使用和法陣:敏捷一樣的原理,不過這次的方向是朝上了。自然地,使用陣列時務必小心:再下來就不是易事了! -guide.bloodmagic.entry.alchemy.bounce.info=陣列會將接近中心的熱量集中到下面,進而軟化地面,並最終轉化為一種由碳和氫組成的橡膠狀物質。這種物質會將生物彈至空中,同時也能避免掉落傷害。潛行即可避免這種神奇材料的影響,當然這不會影響摔落保護的功能。 -guide.bloodmagic.entry.alchemy.turret.info=利用那些仍然控制著怪物的惡魔意志,你可以控制一個骷髏的心智。只要有骷髏進入了這個陣列的覆蓋範圍,這骷髏就會化身哨兵,並向所有敵對生物開火。不過這個法陣仍在實驗當中,它有時候會不管用。 -guide.bloodmagic.entry.alchemy.buff.info=經過嚴密的研究,你發現法陣擁有強大的應用潛力。迄今,你已成功製造了數種陣列,從加速移動,到初級的傳送,應有盡有。但唯有一種陣列,你至今仍然沒有著手去研究,那便是提供強大的正面增益的陣列。\n\t增益陣列實際上是指一系列可以提供範圍增益效果的陣列。這些陣列產生的增益效果通常都有很大的固定覆蓋範圍,不受外力影響。然而,因/cut為法陣不會牽扯到靈魂網絡,陣列需要別的方式來傳播這種效果,通常是直接用血。換言之,當有玩家展開陣列時,玩家就會立刻受到傷害(損失生命),藉由此啟動陣列。\n\t因為使用了直接獻祭,前期使用這種陣列會比使用其他獲取增益的手段更經濟一些。距離,如果某個印記可消耗100LP並換取10秒的效果,陣列可以以1點生命的代價換來30秒同樣的效果(1點生命對於一級/cut祭壇來說是100LP)。儘管到了後期,這種陣列就不會再有效率上的優勢,但因為它們的位置是固定的,相比於印記,它們通常會給予更強大的效果,所以它們到了後期仍有它們的價值。 -guide.bloodmagic.entry.alchemy.fastMiner.info=遇到大範圍的雕刻任務,有時候還是自己動手更划算一些。對於這種情況,這個陣列便是你的不二選擇。這個陣列可為10格內的玩家提供急迫 III的效果,消耗則是每30秒1點生命值(半顆心)。因為是普通的急迫效果,所以它也可以提高你的攻擊速度,不過要記住,別的玩家同樣會被陣列覆蓋到! diff --git a/src/main/resources/assets/bloodmagicguide/textures/gui/alchemyarraycrafting.png b/src/main/resources/assets/bloodmagicguide/textures/gui/alchemyarraycrafting.png deleted file mode 100644 index fc3a6eabfd31d2aced9e8ca07b3666d390f9dfcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2464 zcmb_dc{J2}8~-tOSDF@XTuYiesXP|e9rTIw)6cw=Xv6t98d~!Dslh- zD4=bS=Kw%V1jPUuDUtBNJ-a3nQr>nbB=BG06%c?|obMB9WW#J+@c^)kv2(=&`{HFq zO6hR4y_NL1w2G3Mu1R;bwa82tjXZrma&UfR1nc}ojlmf^Y4BF*ctC8K{;QF+-8siW zA9F91I_pEr&d(06D$eNjm2mz=P?;Tbvj290*t#7{=w>S1F186G8WaXTLzvA$LJDkC zHH{!(|K=Ol-|L+#LgxgiYG@~I@oZ$g^O~tX@XPR43ogWvJ+_dfQ{oWwyG4agLj3bU zBdrdth){hiBm@jzS*fz=p>YMDGi_3^^!f%6J($UTr@a7yVTZ2I^crJ{5p&VVG^E$HfonTJefx!<-ebe-!SnpB3ucJ7#-WcOmHh1}Fd=~$uQ@_f_;60p^2xVu@d}HP$g;AOs4}eEQ;&kmY=<{HoofEs%6}a$FA>JkWgsQD#!3 zr@x|`$+g4Q{l4yRzTTPr8%aXb(QkWs@ZatZtuv_X;kB43sZF-8Ih*FFw_SVjsP1T= zrw%P33Y1LW4U%4g@8@be3Rw9MyEI}$-2E^Xm40Aw9iM!E>V{VLaYA`KiN9WUVyP*c zeZoCc?j8`VvgW(ZC-c`P&<3Nz+1T9+vAi18I^j<6N?;Q3Tn^gdcGmP%;*4x`eBLD76xho zDh~?5)6B4DeC{^oiE|I9^TRG9qrS{~d5w#1inb}y2kuxqNYXlB=h1s!`gzr$4tFUq znkq~a%i4t#ZSh3>(9+D1KFT)|l65KqS`(7=W(z0aZ+(hfc*`18JbO23gfNt^sQ-pS z7BSWjk33p2w}!1B5oYl0kw|ml5WaTn&5d7D8rf2si;7Z-anE|M;WdIoXq=D*vx;ck z<=uh%%cOp-Xmqo37yz8<($uvUpm{~+aosd!4t5#p|no|y+S{}Qo zoOGq9e`HKK6|ap`4OSoWz*S|oOgt8ZFC0X?$4CVdV8Vp??M7#H$?#C%8)oz*PB4n9FPH2ugx`~&BVlJ z&hK?5F7O^pY65C`HAN8dQh6+>nvp{OilVah-7h6Gn2N{5V6i6d%Ny$tmB_BLUXrXU zG|y}SlOD8cX?q%Q8)l*{JUzD$7H9$?Ov=LvV<62y)PcLMEgu5Zme<_Vm-eX_qX-`-2QKXu#|IE`q&Gk zjRSfFJ7i#Sax#k&claM&ixMy@26j%ekr2$IT)vwDQa< zN=?_k^4cnNpoPT>A%@?_d`psLIdp*}k(27X0tWwMdPC5+#QscXh7o^K$9=K1lOBIJ z^EfV!JH9*}x!G@4Ywn{+CuqSi*262TZ(^b)p-=j-SRjXuYJ$o#y4s7QWZZNCQN;<4 z`Sqs?xC?v9!A$wU_(xxJYD?yff7_0W`;+F9UsJSihpEl1m-5ztnLb#IkV;e_=?9rq>j` z;s#B#Ve~OuVDPG>6S;W6I#ka#Y?1RFCciHpJ0jh?n5s<{owFJE& zFFmZ6%OuH&NMtq1m02)0QxlGUN&12_$%TO$p|XfHtErf2EsWG3_IqOIH}+4~Crl61 zE=_@~y;?Gs4%}eX>fAlOLyrWo`){6p0N4%G{m^*d`{&1&_+vu$O$co(buoJb7)yZY NpsgH`v@>3R`~?_LV!RTDO71Xb`i^1X1ofh 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 S{}ljVJHE5G&iU47|NjBVa!e=y diff --git a/src/main/resources/assets/bloodmagicguide/textures/gui/bullet_point.png b/src/main/resources/assets/bloodmagicguide/textures/gui/bullet_point.png deleted file mode 100644 index fd56d1bb0d67abaac3273f095eca6568630f53a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17840 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 diff --git a/src/main/resources/assets/bloodmagicguide/textures/gui/soulforge.png b/src/main/resources/assets/bloodmagicguide/textures/gui/soulforge.png deleted file mode 100644 index 7ee6acd20f42d4c7b65fa13d59cdbc755586359d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3452 zcmd^>`9IX{8pppg7}3F0q_Xv##u5!uQrX)ywvd=J)?)085LpL3>cLZr2Svt`NJ6p< zF=N`OY-JmaF-c68naP-DjMwp&QIsQUia&|UY{TC_jP?<_YYULi?f}A{62XA z02C1C&$s~qXsZMP+aO!XJLXByR)Sn{usZ`tenkbLwqQ$t1 zQmJs;9&EAycllHLwyCy%aeqqPTZM%`GP}gm%07;YQ2%k$9Uzl_s;dQ!wrw*REJNOj$Qq} z7c_qNY9aPpOV6^Xh5k)I>{bp7Q_fn(4eEOpUmy&WC}-{4li&9c(#n{wP(Jsm@qhimd099Mz|W`6SYd zH#dZdd}8^Kk&=~RGC6m6lyw(dpvdJvc$GSXQ()#uz#A^Jb(lamMy6JRd+9iD~%KEgv z^)VQ5EOvoq9b2ViWmKpoO@g!v4+NY@WiJ~&5$*?$h2ybyUZXd&fI=;`>5Z|mp)E!N z4gVCy7YslA^d4#G!KdFM!Idm8EXZ1>-wus5eUf^PqMRI? zjvss($;uUf&KX9lsd-*n6q{=eGOhP4jQYx_@OVkE~Pxz(($OSgVI)v`{-!ouS&jDY1v4EiXy?sLc}W8#Q^C7F*n2{7N(a+YOn_CUg( z^?NQ9o??wMwYNcy%!z9?9T z>k%u{T->dJFi};-`b%=SVu6&Bm8!w~n;zkzm_iAzT$oW1^}KFOc-EFIRj5^Z66kgk zkJqvTE-HaMRRJuf>ur>b*UD{u1#90kn*ec#ThzPo}m` zHWP&*r|Smz6opKie0M*Lq8V}HYi_^z9|`KI86TCv{@19&kk4K`iSZ%HrhT3RGwpcK zqZd^S@RJzeICi?lE}t`BS&4KwgeWU3TV6ftDR}VU@bBc1X zHQ%hh!G_ZNal=NF%o(W#E!n$ifCYClpt%`e%1(f<3s2|ZsYy00oE01q78-gF#-Jvb z!InrF6c~aGE%)tP=mw7=0cH8M!!K)Uu55LuNqXF0JU$y`SU{c#LUEW;E#B>T z-bG4&DcedSJfbGONH`tue3{2|_L{!rb;41jw9GX3c2aL&fC`O4OA4dSKFKXdyZOjl z96fn}Mt8_*LMr)-krvxt%fN**>%LRFv5k}L070i_790<`14)^GkLlLZoZFt|1O*zu zb{2`(U1MXMW)+bRmQsjsqQu-~e zG-N*KI-WnTs*B+_!s@0piZLejlAL#)+4T|at_=+h`PECIqihT&9Il`Q3k|tG*3MZx zL|9ye8(P_;2k3W>b^L^wM=II0%l>E;&8tUY{nGg8v{4dD%HKBEZ%!f6dGm16x7b%gNf#c zScv?zYy20mC9>I!ano0HYXYYD=zg?G5SQ44b;)nNR(~+q-(T-oTr`~!(RK?Y3xU88 zWFIp67F34v;zFO7@GVq3&Kal3D{s`AgsA05|#nwbwDHZH%*q#7mA80B7d=K zQ+r3DuP2J{DUKk>G&OCc2%nM0nM&y@(xg-#RW*DGgXQ^LteinohGx5P8R1u{hX~NHLR(X~7JRKbbaE6@&+fLnJlzdDae zH0LJHrU@d`)=6$4m(W2ho4@tVw6sy;=+By`*j1{9zQq<|zfi@Bk+hLrfCm)#kW++* zN3$$>CCzxBIr4pE$x0MH$`qb_EF2|XT-?aA(b3fnQ0YP*nxs^fnHw7jV&cm(R_BTVn-6#9C(IFiz0u-twvLAED@Z0)mGcL>A|GTd> z8o$!cYP7pM;|B(iwgBu##T5s?xix!u%Ht_vR`7Piraoxn^I)+5J>dA2zE4qe!?%N- z`%vy?E3BZOO?U&QbD?Ha-X#~_P-i$~V(M`B-u2*}p6sjiZO5Yw{R0DG6H3;y7Gsa4AJ<7iVa%

    =l9w(n_q?bH8So{hxGH_uKT!4kFQJj@3n8~? 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/jump.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/jump.png deleted file mode 100644 index 117643c7c94303e48c2c912ed3cab15b1a3f6983..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60507 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 Ef~$+yM*si- diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/lava.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/lava.png deleted file mode 100644 index 98eec256574e5c1fe5985d0b3d0648b5052d4b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33923 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 TAVo;l00000NkvXXu0mjf84l0Z diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/magnetism.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/magnetism.png deleted file mode 100644 index 1c864edce4ba3a37c09275bd482546f57b1d8f3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74168 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⋚f_(&O&`d5QUO8gnWZV;AI9vL|99)-j?#7*2=? zKZgP$Cc;@Aq1TwR{d+9Yg$BuZ>;-)4Ua&`q5)ROLgLCl1D#X;$tkzerTe1cw7sGg&Fo5G$ z;Yr@BR;PHx6lJAo?x=IzlX%yN+2tq_G#XH9wrsOmbgFxq1*}2K9!(dT5g4~V3UAh zUSgr(A?H`TJ;6fA7DVJ(N42r(%`oOt0^&9T9%5ERJJy4~uhIC`X(?x)sR&AI0A~Ro zp75{U0!r7ivQ2Ib_W%WR4fE-K2+LzTamfKYjv-+3@S0qe_5CaR*%vR6Ov-1`ykE3+7MevU+z3ls!66>&$B>k&~GUlXMlu!H<0K0LBdE z6J5%#g6RaI)I<_uT13QT(37D7Pll$Ep+02h3ZAExz@i!Ny+qH0>`)UeECaJp#2*te z0WpTT8uJ-37Rg5fy&frg%Fs1YdHkAI=|ZxCsUtJh+H5OW-8G6fgXmen8RlCep$4HC&%zIPSep0!ykYAlP2fmSTY-ScWXfR z^yBkpEJnC}LI}WZs>4oeVD@V!GgY`8qH|o|X;Qq4HfF-?pJZZbcDE#HQJKmNf9gBu z8ak@MqN;S<(9U}O`uYl?Z6C6NO5`<`ZO0AUZajzURF-Z?QYl@lS?It!ShV3q+f~+N zNK)@jY=i;ims?3 zPna@291FRmzR>3EL{R6Gam-|hW*~(V>0JJ#5PCQ}@h1ZDf=3LX=ultSC)g!~W$KQw zBpl!+m(iHNP9JksWXu=!Q~}aV{lnj`uNjigH_8~mml~$iuL9)UoQTZjCHj#qf?2rO zUw`r9Ykr`QxU}|LeF}D*gIxy7YF0B#^AD{_g$qGJg2^N`VPXEv>D&G}T`ft5C`}2` zajDGZNG_cB={sy~Nh%D$2|zO%!Kfg?i<)T4qDt;%c9AUe!ATvk`N|-uxS*dVVmh=%k@F?a_(6v{wwnQusEFC|UK7gZPb{$@^ z?%E=nsLac^7g3zd!Df@A5~M2>`pmF{XS7czMI8+J_h36&GuysSKIYfB5g*>=!(ahf zklf1$y{44~hueGRLd2*8Ro%2z#Q7n?mT#L6Sr3pDshyNbT>tM-5TG__O|H;i>uTo2^Nn30u zw$%7{MaM-$@5>v}e!IT9xtafZrls1a{Wiaj?Kf{j_5kw(tVmc^ew4fq^RU>(HA-U@ zC2YFvIerU}wA^N$i!F$Z?fB5-VI-mefltRgq(wv7PlP4Fh{!pS7{U^wf~i4|2)Zi) ztl&g8AS-y52!~?+_KBIugzA%m`{bk(*hD6?WFv1XR}zEUEqrPRs8p-MV$C#6>2TJ@eπf`4?W+Q+wN4UR|TNhmf7sF=2-JG)?5|7;{J(c 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/phantomhands.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/phantomhands.png deleted file mode 100644 index 2044d3e403bf67d3a0eb788ff39f274188384743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90184 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

    @J8%UKr=XpitZAHy-3fYTea`tRL(?o=uW%P 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 z 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 QHUIzs07*qoM6N<$g4kDfwg3PC diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/expulsion.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/expulsion.png deleted file mode 100644 index c85964fc781952c7d2721bbde3dcbfd5c77f3113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41196 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredearth.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredearth.png deleted file mode 100644 index 26bff791054aa5f3317a2d705244b396b93e3960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85440 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredknife.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/featheredknife.png deleted file mode 100644 index 89a0e261e0fd08113ba6fc6fe6f13420e0895ed6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57026 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 b#MS=+4FnM5ZQnqd00000NkvXXu0mjf#`d(4 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/gaia.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/gaia.png deleted file mode 100644 index 3efc61bec4affee2d6d8e676ef9033eef235ea05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73058 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

  • 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 diff --git a/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/ellipsoid.png b/src/main/resources/assets/bloodmagic/textures/misc/screenshots/rituals/ellipsoid.png deleted file mode 100644 index 139bf18125df970605dd8a876ab152d33fdf9e0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89596 zcmV(>K-j;DP)@U?rz9dHSaLR8Sy*U?Ky8jgR#H+~ED)a( zA_@r!HxaQbI2t+>wJjJ8SyfdhAs}5b6<;n6VqRW29uE|OszW9eCm}^66bxAm6f`9v zBn)$4U0qo;AQ%Ws9t>V>Y-}TQlr%g?B`h`yK2a(Tg$^-5M+gsRV`FJ(XhKa^Yz!Ae zS7etLCJkD43rk`$C}wnXb8L-5kRB^jY%^1BGf`?XQfo3%X);o5Gf!tQP-!tvW-w4_ zF;;OkPGvAvZ!}eIG*@ypSR-!W00CS#Nkl2=tdhO|qBv{Q6M|nE-CG z^{KNjpmTvV<(#)|OYJPn(t)6|bohJ@SjvFU0dqsNEJ;Alg@{s0o1i>EVgU_yz$_p) z@XJgzK&|}q^V1NOQffO56{2M+&*y+rwxJI5KvK3!*#%{Zh>x}>~P-t27!Y+L$GDG_BnG7&9V9yui`D`-R6aX)$S^xSW|G%%Ww zN(1Q+=qiDNaRhC>tI>yc_4`Zh>|Hffh_sLTD}7|;0Ms|6)IU*|&(!lcJE}rL=b#-S zfhHuZ>wt30hSpQvbv1R@lK^eqWb3ljRr1-^rAU6%oYr0JeVx>meY`s1)z9pwgZ;d- zudgl;!q|3UJP-HL;l3?Wpc35Bg!cjL$A|rjQZRXoOYT?4y&8~Vz*5R6tmMbS2MOzX zMZ)tayg1Rp3sdK-2am!7)Gqd4c(6gk!iK{8Q^SOC844$X>iuy@|1gojYQFA1>BqRQ zA!R_h?@&;bW28W!r-0e|k8KF%K|xss=G<$E|Ei>n7%=xEPq8`5UlayFH%>>7|e zgZ%*w`$$3rFnRXjK|rRKIhk(0o_+j_kMlU5E0M~5 z4n-Tp41^7A8px@}gIhut&U7G6K$7!VKpKAg1ksGImx?kAAJL8Ch%MW3C`kC&qqEp3 z2)j{cr17Z7LVq^Z?P^SjV-p5~j3LXd7Lf+gkui}i6Sai-EY;J6B+$XV7p)l9i5W+U zOFtkAuG~n1dOt$HrGt8T;Uj;m2EkWijOmQMz;4H6u1_Y53a)?eNYs~OgRw?EB;>)T z32nB6V&qty90MDuKWF15Y=Q;B5E-MGMw(!%4>`#}rT`$G#v z6)iBe12*nk2zrS590dV7J_fYF8un)nruea@D3%v-Br-D1Re&xqsOQ#O@JN(9Wk;q-B7_ZD*TK<16UfIH?P)~CBYcF++1ln-+jLr}k!!k~AkfD;mf(V?y z`fPw4V@#SS2zm?=1uF0aSGJ%?MaSGA=^Hf2oQX)^pyQzdya7c?z@AvAF1YYtJ8``= zWU$x7D-6&ZgW^H3RC$MX$d(8;11l81Ne0J6b!r3?6lNA&u`GuqSg4@9cTzhfQYyL| zg$cNG5h~!$1)YdHK}9Rg#-7l`#1|by6B^k_uf3D#PsEph62un_TEkbD|DOoi{8Dbx zy#f#mpQKp$V=f4u-v0$pJWPCJt8q+ZFyY;49zfkn2yhTK9$;`xVppMpeJiR7OU1*h zbH|wK*=97WNJYctYajecdG`Zb*u z8y_akQ+z&A5o5-&{vT(8HBpmWrTC&6quO+6%%_IDMT!oocD=;iXKqy@YOMs7ocYR{ zo1K_w*9Ythk5uVqlHri-U3Os7GxIQn$+2Z|hQ(Jhwyy7j%zqNNX_q4Di0OGaNUgBq z&CMDOf*r@Frt*-L2M)1`n+t|Rs$g$dOjp5}t|U16)wL7-8pEUB8P-hLYsd1nhvF`( zTd(*NFark+jz2EOa-qz02&wKx+ zwjboHu6Y zUAh?=iX8*Xp1Cq;fflV>|1)weOOC5bkm%KoiST;9qp&D0WnuG;uezf2l*ZSs<7G$}pbPGkgz^Qw}>(M+}p!F=H4vp1q3p1nyJM@SboY+BZo0~n;qA; zURl^GT9jGt9FafvuW(^DT^q6I81Px@I6#^0n!KY~?70fcaJ)5(g9X2vAUX-w2XC9R z=#Qb&tLS1F7%I;PR=yRLDDrp^7Gtn$s4TeTrdMQu<-S)2ZJ#r;%pGhTo>KDcy0h4Q zwp}i{!FS!;_jqN>Xly3g{sxo}Hev()rB}WKrHQBv-j*h=xaWWhRdhrpHB?fn&61KX zC2f{us0>Nywppw$-+AuQHOoKtutkGDpiKkJtao#Co`+qhAa&M0B_M9z_&b}(v0R%E zH5yvrxB+DuKyfoDX#gcQRANkt3}$-Y0yhIt{wgX#e697n5H{n1QNUOQrJ?dD9A;fT zDv_SMS!kY7nK?X2u(u zsw%59Q+`t0X(9qp(OQ{-l5<(Y<&WAeVJRzHj7eO9Y3!EA)Gco87MGGtpnT@AX^RZn z;@`AIQTb#<;kR}%alL1;S+N__)_CL+uV_Av3;%@4W^g#Adk(vYsf*S2A+%XM8d96(BMZ|#i%nbc-oljeEg^L$ z&J&H@tf>}MfynG9GbA&Er)|^ew7zC_3CH`3NTrEfRwrH(Faad_9g|>~2r(gax#_Ae znB+`HXET71=OdKTFAh89Fkc0~PK0lf9A2VS6916IC@%KJ;U?Am-{O&i(v8EPSR8F2 z9^&)|FSeL(G6bs;iL1#bWe%N{Cx1%RzTs zNt;97VwA)b07;RYWA>3BP@dY1N5cd*jFDKZVX_+WW56WA29~Bd4HFx2?xl6GsOTq9 z#*Wc7$e+=8o^veHxPL?BLm%F|$?cvKyifNWS|h$*kc)t&#uC2v9JYH%l0u>$=&=ME z{#VL#j(5lSOtQrI-%&7eb&t=U#3CMJ=%yszz&~G>_^k_*q4?CwTdX|B>ku~F6(tc9 z2mQx&LL(q1c%HI2nY8w2TAyf4O`KbXG``hDr>Dxi_#Yo>gZ8a7EXlUa&$eYY3AXI3 z_i@YBf1#>ii4>M}SxG{K&}M(dRa)W!NE}!6WB}+_N%T!>w+e}a(w-rJ*dQ@sl4$zohSN z-z2l?&iN$qWLbMqzK13ZJt8fpL&-K(GOh*iW&=s2Lu9Fl_~W67pcv;OmLz~D)Wp}z zMWL3&buB9u5>yyGOUo6(g}UP%HNdl!-kcL!CUk+xS|)?VY6YldPS_Fl>}^U`W{c&y z=@sICh{-<+qfuK)I}Q`_?@#;1`E(6{_}eLu)<-gQBgL)v3A``cP!WJgjxoDtey|cp z^C3sWvi$i|-oJAdBp|Xtc(O{Zf3&=GG;=1gbDRRx?9SkDmzZJ|+iigta4qWGv&fj4 zLTH&uz~j$qYdoG))9lc=(S7p0+3be|W(}x1>nG=P6@jce)&LPpBdJkvK@9O;d$h034dTKjfTRK9H+4*J)b3)_INCdv?N7ev2j9EAKIwyKd}b_C z<6#Qe>~KnuRK{$xYJG=VpYmD(S)?iLvjGx(YDx=`s?xq7weXD~pllBBQY)0&02Kz? z5&vRbmHI&J&rv{fi9FK)gGNHrv_VLO%(h8L-N3}wtJoT~9o2T@D^hA>DIrwxnr?dT zP9>$v5czLs8Y#^JX`_K1IICt84~VuY1dU$29dFvqXAyopOq-@YX?TR{d}QbW(lCoC zLn>*&kd1J^UL>jj5V#)zp?`0i14e$uholGgAS_$29`{HmweiUjvS+qcxh$jBQah~5 zxYZPe=cyfR)ebyr@YgJqXZhJoe)?%BMsi!#*2bZ4w)->>-48@c?m@A?RkG)ak56@g zXu(DoEWs)qy2$)PUJB4yiTRhPQ7E+rPT8jEp>-6#-qsZ+za@%s0DbPl4SKGdVl#t$Rd62zk zJ)5e#!zW=q&;ajmqg0|-wh2&pnx#R^4xnqZFwpb%YY4o2-^2l}2yr~>VBU>^;h=gIT8=`dX~0AebPzhW?-}zgkK>@S{(4mukwM0`9j-dk=i%WGA86# z3$+xL5(}-|9t(Zvc4VOKwA+*C#isG%uv91fA?ETkQkzeXnS)$fr?Ty=5Vx{DE zWTn**1-4D6GusxamBuw2xnccQM8VP1C?qLo$5H(6e>No5w!h@o*uBMf zc02EQB(<=5J2Fd)QztaOY!x96m#Pcf`(YM-pbMON)C!X_S^E$s!-|>Gu*V!IV0_I> z6EIh$WHiH>F`kTp8v+g>1UL#2>4s~79crni8$>cAODy{{ZfE7TQ*NV88FdrZKo@PM z6{V&?a&IVgwNgoLr{p%HFctD%jUuRVbC8|muCW^+DZ5Wh+j{s9{q^GBEiGP_Rzn?8 zvDrbK86j>9I;ER(hi*)FyzQFP@hLIR4}-ca*rMfmAA!b}(%>;l82wjtsb3@v0y`O# z8n@S+a;6-SgBV2B4aK<=y`>24d)#vfE~T?v=hyYbn%mD4^1HmyO+V#>l3SGAhxuU$ zPw~*?!MM>*sI@vpt#z+(WMj7tvXPO)*LFhNY_x9Oz1S%0TMBFvZ1c7av!W6lL?zRv zhs1#8ER$6uY+n=92@yZlVBmzI9Z@?z+{QvW%xH!0eA&4{jVqVMsC9tpF6w9q!sKd( z=c}yctO)HSOwrqN^Lm~>>_k!J_kX2L&KI0kC)=Ds?qdb^F?#4PnGgA0LGD<|y{rB* z>#|s|Tm3MgSY`LB%7_;sx~1ZIop{c|16_Sr&&Pt)Fa|twC^8 zA?pJc@U6avqJqO6IHMq2><)PwxAcyu&07{$a7ly}0su9bpaw&L&S(x3S1KCfiqyCg z_T4kCkT1SqLB0SX;|m<}rTz8v&Sk;c3NVRAAvXkYJE)E-zYidU)VC6n79p$tibM(2 z-_qc!zge8f`O)|RkP=qUn{I8$t1u96Mfv#T6j5?+&MspwMCn0gO@^i#}5l`7Q{RRh3^k&*1&{w}jwUpwaZVA#~|4 z`=dPE`#=FkWTCmYhVpU=uni>GcR;xr7b-;N7N)>$ytV!}yI}u+l3+eE=pYU}nLd*J zwr|v6M`t6>d?<~3v7;{Y|HV7f*;)G?Ljdp_7HN+bRyev7AXoJaf)<%pMnS8}6G4|m zx-|I}(1q_deTxKEu%Zo)1E|Fv5rNTyJKk9z^kfScCv8 zLQm{(5MU0s+EHp3Uo`ZTk{Y@*Ls!3028gBg>KAoD?9Q&zEdv6|VE*u9{;-yc94)S4 z{5ru-q2y(Ae>=mD)_lZ=^H;F>i%?X6n*W=e<(Px1FT2n53|1KB(z6|U1}soM*y8sm z{|1?)Z9ByuFvzl>*IDjl@2o;F%BuG~fqeScS{6-zS@8~u+^`nH$u+e|(0fJMV*nPo z&I@Z0U~8#r-g1}%`z`|eeb)@U)TYSHz(7`Aa^e6_uSO1tX|OX5e%@)YMi64rE;Dm% z_&oEF&qj6diVtdp`w#XAHPhZZp=Lhk6LRME8#!}M5JUa8UI3BQz8Yi$h!;BoRM;yy zt3gKRgbukUU_plr`n%w;?;MB(BLyG(_pg*|u(*nI^mosToqNW(uZwdD-_#PYmHd)h zOBe8ko3sp^3ER3F3u*{HIu`5`3oL`&v0!5e(NjiJPVvL!SGp0_=g!;r;SF&;3M%g8<7Vz^~dN~p4m*E4G zG`lf>RDAxzZ{XA1$^lxGaE(!NWr;5UbONAV#GhYZ@_h1_1sMPx0BGC3j`Fjyd*F~n zX!B=Em-p+~$ z1p!)|TAlK~|GfeybsK(Ta-BK0beZ3xv%wRC$7z_U0^#{3zL?ikwid5x`9=Ky8M%5U zSCJ)K!w`CEbwEG;l?CYTtehL8?jBWgGS5fW zz0Cn%el0M>M)ffq42+K=nq!X7r1+?VanAA7Pwdcv6P2n8iT~vOYI!^!eb4xe zoW^9pML?OEUdWo6FJ7xkZPy^joR;BL@W~7e*U7FX85rR6c&jGigQjKx(APOWOu(WZZ+rk_h=R|=jIt0d3qCUT$O8Ob zI`)Z|J@u7me8#M=1Ph5SM`v7UcIig7#^PoxCjhS@|A-$UkK zmKm~pIZ-yDLqBO&EnmNQfk*b0q-9d2FVz3P!pUFu2Y6~Tm`pr2K5-NS6QgX96rKVT zNBFQ#$Ya6>(ktL}AkV<~u!wk-O*G%sW(tWzDlO-}xRcFM9EMMGKd>`aUM6B@7SrXC zT4N&SE?MK&Nn@c-C1wC*-dOV%y-=MpGd@=yxlY9MeL=^dg#fI!;#^gRX&gAy@$*BFU1V!xy1`Pf*>%Q$(?%Zd*_jCjO{{H+bXcMeBqH%lis zyBXxivaez5B* z@KC&--?mTTfpsHz$lVz)xB1``Jf8;N&W_HavwtS$rwYEEUGz?wIUJbTI1Arn_}JFi zsG0MNjDAkdC#&Mo34@};4dOR((P}tdRLLCQ>&s~tblCj!{!%+|j}GVyCB_cuP>ENT znYaBHPa}#nTIgqTV|PAkiGxlLZ9isik&ZrHr-$HyAhB*lgC~p}I2_`zdk%3vnswZv*Keri__AgS50Y~<`X`;X|YupXC1jK zI&ibI<#N>9J>4$Hr%I+dnzen0XGKT*PtaM{&*%(8j*f8~!^4g_8an6Uxe+>}pBWvT zMgD0ek41@3K#55<0gQ8VSq72KL3z1gYp=ZAy8Yz)^W=Z%t+Qc1GjnImY@z~cUUl@> zRcXtX*-Fh8#mwvL?3;GBM>lD!CE;cVaBTaJAI#S=v`n+;tVE#fkPDAfN2A8zY-w`k zfv4F~TUMV}Zp+ZY%y=*8gqeq@eGd<^9l67DgEX);^$ftXh# z=F{j4JiSkj`5%w3mRTbWWtvKN{cRSN!!yrfubi6I+vMC#vuOKdxzJPb^vSWfoVpbp z{qm6;{-ODz`hsYI;3z!CY+jiyx16Wh5p<%W;}spR=!kFP^2QK|Dg>Q?2OT31PsNST z=*%x29(ql@6r(n!r>>(iK&;e?jMe+3YVk_l}ww9y4XVQuA(^ ztgh_W+-!b7oqw9r%3sO3VRCj23#;y(baM2IPEEC2b8y(SEkq5&A+Dh*v^cW`N8LGk znlrPliP>a!x@>k7onFwH)9ffZvIwJxujp{NLZgP3_4|E&8i<%DMdyj56ct*bEKAg& z%p9nIDg>M%@Jk9viF4*n6Ut-1-R7&NUTBh<#7uJ@YW`pF)M}eYi8X1TA!{;JK90Lw z1FdAY337qkRB-&xZst3h5Y)3p^=z+m=V@HiI4!dC&%`z}IIqv6GxO-Q3eF_pFeC)d zjnTOP3ZN5)H#%jBiZ7Q-anQ|eLx&1F%FOLu(Qz)kcXFuzen*v4LdRPVQ7xD zpnaEx>26;cZTphySRUxb(ik`>O?ZtHUcQmwmWcoW)t}w0Vf2M7O4gdqUt8V z>1Nard5=C;6@%0B=LBv$s)35zHCU?+HfasVM!ZR{#ylPI#v7kNFmD3u!iD`|oaa7lgt_x&!Mgu1rIQVqDD|L~@CUA;Ez`=P1 zoME^@PSKJng%S)qaJU141|9so3)W%kr9)91y>vi_89IGWM!}I^J2`^S=vdg1UBOe( z$)V_valo!11jU94L3$p^6}Ja8L-oLQqzFf*-X#Is*BOJG~5W7z3s{xwST1;&s^X^T6@KoCVz zU-9H?oc&jk$lB7IdeEL4R=1w#bj>F8b5T^)u_(<5LTYM5Z)QW&;H349_|SC?^e$u5 z88*`x!mtrG>_O2!mrIS=!IOZ?)0_iC4s4pHXUxFfm0+{U_@|^(QHvR6N7SKFXB?B; z>0(|7gJXg!;3PZ!%1wc#H4`2IN8_5somS&c_2M1$ArerVisQ*`r?YIDg`a8K?QJ?U za3>F{J_ikVHlYef?RMSe*X$6HlS7L&?uVl(?f$k22D5`>UKWNX(IVa#~+!1hI430N~V@$;G=mPPi zskZ-=-#8-T+X74#LD)ddb_LUEq8Bn>RDHz zAsGa#$3)1C4t7(}`4p<+u|2O47jL5KnC6VRXIWI~9(10R9ipwNXNlX^X*^7MHK`oapllgB_W}(*o{4Vk z1sambwoODwVi#io9;EdxLxbl`)Ff61+&e=tE*G-OUteFqNaZweLta=ntgv;NUilPFV_9DraMk*qt&oasV;s1kL0e`nkbd(mmhbgjvY-G%{)Xbww*PX&(f2 zGH8?@D}Nk1Z{5#5@eL;TH!gK86Y#cw>gb*%#d+R z+B&ejWo3<$2Zyf`X#;4gA8+^k3c!$|!BI$07ZKD%4ZtlERAX)BhG|mP7DbhB;c{@| zA&)`owF9A&XuFh%0)Xk@p$PQ>lRm*$b-kQwyWM{j(S z*G{3~DRk{pYRDI)ra&aC8XMHn8O?ESP?}2;l&G|2bIQ;V&k1QOG86Q|)Bggc1V#oY zScJ9t!oXOYl!XM9S-T-A0c#UCG!1IJ2x~KBO54f}Wuk4bF=!k?-n3WT)swt-kkys0 z6?5L6-&H+dl~ zxChc9d!C&&)!2Zqn>Qtv6SkyT5@a%ST9!(4jEvD-UoHy`6Fk11L zq>=a^l>(V{t-rp|ZHr8#{KMgk(Dv8Y(B|B%to$p8{mxwztx6iVJW4>lm$S;9m5|pn$7*p4qo8t~UJJY<5u+yJp zO}i7z`4h{bjwa1gXvyi!a&fTM^%rJoSr}gZeNZqz=n}C&jSSN!9s77Za28@4h79GE zW&8ad-%ACTXq%Av21!USoY}#UiG`Guva8o=!dI;#q>SY0jJTDFsMG`96^ZWTI>?NW z(w+S+7dP8wYU{|3=Dzfv@2%`2=>g z5^t)&Y%R6U*X;(v{Q@#jR-8ec*iVe%c0(2Hfg}KL(6FB$3Paq5&!>2x2}9}LO55`= zv7#n+=o349SS$F^=pi8!liikOaEo!CT%KOdJ8*g}lSP$m-Z0@cO?isqb|GY!4*9Kv zCRnFjJxzK1RwvgMau0N5gm%!Bms`11M4yVVmG%?Bpa{u%<`{woJxL9yLk!TEMu|v{ zM~O*JM#(JD^F2#oeCK|6<3PY93xuI059D$W)F%(5CaB-hLs>F!+m>F|3X)wj7X;ou zh1X<*y4=-;Uu5KT_VZ808%Z!r8*q66=8vY@IE}l%s_CpYa^P zKO}HCg?gH%2Zf2oavpKqLpd%VrSESVr6rA$OQWQ~1OXmiJM1Zr$(gqbrq>i{LnBz9J6cgf>L_fEG z)+vpf5gLXfPp~e(WxY9)RtrV8XH0Bh%PdW-i4Fi*4YO^Nbj%WC$`Ytx$zoorU{7)4 zfVSj-oN!zKFyeq(<~T)GIPShw!%(7ur;$Ftr&0n)g*;F{JRU$7CNRj+*aN-3L~7Ud zauKO*k_mdiDt~?5E{Py^TI(JU)>5gpMT%A%ps3l=!tCVUDLyEH+QG^9zo<2$OQg6*gR zVOx_0>Rp))+2@iB%oYZjv4koup~&hjxQgYRRYDN8W6J%PuXNdk64B>6#AhT2! z)QO+W_?D^dKU#<~F<&W0$e0fkCWxhk!H78%Rc(O1Up?9G>6b~u*4%dbTB3yJa?KLd zaKH$FQJ5gWBuu>WFj31OO)^OFc6;z3UHck<(cTKY|MMMVh_@|N4o8A+j8j-?lKjt) zccCg`2rJzwQDw_m2al1WR$clobSH*rTTCQrEh;0#gd%*R2puJ&h$OaoWzVNp<~Szl zqF6V@m!!5Ad3Ix3Nb22doi>suxz#H^oc5G43^ON-NA=vw+~?J!28l`MNRmXGuS?vL zr*bdtR_|lEWC>Cv$r6~Oh7K04m-x*kl`QaCS5**3H&t$k~4-;>tfNo!ebC(79bBa=GBmU~ea4kor98wVC!D=k-B zT7Q_@njI&Z61DBsMA)v_{23a9)XwMN}#bWYFMS& z{3Uri3+3Y`7ZY#_K-W?^q67nWP^4)hMUpHL7WOBsNWP>wl0jP63b?ePYrBB6mo!L4 z-}$jZQ=-;sp>Wj`Yoou*a&UfZJF2^%`BC)u>m9%?OW{dtBi`heQ?czKn$g8-s-`Wp z#t}Z|90A0pbFekFRXc9AN#B>|$JO_l+}cV~=x@LJlFOI3-WEr_JtlUy>6L`Y=_Y%} zDP2nVbSW_boC^(>(KcYwUbA}%ocvo(9*%-k9t4RktEIoGVnyOC0dr?_#GaLzMDEJ3 zlyomu;n=iB{&EtJp3O+b@tD zNEQ!J2PpumO4PPKl7tnPCEIT$r(LuSQrseXD~M^fEj8QjZp>A&{z-3-OMVxeOs&ud zeWY+U2R|{~nO{xDP7JGa$*_{KDUW)P`a%mpbBE#|XOVE|=fJ>Kk#buLXImowkRk1?1P`7K@3* z_JRo5MVw#;%Rp>5kc5bB-x5g#w4Riv(@37%#&9Zb$JO20f%em%4FB>)!Tqlg3lB?_9Qr*`h2WN19LPp7Cmjmb_7<@CN~|5z5IMf%{e#B=0#()V+s3*D?C=_1kawWBmQA z2C0VyS!w|g48|ai`nTl5k0H%&>fu^2OKnF~HK}zeFu4D2pK?7w02H^r73Y^IwdCyBC zU|1EC6i66xLvn$`4F&QxqLN3xkwHR%vPS+|&*o3`R@|T6%8)5XG}et}ew}Wz^?BeN z4bfp0dDS7ZzpRlhBR_W83oq@mb+zjXix^RsD5ge@Xf135rr9H7JkW1$h-6zFrS&cH znfdpL&*MTnNz(j3TSH*(O(R%>5Q#f*otMx3VvU~?ox7Cow8(2<2)I+2ceOt0Fb z1>_5sDx4qb7-Wyo0NvW5AqN6%Vt+(})YnpBT1G?{FBM4%>P3NCp%|o_7^GGVlCC3e z>i$j+=_a~$GuG+6}&EWBG?ba{auPcd<9;p{<=Zj8~-muRX$4kFaTkP_=#b}85Rf#v6EMZ7gmx$55oMd&1 z7+?gq!l)tThF&s8RdL3^q*S!Ohd5U@MI18vm8ZxL&QUb!!jpKtYyGlZ@Tt`nSM(d6 z>o|6=ZhDazH1rOy?W3$-EiH=@ zwFJUs!56z+nkLg7$jISpW(c+$uiYdJA!;DI$~7x%>82V?GJ{TWGJF0|@BJ-+u=$UH;W%$ zGBE$!AVn|*NwF5mIf@;-$7>;nw7Q;cKr4XALc&jjY$PTzfgg3V^a;AFmv@fg6RwX`A3F=LV&)R2i0fL)rV>!c3rtTQn(@a9GWuSn&A(VSpN z*|w1ofh}1J1EdZ4Q4v_dGLNO@pKou=XP|h0fARMA=bwN6QrZJ2d>Nho+o7C+ghz}K zw4ar4rnRax$2dY{%ytx^wl`(AHQsKu)gt~)70O-1OL1D%yK#~i#Q%ny~5gj;89 zv*u;2Jgj+wPe(Qz+VdNTLS7yZtWjkZm`Wpf1mdi)Hyz_Ia-Owp6I;PotSV7ipx7Fm zF^-*MU#kKYw~;Sg;Iq61+#}ddrTtJBG0`KM%d0CO$-iDz6$uhJ6uw>nugF>}1qHj7 z4f?TBWJq|rm`RIbE4=irNNH_AFBW*^t!M3-a;$yiS-ba;^48tHW5@M?ojRCmf8|I6 zVB|;xtL;5WI@vM7WN;lwoCwz^IXK8Ax|4s?gAJ4|sVrCAeiDS9=;ee7kxh`y~S}Ub+e6}irQ5f4+;}ilys1j4_O3Ja6_p1#7d>_^T>S~4B zu3T*|07`Xe1zKVchD7`jn8ws!zGPV};8jQ^51JnL1c$v%`kuvot7ulVow3+ybUtue z3&5JS45oAu~I1F22r(bNoB!J*nbU_fB#VgF>c-jE57YOp&p*-v7L4Rx@S>tW=S z50NDpSt)4Vb_-rkK}a8ra;f)ICr1LTMl2znVk$zaQ?!qsg{|gUx0Hk+ot6O?9%`*w z@+2ghFL~INhJv?R=ebOywo>fKlmMK&N*id_JjsW)Mz%st#3XER9&&`&gn1CqaZVC| z-pIpPqbT-(!Nie_5hq3@L7;mnW%Tpu4C)zPcy;Zsbjn|8v7bl>mikLkW&6t$r&}$|!IL9{7xt7o39oFU%R+(;F~XQG zAxho|rO;xVtm(`;V}Ld~F&V#+qXz9b3`9|C6HFSw)!C;o5TZ`h3 z_@++c%|$k2#Ys*?gY;-tv|6x+Av7&@Ruk~P6Se#xv;qn(|HBv+fa8$Ov5vL?>nH}l zf<82@3F%pfH!K3Sg@+bx0cCdK0BUZytR~*iOFU%dr7BDylG4 zLQ4=51>qq;DqUa*L``P8HXf1CPIq&x)#~!nHOc$c>izfMKi-x|(B1CpZgzROdNzfu zMPSKs8ZBgJHO&fcw$r*)wzN<~PH0&do0arJ3wXKB9=y^@2c^aGZmrQ$dV@*jnKzh1 z>v_lEFpX4jyz(1UuJ;A2W?o{kAA1vR@R$Oi^{aRXRBcBqnQ1`v-rGTWsN;z6VAueO z*5F#kN0L{O2#Y=42Xo(el5hef} zBl!hytPTa?62h^^QBJtR-x70^B-W-?gPt*}dkL^bKIUAisI0cscUug(=kw?1^P9?; zB4sd{x=S0==(dgo&_^0{x4Y%te6`s)AYb0zFW=wZJqMc2Hk;}6{&_W@KRr>1%1q>!@Njy#t6EhJ!vEb<7 zlf|@k7hVeX7v6aJr;Wy}I|>i#S|Y{QBXInH&>m|*oTk187!-D;1Df1&f+ZC>9{-Qj zVo70)sF^^Zlh|O6h5l5<2d0+j1FdB#q2O8IW3bw@s8=j_O)5pn-dBt=vIG>!^K&6g z*wS8BBSwKWqL@HR*`m^fOGouq87Nit{X2ke(^w;HYl~vWx)-n4d#vYY#7m1$n6|Lq zm91G!Kyb?@x?Swo2<7lT%L zRqMT$log;Qm#nl#>V|)?AeiD%s2hv^)3UGkWi7+NYRCX7 zDK-&|aCHC|^f#)8ZOU*|$D92gn*Vvfe|f1&QOJM6riS*mbmf@!u3)`Wwxd|A<2p0kS%UN=Tv}*@ByUYjB9+H&V-$0K~T4p zPFE-Vrc;*OL3FN!F-m{^+V`A0#CfEFYz(JBX>7^9;X zPA6ui@&kBdBhYc6^>;p=5iKf3k{Y^Wy?4hrJybx8gp_tm8&|E+5>eBr&WXiX({a&+t04Qs3AA0)B#9ae^d~!NqcirWEw2L9%8m_kP9eW$ z%*xl-*VTT#-rViiOOceS(Me%>tCi`&4J0cl?SZv)T2bqG z6oplwWl+83N{p)^>kFl1^J`ttXsE~PrniBnYRxB3R*Nffb$H&9syuR&$+E-#sq)9GxsTuwJXOPpE@xEP>EL(rQUgp2A}1mHg&F0D06 zMT9R%8A|Cz2>6lH$As$>T~x|QvU^#S-W05v+tzv2rj|6TrSk4)Nj}O7TDl4vOolOU z&uM^?($eWS0f`WEpWjOxoy3#%LXo3hLrDx`TWP=&5G@sYa}1AFMntR3Ar+bYf$(S* zM2j#Mxe17tBwBS%>ZDa?57MFKtQuj;Nz;0<=+KH2okzUDg27cW>7`C|sp79+StsKE z8riS0fx?2%%!GS+0gwRi^>w|R?WapZ%ADFGJ=gg;>6aQ?(HANWZ+E-vhlhucCE$E~ ze4I@$Uta$A=g<3}Ow7wmN=)dJyWiho8%(dRc35P^UOuoX$NaJ<5mc*SWzpAhSDBbXwIqx7R4gak~02nM6rlmFLWJ+aPeiG^%RV1 z1htq1>`qaX2-CJde(d*8XpzW5V7HvHXU=A?uhZ$n!+t;A{P=El&>lu-hHw7?03RM_ zAJgT-$K&h{X3u;&-A$2_8z(iNL4Tk$-+%XQ6B&9po84coUY@+0@i{~bZrb`?Z}kML zQh=+Gl2z1h%dRmt(G<@uB9!yFe8gj|qJiI&F)A{~Gi!?4!_`*@)l5{`X?HneU%BIo=U^{Oeh) zcOR&&j|;G#>BsH?6U)oh?d@)QwOq|ln&j>drXKp`JGAD-#d1kn3|HalO;65GF7jDEb(595VjDO6xe zBr*X$O;rQws`R1pRr;jrLpMIANvJAi3JNC);nXO~dYvhP6~mFUBC)|y*KZM%eC#tm zw)=s!DTRGj8Jg?>vOzsOj}v40MJju3fRq)SUTstQg~|vOI@r}c`I13d((p`Q^)f2l)K85g8k z#ULeI8gQ908GceGTycn#)f6l1z7N!n%+$q zwp(9FbwE3`GQX(Y$>bMRk6(cvz{&tte3bPx#u}vg39Jrh8Gfa%r$r$u*;9po)7UqXxBv4g2L}}=vRGp%9GI1N1rtyRqJ#3f;Nitp< zoSx$w=@i+C@kaPiJ0zv(EOV=+WvI1o{RJm!L+uPw&!GZ<)fK)(J5QoFe*TNh>SYSB zDz9?MQnI57GmL;UIe?WU-i6@{q|}u)G7PhVQ{YhD+_0agag`OllSBc9eJm3}5K$V}67L?!tWWoyTts*1#~Mx&L8evVD-A+S0+Ka76?YO`7{ z0W290k_tT%qmH}%o+$;vflsXFcSU*j<>Pj7{jb}9?PiO`lPmfAv5C( zp&$+^n$j>q%?yMI;4`AO>=;X~rHX`86h&9zMeWFHqf7h(V95Lf`0979y&2oN=^Zt# z6T8kZzx_OWt@Ui&aPL4>1t{{GprUY1Mx`Q61z~q_iIR0O3TXru+N5iP0$oxlV+13o6>Cl!#ZWKMn4Q%7*&8414BCKP$q_afr;YX z5AZUQ){+CfXzwIZ7{1I586vNPtS2(kBs5I+J|)>r0gEh?alMFOu`?CIqYU*d`q$!M2WJ9MeQ=VX$f*kPDk>BeHNjqa z=QO+B5(SZAOn5a66Y+rM)PeGZyC%A8-7=3&aQ%W`b^I{~B(*ZVrr0E<*KCxk&FbeO z>}6K7bX`mk^duSUlnoQNl!_caSdx9$pwVDny^QP?wErv50~~McFQtp;4ul z_32Il3n@;4uvDl%8p%O4&-_ah1r0UqBMI85!bBQ^QZCGRrF5<7t8)t8{=FU1Z>J-{S(@RqR57lLQ5&3Q*uQAt-V}7+(70d@^A{k@5t89j)f5)a^E<)hw5p6Id2e zp7g%pBAeqceV{Y}3I8w^Fz&tP#s9pu?W-CFn-sV(n{~4zU^5Rv2jeyc0!(jwPo=#H)^{UQy`+zg@2n(Z^m|_L2 zFpn-o(nYH3VwX)lQDd0Y$B%JaYK+GNIni=aEd55U*|A%#*{oOuRKi+hvIQNma1(i0 z6QoYLO&UuU&dm39eFY;K{B=%HM#~mHvI7q=mu;&Bd` z=x7I89wQGn7MkeQgUn+UWjG;Uh`?R>3Np z6|A<(f~-7w6h<2U0|-bRw}cCK!NV}~AY#FZ+;K_AAHYm;x{OwmX1<9#+G*1AV?4Zh z30OFuC|?sKFP7C(&*xQ@j#%+MHY@`b*?|D5O{deE%iqrU#86L*qmZtDrE>LPCpuEH z;R;FXfNPJhOk4W7zyF?0{`dz@D3wkFpo$hKiH#B86m={5EE2lkew$31&F%yRb<(%K zfTY#Cz5P-@vq+JW$3$t~n)Tyj8-ApPvb62=01N$m2og z5y{L$o@Y2%=$f?Aq?OU-fG?Mqv~uxE(89!kw1h)h3E!Ln zLAYM#PnkR9n9L52!WcrLg|^q48E(^^PA8M;v}`vzGq+fyk|>wsoVN0F6uiuc{3C51 z7W|c_ae~PsXqs>Q#m2|lt2Vhul2e(SMk8?QmY_w4Cg@PR;u^UwYZp%QH&#A1k!gfA>o$_1hblvloD4m@TudJge-H!%F(UU+gkXycelp62m3X(n&`8koLpkF^ULBHM zfL$6F{ptkG#4Lu(k|q=iek zN?I-q%NOav9BCeeCILIDL< z9_XYQ&cH$@r!KxqRJ01A7>E&e~7k=ZGpd(-lA@$4WVMy)wB#pE@xAud|YPpFZz1$!C08 z{(V5h0s$t&hFk?o8)B!~#3ZoP=(sbEAIfDW28L~yKc4@Bz5ZaWXSDcHR?X|^UVKd~ z!B*>BmgG6URk;XE4PYXtZnx8MoFPim8uohQvmRhVh#tEw6f5fq&9`47NrXLP)48?G zTZiWI480W%7O{Z|s23O2svJO9KVKE`FQbL#TC7rPqcV{InHEtx4q)*?vBUYk7(FBp zA^Im+fhS-Efq}F;k0xS2~jH=IN zKp_%}a6nW`u=3Jcl$GfWTZm*u!!K_0yDW{Yyq&iVALcU*jhN4%t`_rXonS(HZNV%w zTvrHv8hGNYcB)lFZcp?kz?9LnpMTD+p(6Mb`4|k;8vX8Mg!g!ipejcr>ZFc)F&g#z zB}}NmspNnpD5ArHJ7}p)%m%*s_VbZs6Zd+cr&9CH|HhzO_%TSU!c^ZXS7q&6b65Pyj47le%+;`fc|t)TL8|EMo_^5%93H)>`<8nLv#+5%1NH`@MGW=K8vKbF$B^dYyVO9UuwL7XosuhgV+F;FCT<}l}f40UCK*87O-@%QX?3&MXG`e zra-#w&4%O!EGXbRSc%f4)J%UTUp6rvjF_x^hiWhosC1%|$7eiwd?p=lfr?6ucewH^ zjNOS!EGJJD=}d$h&{84H<>_{(MlUzCuFRMdO2kyGRY_?klO4FrW>L%@E;xK}T@3SU zQyCc$CDl>Ub#p0C`|IOmlw@$oc7PBdO9*$W40pO+^k~x=kI`KzU)#g>2cjHWV+Zi+ zWAo&=`2M|p@otFX8;*zLcle@ruYY{@{Pm0fdhy~#&jQZgnFW+cViA_JZ@hW)`SUp^ zmrX$Z%uA*NvEYR3U3>VU{p+u1U^yg8IuG!9ZyTuAUJqZuPqg3t`1<*?*Drp0_4L`Z zSFaEYK*gTjnheq#kY8^EzCYg}-@)}KxZ?W6Sm3OOt9^ZQa~OpvNFKG3tPl(=@F?_^ zj7Abxm}V^TC@5X1cZ7f0eI3BRa0dn-x&i++DLAT0YtIf7AcAqn0^t9 z&(*C!l_n|(t<<`bubghs9`pO3pRq^9NlSvt_lasPQ6cPz*Bb5*gV1Q;RpK<#83b*9 zMjd38gp$o*=W^O;OsAv-SAS0lVJc;YJ#}#c10-$t@{*Cklr#KeP{PBr3_}d45as-5 zWE-eXWIIF&Ndl4#;reaVB(&)es6Gr24}tQq4ZPsUwh9sZzWQzmErhRl2bjIX-cvAq z`omAJP@2F0{_1zDjxI}=$qcWAk)?gXl|zRU3M zpijWig}2Anp=o>*HYade2udGGX~sC<5+rSR3QEZ6NU1I;nbt?6Wt~!>>CQBe=d{k9c*<@;}}G{D$w*#0URN*BL*hk!4?;ZkmQ}KtK@$6a*brOoO2T zkRsdeR=zWghS^D_#G0wvs$^tms@(iALNnL^;a~rr^PXsSYW5|nQPh|Iy!+lg=iWw| zaDdfy-rEkN4JdI?0;OdmF6|0XGWlt3eaHi41r!mG{XQO9O(hb+Y9?_I+pF%sI(YRx z_SjDh&QgWd%xN}@#D2T;NuCrYscgTpo7WHMEMaBr`A zaPaEY{=wef_XpoQSQd^`0x{Gt*-Y@3Z6vhlHxDa!AMa}Tly!Ia(W(Pw-B2RISuQ$H zdsDySO>sFEyc*B0<6PQ~G;5^oxUmtHtQa;FFf8=os|Ja+6uH4_^#a^EpZJEY%ktO*WbVm%?Oo$3#U^&vR2WpyIPXuU2wy zDmwV!71IuQvf1df(Hx{Hv%4uyNt}oj7{b`O=Uo6TY@PRnP{E)kuXH*j2$-Tah~0Pd z{E&~t$4+V(IKui&L|fYwps%^B!lgTH;5~d*>4Y4yjS?lJ(zfgN&5eE2u9KIIudh{v z>GNT;&-@lb1tcr5gJQWPci4l2oxOus`#U%_U%i4EcLJWp(tk=s*@3%$#^j9iCCW;L zI>fO)+D<*0Q;@a>Ca!^QB+2Snb;Icp1pAtmv`5_N!si1kj0gQ#1Ch0Wk*vlhc+IF_ zz%m*P;~<=Ck`-EQ*9zu2E2e^BR=j+p`#|dJ-C3JFkkm`WyJ=T;L2(sbU>TvM*7NzJ zPtJ{K6pRM5p1?7Y_=6_wro~tiqpUUM1tjeQX(Xf0Hg*ffe!-?B_^bV zo#OT>GL8F}!B&d~9^eR)wLT=o`wzt~@{iX)95S-87#NmfZ$;7x7p`_KjUK072T7v5 zu^4^$CRCHqmMsyCbqgQnWBcNy+<~}^#rA*^u?du5iLJi`l=1~EQ4MLeYEBI(F(1CR z0Mn{hGr3f*5OCF~j=a;S!6JUXATE5zFJV*oj#?-@F+<@o`i3VSME9bwv68I3pa!E& z2$+#ZRv{0aR#Y&TP%tSZojL*PI`x51@h&EpkT9~^5k)txZ|Zxt*gW^eV_O>*Uj@AP z_#iz*xrj^?z677@hvIdL!KcB{yuvZ!R1-EE9l+gf+HbpW5tZ=hw&9p;Htu%`=u}e5 zW)Y7JxDqi{YOMCcL8Y^To$OQ^E1L*f$8mt$v7G*Uq#9t>?ZRhx{R21_U;p3XR*~Q3 zJ!AXix?~AXHOH#ov~T#Td1KeFZNhabw0z!ofzZCLW81A0Wu{t9CaTrUUSfZ5CvkvW z7RMzjmPL#%dt?PlypLsxIoKAW(YXW3JBK7KJLt{SMI;$XVuxCpVH{@iig?~JZq%AC zg)zV@!dz$pR`C#0Sfb)N=YIgJ(UA@TgZkZC!Aw@^FOQ-5i-K|Ip$BNamxAG&>1sX^ z6+_lwd^|?w)+}3~Uc#MgNRXOgOxJ5@Jue;e(ot)X^P&LV|t1d73Ar6G;i_g@d@WYPUr!enc)F#Y|@lqlAZ0w1YHJVxxR=Q(N!~ zUSr_<6pQac>AFUf2500o89CPir7ch*J{hML)FoQ5DqS0c>8;F;5}CaN+C7o#{vKfB zo!F~aCDfs*OaAj2C_jT_izrziwXw1G@2DniyY`VMaw3+9WO4y-7W6~9ySya6aCDT` z$Vy%kqJo+vE8cpJ3NKH!kZ|Hy#sGJB#jvB-!`6)nSb1!lh(;+yyp=v1nNOv7nlhK` zk|ER{^`z!F{%=6_}(H`d#0;xx_f+VTuY5D!8$!XEXh{w5vJp92{v~_>~ z`|p3h7o+iHcxMUekdRu0B*P8o4lwfF+uH$lGC+d<+$tXe5|R(ga)$T=k~Vfk2bBw0 za34N&;HKtZzlNKN0}@1l^7;fZhR5}R5eU|4}@umIC;Bf6w*Q^a54rk3D{LjG- z)3i&RQDZ7lsS?$gI)Dv26c4lc2A|T2x)EAa^Uu9UkYGIx!v|6XB|?fdZW-t!Gb)92rwila!I+xLXd3n=aYe`3xLp>d$2`LD+xu_x4OnzYcDTjT zq7#01sR)kF0Qvv~LCLb(b{)8wUBD+rya5tRRJK#85hY05L!fjlI^bkk6mF_TzZH)F z65*cLfD&&Ibn>ihwzH>b+&F|qQL7L;8tjnv;0z^7#<9MSlP(g&2uAjIlt7F}=bppe z6_c|>hRy7Z+X5Qd~6^lZru6h$mVCG4uKsG zM--b)_@e$%Xf|GieCx%7m0@TmNO>qRx?jclUo0NZ$W;`~NXLx$yis(R4!Um6O33=bZy@(y+XCu# zyWO`Cdm<`J&;}p2EmpH=jI+uiP@=L$-gQCCMuydDHJi=T#*ctWxq>h4@RN`z)^#nB zs_K!To>2UWgg+QdB#_PqpiG!&0j33rJkBehF?&>XfRfeGUO9_HBYW-~?7<|8MW?aY z!f)hK23`U|U3-KRt_oE8=pnpDCB%6;tqD}RzIsB1Q`B@_HgMDI4ilB<@>!Hs44`_z zX&4Q`n45?}C9yH}LG$T!c3`1v(eTvt>FK8pInE7PMtM~3$gFOu=F{34NmAa3OXtnk z6AE5>V@xQG3At+<_1*nFTyBB{Q5dOGR2+(Qrwa+l;sYG-0j?7<0hmopmes#SX#y-E z;7%>8VgdIM!HL&4u02wiIuaJfWr+e2ZtA%MXn5%}adjM;I82T3{RB#T`)q5IS#Z2ttv^D}MBrbr;)_cN& zy9q558cp7e7es{+*D25Od3H>&2}IrSct6E7G-VQ_X@vsa88+#Uq?TYSD)-|Hez*00 zJf9!SAa_S-m3|I#R}5X}%2{X(@~QWy`7CB#v`g{2?ZOeKL-(y1)baOZON*|EB2&w% z5mJpPD?m9EC~btL-S1li2!J92uH1JjI2wlo9DT!~L}}w8EO*!^C3@kth^gt>TNhbCq`_(E! zGgpT@WQo7rW#8?><=GWxA~K&|FPjyX2Ze91mq_XXH3EvsWT3#`s$l4kNDk)(-BYK$ zG|>gu{p@HgNMXF0`o6)H+fcE;(jKMI-`H3o84WK+(C2{wk2zJ<^+ExtxaBPt2-~IX!k(tB!mIX+@>NgA$y865xQ+8UW^?gLVRVo1lpB z7!K?BTW=4CO(78Br=HYA2J>M{q7;6r6pwUvEIM}eMzh)JG@HnBn_!67&1Qo|Hhf|G z<_4r;Wdu`?xl}BZOQuqalFQ|ih_T2%YccUtJgzqqzsaqSf^K4J+|uh z7@@J4-w2vU5S0-x5HAEZ?FiTA_}Ij?F@t*ic#5oY6^&0fq714)AdONIN&QjK7xR^Y z3k;(Ox`Fj#^J1#7C&ND?s&Brb?$c!_49cO96GtcmPv0!#R2Ck_<)t~A7(M|?Rw!w} z(Qo=X!oyfM#$`~h8)3~@*C)+?2PgN<`Av;@lfunkUj-?j(0gA*K=oxFpO4+joNT0q$bYP;EP6P0M% zAxrGBj<8d)GHfX>=oSQH8=vq+tq*b~B-6KKqck2sK@PY8-ALObrUgk1e&&6BM1p)5rLCz%_#aVcU zzQ;o>e#GY)YPI*Wi;i`RA{*IgOBb2XSOe^>$Z3FU2=&K<5U~1vpu8O*EW4Y?UTefm zlx?7FU)O;W1`cD;vZybm2S*dmvVgFDQ?qUaQs*7^#Pepej6^zr-oa(h1101HF`S(> z>UIoyYfKBIVueTqF2_X@0hudgCRKdgjoDaTNXM*CpKAYNg$^*Uu&Z)ErFq=Ip@~It zjtK2_shxiP^(~7WrXRhi!JrvR<7pVs4DyeEgu`QAodvGWJgAWeNgYX2=l46-TZ9*Y{lr~{992X+zVy!5~FNy+*s_(^r(+G;sP__>5zgRSw3f2r4 z&7Y@2g^8&YOK4%`1rzNY=kQtqQ{3KP65pbMthv>22Yq<;-Bj5y!~r+WXrJ-mHC zVEndh+aX0@q(gwu;vvmvL)Ge6Sbgl$4G?~+jZIae#14xCyTPJ=d7C$pun7!x8Tt;{ z?d>L-OS0Lj9?KwGeMGW@uJJ%5m?}h4!C*2udPwDRn3m1?efqTdFSMz=eM>c2W)$w` z=_!|6@C!u0))rx&?r!0ug}FXOy^pq6ILynVPNJ?E;^mQ^%WNu0t>^~fUo!}K6Qn{K z8t+Jo&$n#OHAza5D*cI+)PAt>q@*y7(KJp;p{#GZ@WB>T6xo*US3|QUye5K@X47K4 zK!I#2di^*PZ#@%lJrmPZyirIW&mR5$a2UcARrhWShIlqB%NEiRFJZ_^R+oCa#B5?f zg#oESlp=d2%BGFXXE+#Cu*H_>3)l$QHbAx+ln7ku!pU9_N(&e_yyiEe9}6iD-i0yx zZwQawCJyT+;;ybJLrm^w%ZNp$0EkeL0`z)~EPP17yy|oitXEeij2459-%DO&ULS9LeWv32 zjOQ36<@yaXeaY@rl#)Qoo#7^-xT-3Ol%qZ&)BOfXX&S{JivCgPQQ-GIsXuRQ>hrZA z_0bjFfGa4iCV*N=uL*4-CI-ExF_+9Vyj)D>L}2w}B6Kj8s+&LddcL>?~8f+iA*d}!<;@jeCC(KU#?C8GSBV?knC|F&=0eXEe@WcI83ju8j#f^ z-vd|(Qh#-UOkO^6hSm%F4G+eFPaC`JKvQX)a|>1!=usc^=;SLs>RwV+7*gd-o(1Vz zR;WIDg32tu^ZZF?+i`OT3AU&r7)!eN8+80lko;rA;Frs2lpnhz|0 z?zHH&=JUc3=lxKS94D0l2CGo?P7pm9%q^I|;+$mo0i<9_?6nf^r$Q!U@#A>GxUSPr zr4?6~#s5C60tYDT!cV0Y$HdjLH-#uVZR2^(%1vJVQ{HvnV&U`<`)qluC3=98g~DtC zo5%bDVa(k@}h!Y$w;p5=1*c?duf zfH1^g)|2ulo*Q!Y8OWfQXOC*Edc*^ZkivU_H%Z97<7yisU|QfulmoH^)L(7ku9A~LX;*Gh?ZRQ{SU@=h zMTX`zNYB`*+hR4{o?Vy_Ka~%hhwIHvpcj|Xyspj=j1H`?*87p)8nn(_d=b@yqPCY zriz6o>QbAqMP@~CuQ_H#?e?=xE;?8^T54E3(*k%lM6Y@xF^!!?pzxh|-e{Og!9)vF zr<4sq6_mbw`O>KY%JXwvk2zLc5e0xK0DeMYAx}L&-`&L>ihqY>^BGtmcK$MGgdgj# z{_>2F{xegssI(c{;OF-D$$pOq`lXKebpP-9=ppBdY#16WZE|qAtxdx;haVROz^BH* zzNfXrueyTMo0Y-|M$3W>qa=A*?$<9%ATNs*CHS_@F9D-p@g>ODuoztpDL06n1;Da% z{!a$7ycPi-6{pn5R79RbSaGGHK>6SBt-unp$#?%2obbPGMQ#IUp-<*f*`g=&47SNdf)`xR#EthjJ|m;|a%c|~P?oiRNPJ53LpN%eW)QHdlm=SXkZJv3z*K&Fkkp>!qXy7` zgo;RQSXxXf*_dIb8QJJ)-%jHSrE18PcI~rliZ)W-rPjnYp?X%qCFIr4~-g zHwpz4(tu{dLa0{z_@zu{mW*0*& z+@#Dd4iD4w!NPTDl^pW3VZ)>i#|ht*nE@pck)&xJ@C&f`s-U6v@e7FK3$Qi#5ED%# zF=MHvQcwjsv03f6S_fF7f3hyp0G4k_4$!$u9l1p!1q-R$^)+%bM)AKM1IObJ{PE}r zg{^D6c8obH@XfS&G3Byk2bLMt7fHFN#o>MYmE1*Cd z_LG*5cvJzUEdZ1O5R%p~dUr*+qitVa0;r_xOrlILIL69YN)sM3(!~UGIyg0kimZi3 z@?mLV83z2SZ5%G5gG0V3&=>JV;qkHL-_Pfr%S;85$>jm5dT7mJ)&b{y*M36<8O6lC zXLVR0vb-9M5O3nd?lIYJ5FjtsWfgPLnc*Cy+?6Cs{svj zDq+o|OWlN=J88`mp6>(^U^>jC3RZ#+mKQG|i?b`a zX`HV~I(;R_+kraX;qf?~H}7f{$MH*7*G+w}nz(Y)b^dw2N3Qi4i5U=V0Y?z%bhp5g z6=c?*5a?cqK|DVG;lmMNgmRIKt;gktPy#0mToXR7Ne4W4m5Pm2q6vXqp&=TOHWSK| z0v7rOs`*qtBV+{dBn+pgOfQjH?m&dXi@Vpud&E~Nk_Zx}1@=6vyZGi%r;W@_XEi9K zhFTwz!$qm&H1&pHiEX}ofh2-Zo&!oiwELM-ZG!m|R7<=prDCzY)A342_*-CBKd++_K-thsdNN&xM=<%QH$v1Sg1Ag3hJbAE;%Ui-lCSK?1gB4ETEp6L; zOB}Gki~E>6_p^rKXH8@hjeq|4xx%vB1(E_Ku1&ys0yeIN%Mw}VLkyo|RX&G;$_K%+ z`T;Ff70%JA07|X`>P`tnA`!Sgk3yX4teA09o`+PVK?hp|w57a{e^G)iSrn|5G8}A0 zNZ+5C7)jvT1(Mz4o?O*gf1b!%hHGaI=0mriG;|Y}r)dpSS=^#1NqerD0!vk^eEe8O z^mBR&6v?-Kf${CU+x+~Q>8sL*5JFs+xscJL=7rP{E?C3@p!5Kg{f3W`dCytYh?-N< zXT-_e*npuDs5$jg-$#`F>zLy|Kwyb3oc@eJSx9{~&74GG+Z#x9;*57_fw&*d2~5z{ zk|9&5U`h*2?nDSWOU@=Su^pZrbz$b}?3g+m9ALli;P89Mo6%S6PJ)E%irfl5wnHRA zwla+blnhz{B6(Lt>kQ%Ho%V7saj(E5ht5=F~uHep}*8;hb7FeZvb%%Y!-AREEzb=Spa)u^^9yVn3 zp8o`3bEjM|Nht>L`hY?2;o>CwqEGsc9%VZvL)-EFB4mN$cFb{BD}FM>a&nlw+i)Cx z3M^@Xq+j~r^^7!YkS0Gik$HX8KAZN3OfyGNV&PI9Xp^}j3ZsfBM3XaL5k=4`rcjRl z{+&nPKRtT6eOF^5g^Lwn;@d$e+X0j^g+LK{te1dgN1jP0;ysu2`~t~6QhFfyI?ta2 z@LzvL{Lif8@X#?8PIq8|2JB7c3|?CUPEmq)NVrHYOt<%Cb~kVWyWnt^GU(PpbeqHU z+0}|1lsw*G<1#umG@%LQ`Xo#Pz+}Z77HB5XNBT)l9*=~7`uoYV8R#Gb#g+acHnHqP z$^n)j>40UuPOmDA4(#;bs4TN0zl#7~Mey%svFxNGctj0VwBN92qna$Gws;4YN`-=J z>!s3UQn36Q3E5dmIa!L?1da^sNa@Y_v=mN|)F=W*a54lZmDz)Ij}A#LtccTw zVi!jDV=^$VVUSygg^IRPrS@YT>p;_ac|xPdIwerLBTVqgfGG;vfiH-#Pdrx+9)t&T z3?4l0*%((X4i4^yE-JbHa)4aynNg`^2eSZG@?c28=z=X>`CQDB!6WKRsMj{Jmq-PV1BTOi;I$-zE z76FewwMtF~e;@9Z9qnu%`N+}^94Nr7R7e^i0%GEklX)SqPzh)8YVJunaQ=KP zBE1(B>9LlGVJy_NI#=#!15S~e5VSCR-c(UALmLZ!VSh;6#+rF)P8W--D~>C&ncGJL zH-0%~lEK^_KQL+ZwCQjJg|pn9xb=v-ZJjNLcYHm*EAr|4_mw&p=h_xNN0i4xhAGU? z*dD?(hx-TcO@V8r=JP@#<-?Qx214Ms^IBIl6%1UJw1V;bD}2KQ?>)a&n&K--)Fgo4 zWB{K^P!mEi;hz$ z)Nm!Xx*|qy;I{1aK7WRv1)OynB%$mPN`Go+t-hA^7gJQaG;Ii8mFhgu7Qg=b4^*U^ zC18k~@)lsix*HX^*$!h^n&X%Aa}s)_B0Bhna64=Y7a>cCT3pa5roG!0X;Cg5{PYUX zYdCVQR>XAYxc4CvtWlczzuuYNLUy zq$Omlg0j(K`2G*L8}i!>-(QCD`?dI1#_tT@cQ-S69RW!)iMTbJ!R;G?AIcOUU~`;I z#`8S($Y*SqOwqes!M5>F2DX`pM=X|1vkNG3F4GzM+0UOp|MAE9=g%Ej=5e=otca=-Pe?yhLW$@d;X5-iM(;1h6mvO+A&08+ zXWm6%RQysi;}-!CWH+-!HcJo#$Dwosfu(P8_RXU=j1;o@Y_&JB`CN~RsxnQWdckl2f07?AAkcZNu)1MF#TnoC_*DrFppGePATy!~iVF8yK zc|6~boyDyAB7uGc07INObi%aHHeApPb`&;9c3~r6eouM<17}^A1;_yt{Ip8&wIoYj zCKge;8feC)8>L@`tEH;p5@)6-JQHy$&Wu?&GiA>_e#jf#0nbF=blSn*UVrGPTod64 ztRvCw{`MQ#ST^?5g&=@4gi3>n7~B!zyJj6x6%xg>qL9eMy25-S1si9AdSiMO|Ge>*RgeB}Ex-j@@{Ob3%7Fbt0Z$85GxFeWLuXyN04 zr38m&J^|VWRF9u6B;65E|`adjleguCr^VVby*^FH(gSs1*Nc-6+=qAqV& zHpSaUH_H;%G3~N-i=r#Unq^>SB+%l`lpbcmH17hmGB#XrDyRo zq9WIgPlnJ8Y;5fB;|Go|K&d0!#PztI@_@#D3l6*miq`9#;oa^oQFPzTVNzNElS^ZvszqhoceNIR1^`=YAnk*$Q-l*u&h9ce*831hAF;K!itcJe!o^$P?m@1b&Kb7`!SIa!Ufr# zXDl{!*Pg;KCzD7b5d=#}mFWy|o#n{-t(~D~&Gbwmk;uS(B2?|QfLW_0FgAb$?Wn9& z4S%3Z&*uS!1g_zf5?T_;X9PkiEg`jRhf>R*>aE*K178~QOOSY7>V0UIpz$i_q=E1= z-joVMA_~BEIUP@hcS>*h{xQ6J2_5Z2d^er%LvbVIr^8AlVREhpfN4gUHXtp)S|Z7J zbYN-dhliBPjs{@a7vvWVX8G|rIXw-w{RTW71(ArDs2N#A({sKR=-SmZ^78Y8x%=ce zi*z6q?Iw>yxp_m6o!!r!K<|Tu3G{468x)#Jctbp^77AY7AM#{2vV*Oot^%$WzDCSc z1`gCn)e=hFPGxE3NZ5JbNs!)g=iAhmPM5Adf7OOFr0MKRMH$<*LuZ(uv0yx(Lv#Rw zt}gM;`8f@SJB#7SZ*k!PW!$Z)Jcs}XrVVGv08FL2v_<@ZeBHvYqF9BCw|0wq4Sg$8 zR$zxL^9$ozMFTP8><~&Si2jH8?wRa=8pd}j!0X&Zqxbea9i__7FfX^aoq4)1V*^;S zqGGx4#v`j0s&Hv%KIbf6*Fla6enEds^Id~^{t_l^E0#C9ID@rC9h67qop2oR3~m(7 z(j);io@U}SXU@~EW^Z_!#nW6poxK}p6DuvXz`qS51^Bpx=ebQko6R>1N(u6;_uDbpCn}4nbjmc{*@ZR!n=jnSQFg9qzv9yL{U$}M zJp?$)r^;G?UIACF27d@QTeVYXvDw|Pzrv2h8MbpU#+TR?wg_xxce+_AR<&BUux%Q4 zm%bExz|w`A?IL73t!T2Ur@HnQ+{-6&XeG6t^V^sK=)u29>HY0;46)#bx&`+a)hg+Ac8 zyYYq#k2#++^}+wuSxzz?9_C2@i94{;$kt~G)Zam*XM<4+0b$@J?AV#_M`Rx8E(;*y z3ZeIrG+EyD)3vOEisP`Cy#+VM?yi~vUdOTunWpCl0;QeWzZ#B)!utK_3+V!3nDB-C zm96V2I@Y`2zQG9-I1&Xi8Hnr;t&%?zN~}!A|BvLl?Kb+X0UNIIm+c-g6cE`|fJ&!0 z!!4GqE4S#wCY0Pn#Dg?Sf+#uX))t^t*)ECp9WL}H{Lc~I*BjW%YUwb1fge zTKB_I%rezccvI{ZwhT}jS|U}^ldG}m>t^3X;lebVprQ+^{=ou>gmKpo1(25*?*R`B z9DyaiEs1lf!y}lY8)=LShCd6O>CC_1cJ09NGnkpK(-ppyTvT=xQ+&m1?a>#4nJqNG zVKI|DXJjJ6A|Oe_VG2PYDm4&5L{myt6wTs4r>G0>hG2-y2)}?c3}v(DlzcYmG;md_ zK`PISKdg*_k>i z8X0NHNQ5V$*i8y}ve-sw;yPsR-7Gw7!gR7}2lC+5F8qk9fBaAYc_y9^DHwAwNlQ4h zhrD~2kBLproUWT~HvMK{f_%hJ;Vbj}$ywyrU*Vmxa%#bvX^Vt1G$VOXyLtgY=DzLi zK`*HiKO)&t)=4Nuq4Eb8P@*q<6wT(=$?gxb*$zj)R%n*D1hYmPC-Fllu_vHZFA6Ts zry(A?hIs)a#8cwgFvi=I81LrhY&ykFE&99k@J>gV4x78WG7Qi_%cXM=Af~yv7z|>Z z;(-*?a{;iifn?vM=9Q_vapzxA^*UG>00|yAokmooJg{(hYY&XDp9iIJkUQi-5gugo zpaUFa;UEl{xb)7peP-y}Z{UwtX9#y3FAz^C3Z|D~Ponrg=3QZ2E*%`qBx`l@dcY7g z8O%~a$%;tEMNwqrM~2{qW0OnOKG4P{?a&o+y$D?)whdk3?v6nD4ZoJePvC@k(u@Ei zgIO9BTq~N&pdi`}MYFK9 zx)#&%6RP%s+|E;1xNabLaD}zTkU%YT^B*3;@vPCIhs#Nf`9-ll?vhoW?wDhs$f*ylB z?D)4J4`vA|t+2a_(q}PmWHU`gok5ZF8@o9vn z;@2SVLFrMOy7a-zl`yldctQg&vgRBaiLqNQQ#6RbHNA+ zq@*NNXN5hUaITC+%bWsKg9$R*#kOGXo=bAmX4{e=DP3soN;R7(6+o|}iI8m)Ku&7X zz)yyB;YW}gp~_|VG0LONB^O3{r;kw{P`}#lyS97?jPFBRo;EF3rZg97$kl49D7_WC z1iUrDcF1CC>lM#y^eYRwKVyl$r(#QC8L%;MLjc?EVDn!3*%z6F#RWWCH=hLhK21 zBa~b9XFIQ8n8Xjjfs<2IDHjcQ3#F3sN%@$cIa-6z0ANbdkyId#zzc$(h$qQGC}Gj| zjxw6>LvupZs6+tqBiwq8Aa)yK@Qm`-G8gDvB+ProFz=CS55v6QYYjxCvH2T|lG8u! zL$Ep7Y@aE+5e-cAIM1RSYp7ja9Udl=_hXl#Y83Oc9cN!CHg_D7H``1mwII-_$J6HY zy$9lZO*2d1dw-8JCX)*}!&GO0caRB+Q6!@{L+2Ut`RU_3XltFozl@EOhX0vV2Z<}j z;^JFzJLYx(C5(|R$XlxZA?>AXAvpQ;2{+{@ggnQeKH&#I$qD9O!f2{ORN#Po&@1R3 z;H9?qguHjT@QwpX7!aWZk^qN)bd1x#eXcOnshoz?U3m>B3SQKjlus%wqCja`!(UM? z(YPFU=n1(5$=5A{S1A>sQ#lHbiq$gvL&I8$KzaKS#)?Im%V`+q?J>-wRDCUUc}lg{ z;9h6rgCOo3N$W1HbQv(ftE-JUZbm%-NF-)CI#kml=`_@=ZrVyFF$V; zxF=bpF*tFxu4i9zMG-FbeW_Rc%EgX^jlSfQ=#GFS&A~<5gBMx~496Z%NaoYmO z^O*-G$yrQ04DO!_(Vn9TYOO?jPxB194wZi8>Oc}uwt!*_4FhCs!K%QEWfH!J0G5TQ zftH%Nz=WM3Yey(^M&;?l=0i_dqjB_V4M543p&fczV8={S7T^>t>3chez>j4Wq%7WcXxSDN}Tsz4DdRP^VY?X zpF-i^4Q#R%4KDA7sCDoW+H5F~Z;zbe@X!L?Ls7?Ke;?Q39JPtSiyFAhtaK2NrqK!9 z5+qv`{LMZ8OVfms$Iz^~W5Dt1EOclz>8mR^UYr1_kVTBZCON|m`0;^0oZ$eTK$8wU z54yWJ%QMJ8gUED|^s^8h_?_LSI<&tF(bh^d78^;h(-H|Fem=oE2C{^*bxR7ikTF~{ zaBV>8qbLZK`A>9&d!Zw2(-FQTpon~SIAI64bX%vV(m`E+vGW383cpj6(1poh?GHhc zqW6;uM|ky+F!JA10G)fPfTo={y6~_Zt5t<~i{kjB(g%$Gg`g7ASyySeByPK12YP7O z56fCK?ywjl*9!x^&GYjc8l{h+&g^oq@eHvd#vtxEqq|`ckY&t(2jyb!e=w8bKuM=LCVw&|6n&@#0 z3$HoKB87b3@S#=!x8#`Ra{IKicbW^Yur>~mL^Y>=PYsBe7@q5?2%%x)@N6XT$|`hi zFrj3;Ly!eV|E&=LbM3O%yar z{9GqgXqkVE^xg}TD@g9hpR#KnSH$T}?WWN+k_*?)`k07^*x&9mAK2dJBep21($jvF zpMRMq%?30M4jiG``p!%qh5B3>g8|Z#432p}I?#+m+VkD?9uz(8c@_jPMcF(|$pAglya6{UtB(n~gg-c06+1jqaw%b^2joV}7if5)+A414S+oKGtL!-mO zyYcK9u&l`vng&Sn-(nBINsg(}pbMthvIifI7z!7JD2+Iq6ah~iW_kQNDCs8ZC`U(7 z7{S$IT7I?F3Uy1oD8UD)NH53N6sGwQ>OFgGJJ@2-e$%+Q>G~QZMfOa0BL`>dDfZdd z>d17Rv4%LrCyNeCdh_Ps0Nu>!>`IPDU~ITJ{vJ_i5VA!xVT-gwI^8>9M02LL9r4ZC zS%BZb+_?LayN|iM@2}?E9p-*;0DhMxP3-Pq@9*Cc=?+k!!Oa`_+WETmVA^3-? zFaX%0_YBwZiybk{&$uINe-KG_E~x*tC~k)S2R2z20W|JYCMK+jAe{t~aH8#28&JBs zi7AF9cKyLBacu%lygFE9HyG-LO$SfQS})dZ2M>J*yEj;^E)>kE;mF?57gMPW)7D1( zVFol^mqe(JIR$i{u@R`9xK23%{^Fm1e*eC)1YD>ygP{Y#rr4tNjGTFtE_crV>dg!R z?d%|e#4@cm|L$Nd4Fov`A|o>NGybuQz4i2TIL1Bu_AMlNt0+a&bC0s8Fw>o zWy{c5z(R2*Iy8HLk|6SbSTGBKi97Q%kre0JR;x=Wd-Tdu%&aLW!M;A*CGRd|Fv98f zaXpc8GeELPRVRMV1IVKfrF@HE)}N}DB-VRc)_QC^VBr2QLRoh+cut8S;#UK4-4qX! z&vC>Di8=^wFSxjDj4Zl_d}8Jfu{_TM3Z4r!2l!c{AEWlpQ8bP})CL3PaGe=!c{HLe zW9u%A)El6^^}8E<0|{DHT+9J8F;CDF-!kiLZ@z`^Z_sykJzq++^5c-gLPFaC!jt5TUkq4=D+A(>o=%a zIJPnBqg)V8kJJ8;Aibq1V?_r^kfzZrl(-fQj@m2RG$9wc0F^Uz#}K4Ns09LB#D)bE zJdU&BYX&i*DbwGMT$i7w=Fyb7^LMqg#!iGRcAl!8XXcPQk1sCN&dcDyqiFiii{bF# z^6<^P^0B;@6YlX_d8#KoJ>Pv06uwk*jg*Gw(`x{T0G5McnVnQ4g@VnBB2ALRlM`(U z-P)%JR?!)^`SUuqXNdxsAa4gOfD=$MKqZC`5WrgJ0Dqq7J3;d9HG|FUE zaRL(?jOM9Owbv#c3@BSw_BNEVM}-1AIE!e8;HrM$Lf*Lvxy$bLQ{587J$P3|U@&f% z^ycO(Z1VSGXo|eR87ytr_NLAZqk}F42y)wel%vtxX&*C_0W6^ZtS_P$&JO2PqA?n8(Z9X%#D%4%Em)^ zNnrhCWI@PVw&!O|R1M&$RAB#JmIU@vDgnm{2&LVd{zwFcp`s8LDFY;!n3y_b=@ijH zS(049xow|~+O>8?*w*v*IZM2X#08z*6|(|!)T4d?(W`<|-M5 z>o^Ti0_&P8gyG8E0fZk z9@ajvUcMPl8=e`d2 z-QTwlxv#^0-3Q(mx8*ch(4ljT=rvplu$*6hP!m3t6Y`r>dO~)KY=${B%#u-OtMRFj z2^?GwY@*EA*20Z6y+{I3)_~b2MK@*jDac@ z_FY00E8{2uX4pWo3sC7@!5=9u_eP@EPrkM+%zQ61FZkZZp&2K;?Kl%Y%;nM;@?nCQ zBS7$l_Dq9mT7BE)5`NY+g*w&ZX4LmZbNT0=Ktx8L0V0|)A;PxUm1fLchuI76`kiJB zbqCBi?XdHNgzWrqgH*jnI!~jX$lqpt(}gJhP3@-K`PaYBX?GIWlM|4lvGj`kSSyhf zIxLpR{nl#ny+`9n#BI8EKI0oDXbJpglUyjQM97t$(kZiqr1t=Sho8LcmQ&@$P=Q!HZM~;Yc{b0_g zxgS1Fr1Yd_tV||7eM_^MLdy-qBX=4xP2QuLW|N=2y!1()x^$fyj5tdpPV0mS)E+h^ zU0~9P%`7&h6=yP2z9ih#N%XlXSU$CBl$&Z-CO5S~6PSi&uLiZ7&ewl^J^d-te*NNvNeAQOI<20M_?4}7Uah;vB7R=}e{i+pqOwzxC z;64ta1XP4l%ua?G2nVsAU$I89Cr~QGr3>w0HEJp=>9ENcSxCJLB-@SlF(f9%DnMk% zwTHVBTtO9VEE}|erA!cE|45k^BJRmeuDu5egP}WoESLef*LoK%P1RJ^C)0!Gqv^zS zz-L9l@vQhb#aEhmoW7!G-;NIBNEh^wJk=w2z-KD_tYS|s#hw}(Y}i&djA+Qk!kifF zX+~+o+|z^&W6$(k*>kEVuqTPT2=+XjVox%%SKJe7OLhYUOKmx+-4M(3)32hy`Ojkl z{iIfcdxaMHW3goS7%;L=UC$PaS<{3RGKCch*j3r6w84gUP9aimmqGCCJeO{QIt&w$ z3mQR)+%Y3lu{>rSCt>)5ri8F7fq&i$k;JcinAnAAsU>C^ibinrA^AV%Isur+jYMI( zzzbD$oTFldeMWx7W7u<~{3~D-G}Uk)neGD%RpWhfA%(G1tNq?;A*Doz5{8vd)A0>x z2u;6`IncGh08bX-^PG}A1?jC_#zD{Ck)KU-Ko;23L-Mma_?#q7%`}BR_5G;Or}2n3 zef!qt773a#_*j}ScU+fP&~2bh*ao#8=a#6tkdW2yxFz;fMHT|Sod!*ma12XJnT?y< zufX!_*Plcc`j=V>hvJ3_^vkCS^cE7o5BaK(p%FSl4C-J(-zBo3&6)wAq`JRRetlX7 zlv`Uc%m3^=yBZY`s_anZ{e@$&g1)kD=L$K_`LWkdR+VU$AJcj$0(!eRWNLqlB)Nd8`T?V>a_ zp%={@4eo|s_A;8*Mg||~o%lmVpZb0r^eLA?`tr z8t@^0PXmSpqq}QcRaksla2z>`%^i_wati4s7<#-M_hkDt#r9Dm`v&5@Y2wnFP4Uzb zb$|WZIscmLh!E=koj-@V&?k-i#cVNOEdogj?jjtU>?7zvD%EY!#RAKArQD_!KT|DY z!n+bm0CUW^rz=h+c7HeuA%ohSF9SB=kN{9BeLJ9ZUz3J9d3EeF?=&YH6`WP+8mSH5* z;8*ZOhbT<$@6Sy>QP>;#(-_MYNDj6gAh;$_(~3Y%JLJMGhYTtOB2r#a_G_)}HyPUR zEVSPk?Ki^x9PSq^FAvd~a3>WOvVGjoIlySKL2NQj>gFWkxq3@s`SnZghxBJXC2-SckG79o{;0ti2F-#I3fJVtStsbFN zScXJ^8b$I`o5S!!rcmJuhs^(mQIE{!?}A+CNFUGza_s_KT-|hug(~8}Rnv80o$Rkq zRnY+|g_0vtWp={F@(UTGO_|j67`|72|Gm*Ak|lKFo9LWaq-NuS@7fTC+LrHcupYuk zD)kVP7&&B6QAqBSLEWBCO<_>k;w(xHayriTj1=mDP^cOhc9<`%m*#7lLn*KPrTj6+ zZm553V>?p!+zwn%$o6exFN@oGHnNc{7%rFTU>7d-UkGHsel2%)*Ihp^9@~B%RiTnT zOO}aeu_yDGV3MWg(G*Q#aJ7l7y8sajQoTVe8*S(_8hmV=RK`ip^?EqckS2D*vSYXX z#46j0DP*@D2MUrZ6c5WO2ND%wWWM^0A%wzo*lclzQ67WS<=C&qR0cXrDuU1f4mRoF zcX@W&gUpi|B7!Bmp*Izz;LbO{fRPR3cd2XfU1>I9)~3$3rj*l6$1!0SOtWS52Q!pI zq#iO;1&ad~EW98v;;4r>6Y{8{l$1)O9`bVz`8ken20^DO<26I$J*4r@rTk&4@`obs zMd_PnRE zXQ_Kh6_cSZq9l%@Ulg#A!WFq7^|^o3==P8!(4Vnw0KeG6!-rMDxQOHlk!0Ljq*;bm z`J}-_7O~B}f++fgG0V}33VXX@g-oFA0_XM#oi)6x@8MfEodR=Q-PAoVRm_1UM|^CPvHob9tog>yKmX-^2L^DTuWpseDCO_lO^kR@j-Eo$r{V+XxEyJN*-r79NN ztXNFgDmOL8QnDb4%7VyJ3L?55TarX|ko*ZlNA6E-ce%D*ZYH)H4{dj*${%6Sm-7fdwdB4m3znNdCePO@d6tNs$@9)nkBueImFh5X z_~~`cBEud`cXyc!#eq zivae1f|9!*V%h0@#gaLYVeWjbRLRJl*U59JIg}gqp|d1|%u;$}ONbs#L{`nfVN)ui z5(Kh%epFC#u7J>W0%eckYC)_`z$8^D1`_Z@m~2vWZ9MLNgf$CJSCE|9&M~PbH;rCb%VQClzV$414 zimZCwVFEj0#hQ8>X)#efCQx5tk%?uIjAaZ(!X`#Jx~P06*9EeJ7EPZ=gx- zehRN@j<%szf39M9RxM_xs#^G}YT>eKA!UoV;M)89Wa*rcr4zDUlUn2d&u%Xix4wMf z*58KQx+2#P6>Gm?yTJspnCB*q3<;)K#PhqKS~pzmJS;ycd+n*zIjnoVRCO;|IT@|> zQ245PY)sDNO*1u}NJ565$T9*Sa+;B`X4ucQ-)t_mi7C+%fDj!M6Z5S`KvGB#)4Dq6yVXOIq z`IsF9XuE_n6D-?hu}bAzUn?YwMUZK*O2BgjC#}>rAnn;Kw51v+A&YtKsbwKz?GJp8O7s&9(OqACLJ%4b5tkwEsmnN+TVmOju8|7-Y-K&D z2`*<>jI!Rn!LY_qBrHmh*2GS?-a z=RFBO+o2%24qr&BRkF$>!SDzcnFp)0wseK&%fB>E?oisL`pEI$-~jpXK0;ZqVLQAZ zDGV!hJul-!nsnmSC;k>CYQ*x04A`xA(A&Y znGXe2#<&8fRN^oTTm%tz9Gb?$wh#8N#v@6rPoHx!inlBwWLdZfxpu=;w75@N9AV5` z(&8c6uKnF+Nv%IEkO{Z0ky~F^$U<^mTa)W9$n{v9ynwIu{j8>&ZwhzR%cU~Fl9#@8 zBeGQTE*x>ZrL;beGtyvzg!i%VwXS>>G6k9DE9scysJSj6%-eiB5T!7s6somNB=Oc) z(Gu|C!+$7|58EcgW}zP&Cm-8|I48&|A=k(>WHcp;Y%GX?@%ADH?lcgLl{xyEP}VH7W1|RwcX^-X<`oT zn-rW4#}UQmDvZb5hd2I}nxrN&WpeGSkQcW@UR;FAr0Phv3o)+2VlSASe19yD(bj0P zSo6pF7%N%$g};qhN62+Dw`h;OlCJ5PN1jPH(-!n2sqK4byhu3#QmDFM*$_g6SQ1Hu zAgb;aN=J9!^Da~5EHAT%E+JL3f_7fRT)r~*1i-E_j7s}#@SI=hk8@%+^vuG~YtzysqCJTU%1 zSo;qfQYs4>_h4P{py3jBO$nRKYIe+stNErO4Vvc6paLgW6fYxqBbBO#i=NgT)rgSS5Uh39y}fr$rDkj5F-HI};9MRjUV;3dO?ilK!cs#O@>|bW$hg=G z&us~7uc7f*g2o$lzTWZqI&0QMmWUT_T{CNeXR;WYF6O1Br{Q-8-QocR9tfMaZ%r|= zga4-0V7YtaP8W6{X!p}1mA-2^C<@*U06i|?E-r$}x~t@e!=Hx3ABV$VhQqDl z&{y)Gg^hFceT9vCZvgUjf#alF&13m=ZIZ3mh%EaC@GhRoLKhFXF6cG@x;=N$Z4fM5 zm*Ww4@Au-k)SH~?(v=LPVAi56(5Mt@S)c+a%!fPhUaM($oMqSN-I?EOHSrGS%g(aA z4`@cMKqQldHq~4PTF(;fuxorz?dkp5SI2 zZL4fx2OSJ(i<-?uauA#2493@I9Y}J_UK!n!Zt8n7(fPjEy??4Lu-^G)(66wDH@iF} zI*luII|7xeAl@VYIW18xB)oE{a28{XqrEJS#o^^aKsYtPG=3r*mjepSrDxSF%Dp3* zaG@x<#b(=!yA;njPGdINq)De*u>2^~i0rc)OKkFq{Qicd)J`zaanEhFJ-1cs+D+Kr z@VTl~vt0G5#<2UFtV`RoF6Gy>3q5GF9Ypc@coH=)zD#Gq=1D1pBvRRcjzW@{qf=r@ zT8j4ipHI)X+)-wcyyo|+4PTG0IlgS>9q0g`Y(!6_L84Wb_2+Yy9{Wd%C58o2Ey zZZmS*{OUXA`?_iTy6ODV#cvR1_c(z;Zn``S&8EQBfS9(TwY7MBMlYgt$COX^mc$pF zIZO?Rx$Nw6bUux#h~mnJQg#J7^^O!!q6m%2;c|>FND`ofzG`G*Ilz08S3pHo2hmcc zQKpy+w#)}MG$WXRDbDj9=lJJ}Wsgi57v;IFj*(HNDVv@4yitnBGK+{TC?N7a)h6aa z5l!Mr7hEWGt0G;DbwN?-vD>im`Sz`ViE9xSuQ(2yn`J44F)AYX;&Gk}cp)V}5KFY# zyTtO_*E-4EQTcr>0j@Q`wd3orc9Z2BJ=a1VE+V(GKI?+*X?OQouKcLnz->+3MyMx? z9hzAl4?}(xOJ0GW48&7F&HA+uBrl^D-+jAV^4E;g(O|ITxk=Jx9IutZWR%6xn&xi` z+lrfPa3uwQi`oujaI2G-Wsg}=Mv?hY^3xkFO>5F`vrR|<4b)?KsfLEFqY`V^<5u8S zf5}){1EwAkweQUchUIp+a}$~R9?IeQm%uwc9JiIN#OL6zK2aBSqFy)$inpLFh~iDo zMK%#fx&&9GOQ+W^7w7X9pj|vcf1I8H6wHCSl6-GWA6-;Qj(th+I*Tn<6z10o;F`m% zNlZVzkk6$z2z9T@KsdBzC8s9imfA%{N~!JKlWew2V&x*l_RvAf0HVT}{naD{4_DBy zw}KHw#ggJvI%_XE8QnX;%7 zOq=ON`J=tdK~vCCji9EZWF!%B(pD(vp5Jt-HeRJ#O_T5&V^6uvYMaRKj&cFJ?JnEA z*>EEam&`KN1pZiad)CV=5wt~H)&=J{#hz8uUb~+@tpvb-^$K8?ahSCPnCXSYl96{G zJIa{3!HT018(vd`(|f!WxyZ&!G%d(BJY6gz38Gj+Q`n};DJkf;b~9TjO_ZaNL3vv@ z;ZL(}rVVeK^ba;>$$XL)6K~>=_E>auavw(fm;=zg5 zGx1Z2hpQx<@UfKQN6S%|J2i(%RBICRZauwFsYyPPjjfgq7gZy`FM8@CIWa>4i!rze zVYK1tx_(J08WOlS3Z=I^s0mT)=024dPmYw9_!C}`*2~$9VhX`{LV*(Icyi)7^(8^n z6lcD!;{q-~dr1ZVIL*dDE3}#J|20C3?39YlPdw6DN~~8M0RF=IvFg z&2G{pZL=UaZ-e(Bh$tcYGj93X{DDEk0DF`VnDm~6?qH1cd(qP7?N0{x)N(F z1F1C>M@FJ)-FtDD0@eg@?6q&bi%;43Li4duP;%H7T4_OM7kwU;fc7ee8J1#WidL2F zY>ovyTO`Ss`4sP>wi=4rbaZ|lwoo#1UfNPpemEQm5@wrFDEmZ`RW*49Dj*R2C@T4L z$v?d$5mb{R=b<|^oh(?{Nfd`xcHeg+96A8svU{|>-(&0uj|Q10A5pe)WEmw{vzt?s z7qn}hq~&>%Qr?D+;y>>EsoN!QN!~0Y@F$m@^;exFpGM>Jf%Ff9gLiCz>@>%xq$PFi zsZp4?N>&`Ej!i#?(wq05+xWtL&92fpL=xsA^ke1*$LuRXtE$efYc)))5lgHgB;hR^ zoh?}hUIL+*iBJ01`?hxXVOPxUPAJP|5Jm-B#^XA1qD*r(qR?fU_YuiRPX)kQR)bmB@REejm?Tosg0>LZ4u#FTRNJi}i8w9Cf zKMNSLxz?S|r;%=al0&jcH>%!E+@g5-l8gjk-~Gqw2f&?Zx21vUHiLnk{ChWI$ptJ33{+>= zN^ZC44>X6;mXZ@Mz#$E_wIX3z=G~CuC(gQ*4`DC#QVk{t5nByYi|qcTw>B%{HB=K{ z-+<;i4oRa$bxx|L(gjmwWhf9JGgcHPp`z2MLLym6ukj$%fM|NMU;=>N2~?{$!9>o+ z2-Wi}FH$h5i-OHSEm8(>L6Y5jqew1WduZ8J^zmTuwUYQmpgNgJ@l!!@O*mkUqjU|V z=Ij}6XJbcIx&k!1c^pL5O`tK-Lp0^rtVhE$l69ullw@i$gTRy2aFVj9fblqsO6^hM zj`+Wv&u^`*8%VT1Id27Jl$YblEFK}jj(7@5%Orsot_}uby`C8DB?jSicUN?DE#x*O zxBPYFq>bKq0+u5GPFi$Yp;pNb$f;I|af&}TdR4{T;w&S|5y?q*X-JIZb2bG{b10-U zeyuLY0r?cS$7%rWI-3``GKpZjZQCP7cwEt5M&Wk9fFjn89xW~zV9hxG#R60JNen|m z$&*z)Iiga*+yq=CkrvyjOR_ijcTe*TAS4^LzjsjZU*)vEbeK8LCcEFL(gjD|=hA>U zH;aHqSG_u*achSKnBgj*yS8NCktN8}9!4=b15ZPYq%v*Id+T5%U8ddfW|A3{q}(KC zQ2ClQ^A?p(Z=xwo3zB1Po!e|Sil~hoZFV-s#s*QL9VTHv0anKPeSG@s6Z~m5%=}cb z{H5ljA*B6CQ3de>Y8z;JVkzlcOfv#1SC;*lHl!Vm&q$rhh81L)G7H&_U1`9vOqAXl z;l%wSjJJ~kmQTbPGLIC=eIjYsz{5BuWD2J_8L!@hU3{RZY`#)$9R2p&251i*>~#JY zO1{k>9&BDNtY-dvHs)yEXw4~&x(8Gb+NR0? zxcsGEto!gGHLUuxmBw_7#i=Qzab?lG`xWouIYtp5jWy>5^O^SV$}~?&%1q+zU=QR6 zYl<|JAIuD4wV%XTvkq?;e31O$shDjWTdWgXQp_&a@XKF~?=mK8npl_cCn^lsK z!<;RoBfz3vtt+I_88janMMr{)CAsfargtvQf+v#E)0Cr*o4++`xI~*ZYA=|}Gzl&- zgRR_PwVi|%URYKOhxdlCE=_aUWypTvCTgXhgY#(!*c`S=$wZI6=1>h1{{E@Z0voFh z$WAQD%TKGBVRuPFIW?$Tm6goz!N;ml%5CA1^fZn#iEfgFkyQMzEZZcKR5wdRDN@~( zUF;s}VUCfsz9#uOEd}rFY}tqbxobsSBcVOwYSbvDYYwS@`yCJ%kjb2ic%E1C=kj^} z{1Zu*V9OabLmc|eHZP35m7Gi?j?Ns^r=*51D65O6(^)-qLaPIMoH+&>Fdi%Vgc8t^ zKs;0WK#z3GgtE2PfYi4H@O#6n^{xGI7EO_Dx3p@Oam1-6hsb%OW~V`FS~uzGJKnlg zit;kXj3_(G%bT}qApYc%(txC-80JI$^0_+ig>l58CjNrjJ_yLjSe^l{jU|>+#Nbi; z`04b`>Al@k6_h!xA@0$5jw#TUOF<}I;#6^J^?V|v8a#Qv9Ya0$*j}(3S zfh|xo?}+8$hoG-bXHvzx165S+uv{-2Jhh4I^?=F_5E8(c?n2uO)?FL&e|2$cz=a8PO@&fX`i_m=c)Oz zF3vm7kVPo3bJJy=XnyFLO zWYyjy-HN!9fcQleB?4LXXx|90^LE>LlRMkpJi4(Bq_a_K-jUTH(aa_JM~OE3n)3SM zok5$xLi3xPmymefU_wL@^%Us@(x3=RHovH1JRD6JeU+GtHUM7ETQ>$1NS4g}L@Zx^ z^V<_Q9QGr#S#12|p(Hy>(qkgYc9^8;2+2){$_BP88DE~H(%ckuufjuPX>N+`&68%4 zSI`{@S~cp`W@7EKq=4JmkL+sB>7jaNdrf}Ycme`(YtlKxiO>2Yt@W1RHMe7sS5r76HV*lI_2dIn%)|uiC*3t zWTaP!d3U_Xie5JxPrB_O3uYT(6l;orDj&Ip<=+?Dmh?dj_CIKF7O~tv`t+O4`SrtL z4;4x`hf;$C_>Xk539fgY-h47evVH;|(d%hcJG0t1Po%ktq`A>187Nd#s%;vU3yb(#uF;2e6EJDQS^7XEX6&n}mebr&c z$rQjMig#R&{iGcGarnzGLv@G%aa%-&rkY?H&@&jk8&vOd!b!k5SRFE;NFfCgrGV54 zWxje~r~H)LRt4<+(YSTH0|3>W)r_e+Y0w^=Tp z3MG-$ZxYcbdLj%_FN(G%Y&Fv&0+O0>cUVtc6ccH!^r^s71JrP;V4dLR==dJ%Eeg2% zY`Qun3G(3!f?4p!@~lguC%MQnVnmZDu!J3sNYbfa4dZ+K{=F)avy+qZgfrTN1VmDY z>P$EkLJrF@zaB|4x5_cSfY9~YhG#y!n)ejv1=tQHtC#5X78kd` zVK_ok7{ECn5)^G>HD;xeH{wX%Wd$8GvHWoSpQpe6`p`Gl1kDvaZVaVOFjR_aELIt4 zNJE5?Da~{vvnos;Xzu-hC5%zXFUzYn@?`A zS>E(BZjgDkd3JQCCYP0HYgZHQRwM2_>$w_oXY=!HfSwHTnxOX=)JqR;rx#z!xbeA) zlS$)jy6jA6m3rlYK)eck`5mVbh%6f{X{ol_Phw%TvZnmXCP@^Pmi7hAn4@d#+sTCI6U}7klBdh$1+HF`p6(LNacvj#-V^TFGrtq90UCu7S#%L681(o7HPj2q zOp|J>lcN+kJpFKZqpkk?Q)0LpDXOpf^|M~jv{RHg5e+S~#pzjB;wjWq7gA60hKK{a zel4G(>rgOlN~qY9H%#g!?L|`>7KnH%DE+XfzG?v%OX6ksG!wtA$F_*)x28&c{FpEc z;R}GjNMsw9mhtJ=DRx~kcSAB~EVM%le!Noi3{mr#Hh*|S&U0PQV~twjXX0gTlv?M; zXSE1eO=vYb)7tNU`R^Ze9T&MQRMeWX0}K2UPEPMxSbLT|rkW`F$WsO(mrM;qU`wMVJID?bHPM22J3V zcq(j`QcuOEo)R0}4>=Q}l%UY`Hw^AR%nJOLxnP`q1y3Z*${J)_n5zw^v{yu@B^c=mFB&E>VS zd1(-$_j&mtYDq`(rS*-LF_w|$^X6fbuF}9T8JVj=c@QUhI<2dIdA+OtFKk)F@rB02 zT3D4ndrd`WnMf>NOaPEWt!}wqi>HwLQJ-B`Pnqe<#tUH9eJQa9ssZkswHazJsGo!c z4mv$5OQA^c8e)+Lga0M${GXc2mUf@82^%oF4GDn|Fac0;L?Woi(d*Ya!@V`7IHS}+ z&0F=BW6hjX{xH7~;KcywzkWYY_sU*L&Yikz00KCW>}PkcUfoYW&9hPLY9*1YKbj5^k1)X-l}Pv?P8`jb>?_s`g1Ci9ZE8St3sM?p?OcnHlAO02()O z#DOf!U~)KLPCFlRg)%W;@|KY?2R4rYl#Vm+v-ky?%3Wvk7%$6=i+?)aXs8o82zPbG`Qn)X zmBl$i5(su!cuT_{WS_NP41%YWYXj>=fR z9IdLv`lXI8bJPxi4X2PK(qbUhDTKwJ$!z!MC4PAE;)MtNvlj5bc=5ple%DS?AWKb! zEmqBym|BmI*RQ0oreFhdKaq(l>5$(0a+Vd7ua%3j678KeTxDQSQ43Z-&r>6ZV3qes z=qW{zWpLy)u)mSEptEC}zouz0)|vb7e}klTTJX_buet^edFOx-G|5GK-yq42)r%g@lQroZ zCJhy43a!|684Ad;bJ=x4|IW_H6ov9-8q1fessuT_SikhL%J>AXuXlBfTcqBE=d2($ zgH%y(itX4D&BfyV7g%8&NC~hW@V|Hwgd;_1>Zln}&6Vv7vEV8#F>cEok5Wq!7a=vW zE0lpUt3Y5VhJ4>>wMd?Cs8}Jb0QJ555#%m* z36xuE77X2j`~Z}Lg~?P2NZRxLR;FKweFiN|f{bpRo&%7DxtgH_U0!?B;A@Y3ylYU8 z97;>0|L@Q@$fEC|T)vVf=P1ZF>(6i9>J~T#7ES##RFH2Ma?Qzr^557Q@#poC@?}xw z%WEU`%e<^|csyBe;*`bGr$SpftvAP^Idb?TXjDn|MTqw?%tenBKsCe$KzhT}=_GWM zb&NB#By(<-S{Lf95@lnGYGq5~Fp3x^N6BI`o>eYV?5!srT-hjH=jZsPal!#;A)>)a zp=Ud*XeFtRmAsLw+vxQOcR&&g12DHR9t0076H|@=@4CejLx=^I0I}@MN2fl@!bZ7| zvM?b^Kx7uSY?P6=vpy^?5VO{tm~~gMhGq+}4BZyX86B|JS$cd}po^u}q|kqKd?*NF z*JME~fm}7#Wn&#=nHetDc>>;D8_Sp0vFF;8dHpgkt4tiKns$C(YL(DMfbqqt?*!L+ zH8D0a<=uAY1xw*R@jj3Ag!%lz<9+>%+Y~HmER|-_go_ph5}c_PjZ3!ZB1}&axnlpx!6$* z(18$8?iiF+k4HdKtq_c*^=XWJjMT>=?&A>o@!72NvPOwnvqsDsVP;hg%JB+x6liZS zUycjXs;ph@aScQs$ki$V0W%AYu>s?ojZ@s0UgZ|{;ax#q@_M1*^pId?u`~AE%`8Zg z9)_ZI5GAE*?J|i$*)W$j^impFridF}TrI)vv4I-nWY)OYjSh(dpp+oKjPQeybQYXX zQWums-26nX{wkgL+2=Foz?F^GJO&Bw@*K6&)ARA11=lKp3DYwh(5E8}uHy}S#@#`J z<-t9KSoMXd2gI&8iBhSNs-d#pws7P(u#}wv9K=!QRG`O-^CEE=5A7#b0mznCsmeEeoLl26}97Q;S6O9l|ldbc(M|KEu7>@0m z*7<2>Ddh{Z$>m)V_8N$|&WPaw=3^YLiG_vMH0_o`Qpv5VC%2q4a@UDj3xSx$njL0l zEpQ+wIDjQj^hy!y^o(8QY<#SEc=qLXRC7HmxS2h7@!t_MOQV?`o(`3)y%O#9%Unk^ zwr+Y;7>zR2FTWsNltOIzayF5YENs3GsSy^28I?g4?F-2e?T7RuF$vzU&8vasI>&$t z3^PqsB6j_$|8;~DfBwAw>O4smUWov`qtOZ$|6Q&4xl?q&3tWXv$pW84VCz(@K znepK)v;&=yg++PlRqC~7mG6LM3qNZ}?yPOGNW^NNJlNfZl(4P^Jc1lNtguDcBm)!m zkrjK>s!kbs4DgXNqD>Rr^uOM*%2@wY;=MCvZpuTktWS=(d)eiP;z?fCix_BEKm_H{ zLNK!kudDTrnpv37brveoV_u1-LgtN|8qy`j%h(hKl2(g8KDw-xDT6kSTHsmE^5o;J z+aMqFU>|%xa3AN{M?HcnnsDUfY1<(lADeME;c&8>H-9)fo;p6hIzACdaOaq$v3yD@ zWD}h=LoX&l6Fvw}Lj7c813z^L`I7HaqtK>ltW;-Y@pMS2S)qAh!7~Lc9_U?2Vm~}! z!({F5s)W70{?e(_Rd<%aMr)cIn4BfACAd~Fw$XAkUeC6T5}l=-m?bBSQ=#yFlT>O8W#L^R@zEDuHu zOqI1TFdZ+6eUy#$tGmMzlA10KmVC56S&vKC+`tsWI*V0BXu(o-UsUz<7VE9ke-?$L zcv-|tYhjXO80E-XXpSkj)zE8ilJGiXqauJW^A0;EDYnLPpCJ5W}3fXjMzYHUwVu?%^ee`9VDEIPORyqEX{mW+qszuHtVg!s%J^Z4Qe(Zq=FA8uxOpL1`rKW#0RqOYk$7G}8()uNeCdi%jgz<}oT_EOxk4j*-$4gCkxyA+ge2t#&>k zI^*2Uo3sQLS|zH+j{q`|SAT=hs6HNUR~S3wD3T6zI-~xBVyJUcleyG70N`K=oLj|A`1ko`87^8yOW!@8B_gby!7YlT9z&rF2zAv4Q| zt&NtVgL3KVNGJK z=D~n^)~kr#>Zu@ zHX2INX)HyDVP2s|b~Dz`G&UEOl>>XG-=mYh$_5wlz(kB%X7 zTM)<^b!vcH_d4K}$0ADaSRe0}iHpn<`b=lN2t;A&Bbk8yIm@A3}7-nCx>#;j$;?0 zueku9a+L7Vmj^x>sYJ&<+R;*U?4q>ns+DFKPKSXtHFS31Ma=|3Q=rOi=91Eu+drE~0FgK3By#OF8hc+@%YuQZ^u8%}7I zMJKD#lZ3S$0?5s@fR#C_tsyJx>-vg^H65bNM}5uix_uE9nyX|H>l648=ae(L$eTV9lQ!Wf|KWzpd!cCN z(;`n-Aw)QwQ|1zd8=A?+znomX=#f1?va`ii5Ge#JyJ-sA>5!FaLZvsX5BAYc&6(IU zjkK|owl6>{1=^ur+Ju;6s`yAqhE6rB2Do!oQY6ocyr`N8hC%E=vOrQ&A1(){Xq@xZ z+%)CaF^)f&efDZ@4r7EVl4Z}w#!vZ$LelNaUFAD@O14Iu?nTZOe@gDhc3<_$wcBF* z@4y*QJLBtj@7_9k3n3QKVMJJlScKp12g*0UikeGjiWw%6kJOhmT?8Om+?H>H`azXl zQ%QmW`cE#HHOl`Hl#ycxlnk^=6Eq8sj=M*PUFPo7xLYie5kmqO3VFj z^;GTZQY#>VJ`t^~->^O=D|4x5pQ{+Us6&km`}Nt1l*od7>}_rtl7##=G3tD-j{*_b zodYmWijXBRBrWp_k_&`Bz$#_cb@^Bw*p@mdh?yK*eL{M0U1|e7|5NaNby;8spyi0h zv>Waz1JmDG37&&{G|z!V`X54)nu&37=j~$%Mc!G0XG@=y6i`GKLlGIKxk|jNj8jGl zlr|XrPeG}kg@ENUj`lNPa_i>m2a-Rq9G8{9BK>EO|KkLp??MdZiD_}V+O32fNuxqU zr!f`;uII0=T)S33g9cM-Ws{TO>x8O8fYjR6qgVkew=&}t*bq~_G$NFDOHAv)F zJFx43581VDfsZ`zw0Y%Pfku*7-=IxC*UNWLN%-gmSGR2@yR6h(A{5rJq$l7B510fAvsaD*EHFK|=pY&f zjYh2k&Y!;D-44@6`y$OvBAzd~Otb4W$0lmJqC>N$>Bn|!wMn-0nUFvJQGLAxBCq0296&Ao8yxe{B5FEvF z5S3m~vi4byq@a8%D8VxHjsBA7E43@m=Gtd7qDxwKfaND`Cjc!FApW$v#1iXbzKt$s zCSHECTcEw0@a5Yp+U$yC$8)Mj0V8uQ^nc38a;bvI-Ek`$Y>ED+)RD6aT&LM)>+64g5|jiJoY_9{xWjAcsDB{QxvE!aI^f=u(U9is7FwKMy`;fh>{&DUivK7-*gES<^}1qkT2&` zPL~utA`9Bo0!^*JwV0j+fVrciBCTD{^`JUg08Wf7Qg@1OWTV_2 zZ;6iNohxIJRbb^#?~0DJg40vF0jNk0bsPpx-J&1aWQKj|B~EOHC6|8P;ge(!CizKC z&kA1ap6r>bm{l@BW)kT+bODM9X}gxrY=MU*Mt%;Y@DM-D9)`QYH?n}-iUGR~4Vv($+MECDl|q0F%o$;iGuVM)d^ zN}uIat|)#M>5`VR+(2!3X&iO~uNp?+`L`!TvJ@Wc#3qx|lM~Nx9m9|Wuz*V;2;&DM zi<|;CvPddWOLQdfz$%DM(cTPiLclq#AU!?&pX0!djO0j1k_#R0`qZLj=lC z%7+Qbb)ftNgQQu>I0=pwrxH@>Sw;lg#P+q=4q8MuJ3BZ^^OU&A9Ve6r7P5Ov{`iIr zk`wlZ*6YZU9HmJ<5>0ZLCm9sq4-W3VF{AtkV9LX?{xqZfbAOxNV1J)9!3u#7Fy8pC zihITq|63W$QL>~}u_9Zt8dH`&W?{9hCrbgK(IROs;WmgpB+;QZ6Z%1^gRBJ;CJ3S9 zTnjR?s5lXfY`kl`i>CWYn+tv#oX$6e(JMA4uZscNqU=ww~lgEO2GoM!arM(*pL9wCLt=bvQxkiIrvw@^svgpMA#-O1R5*9FDeaxnQEo*?>4fr-2?vyb z>!XTVslZbv!cRis6yO}nNRtFytDLetSGS0#+y=>e-~UR`!{+5s(*OCV4kJSG-b;g$ zv!!-RqP-j6;o#R%Vk3afsa!x7sa(TcE`o`wlerowZiy=|QNvDgYQ9;AZAi}u>GNj& zDq-i>%UfSBC%au29!P=Gcmhg+RS^2y)1i8&1jJ~e$r5s3j(0hZ>v>!H2fjKV*%)cF;Q*~B{# zrbLajfO0XM7jd5$VmPnqdwyP9h`D3_5iPA)qDf9FiNYI5;$iu!lF{Y!6V9CLc-bd4iXE&W5EHRucxG);D^R&uA!$kA8j_Y# z$d2{XMngMF!}7%^npz6~h>!SJQf{p$)8%QfM65T>wFe3qnQKV+aM{#FBs5-DMi!OR zZ=J>Vb}1Uf{`N~OqhHIuBxj2pfdI7QnwWL0Dl25_oabt()3UDIQND91RkMwJa+VxrB$O|<2}6XWS59Tq zA%wO07|wXzF(f^M8dw8Qci+4uHvp2bygD1J76=0+>raD{XS|OK0Zbi8Y!>^>noW-} z9a9Jct}!mN9LieGc-AtKxzr*}l!q{&q^^&SE4ZaHeNS8kBA-&LRp$7AdEPqp`35!s zxZtuO>8VX9kh}Epve>1wuv|vMXjnO`zy%GWqQMll>IKi^BXsQ+S%Ky1G*?d?JI(d3 zpbhy(TqCbVhQKRXSvNaW@Vc$0IfeN6*=>mxZg1DrB@4lYJR#+9bUtfyPk?gbUxs8j zum#}cCv!*X#$_kA+)@5p?KjSMb;2v_K3|7YG0#lYI&GHXlpB)EI`!|qd|*g^&$(2( z*%BOVJCtBakC@+rKxvT=AnJ9QSRx))K~Utq;wOyD}_S?1YEdi_e7q*treXUTz2VZg?~jY^TzL&l2vFlUpIh%~IDu_(^%dGl$P=axSA z1=0=#A?g|kEZ0bL^$~dNmoquf^>wc6S;Zvfs{|!T+I(IK5XeMnq65mzXpa(dY*MW& z*R;y+Cj-NT$R~t7;lQTY(;cNB*aD&a-+}KsN_Y*WQ&wcWs!h<4e0K1R$`;2EklfhN zxm0vLiM{eK9JMms4@%4V-n#f13mN|yZm-sv6 zU@=RLKBb<}pb8DG2@x?49cj`nT(-{Ql!C%A2`k!|YDfPwzz;z_-)UGTXOI&_B!w3k zBCy#e2to!}uHIyy(_A0rJlEMi&$XY}Vt;uFl)4a~M1ArR+#sv(^VKpLNOkB~-v~Yg zI%JZlw{6%@${;b!oMNKgQAmaZn=pZi8u_kXmei#MIH0^M)1HltSH($=H zQ9~*?4W)Qcal$@Z^^!JA43og2m^e=^M+gI)9wuRhNx^}Ib(-@-lBiS=<^?+s3wds5 zh?GjC(!9k!vRnyWBhB^Ehk#^kv$qN5Pp!6KKGj?+1$tXRE46J*lik50xoo;pLD#NH zHXOkv^OG#~whjA9E|+sm+)s*Qvasfu++qFrHt=1+T~+X$@CuS6jMqSUT|Q94?mh`zrtmpc*nO&JS5U!1U}a4v26y(DH5oo_Mc0FRxGiZHqs@3Togd zB$<9NH;qo^Q4v}*-#fiLXLvi2&j5$#EXhe&*CGik(0(F6FS5{2;g zUtP*OA3iwCwHl%vE}sI|(4W|E0bV4qF^!%GB_BZYk3a5(RkUr1>8l!k-lTf2*Ejd% za0M*!Pb!AEpWGVtlRLprvUtdO?U5r1bSi^;e%6sRES>P`j8{dJ^3VZE{OdzU(iF25 zkbq}aaWTz}RXm7JPga}bU4C}m9%~A#0-t5AP%<&DiLwH@xMY?0K;vH0#4e6ZBzPJ) zqYP(j`klq&!*3@?B}Uy|oKx_dp043P$8BL|KsgmjSct#;Ek9(GAaZ#$$Pm$QDTnS~ zmL?f`uy&(QGZ%uhj;V)}p#zu};BD!qd08(%?C_e$KcFQzDR;ix3;uXn8l+Sp; z;K!Afy%{x8$&josAT|cLpWGSslL1o!=wpN|>c-ZXZIK}qnlVvBu~a|sy(6{PLW2ieXJ=>M}Zmogf0Xr-6p$suY1C zashGpzdil0-bB*>ev*rXWkD%N%lE1=|IZQ;k4;gNw}s>%mJ0(&S>*%PChmn^141om z1ZuRTJU~UH)FFRYUfBc7*cXud$$n!%>Lo?G%_XHziZEEiKrq()8x^?Pg!nwq-e5^OV$gwn9UgYJOx}@kl z2BmW8DN%d(D}uF9C`&Ck_{0hssjeS>FmhJTd%V^}MAVs)?k&mQbulqGKWWYnDLO#} z^v<0iVne(q!z}P=d@<8SxMdWA#O%Klmc62?CoO8Q(geEiqFMrMCT|I_q=|t1BcwGQ z%0C#@OS)rYHEp9^#xfQtgaUvi7uyk(du#3{SCHWn=p4`nNIm^Vykot&%4fYi63r}?g#skGm=6=5i zc6>4{|4?VKw+5Mzt@uHhl7gb;` zk5ZSNyDU>y2$YkTtwRJPWo8d{Ws_WE+-XNq2?srHD3PM|43mT(H1M`I!+m>GvG=;4 zG(Y=Tc6Ll!gmlDKLRN$kkW>BA)6i9mZF$!K+DvfLsf8>GqM<60a5yo6sqqp4!>ya= zUr?Dj?hP>?DSG6>F1fNxF6|PvU2<`kuf3?5@3Iq3eqRr{+t-n=tky(P=Y-VVKv<59 zWy}5>`CLG<)IEi$3noe7NFU`|%`CSySWYPq(RjhGJddmb{>AUqG&xw=+gt%l{SEO| zN8Kb#VSnhNa%N=^35wL^Pzc}3xyvFi&*tQ1kbHwtTE338)DKG91SO@_jZT9co-IY1 z98T8P?LGuPL8%-&X1VE9C4tEd8$zGY;OR6x*9i?AW}wut>avE;Z_q!%fZxK3*srDk@W9%#rj%=|Cmip|puo2b*u)y_#&~a8S}%?Ol-a*7w_{ zVk1nI)8H%&o_JfR1%|3Ttrk~7^{>xP8mU%AVP1$FW+Ev3b`2|>m-kk#pp*AKWfSQ1 z(w#6pdtQ%NGB&ZR{nqpl#b&lMFZwLT7{{+)U5xqmL2 z=l+Ko%a3xELYFE0KG-DdAAI6!{A7tMh{(xQZArbZ!m^TyuGB8IIy}l&_P8a$^6{XX z3^_X^4CQW;h~JP5)Jhhxk5ZS{B6qp!>AsmwG6VEcQf~I4g`gH<5(`S&XQyf>3fia} zE=34-Y?z({+62pBpxfXFit@56Drj;aYmkjmn4QBcD8Z8CE_xd3^cH=h(@4&ajtO6- z!gtth(KRzYDW09tvLgAh5a@I{pKgfi69{$Zhfb&q$|5%txITf1aD|}gx+xYU30N9m z*_r2(ybzMUEcK5EbS%A*+c=fJh?dX~#Tx(NP-2!3{RGz}<&hM5Kx3rIdsdv0Y?=hw z^4{Jv4fol5Jka6cZZZ&tc36tRoLc!VQY)2u&AFBL6)y?QJe(xvNwigJq=BI9prjdeZdb{`vPCGz0gU^>EL6D@P$!-a#x?N%>T8A1JjO7;I zurV~G?#9QCus;%ahuyCws?0}6H&eE@TvF+uhE|~v>2%Jg8>RY)P&dl;aiJb3`%KJz zn2Cky}Z;WLSna5B@jZaYB;+ zUgG*W1+Ya6Ofu>95)oJt(Y*_zo{EX^*?4lp5}W-AEVX5lPgbtLOR%5!b-)Bdb;Ixg zPh|@%Z+I%2%&zuGn3CKc9h09@(36c_@Z!Jnf|E-`s2Kcn^M@axdJw{X3&Vhp342@$ zE7IwLNKfR`1(}}iQ4kP`3L-8c@?;LuThc3w>Hm?v(UJ66@`H2F121yTf=R0c}OM2v1ZmEP5Y3SAEE$5*hY#+RlRic1NTuI&)lMFG*lwy){uUA+50*X(HhFs~s z&0?2V4vV}Mr7xM~wllb>kvMrB)0DGaLqWt2-p;XAkVeI zs+W|80Zc9Y)qt0DH>ng|*p`7eBwc?FBy?w?>#wWm%u<(!*P9*EwFB0hH*eH_w_ywa zXEDiA9+M#CMU4U>Mk3pCCJkmy5pT;rRf!gBoqW|khmw{3&-<4B5tu4`;cM;o*70n? zILz9B^={-33w(|bIXaeFLE?Yi)MR1-lxxHC4xP7I$hI6dPb=}VPH&{ z81pSmvH(galsuU$)hV(7<(TySKN|C#B{w@jJ$LT8?1Lq~Pw2>xq)La~q4aG@CveR_ zU~6pFHzbCPqdnyH5v4=S7M8^#iJ0XBgHlmM?j>37C3n0VZjf5Zszz?*onaQbVL6B- zJp}*~WY6=EWR+sDw_gl2NXaT29p6`-CW3d}=kxlyz=YiUnI&ogpJp6J zC8lXuT;zWilq{gM;bZe<2Efa)W{D=;enWo>GX>1ZWet%rY6>N11lTBYW*-CdJW|hxx#t#3%5bYgU2sBDb=XJREdL>swDuhQ znHhjiZl@JN$ydmSUi1ug>RBt4qi-Q+g=pt8+ z(9q>xDK={s2|i*ZB=MMpuA;GVo)ft{nl}Lfi&U1~!`)S;(+EqaI*aoBnK*V|NP0*2 zW8*0ph5g634K;{ltCl^lV}#mCY6=UExpNcZ&NMl?cKfiK9(DtnRo0iYS@D%VEGABi z$*DfQ%RV*oM2bsMaw*qbI^*Onk=NeUf(GM&W#yxVlEc*V$UXN^(m9nBP+mt;<%`)| zJ@hAE*d$Qu(AEY^SUuiJ$Lm|VxUfTA?bY1w`}cdoaz$8jz?}IHFA1q3DD^s$JdPxE z7we5Ibe7Z51?BcjkbFoZB~`6?u&l5}u6jta6ho2;b%;&K{nx3Ipy-vPa)^MgJJHS| zO5^zgRNz#_i>1g%(uAVrQG@blx-(PZd&#d{shzyp96n+e3%?|Cl9-EgL5{k zFe?}_GB6`^y`?l4TpX$v&FEHPO3zQ9vOXDEVu@e_Rwcqtx@jJ@1E- zAKafR%yd$vTJ)S%`Tb811f=^|KgreFZP3FSBzMR4(h`>0jSV)p_f8k`2 z!yn7&$E7zuu~}{4Ec>ibNN0&t36k4b=;uv)tn-MmWm!s&@lPwO{_4ESuFze;c2Ixq zqHNdwIt6G6eNRI>9H=?fu3&tvahF?ajYVc8f=ffQe*!l$iov)V3=(9g7gNQ;&0DvC zlDFFLANz#Yc;I##y|5&b4AP-NJCr3{LntX$ReoUh-$#;}5y1Xo8gaL|Lk>rNn{n~qE1H8>0XQ3xgt$z4Oz znUZ#iiAX5Pv=osri{~P(mrQ@UESY|!HKjn!Kf}vX$Xpem;B!xlAeNBF7Q|<>&=s96 zZ9OKo5bBjaU$V0L<)~aL&0D8;o$LVNYprmJ5I(Asz25bqEw1IT9TxDFVZc^kM&^@$ z(ot$;ppvB1&fD_&Kk#00zuC=OwKB2*yq@g$k3iFxRT!+_7?zJ&E*%=QLxXteLR1gE z!Tgb*R)u9p^H^0aPnY~?$u6SMocouwM+zUdw*H>0@_z5&nPK^q_o_Kbmf9MfCA&Dt zlEq0luOULY5P7m5OD=BSgNMEiZQ#K}V@l=`3BhGOk4P#ds4|zkg4C zei@UcstU_%zJe`&2r96VA1fl|FhTaNgQDPlw1(Mc*u6CA9DHrQ@wCt=LFjhz4=OKk`M z>PU*St~OGo3o!B)w@EAI4@JHt`=khy74+=r`@Trv=^P)!ekJrA+U0tNT)~91a^);% zZTYmcQQDSxBu?9M-j?LE&PcZR5SL>xZ*ig0yBgs!9X+Ei|d!B-C%GEj$mO!~~rxIFj_Wo<(hPoO@S+Z&; zaGLCBKS6bjsw1n{#|HHOp=}VxhM_Tm~5an*Lxo*-=Y|o1?nYE1iO1KPD3-wnFlRJo8cdqbt zWSheXZQNQx#K_<)n}u9DD`;m;1lpGKw#G+!Th|D4*ddVatxp-0c)UrC9Q*wvM}nY_ z;Q|?N!w4#n9O1{ZW=Dl!i6s3J62EG3i>nRB3C)T*{Bn|FsmKP%_-MOa=03+RQN!8$ zFMMj~CcrXHO<<^&o}d+yv7vyC9U3~@B%D_&Z3ZQX#0HKtIyeYOtokkK@2{>V zelg~9;-+)JlM8AjOD0p(;gH-0HJqzzUCaB+`+ED#K}FFICM-`1lr|JmDN6R>Z$^Dh ziluUGoO1*|or7iiq)$)2?kbVSPj>9gRVGI#4D1RsoSfu3O53^#_G#d41!13S1g)*o zDG5L#fs3(mo_rfiMlHGV`$xr*prj@O*T)C~846tiaxLGoZnzGtBN_D46i9|3*4C1Z zqc`u?)Z9ak&v<)^>M9uU^~(Frb&>^$=YXYpjrZ={{qI~o+bJrMCOgP``ml(Q3)6Hka2m|jxS^rQBCCrNEqr;yZs z%UWM?!m|vK_hoPu!?L|q`=HH@;*edG*AhWOIW#arLlFjhProPEz~aFhLpg z$Pi2v=-~S9w?4VYjL++P^L}%ASAggB2{i1lq!y>h{*xd=V+AYSunQ|K0|D>+@QWa z&EO2QCC|ittzQtk;%FoJ)pa6mov;KY`=MNAkQy8%xkB60M6L;^0|g;89~LCy)+Mz{ z1PhwPJW%$sHkDX@6I$e8=>=6TtjS{xF`d~QV_)ib)_@QS>A~&FFE5JBpEbPDtNUA6 za>X(h>;i=$%#SVAiwVQ-4!}`ZTC(6N$IJU7$qsZA%m$k5onexSv)8$u97&cXULRnT zj-)!ImEzHk&80RaCzz?ksfkp&X+y?&aUql+!RcO%5pOe99NgH~y{-zBWi_D5rln$I zDFU}p0IgKOvZRd{&zy>wU?=H{JhgFOU#UF8965Eb<6fPi%yJ34NKr1Bs~qLHx(Zq# zxsI@b#M{a>nh<3=`GV7}A(pG$5~obeavov5?cYCo7>PPYkn;^p=Q|&wpf7P`l=Kan zzWGEkuxxj9No1E2zmg3UEfb<#HirYHd~j^-w6(gssSQ)h%3gbGB!QlZqY_&7792`h z<=v=-9(l5lwiNMzBf+IeVMC$v;-sY9ko!@D+ov)SsjAv-8J zo6h@KA<0{E>Ex@}@>dK@^?Kd&jZ#R>%$@6Iv1Xb?o8?)O@Fh$**j6 zZi=@IN_Ukeg61k{m%}92Ud43Kf<#jgLUSdwYgew9PR@7*h3*l9nu?0zWJVb;;P+=A zr6crIlf;IZ&i4nX&c1?+^Egsu=NTtE!&THyIj^PYwUQ%ga87$=LY2xxMAsbI8~^r^2I zDS=_`>klMwwAT%gUvK+ncMAjy!Brv~GRSd_3_Mq8%DF(jG}mZK$;#u}C-E#_Nx{}? zjIo~k#z=C>2H270<6R3QUk@>z@Ay$9Qk^5$*-0bI17v4~k1_9wgC zkFByKTgRoAYwRZari@icHfy@2*`y$$f}>@AHs3#cx~zK1jr*gF=hzt%DbL1vb|g0s zut`UfU@Pam+7Yi}f-|rBtvF{VeD^Bx2%>9s{16U;APiuarvn}rqP{j&*XBZE_*2Gxz5H^N822>@68d&G-q-ys z0Amo13R|4Y}o{kCx>X`Hw27HP^I#vov^eXfps(vSR}(Ifw$xhLG4`Y+F-r!SlL&Q= z#5se<2COqd)-3sj7FW4~ERRx!Ku)C9!f&fhL?2PSTQ7~Wky);whe1d744;1U1_Uv8 zC0#LsET1Wg+DFJUZh1%z;rx2;+z`XO%9i+{qN~zS%Pg-gv(x~i-o74O3V1_=)xHH= zI^UbJGq)(H4_6yem2j8bk%8(QOU0cad&*FUoE94Gg(nuG04t9a=4E4w{Ua`9?77-r zUGlM+RFMQRVZKCS(s9fVIj`0n2F!VFo4K4_@_B?Se~7>n1aEE-yr^ks;zs$;wxfhBvgN|FlC zY9V^vN?$1L6dU+~f3Q)(nli_{^-M*`H6F1>j=!8v#yPuCrv&{L4}IdhG{>BgOYbxH zRqgTYnccl(3p+hw(V4)iZ#yy+Geu*4z;`+aHb7J$2hBPLIS&^e9v4MiF=LHL85SXi zC3zt5;+j0fwj6?Y;&NM=%WZ+dldcQHFA$iFLs9}kk|^`u?f8$)WTHvJuE8XF4_cR3 zL~UlXZ;-61Z0Qd244Zx-0a=ccUmU|4bv6fbQ-QzK19$ZZ|pZtt7bkDZh}}D$Y3mjFYZrszi{R1h-1I zOrM|>jQIl`^MSzRwswG4j&S9Ozyr{w(+Ci}_p6y>@FZ|Ye7%M`O9yhAwtHowus>X< z+K8S^n0zhQ4RW7|S+B6pSkh&-rL+CSC2KS?33>odK(W8DE+7lq8Qi)7*NL%YK4!~P zd$fv7l+S(}_4LXYbV0Ethb|snP6pC~t!u+G%{+K1PBiv0NJOtYP*#~Vd@U@=u$ghl zFlSUM$8<_nqU^b8oGKivODm*Trl}gPz0W>tqT{}p&G@F3TI84(#hV$pjxF{?w{??P z^SVFNN-46_94|~$a8T-_DA~cFsuB38T7=w}qwZ zSZoE+`FTI4(^3S}MTm?J?m)7ZHW!a?NE~ zbamk{jXvXtnq!(pJK$M2HI@wMb+uvrNO{6oKEDcvuIx3Um%CWAf-kr0yTGYZJS4F! zJ+a&_NG#{zV(Lvf9TAD!hpeHiU5o^(Nx9o$sQw&3d=={G*wYV|1KwH246 z(mBtYwhVA06f;&N8(nUM0dW}fBZo1EJ5TA0OH8(E)waX?Xyr}$A)G6!69#$0$NVh= z${Ehsobos!u(w&w%T`cAU5=Ob3==WNmNJR1$$(n_L)bco{W9RzgBUQtbqG~4U z!WSXtb={eiYYvLy3u=^`Ns~KM&Z%k%98Wf4iKVlJ>uFn0q26c#*3E6fb*|1U?eB@O*c0Cp!tb$@ zu29^uz-zE28#Z@4wbbz=;Uw{DM={?p+IqZX-_{|FIVke(FFkHOGv$FYp~ICoQJb(6 z#0g!UFes-IGbFD@|7TVgCnrhK*s zuSfKHgs-3P83l*vWjcihUrrsqyun45o3Kmjx=JkX_N1!3Wt6whu90PYNwAfAxvzP_ zazY#sXc=PSC)@3Cv9eZ5VVMv$%}!+o(e>^Qd}CRP=0phQ@!x@BPMD+-gq%VUZoSAM z@LR9uVC4_d%C#(lx$dJWGZ!(aLE~e%vzlQ~w3@gU*Mq?onUBz+d<*>Nq_6C9OpN{E z0c!m|Y@Oq<^?+M9G2jSX|8MNhpPAPG zOz#K3)HvFRB~K!HJ(7H!*#2BfE{;QgQCX71r@(+@K3eoKE}&F-UP-{|DzPMuSt+mV zj6AXALL!?bSk>`JLK90gm=ei?Dl;}+4v%%g!9ugeid4T@=XFq6No;5*3})i%iZV;7 z%500~Juv3&?aiL06Et~s?FACSN~R3^VO`0U|9ho=7k0$DaGIkjqjK8xni^!b&=*** zvo})cpg~y*l%my!{9x8I(+xhBUq;kA$1M5fA#6Qprt5DUx9-4o56qS2J*5;5-*;MS zsims#>z=0yj&uSIZBvZr&%sr`A;!LaX4@lEAyCFW}a8ZR!W)zsyI4gnI^pghDNqPwAa-#h6T^6P>RdAIM1(? zH16o7C=tq~^9I^&!Dv4lB5jY&@u)gK_~@XR=lr+p2PA^XBCxQEDJA3@L?*HDA(-+Z zn$q`IO1TMkNmi~_o28N+Wa*g;fEl?a>)sT7LC}WD^=vhCR+)kDKB~$AN3CPYxTL!( z2R`OsId0u8=^TV#0&*Qpp%~=Yt2Fe)M8zeS4uGgh@Jc!eyhG}PojsQ+pJ7QOA~0=Z zC>_!32k`YLHrIkt@EROC?(Va#HnVQ6rWK~z$#G+HogGf(dF8swD-V_fXer=ksqplk zK;Jt#xt*rmLl}!^Ia`@G=BcF--OQUQ^(7&DwUEvm-bezRWSFxkP-RtlE}@<|fb=Or zKo{R3i$KBBX#{@pNn=tXlUo;=bd||NnaPNzG@;3?f>XAH8Q9+NqO{t;KNpJ?UrfnI z$5Y3s&zg#MPz$a4!IRmc55EOFQ{GXb6sZYSPL;zV#i9sD3a&OnfCq!3g6cApSh2WM$ z`Ch7~xq$Jgc*0dLMUFcLtN~*qGj`lY?6^;@mlE>ImO&E-mqdN87{-{RrnMCrqhKp6 zd6nn-HwC%2HB)-@-+Bwemqz+?vR9vX-Egq?v~7U&=Je?3q!w>JgQSP`=t^SNl2~@! zc@UWdlNZ61{X;b6JfbNDr%YP7zXq;ETjIpc4CGcpCVSn?X1u?04BUjD29!hPnv%q- zf$DBNtOougQV_li6a;Y)IDvz}F}yPkZt?_T>{B;op^Y2x9LWvavZS-(a3$H}ltIY_ z7+Gxj!`mm=QqC#%zoXYf#`B5!q+2rd2Gj?1AbO%#Wi^`*@j;%gCL_0z9Yahg!(pKK7ohp%oV3y=Si5uDcaLh@`Ws|;< z;&_5;oH#2^VbR8$&t=Ou*zy?)RwKjPoityCM4WuzPhwInen+KxZsq`Da? zE7lwzNzj}jW^RjH2c*}S8=M>}EJsLsR_VWTYK}WMy--KwwFB_n_mFB4>E9!ovVv3Y zjxYJ7g-unm5|g%@xYwP#80IaX!u0`DWeL!AR3=NW@ zpD~lJG(&egx&y=xE_EFm0#{^R0MK|FitZ8E-dxQdBC7*gGpva%BLU$71L2nsDF}gs z@QZN}A_>9vrxO8<-$=uNX)d)ke~aLoiouXVsOMPKKm5v$__j*y%MIJjx`Yp%Vb3@IN!n!do7>ueuP|Xjx9avB zH<8X}GXr{Uwsid{));X13g2Dh<7yqQ`?(hjh%Lqb|uC z!MXVB&<|HPRv|V3p52zBYX!cRb3+O6Kk zC3gJeG6XQ036MS$Aln|u~*9w;lbuCJVOkD(#`lM1+yTCl$Qr<45EOPAX%2WMv3mf zNiM@V2{qdToKYaV7Ak|)6G4`&b%>>BM6kL5ZoSS zMpI=^mvY4;Wgs}7zd2Xi=ecajdGg7}-@Nrzbl+(`4U0p>D0oTSsEBcUk|R%7>x5~c z8_ThMi!EbTdGs)=jEg(wWT(mXyssN5B~%tyS3|`4dK{8O#$Rz?A)pnjDpz}F=RBes2P^3*FLTGZ)YtB<23^qF92h4%0oRvA!Fxw zr?N2KB8+!+r!DU%Ng}6RAGcDbUgdl?#+3cB9D{%|F;N>P(UF0m6`hfS;2Dnc*iW2J zLNwJelGiVhPx5E2ec>_h*4i4}RhWfrAlzM>B%0r0Jq1dOl+JI=FB~Ha;8{cjUZHQW zhglwi;Kn~e=iij=qI($$!?QQb*&ej+o(1$}GA zAUNJr2*7W}72F1lbv;8@e|15_If=HSI$s9H_^styzcuRF+NtJKvg2(GstSqOsXX+ahVCQdRDy<0L4IDILw z7_o6;KuS{%aDJl*j@a_d@XktoevsrPzpL;6Es3Xwaf zpxN&pvK$xFTK|CN_*vB)Yj9$7?0r_QcgcL##GpIJtu8rY*YFY4CMZkBVGCQ5-z3p_ zr8W6xN|Ps(8y0CxQ0J_%xmnuxOIkNU z`L75iu=MK2z$wP=^JMn|pwKDxKq)r3Bfa$}P>PoPU{2Zcub7e%npx5r1%{b6YCw|Y z&T&+^&QG0*a|&Sl7|XFoQhA#sRZ=+!Nu?DCA*uB47;%)mVpAqmj`C0_I%JMKtS;Sj z+O+gkgvyxcR+F^$XGNjq@>@=pS!0b}A?j8Yi!RdWqW*alK(9qbQKt|D?bis5b!ke} zUn4S>!ZeQb_Z34#4rV3RnV z1fyZeLpsSJpTrf{olrsuoUmrrO*s@~q3(h?F;F_a@h|uq@2K$3Skl4kA|m|xi=Qzi z!L@?&82nun$1+d~gdED9Q=scJClE5*&pI)w#FQba+{C2vU=7PHK6s7Q3eQP%Y;%kk z(H^@Yw^So&YC{w&Fx9H1=viJ;pt8_esJSfxmp7w~G`a(F!Q+_DNS^tomWn~}fI`sT zIxtqSf(nmUGik~_P^i)P{`)qKgp_0Sz*18j?nu7v*-BMqlV8Y3`aapr_1+WtE+U!a z9-Bn)yDyAR61@^SiEUhse3D2g;jyPYSx5IInvRM@BN?lGpd4ykJ?4licdnMK1=%wj zV1Du+KVwTM1z55u@I!%W)kYGP&M5_vQ(%16w2x!%cpl0rr?(-gw45>~m5Z2EV#*_F zZOmpjH*`}d31-U@sMaqKpo_8$+p1t&3|!QY%n$9PmP z(#%3^Eiedd%d=Am;-2TA;~Q5!b6PgfX%VRTq(_~Uw=IA5Dr1(4JrkS(&r}0y)9sDA zhzQi1lqEdxryK$;<)!bDxz8p6757D?lWHNqiaYBi!=cBSE=FPaN&)Vr zB?TF=K$&CD?w+dpyuv%bWf{*KC9+JKog4D4BjF~It;)&6dJo_4k>DR%)8{#5c3F!n zJ|fvTvW>%%2oAO+#HsgBx>FQV*5&8cOUODu`36QbkJ^w5=t8Dihx3@5nKWy|GoH=g zgVc$_+L2sPB{YwhT!TtzY7tTCD!xz%T*fy5V}mp$LcTW6ak)dP-vuKsnjGpbs>lSD z-pH744a;P+r9WyulUM5t7Q&w{Hob~L#xdtBbU{qBjVcciZ9q0^zaIaYJ*0Xl5=$hLb< z0rg13NCia}bIK^p5ZT6@exMtBgN&POL!?Y;xPyc(@WR3>6m`h@)*+LJ$X8Q48{*`y zTl`4XF~^iMm$DBT&B;EasqLvg{8yTjD0}-Pa~6j`9EQ6uCL8?I*BXi%aVTzd=h@o ze|7QvsGk4Pzx`Faof>i@4gr=>TW}Xwfs$X{tdq!8#g4+R^W#E9gcnZp`BpCIC_aps zBusOXNnooEI(_351iI?9>p5j-y>E~$VuQ>XtKJ}M8sFHr>dY43)5Kd12Dn1(kX;V0 z)FRv7++Hdyw9{riRqf6m74~oFd2E=vv)Q7eM-}gDGg!s13aZ~>~17`jPs|a zGU`IUac#Gugj!f!BWv0c$47|GGVL0XNS4^Mc0Escwi17{CV{+iVyP@uiEJ5`=3+@- z!}RCsHgr14A)f?Ga(QwfO9%D*C!ivQBc&Kg+ulfLQjB-`lxQpq2coJoRh3&%k(eOa z8?nfLkRh?8L!$rUWYr|GXiAT_TiBu&4Jv2zHe)WQs}iAFm)&k$s1pdQ4?1KN%WT+OnxEI9aY1v-XY~>c^|W{Jly)3!GI>Q#*-r_LkE` zvQO>rVPChAK|Xgjh*ow7jPs`hj$@ohkD|^fAfXnJz9WGTXs;`7(3^z_10jcBr*P#k zq=3dM2YA-P`MBg?x97y5{|v++Bbd7>t1RbFfngq~K~6DersCuvWQ%@yCVe9258x-w zltO=FRK-aTly1mKR3#04hF=1vH1Im6B)Se|%D`2nNyOkc5!kLUG zRWj7Br<9SeD(bisR-HN?TV&PFkKYBBrAL;iPu?DV*dyz#G3B;SzLTi1@o(vBFyI~@ z44fviPinFQUSwqZV9G!S(QW=CCKkl`9>&>KMkC1Cbw-79Ze8=0B&*Ht819nNBT<;h zSrahLIqjDsD4%eoeBuw72}YNa1WN{DP~3r_=6NKT!!VC)5F$6|2RRnMo=J_GG`?*r z6NcnhsGSfe1FK&loh;Ods$Ni>;g`%x=&>74@+GFGEbZ~stABBtJ6RRDtJ6b_t$NvU zdI({Ql(KWLMYiCnDc=a(@z5i~D-U{P)C{}B9+@}Ecz(%M!`cFa?cLS-(c?a*3&)n7%bV%-1pWk0 z(#2a2g-`OZz{)pR$(Gvp7l}cK%%DIGinfg0AWa^zB&4hESf4;H=u8Wblf^zx5-8QH z7(2hN=iRZf5I;X*Pi@3!`Sx(^M{Mz@cItU#hlt(Wj`R>@idMv1XC5Di^+-`?<6)Bw zQx;XhqCm<2v_PBI8;gCHtn80;rg%P$JuNo6!j#RDX6{La<_k2Dkk`}$PbB0uE8Uow zQvIj*kqjb?^Njea{KhfP5#+3?+;$K4T3+4VWt7Vr$<3L!XmmauP8Pboimpu97c-44 zl8aQ8!C!i^r1wWDFR>&C4uUu(Zb|+5kQ($PaD%=H+#vT!X*j-nUCM{#b;5!vPLi}# z^qEuV=`GxpLNv_h)<`wz~s(XR|8r> zbw(_#CJ1WxfhH0Xo6Hj%aU(skp`DHsK8j=zEU8P}G0u0ma0EHWp5S!C@;UAM8uQM&*D@H}XiSOk_zz6}TnuGlL>EXur|IZCN2mOcnR+`NeBi zwNt~p#njdjIj53mz>Xd#i4}%>JEoSvuBp$~uneDo2dv)L$rK$sMY7HA)9=6FA-X?pM+2Uqqk~OMMxo?^dW;10# z*P;FkG!d~}MH2};k&xM#=gE|V18HsFqt8*DVQ}@sncPFD7cW(9T9(*yw_9!c&}N4` z3f)`BRPT)A_#Z>UeHB-c`7SbXFP-G&%%Gs|>z1Utt z4sp`e8T>SjaXiPA{KhE9k#qcqR|BGka3_L_u3GB%5-SF<83n% zkE>NzwUhg8GCknXCi8t)K?`8i@<5qdpX{WA`S*P?!PbSm>sV{;6|PUcsG1@afJSpo zIZpX`A9=2}Yhs4EYYvGG(%NWiJI48_64!R1SJWQ$nVbXGZJt9mfGIhuuP|kyt|NTM zg6civif_0yoh`Ewp>8N-x!dv_TZ(xZ?nz}j>idWpGeRh8Fk}quISxzJ!JL`D4F{00AThWe7r-y9C zJNEraPCWKH-P&Yf+g0q7S;sRjyb6JmmS_4s#(P9+QHDm@s=)^VL`11hFiu}_=W+=3 zwMcXQfam&t7KpCS-@=pu5qq<$U#HOv46UAS;6UuVTl8%v75AT=2^5O(R7=!s>N!B(=zUboJyB9Bs zu=rXxqgp?W;tXvkzNHEjsuX)Nl{1c2v(z|Bjn2;VJ?9u(YjQvIqp7~{PFmHkYRSh^2<0saDf$91_FkO}17=x=e540ZV^+;Qr7%RBC>!e4#dYH)F z1FYX}NV;g#&HFea6AD_d8~n~nCLqqHU&F0sY!B^}^YhfV${BJ?TuYbC$2;AS&JDtr zaXX1{u)qCwZhLgFBoS8oOS_oT!=zB99wx^YCR?q*9Z!3F#WH2?K%i=|MMi@t(8q^; zj(e^W;4wd2711Yw=u?vxGYNhcYJ&%=DZaUk<6;2GzEkGQ%i6|_j1cxm*7Q6%5l^R2 zzHx*j$n=1J#K*aP^%+t7dg_FqJv4J$6@k-8`B|0Xx_Wvuszq8)#p{W1b&lwQ6<&R> zAsYbeaU$2gro!xx(lVjVwJ4J&?;3=1DTy2E&eP1ba!XTd@TGE8nnH+R$w>0@-6WCa z#o2GV`%R{l)bYD_uP@$RXyet3Lfo1Ov3nmTCqqBd*(d{dJdno;3l4))EUe^_fM4er zy%+f7`Na6+jeJk^xmkmb6w}A!q}K-3O>DL*QsEWh#HA)HZdPwO$2^dOV&`msJ*-8f!Pc=daL^&6k9Hd6k2 zphjZ4y&+%)AtLo)^nwQ^qRo<27So#aj^oEia?42aiY%|nl!~!|=7q|iOi4ZY?(5g@ z{`d9kZ!zU-g-J|FW~x|eDjVZGhDq+riMZodE~dsEck(zV|A0MyNFNt}JQ96GAU~m? zuq!Vz$R7m?dF*<&C=I+e@V2M-$~;bb+tbAz63!G1yZ1e5X?TW1dKGCs*bO)kA4PEWfYv+d_&AOe0qb$J>KphCTie=fO^2u^ z9im)1L_DI2l0zy9srZx=Y^*I&z$+S&fv!(^^# z?IgyY%GQ36*$`{b3zDw%-Hbb4Zihp-;}v;)C-yjpC)4(At$M>tt;rmE=3(@ZS|pI) zFAcoy`9AKUJCJs`vqDtr$zi=xh?CWVrRm*WS;>#_2sI=w2bau3<(62hqAk}VZ@IB2 zF3+9v6EmC|U*u!cyN`nRu6WN`2E6*l@#+Ds7nPjLO3Jx4XCBv>nG8`E@9y(p)naiS zqMDGX%7&>}wGOD`${+I8O4i{!*(e(`AS5TL*yA?Qa{74g+Pyf!)guvo;B1M2 z7)paq*g_XHaAIljsu?!X`6{}-xWl2kLy&j40(g;4uh-mZ^J8+~vh47s@@Tij{J>j| z#AUgS<80>~PjLcunXk=)q-;5_1n-05y-VKT8?2^2S*>8seChfGEza-1{|-j5P2N_h zSi&_;hG>R@;gWZba3JaWOgGl4)^?mCYGjmF(LZEMpL!GgT7;QSRJ`3$k)53mql%vVWYJUH@?PtSC(k4JjL$ndU<{Y zQ88t_jI9djipR(s&zJkX;{Z^mM0ht%nO{>q4vi~Mwo>HdI?${?#Q0x0Y7vqMAD^M67wnkgj6yymeGb|cXCiStJO0aDI8R9&lWgA~An?PF zKao?C9xh>K6MM5(3IH=6+<0zw02~zR6D#~~jXaQo0CE8VOh;HSV=42@AoO9PGe>M` zk%5(m6b5iKG~oX5bcaNb$(+Ze=R4@MEGUAe)7ey0pUd?Uri7hm{LI#Aw{)C{Ntc&r zP3`hlFFBkA!@`W-tEtf1JP+8Zrx;*u)w8-Pd-VeCffZI!8Bw4V9~B(wvk;}|#7H-v z;#VPK9y6E{6=@yxNL%vcWq9cYdwyh)SL`9BE?3t-t0nKTU`cGsz356yJ0@9l9 zr>FTGR`3vjibxJe0VouyC>VfJF#yZ!0|y|V!kP{Qpqj0@YPJS=x}9V4cx2!+pSASL zI02T^xVo`RCP&a?lBrK_Oeiqvf%9Yr-#j(x@=Bxn%SNB=f5MW%EoT~O`-xL%VM(K& zcIt)FgN*-or#-N`s)`RNcR?F&0@F=BP--GTDIrQxpVniuDi-HfF}P%4c}J+Vgd|?D zr|VB%u_t9Mm=f7Ku_Om5<8=LSTT_14JSF=sD{2leAA1PEoDcv<0Z@WaL4#1dq zlLH8#gk-DOInCB!7SxA=$Y2vj2E;pbQ=i)kOO8nsx&FX2&2!CtVv}Ut2{7f4wsxx} z-m0|GR<1cV*C+DbCsb%*biuKzYSt~Q2I2#clS;A@ab=-Asge_MH16Y&#|%wdjKUFZ zGFj>xkNx}!Oqub5J=hcW^NKxu#H%X@2Hvt8M}FPk)^)W?<2dPgS_*L~YmZBrdWXjo z@c;oRds%}5P&P3D#sPrt*MR^qnU2AT(`;E_V4|(lk%8tub1Zti6S+_Ec$)kyH2GQA z@MXOOUwdf;gJGYojrD0M(P>H@UBL9sIhGVv1L?s{OM9SHZWSN2%BoB*Do!fqG(hD^ z2~Y|FHBvkhxmPvwp7kBr^^z!X<9%RD(mNPK{!>%2_X$M|M3mofzKRvU-(q9lvg`j{ z9G7%>+p*D7=DEYAj7E&GacI((XuqJ{6avt{#)7XbsaI9*iT-Ed3)+ODb&wWb(WbS7uUp$_lY1 zIWRCNULrG$QH6d-mKj7|q<1hw@XrUu9xRCj54PoJP9=jaWz7C9ogf);Sa`3OYn+ml zn^Jj|xKr{K3twKcWE02YLW)B1m|{x>I`E0~5E?QCiVF{E4poJJsbq_j>6o|knyqeN zu*lsp*$fPr{Olb`ezs^G$FrY2evzDab74%o6)MpyZM3~;-gF|kyEAon8?4ONR6Whv z;hdvZQB_NEi4z}KRdq1nh%V;*lZ2Gt!GORM>94_qPcyNlBscpNi(N1^<3jeV3U>mQ zg!qy*=YRR@-^6dilDC}8fg9{+agj9TEfWIxj`WpTMm_7C6FKy(EuE9(&5k&SIeV7a zN5+V(Bm@92gFkdYhq(|PauOXB=};-sA%!W==t(1Jw&<$z7STvWTc-m9fpvu0&tiym z%H#R;XM8UD^^Nw~hLQd95lb3vy%ycBIxywXY3+0j1#k59q}`gTc3g%&>?Jqg=;SMz~fqINpos4U&^iy(fg|ydw`h;66HYFz> z-Ri;#%eg-lo0a2O{GG?%cvq5tOVXbvEJ6CSrB;3vQwI6ZOgC$M2I&?@{Fn?+wdgc@rm_91 z9oy?=C( z#mR2^Ds0&lU;YV}sHERD0oOVu{Y%2qzCSe(HxpM2b>w6=P(hV zL(c;pQW70TN_435#3LR4FfK5v!>c>0&bs+e^>~RJWOq6NI%fhDeqivc%J6cm+UD8m zlqT)8RUsbM{4l5~(Ap`KyU}f_?Ur$)-Eu>~dURzvl4h--AQtQa-G#P|rhr4KH$q_1RWgsq z{#D+-CzChQ9O9MI91Q0m)sh-ZQr2tPl$lmCS3-0U^<9W`I4gcKE^re+6}@sI0cz3` zO@PKcC7A(TJgW*Xkl}HE(OKtM)ZuA#&orvL?gZX0cD3=2ibQ23Y`2s;oK{pF6l|E9 zkOXHe6I-CFQ_Ml|3N)e2_<+QS!)=LAh$U4^!qTr3C%;3One<@GzdG^dzr&KZV##le zB;h5wDRuB131ubThxB(7_%rysaY={H7>L(~KEnkpg*ho%RKGDm;h0LMZcF z;eZZwbXyprPk|%MeAUKNnZxVW`_$oOyb7rk`U!`p(h~J}kE$(MEG)Xmy095P4IQ2e z@ggj;w_xF84Xbl>*}0|SOFdVSL|04R-+%l5{lkY0rcBswLrX-jI`L?Mhcq^S*HeGT zwUh2HF=`6%PG>+( zS<OwKN&Yg|YGl@78G|diH=fA-u(S z8E0>-sya>?jraLTIbLh5vLN1gu62yAij$#<<~R!uE2oDPOMd$XV=@fE^G4nwncyd? zu@qlaOTHRbQh&!A2cCU}CBCMrX80}q(s@j*bWtemw46IKhoL#HfaWkZ2V0qcA}oj{ zEbsz6$Eeyo`|+(hzxAgb9OL1Q-(Ndp;Yvk$5sus2- zY+0sa%3k&SJdwUDSh6yHksgu)Fj9h%ayeN1jRocq&ktaZ2AP9sjtSP4)P;9Ej6fDQ z^_?sDrAw^DO>Q+jhlK^c;>XAzru4FNKhw?}UMmOM)s|?_w4c^wP18EB=~RGEQ>wSK z1|qDXhpSs+)y<=FG>pColp!5k!W@OIz# zXpS>Ma~PY0k~oVBIu$>|bEqjTo88EP=I5p?F^6Z;5_5Qe9N_29l-4!ww+^C#b`V)<{B0NKAcdslyRkmbu!Q~11;}OinA4CU3(7Li zk4tDtlbMS;8LWao-~JD;tDmtaQEI+dQR_tFNrWJ5_^9jkk|T90k1xU@nKk%D4Clab zD9F5cDVp3`19RlpZ8Ap#&9OodHlLpzulSk26Nl$cSQ_LHm=)ZtyK!^@m) zm;?>;*~#!!gdb_s^mEpdRNjOkesroXp0AG-#s}g`O%jwI1|Kv^SgBmA`iU z9S=#Pa~!YvF`vEBeDZCaIKMR8BQ}ep5kP# zG9n)*WK5E>!tJ$Ocp;^*IXX4JpZ9m3rISCmU^+KRAQQ5T_D{t4eU0%qjTk@ALuc0% z1a<1-nI^GJ64We=9~y|JLh6HG$}89oGTu>Hh$^U_?BA;_Xsogz4r`?)L0`sqbi@F$ z+~RkwemWIxRt^ zk|Mf6e&2$8gGC&xiZ>f(14U3+7gtSCr{c5POabZxsgKu^DFSYZ=yHk?nzA4rY^{^6 zf5A8VS2x?b{`$YLlUi#fYiRXkJ#)v5^ET3K8ueeJrqar!oNm)M*mnZ`UCL0iI)@@YdBl#KC$ zUmC!G!)WX3D|^uIB|GpDu2LGZ_=ea+B~!C^Lkq=8t?sVKJcw$@8mT8yVg1E1h>M95 zR_ZIbit5cHR)}2njFlyd%%wn9u6|h2kNz%eVOHqwtm>yzmCfJrH-50PiG+qtl~Bju zSx&nh<;ND~KQPK~b-;&Veq=>)b9N#Ka)W-BRuwl%P}m3-Yn8x6LAVTnxwu@5ptnMq zM560F7u;ws(UG~52Kq&T0Xo-5MmzFO`Tp)Jouv$2hAAEFq0|QCx$EYU8J+cwai~)E z5{w9W;#E>M^eA72fR(o#YbqGxbh08X$01g#Ev(vC#tJg$9d~E&ICFPxRjl#ju()Hw zq_zf8?+|=a-!Vhc#A>3 zM~RCs`0r~(Z4O;#f28xt5q5aO3N2F}fB{rf#rQ?je!ai{yR+nbpkMi-?V5jN0a(!l zXGHX%-i}w+Vby0}azPepnV;FD zq=B_&6gF~CRBJ)e8~usoK_t+uZr4o?12Fw1~Ab4Dwc%l z-a8Esw;g8$zCB${IHJRQyEpPQPI)`>qzRNx$jYgOm2)2BXBc@{PQBt#WqeQ2a(Wt4 zB?n3DX?N#if>Z7;r7l+eU2JLXxuvy}Fs*IU*k)ck6vrM7^(p&`f)+5jwOH4)h`Tm= z{p(hH5-s;US{E4m8+^G3Kj>pBbLJ`VdW}TjHNjrQBVDmQmUiZ$saE8)c?S#t`(ef# zj9RiB>x)M0jaY3DlZMTxPKToXrSm z>i&{Tbmv0?b9WC-V2-I`yY5cY+Na#z$-K5oW1C}3G7I$${$c7^rGL0sKMH)EwSWc9 z4X)T@>MmH)!`Q9bW9UgphzyqDcN z=8L$CV9D*62^j*C7$z_X1{!X4L2tJ+Z>o zJ--8;$sI_6mnyu*PT}`Z&JdJRirYa<6x z!=P+%yuuN=(emV*0>!3_AD8rYwRt-wr6EC}_xj_+HvQcolzi!2!!Wb0Y6c7Tmk~@U!M@Mi3?urw=$Nmw-iD64 zOPd?I#U9t)Fn8Szv)_Nm=bXT6Ckn4uukeb-c>MKN$q$Nt5KCgY@RF^^eAbl0jz&Cp zYrc=!ZAnw&pn!2_GjVpSf@nB7gL;b};_ZI3*p8%}wUTl&cLQ7!53Z~n?O@3O%UQ5M z-!ocH$J-5kbe9IvU8jm$4^-m3>k7V3yF1f-8SP4K$+W#i`zB}56opINMCR+P<2h_? z7-*@d)7yZR9dB+ha;6h_)nis7c240nLYoa0UY`7rvJULf52X8~X^$YCTvg31<_}=X z1*^_{L63P@w(Y@`-q{s&cJOxmy9cqIf^ybOj=m`M=uGh7an59H#_a=G4*u4>al?{v ze8k%+3$R0m9D$%rnXZ_ZMQ{VZ8<~HV7WLwL!_O2*6`fWGPheB zte20qo^Ef0=Vn@S!>nMHBxXX3+l}LSW=Q8TA(Jzo-md_DnC_8qC;7q94}_EP<9DoO zz>+|g!wMz-P6?qb&Z#2kptmz;M^i2s?i(B2!NH9VzI&NgN4=#;vhCRx6TyfXi zX%#p0cC({pTq8lW>$nYfXQ}N=lYF&Q&Y_yY;{7JeCBAX-zD!q$tg%6MRjc6{%Xc;$ zZEd)bQjbCPqZeQ6c|6p5_AyOJK&&dfo+(Ym!O2Vy*9ME}7)QWjPDjxX**nE}u=QTf zc!UYds$ynnfF}TXW#H^GIy*zdSt?V!9n9tN;PsyL{yo;Fird(unR>fv+uQX|c)Od> z+eNK9uCX1>-SN3g3!de+)!nHwHdHfc>c*1Wc?0G$ZPHw5O1iqEjSZ=ayPnTmKz(iH zYa#X9y?m7FDK}Gl8}{I=_TUV8YdpsmD6x`6Ov&mb$2G%vY@(z!#!B(n!IWEfwMFHr zEa|QDXXI4z%FzH14VGMWogKZMcXoz6Qsxn%N5q2@dbA%Tq#o@zHQp#RB`mMlqgkhC z$;!B=z1`rXx3fYny`6H)EVz+n0ZEo8|pOS0O3{jIEG zDk?Kc%CoP5J?v~_F&K7FMrK4jMI5T*fo3<^|F?&oW*!|0^dNsH8!0<>A5C2!!Hs1w}NsNJ5iKox!{V4#FyVg2wkR;^p)39sA zuxt8U(%i2*;ba z@}t0a<+*Iq%HO?|;V|kDYY;uXzjRTLj2<-gIM@KwE=xA7yRP2P@F_p8WxfB@^=d&1 zRWLjx#N$fwm?U>=v53cVx>p2utf5;#QIL7rRWDw^_&XPR*v;dxOQ`p|V`9A%Ae>CE z^|}buBN{%Jns+-4JH6Xs+F`fLom}5BJr4hJ+L2Si^}T&YFMCkx2GydeTySt*^ne|TMAjR9BXU`q{?U1LIJW@*; z%2@1nPVRQs>YnWGjZQmuDrUb$VcqoiP~iI}&o^|x>9V>`q}I)-!@CH{jXNHtWv8op zeODbaC0X^skRrP4) zVz=Y>m{C>-)C1E_wD)vpbA;rg?OOEluvO`rb{wllI zRZVj`q_W;aP&{q8$i`4H#Rw>%98!?v0sobFERm2GequlU5c}!GAe=PYSBeOg6Z+gl zUE*1{bdm5!h(Eq#+Rcuz{lt3ruYud&1Pf$Y6m{hEFuw{t^|4_GOegPl=&CziR&S5H z%&K5B7lal$?G8>9*6}nHS5weUneqV#kRhY{z5=y!j9dQV|$kzJ8Rit zucJ>nOJ%(+kwqISUQWsm;c-WkixLpw!_r`;2PVkQTozqF{rek1K|2F0qLJtu&u00o zquEo7JEl(P#)vNHRTH`qoWduM_^J!@t2_W!a@cu2>%GusCyYS>?Z%HfC?PD&a%T=ha={+qJQ-6by*aoc+T-^ z6cHYtKIJr=-KvN^qPe!B3?BWXrYraNK=DXGmS`(e=D2C-Piy#+V%9Zs)_FVY4*L&q z`jdur+mHJ;8X6q1R93jUJtvA9(I>(*v-VS;~pl4oiQtT+Tq<;QBC2uq2N~V z1L`QJ__lSJbaB-2q_gpqHaF~^L_S43cCvOEn<&$1>RpEK)1=}hZGg#d+Rz{WXF94U zhR59mJeFzdrw7!)JbcN+cgh^6LhETd)3dJCvkusPzGHrPzi~99620oJAw0;ITIw6I z*=aIMKI~4F8g?@^>@1$8fLW1|=sMj}i)IR{Dcvhy6;3#)tfQQ=<#LLXVN97$v3?!m zn98sN$Cd$&(y=4^vaavBco|p23zKr9a85Xu?}THKJeG?5jyVBY4hJ8;B&k^M>2uY0 zV%8-H8JH|Q>*i|K9Rac&P2&=Xj4&`wQ_X!Oky$VcHoG_8>@r`zf-kRz-3i0a^e|-+ zb1#RTsix%JlpWv5g*8P zo{XZ^YE@9mC$(88fpNt=mWFsN9gxL)Ph;hfNJ#}L)pn6)U1+#Q1&J%>>ArW?(Luz& zCJ>o#s;cy5Is3!2E-mQ{W`Qp+&@5xdym032utO2k+7(MwQxuMFuZ}pol{n(0D~=PB z?n!4c=UEsNcHI;FIsl0gPst6t3cbtyIjGe;6fcP+$N%nlNV^6d1L*8daC-{xgez^c zOQ?ard;+p8!k1imnu$g6{!XD*0@A$lR9uH2am6$Vv_IgGF^H_RvyQmbbDnj=n75l9 zocSqgnDGZaOg-!hG%>Yb(Y=KK82yS-!{Sx6Q(T;MN1aWMTi zu%MGnByeH1NyW>{B22LWW7$)CfVPD1X?RjFnHqHAOEPMJ{s$Uw6xj=D5OV%X+Be&F z?!%XKe>VIgx`L2l)**t{TsdS3M8+AkL!LoH2u;sAIP*v0%)^@JSqE#rP<{o5-IfiD zr8O+j#iT2abu7dg$BE_vCf%Gnmz+&O787<|IxW|E7*nG*vDK|Zhjtpi({5T(r-ZVV zi^SF09s$;&gL9yE{A-7cSXPCN6Mb%WM?nR)YmFT8mkcGEQLFzl9^JpjkTlrdLxbH{Ns=mcK?lMd08 z;uZDT_f7WzDsDZ>9 zcnE(UOF9D3U-BhEH!4v9qj1Bn#Zi$=iYpq&$=hY9e`s2)DGNvYBC7Rq7{~f=o!JY zm?zHyVKhe>qcrL8sNm7~mW|H0r?D!KiC?^rA*^S7tLlNXrx& z7&|=c-jp|wS@)RFx=EUKsMMlUD`y>(ba~iutJe9fR_oELHJ2ROG;*JuF%p9=O*+`F zKa*EiUSxk31zJItrlk(XYYvwVQ6B2hM#u`VI^l=7I_GW^VX)5oLr2!Re}5y?K*t)` z#9T(OHN%%KCOqmo)q+vCGovouqj}VIOU6D&$}v;U#Lz&M!;YSt^B#>_iP6QZdt}c7 zrCQ87)Qq08TCM0A;grL_Or3IE7pTRc+jv}}WqtMt+Z9}C0hSgGTCUK_clC}RsY82r z|Iv+>hqN?JCdK!})rnx8{r4R~BS6-P)QI(=!$!Q5L46-a-6W1W#;4*OP3jsrIgGj= zNL=s!TjWH!DgXUE(X0b79;1%-LhvJI89+idYEh|0r&f6ufJmTbBuoqRjC_rvk##N5 ztaTtoD9xe<9lNfG)aC_RKj#Lm@LeS|l{>T{KzT|fT2H#z|~qlHPg43loP!8N)Yb*x$txCT$|I_d&YuAtQH(5T}T9XSg%>RuZL zNH9S{aCFnG12c(cohjAIn$a)zCMFpw5=A3XtZhJxj8!9tJgr4Vh(QO}Rb`AW?4XN~ zk?~!B%ML9a+)C={x$u8c(9lYVBzglgaCNq2ghu=)K_fto=&%uGc}Smf229eF7xbt6 z8l5)uJaK)`qb|S!cOc3MV0{0mYn%vLVAP>en^$VL4VX#r=S8Wue1HK3iiE&OfFl8r zgrG%ov({yg$MT@l2_qXZDqL2e6&WMgt_T@nr%UVkWFMebWJ)&lA`cUi0_`dxl1Ryv zC8dCJMiQtI9X8^0rr%S2lMeV)T%$EWHR0lEj%Tc-Q3r&C zU`PO(1c*dVk$3_|LUAO_HK%cC)_%@i$`|!{t^=kkIdw8nYh72Y=eR_pLrZ<=%cTP( zfsiy|MAC#2N#RR^k+cFNiLeo;)6Xbc>bhsrRhV??ZIu3NbVI*Gml-Pwuq0#(Gh7lz z-O7x*6t!T21dvH))Ya|^P5P&kEvSrvB9X%)i^!4S(ip#`$Q~4*a~$$TeRpU{2L~R! z&vYGhU1i27{;{O57IUxEscf!zn^k{FW2*oaQFAUl7Zbd{ZSOiB`w z!u?*ck{rX5KnDaKkokZjYSBCD78rHFA`969Ffv|IEGm9S5f3R!4{F(!#>zEv^nA~8 zNwUCl71R&pi>&9W^0an4$My1;a9x}59cY08AgL+Ssr=j!KD+yI-X}!T9W#Hp zKUllHxBx$#&FS+MabkBa?pPmO9P)<6#paTR_8`a|Q0ze#f$XeL2#TJhS>$C+%9Xl7Q zGltR_(4WGEI%U~H$5&{~IeUh-maFJO=Vj=V3>b03NFJhhZ?O;k9?o_&_n)7cbroP& z>j=BLzx?^*!2gJ!lG3uv1OWMGM^c6-omb&`y`M`GE@uj9LFfIv?F$v!R3T!8P%Q{s zh!=zT$zar@^{6u@6gp$5NV5yYudFX|(GewSvZ36`UZIWS%915%FIcW1y^At5?$F9} zWz&^b?6^0qUpm%RtV<@?)w-nuGtsVQOuHi7)!mdlt#IQb-qmLyfJ`vxWO!bu=ZE)m zU_ihD!Q=Qy74}X#l%v4{v1tp?uVma}EmHLSBBpYoP#SwFwGD-mG$-j@dea2Z4{?Pi z$)Yju)eNBbl{`bgm8K1C@6gz9z^`4@S`Fd{mbEFD+KL-c|;48JD4^2A2KoGYO{b-Z7;21q@D3r#~k)}^s zi}RezZaOY1mez!#Z7TW)o9BDPq5*ohXJ}Zis6%5p|GB%OuI^^!TXn3fhn7k@xQbIR@SBQ*>L{{Tv_=Jm!G3gy|0AMYXuME;udeCr(=Y*~0`TgK>$w#zpkA3+q0JTMlWuO}7A+>7$y><4 z#h4ETj_ZgKmEMA8C(31Z>+TBu;3M?CJwlV=$~m!-D>T1bI&_An9Ah!f zrS}OyN)vT;jIgWE#Q!+a0z*}i@Fi>dw}{xz!FL4U(OjbI@%6l7(eliqWpF>|_Z&EH z@j0g-;L6c-r>gsyYC$CeMiiIEKmn?YtV_&eOL9 z;t`kVvGsh)>-mn?^P&BmCtYC!7sHe8y8AqX<0?R|gH9AKbg-fvLSp6yjg%N#?Z`yS zBlN=rIkDm0oH52c=OVOh5i;pTk*H-4{v%?`=qHg}$O4<>D3|@V_1@Rw4$aFsHzB^V zodf6+2VKR3ZfHHXqJ`FT4qPBRgQmNwx})okN`&tJ*#e-oqRxFMx`|`OB12**wcC^! zYV9^A#>jr;#Kw2?hIrg`9w+(=eZc@`T5bqiwn!wGRpOT2e=^D?9C#kR*K_XIepIvA z?ff5GhT!!az|PV2T#1%*uV{H^(el*tq^qux3!Zd-)QS=;*C8*8aIOxD#Tw@(BnIak zDY4Pj+}8cbJI8KbgrA>Hm;#Yn7NNZ#^sj(L_@Rc~3MiK=xNK{d^Z!k=*zMeAMF0Ju z!$aQXC5aXWy9kgOix$<1Kmm~9F7Tq5?t%)StVKAELw{Yd{Jw_7v~zA(a~l&w-!Frf z&D(ZYbv4-!-?aybKt~9zS#w3XBybtr^V`e0?Lycx#Nc+$AyFXAY)aI`M87UtZhKLv zyYp+cTmkepD@vad7ihf2_RT6580SDyBP3>=bEL%VYK|jx{j-CXwN>X#zIeYmMQoXK z#3&?(H=9d%^w?Q6wCN#Zta9)Il7upnLkG>@+Jc4UVNCFlos(+!K-G(Gb5A>Q+Xy| z+s#LpbER40ZzJG3Z*S*F&oGZp#bJi#$tnFWbrn%AiOSQzn-4h( z<&KwgWJJ-1kjpvvWq4)faznG&oahxl?^&||TQDqICimd-idKZOqrfiEcRJT{u3ft3 z{M5R&&5`yS@Xhhoklf7i`ohbSF$HATzcGI17}$Dz=*p<@aiGsdx-3r9h- zdCqB{8(hwzS^N#nfyjS;lvBzay6Bs`y`EvxI>!3VUN1$UW&zPS;pK@HXASDVA-5J0FM$v)1s_{H0p;=B+vkWC@ z7+XMtPH2`BM`%QuQ&(J2=LEYz_cP^fk@dqH8u4LhwU{IAXBEqIN^Fn% z{Y3n^k1KzUJ|(3ptHf8jP*qvk2^e$IPZ(d#{YglcvE3YZ7Cf4xdYmY7-q0+F(4fmH zGBoXj!7PK*19MTji@4Rf%t_!WcT2FmV=uQ}La%E+W+spevTY-N?iBEI$C&l0!?z5w zXGwo9nXgp8zN*cfuPof)w8a))&4(om9?ZdRzL%0^a5sl$X^(g~M@49EYZjC_x#Ds^ z<}QL=AfvxdI|;DN$E^hH<$Pip@Di|?+XO_#Ai-_Bi6p^<5?nD#a7`@18S|CeSGWnL z*P@Co98|yIC!FrbB@1@*i3<{rI|&dh z2>Mwo0VfvVCYTS8y}Uf@tRILIchnF$cO=1t608{|_#D0@u>=!e$$v$$Tzc&UCJLh3 zqA*K#HHT!`NXcR%G$0Gw*ssMc*@jE{0fa)^i>Py2e-SMg`jk562dI*D62OK>&<|FE z*vr9(ANLXnB)I*Ir|I-9BS|pfm7W*;DG%{e8pQ%PK`R!!najwp?Y0buem4bHb0b-7 zh6cG`O`rf=5P>LbFDByBxW8z#zfR~CVBa!%T_g8{AEb7AoI(L1(>B7I7@f{Nv3{jH6M~J$o*Q$g2y3rB1!|7s=YKA z6>`Zsj9hbZG~`fCuzCgDV;Bh{=4aCnSj$J^4@$5EkYGXE#*ucfU_Zy@F&0L*7r|FL z@s#^9U?vE~;#jfF_?^EV#nM8t45ofTh&&!7eqvXOK$Hehj7t`4Frt}j9Y)1mQWm2_ z^Z|Os_y|_7fHt8nEWDOe_@VwZJ=`gr1R+>HIws_XhEfy$ON2s3D uA?Is*V-bP{ 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