From fa9112493c086af27233a611d2d460469c0deafb Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sat, 15 Mar 2014 17:43:59 -0400 Subject: [PATCH] Pushing changes in 1.7.2 to 1.6.4 build --- .../AlchemicalWizardry.java | 72 +++- .../BloodMagicConfiguration.java | 2 + .../alchemicalWizardry/ModItems.java | 10 + .../client/ClientProxy.java | 12 +- .../common/AlchemicalWizardryEventHooks.java | 21 +- .../AltarRecipeRegistry.java | 2 +- .../common/block/BlockOrientable.java | 2 + .../common/block/BlockSpellModifier.java | 18 + .../common/block/BlockSpellParadigm.java | 32 +- .../common/items/EnergyItems.java | 2 +- .../common/items/IHolding.java | 6 + .../common/items/ItemAlchemyBase.java | 107 ++++++ .../common/items/ItemComponents.java | 4 +- .../common/items/potion/AlchemyFlask.java | 1 - .../sigil/ItemSigilOfEnderSeverance.java | 171 +++++++++ .../items/sigil/SigilOfElementalAffinity.java | 1 - .../common/items/sigil/SigilOfHolding.java | 8 + .../common/potion/PotionPlanarBinding.java | 18 + .../block/RenderSpellModifierBlock.java | 49 +++ .../block/RenderSpellParadigmBlock.java | 49 +++ .../TESpellModifierBlockItemRenderer.java | 108 ++++++ .../TESpellParadigmBlockItemRenderer.java | 107 ++++++ .../model/ModelSpellModifierBlock.java | 303 ++++++++++++++++ .../model/ModelSpellParadigmBlock.java | 234 ++++++++++++ .../rituals/RitualEffectSummonPlayer.java | 103 ++++++ .../complex/effect/SpellEffectEarth.java | 51 ++- .../spell/complex/effect/SpellHelper.java | 42 +++ .../MeleeSpellCenteredWorldEffect.java | 13 +- .../earth/MeleeDefaultEarth.java | 13 +- .../earth/MeleeDefensiveEarth.java | 39 ++ .../earth/MeleeEnvironmentalEarth.java | 47 +++ .../earth/MeleeOffensiveEarth.java | 34 ++ .../impactEffects/earth/SelfDefaultEarth.java | 51 +++ .../earth/SelfDefensiveEarth.java | 27 ++ .../earth/SelfEnvironmentalEarth.java | 45 +++ .../earth/SelfOffensiveEarth.java | 43 +++ .../impactEffects/fire/SelfOffensiveFire.java | 2 +- .../common/tileEntity/TEMasterStone.java | 13 + .../tileEntity/TESpellEnhancementBlock.java | 36 +- .../tileEntity/TESpellModifierBlock.java | 13 + .../tileEntity/TESpellParadigmBlock.java | 23 ++ .../items/baseItemCrackedRunicPlate.png | Bin 0 -> 522 bytes .../textures/items/baseItemDefaultCore.png | Bin 0 -> 327 bytes .../textures/items/baseItemDefensiveCore.png | Bin 0 -> 502 bytes .../textures/items/baseItemEarthenCore.png | Bin 0 -> 454 bytes .../textures/items/baseItemEmptyCore.png | Bin 0 -> 237 bytes .../items/baseItemEnvironmentalCore.png | Bin 0 -> 370 bytes .../textures/items/baseItemFlameCore.png | Bin 0 -> 488 bytes .../textures/items/baseItemGustCore.png | Bin 0 -> 488 bytes .../textures/items/baseItemIcyCore.png | Bin 0 -> 551 bytes .../textures/items/baseItemInputCable.png | Bin 0 -> 291 bytes .../textures/items/baseItemMagicalesCable.png | Bin 0 -> 284 bytes .../textures/items/baseItemMeleeCore.png | Bin 0 -> 461 bytes .../textures/items/baseItemOffensiveCore.png | Bin 0 -> 353 bytes .../textures/items/baseItemOutputCable.png | Bin 0 -> 290 bytes .../items/baseItemParadigmBackPlate.png | Bin 0 -> 306 bytes .../textures/items/baseItemProjectileCore.png | Bin 0 -> 478 bytes .../textures/items/baseItemRunicPlate.png | Bin 0 -> 420 bytes .../items/baseItemScribedRunicPlate.png | Bin 0 -> 481 bytes .../textures/items/baseItemSelfCore.png | Bin 0 -> 433 bytes .../textures/items/baseItemStoneBrace.png | Bin 0 -> 308 bytes .../textures/items/baseItemWoodBrace.png | Bin 0 -> 316 bytes .../textures/models/SpellModifierDefault.png | Bin 0 -> 1193 bytes .../models/SpellModifierDefensive.png | Bin 0 -> 1608 bytes .../models/SpellModifierEnvironmental.png | Bin 0 -> 1398 bytes .../models/SpellModifierOffensive.png | Bin 0 -> 1350 bytes .../textures/models/SpellParadigmMelee.png | Bin 0 -> 1230 bytes .../models/SpellParadigmProjectile.png | Bin 0 -> 1229 bytes .../textures/models/SpellParadigmSelf.png | Bin 0 -> 1193 bytes 1.7.2/resources/assets/forge/lang/ru_RU.lang | 5 - .../AlchemicalWizardry.java | 85 ++++- .../BloodMagicConfiguration.java | 7 + .../alchemicalWizardry/ModItems.java | 5 + .../client/ClientProxy.java | 17 +- .../common/AlchemicalWizardryEventHooks.java | 48 ++- .../common/PotionFireFuse.java | 18 + .../common/PotionHeavyHeart.java | 18 + .../common/PotionPlanarBinding.java | 18 + .../common/block/BlockSpellEnhancement.java | 18 + .../common/block/BlockSpellModifier.java | 18 + .../common/block/BlockSpellParadigm.java | 18 + .../common/items/EnergyBattery.java | 7 +- .../common/items/ItemAlchemyBase.java | 107 ++++++ .../common/items/ItemComponents.java | 75 ++++ .../block/RenderSpellEnhancementBlock.java | 49 +++ .../block/RenderSpellModifierBlock.java | 49 +++ .../block/RenderSpellParadigmBlock.java | 49 +++ .../TESpellEnhancementBlockItemRenderer.java | 114 ++++++ .../TESpellModifierBlockItemRenderer.java | 108 ++++++ .../TESpellParadigmBlockItemRenderer.java | 107 ++++++ .../model/ModelSpellEnhancementBlock.java | 334 ++++++++++++++++++ .../model/ModelSpellModifierBlock.java | 303 ++++++++++++++++ .../model/ModelSpellParadigmBlock.java | 234 ++++++++++++ .../rituals/RitualEffectFeatheredKnife.java | 5 +- .../spell/complex/EntitySpellProjectile.java | 2 +- .../complex/effect/SpellEffectEarth.java | 79 ++--- .../spell/complex/effect/SpellEffectFire.java | 35 +- .../spell/complex/effect/SpellEffectWind.java | 21 +- .../spell/complex/effect/SpellHelper.java | 96 ++++- .../IProjectileImpactEffect.java | 2 +- .../MeleeSpellCenteredWorldEffect.java | 33 ++ .../earth/MeleeDefaultEarth.java | 41 +++ .../earth/MeleeDefensiveEarth.java | 37 ++ .../earth/MeleeEnvironmentalEarth.java | 48 +++ .../earth/MeleeOffensiveEarth.java | 34 ++ .../earth/ProjectileDefaultEarth.java | 57 +++ .../earth/ProjectileDefensiveEarth.java | 66 ++++ .../earth/ProjectileEnvironmentalEarth.java | 14 +- .../earth/ProjectileOffensiveEarth.java | 91 +++++ .../impactEffects/earth/SelfDefaultEarth.java | 52 +++ .../earth/SelfDefensiveEarth.java | 27 ++ .../earth/SelfEnvironmentalEarth.java | 45 +++ .../earth/SelfOffensiveEarth.java | 43 +++ .../fire/ProjectileDefaultFire.java | 58 ++- .../fire/ProjectileDefensiveFire.java | 47 +++ .../fire/ProjectileEnvironmentalFire.java | 46 +++ .../fire/ProjectileOffensiveFire.java | 81 +++++ .../impactEffects/fire/SelfDefensiveFire.java | 27 +- .../impactEffects/fire/SelfOffensiveFire.java | 2 +- .../impactEffects/ice/MeleeOffensiveIce.java | 3 - .../ice/ProjectileDefaultIce.java | 3 +- .../ice/ProjectileDefensiveIce.java | 2 +- .../ice/ProjectileOffensiveIce.java | 2 +- .../impactEffects/ice/SelfDefaultIce.java | 6 +- .../wind/ProjectileDefaultWind.java | 33 ++ .../wind/ProjectileEnvironmentalWind.java | 1 + .../wind/ProjectileOffensiveWind.java | 33 ++ .../tileEntity/TESpellEnhancementBlock.java | 55 ++- .../tileEntity/TESpellModifierBlock.java | 13 + .../tileEntity/TESpellParadigmBlock.java | 26 +- .../assets/alchemicalwizardry/lang/en_US.lang | 64 ++-- .../items/baseItemCrackedRunicPlate.png | Bin 0 -> 522 bytes .../textures/items/baseItemDefaultCore.png | Bin 0 -> 327 bytes .../textures/items/baseItemDefensiveCore.png | Bin 0 -> 502 bytes .../textures/items/baseItemEarthenCore.png | Bin 0 -> 454 bytes .../textures/items/baseItemEmptyCore.png | Bin 0 -> 237 bytes .../items/baseItemEnvironmentalCore.png | Bin 0 -> 370 bytes .../textures/items/baseItemFlameCore.png | Bin 0 -> 488 bytes .../textures/items/baseItemGustCore.png | Bin 0 -> 488 bytes .../textures/items/baseItemIcyCore.png | Bin 0 -> 551 bytes .../textures/items/baseItemInputCable.png | Bin 0 -> 291 bytes .../textures/items/baseItemMagicalesCable.png | Bin 0 -> 284 bytes .../textures/items/baseItemMeleeCore.png | Bin 0 -> 461 bytes .../textures/items/baseItemOffensiveCore.png | Bin 0 -> 353 bytes .../textures/items/baseItemOutputCable.png | Bin 0 -> 290 bytes .../items/baseItemParadigmBackPlate.png | Bin 0 -> 306 bytes .../textures/items/baseItemProjectileCore.png | Bin 0 -> 478 bytes .../textures/items/baseItemQuartzRod.png | Bin 0 -> 251 bytes .../textures/items/baseItemRunicPlate.png | Bin 0 -> 420 bytes .../items/baseItemScribedRunicPlate.png | Bin 0 -> 481 bytes .../textures/items/baseItemSelfCore.png | Bin 0 -> 433 bytes .../textures/items/baseItemStoneBrace.png | Bin 0 -> 308 bytes .../textures/items/baseItemWoodBrace.png | Bin 0 -> 316 bytes .../textures/models/ParadigmBlock.png | Bin 0 -> 923 bytes .../textures/models/SpellEnhancementCost1.png | Bin 0 -> 4871 bytes .../textures/models/SpellEnhancementCost2.png | Bin 0 -> 3603 bytes .../textures/models/SpellEnhancementCost3.png | Bin 0 -> 4025 bytes .../models/SpellEnhancementPotency1.png | Bin 0 -> 4329 bytes .../models/SpellEnhancementPotency2.png | Bin 0 -> 3539 bytes .../models/SpellEnhancementPotency3.png | Bin 0 -> 3951 bytes .../models/SpellEnhancementPower1.png | Bin 0 -> 4449 bytes .../models/SpellEnhancementPower2.png | Bin 0 -> 3738 bytes .../models/SpellEnhancementPower3.png | Bin 0 -> 4068 bytes .../textures/models/SpellModifierDefault.png | Bin 0 -> 1193 bytes .../models/SpellModifierDefensive.png | Bin 0 -> 1608 bytes .../models/SpellModifierEnvironmental.png | Bin 0 -> 1398 bytes .../models/SpellModifierOffensive.png | Bin 0 -> 1350 bytes .../textures/models/SpellParadigmMelee.png | Bin 0 -> 1230 bytes .../models/SpellParadigmProjectile.png | Bin 0 -> 1229 bytes .../textures/models/SpellParadigmSelf.png | Bin 0 -> 1193 bytes 170 files changed, 4803 insertions(+), 272 deletions(-) create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/items/IHolding.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemSigilOfEnderSeverance.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/potion/PotionPlanarBinding.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonPlayer.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeEnvironmentalEarth.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeOffensiveEarth.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefaultEarth.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfOffensiveEarth.java create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemCrackedRunicPlate.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemEmptyCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemEnvironmentalCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemFlameCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemGustCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemIcyCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemInputCable.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemOutputCable.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemRunicPlate.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefault.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellModifierEnvironmental.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellModifierOffensive.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellParadigmSelf.png delete mode 100644 1.7.2/resources/assets/forge/lang/ru_RU.lang create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/PotionFireFuse.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/PotionHeavyHeart.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/PotionPlanarBinding.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/items/ItemComponents.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/MeleeSpellCenteredWorldEffect.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeEnvironmentalEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeOffensiveEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileDefaultEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileDefensiveEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/ProjectileOffensiveEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefaultEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfOffensiveEarth.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileDefensiveFire.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileEnvironmentalFire.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/fire/ProjectileOffensiveFire.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileDefaultWind.java create mode 100644 BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/wind/ProjectileOffensiveWind.java rename 1.7.2/resources/assets/alchemicalwizardry/lang/ru_RU.lang => resources/assets/alchemicalwizardry/lang/en_US.lang (71%) create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemCrackedRunicPlate.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemEmptyCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemEnvironmentalCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemFlameCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemGustCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemIcyCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemInputCable.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemOutputCable.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemQuartzRod.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemRunicPlate.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png create mode 100644 resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/ParadigmBlock.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost1.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost2.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost3.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency1.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency2.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency3.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower1.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower3.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellModifierDefault.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellModifierEnvironmental.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellModifierOffensive.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png create mode 100644 resources/assets/alchemicalwizardry/textures/models/SpellParadigmSelf.png diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/1.7.2/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 62f88d07..ebcfbe95 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -56,6 +56,7 @@ import WayofTime.alchemicalWizardry.common.potion.PotionFlight; import WayofTime.alchemicalWizardry.common.potion.PotionHeavyHeart; import WayofTime.alchemicalWizardry.common.potion.PotionIceCloak; import WayofTime.alchemicalWizardry.common.potion.PotionInhibit; +import WayofTime.alchemicalWizardry.common.potion.PotionPlanarBinding; import WayofTime.alchemicalWizardry.common.potion.PotionProjectileProtect; import WayofTime.alchemicalWizardry.common.potion.PotionReciprocation; import WayofTime.alchemicalWizardry.common.rituals.Rituals; @@ -99,7 +100,7 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; -@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v0.8.0") +@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v1.0.0Beta") //@NetworkMod(clientSideRequired = true, serverSideRequired = false, channels = {"BloodAltar", "particle", "SetLifeEssence", "GetLifeEssence", "Ritual", "GetAltarEssence", "TESocket", "TEWritingTable", "CustomParticle", "SetPlayerVel", "SetPlayerPos", "TEPedestal", "TEPlinth", "TETeleposer", "InfiniteLPPath", "TEOrientor"}, packetHandler = PacketHandler.class) public class AlchemicalWizardry @@ -113,6 +114,8 @@ public class AlchemicalWizardry public static int ironBlockMeteorRadius; public static String[] netherStarMeteorArray; public static int netherStarMeteorRadius; + + public static String[] allowedCrushedOresArray; public static Potion customPotionDrowning; public static Potion customPotionBoost; @@ -124,6 +127,7 @@ public class AlchemicalWizardry public static Potion customPotionIceCloak; public static Potion customPotionHeavyHeart; public static Potion customPotionFireFuse; + public static Potion customPotionPlanarBinding; public static int customPotionDrowningID; public static int customPotionBoostID; @@ -135,6 +139,7 @@ public class AlchemicalWizardry public static int customPotionIceCloakID; public static int customPotionHeavyHeartID; public static int customPotionFireFuseID; + public static int customPotionPlanarBindingID; public static boolean isThaumcraftLoaded; public static boolean isForestryLoaded; @@ -259,7 +264,7 @@ public class AlchemicalWizardry ItemStack lavaBucketStack = new ItemStack(Items.lava_bucket); ItemStack cobblestoneStack = new ItemStack(Blocks.cobblestone); ItemStack glassStack = new ItemStack(Blocks.glass, 1, craftingConstant); - ItemStack ironStack = new ItemStack(Items.iron_ingot); + ItemStack ironIngotStack = new ItemStack(Items.iron_ingot); ItemStack diamondStack = new ItemStack(Items.diamond, 1, craftingConstant); ItemStack woolStack = new ItemStack(Blocks.wool); ItemStack goldNuggetStack = new ItemStack(Items.gold_nugget); @@ -362,18 +367,18 @@ public class AlchemicalWizardry ItemStack magicalesStack = new ItemStack(ModItems.magicales); //All crafting goes here // GameRegistry.addRecipe(orbOfTestingStack, "x x", " ", "x x", 'x', cobblestoneStack); - //GameRegistry.addRecipe(glassShardStack, " x", "y ", 'x', ironStack, 'y', glassStack); + //GameRegistry.addRecipe(glassShardStack, " x", "y ", 'x', ironIngotStack, 'y', glassStack); //GameRegistry.addRecipe(weakBloodOrbStackCrafted, "xxx", "xdx", "www", 'x', bloodiedShardStack, 'd', diamondStack, 'w', woolStack); - GameRegistry.addRecipe(sacrificialDaggerStack, "ggg", " dg", "i g", 'g', glassStack, 'd', goldIngotStack, 'i', ironStack); - //GameRegistry.addRecipe(blankSlateStack, "sgs", "gig", "sgs", 's', stoneStack, 'g', goldNuggetStack, 'i', ironStack); - //GameRegistry.addRecipe(reinforcedSlateStack, "rir", "ibi", "gig", 'r', redstoneStack, 'i', ironStack, 'b', blankSlateStack, 'g', glowstoneBlockStack); + GameRegistry.addRecipe(sacrificialDaggerStack, "ggg", " dg", "i g", 'g', glassStack, 'd', goldIngotStack, 'i', ironIngotStack); + //GameRegistry.addRecipe(blankSlateStack, "sgs", "gig", "sgs", 's', stoneStack, 'g', goldNuggetStack, 'i', ironIngotStack); + //GameRegistry.addRecipe(reinforcedSlateStack, "rir", "ibi", "gig", 'r', redstoneStack, 'i', ironIngotStack, 'b', blankSlateStack, 'g', glowstoneBlockStack); GameRegistry.addRecipe(lavaCrystalStackCrafted, "glg", "lbl", "odo", 'g', glassStack, 'l', lavaBucketStack, 'b', weakBloodOrbStack, 'd', diamondStack, 'o', obsidianStack); GameRegistry.addRecipe(waterSigilStackCrafted, "www", "wbw", "wow", 'w', waterBucketStack, 'b', blankSlateStack, 'o', weakBloodOrbStack); GameRegistry.addRecipe(lavaSigilStackCrafted, "lml", "lbl", "lcl", 'l', lavaBucketStack, 'b', blankSlateStack, 'm', magmaCreamStack, 'c', lavaCrystalStack); GameRegistry.addRecipe(voidSigilStackCrafted, "ese", "ere", "eoe", 'e', emptyBucketStack, 'r', reinforcedSlateStack, 'o', apprenticeBloodOrbStack, 's', stringStack); GameRegistry.addRecipe(bloodAltarStack, "s s", "scs", "gdg", 's', stoneStack, 'c', furnaceStack, 'd', diamondStack, 'g', goldIngotStack); //GameRegistry.addRecipe(energySwordStack, " o ", " o ", " s ", 'o', weakBloodOrbStack, 's', diamondSwordStack); - //GameRegistry.addRecipe(energyBlasterStack, "oi ", "gdi", " rd", 'o', weakBloodOrbStack, 'i', ironStack, 'd', diamondStack, 'r', reinforcedSlateStack, 'g', goldIngotStack); + //GameRegistry.addRecipe(energyBlasterStack, "oi ", "gdi", " rd", 'o', weakBloodOrbStack, 'i', ironIngotStack, 'd', diamondStack, 'r', reinforcedSlateStack, 'g', goldIngotStack); GameRegistry.addRecipe(bloodRuneCraftedStack, "sss", "ror", "sss", 's', stoneStack, 'o', weakBloodOrbStack, 'r', blankSlateStack); GameRegistry.addRecipe(speedRuneStack, "sbs", "uru", "sbs", 'u', sugarStack, 's', stoneStack, 'r', bloodRuneStack, 'b', blankSlateStack); //GameRegistry.addRecipe(efficiencyRuneStack, "sbs", "rur", "sbs", 'r', redstoneStack, 's', stoneStack, 'u', bloodRuneStack,'b',blankSlateStack); @@ -431,6 +436,7 @@ public class AlchemicalWizardry customPotionIceCloak = (new PotionIceCloak(customPotionIceCloakID,false,0).setIconIndex(0,0).setPotionName("Ice Cloak")); customPotionHeavyHeart = (new PotionHeavyHeart(customPotionHeavyHeartID,true,0).setIconIndex(0, 0).setPotionName("Heavy Heart")); customPotionFireFuse = (new PotionFireFuse(customPotionFireFuseID,true,0).setIconIndex(0, 0).setPotionName("Fire Fuse")); + customPotionPlanarBinding = (new PotionPlanarBinding(customPotionPlanarBindingID,true,0).setIconIndex(0,0).setPotionName("Planar Binding")); //FluidStack lifeEssenceFluidStack = new FluidStack(lifeEssenceFluid, 1); @@ -583,9 +589,55 @@ public class AlchemicalWizardry MeteorRegistry.registerMeteorParadigm(stoneStack, this.stoneMeteorArray, this.stoneMeteorRadius); MeteorRegistry.registerMeteorParadigm(ironBlockStack, this.ironBlockMeteorArray, this.ironBlockMeteorRadius); MeteorRegistry.registerMeteorParadigm(new ItemStack(Items.nether_star), this.netherStarMeteorArray, this.netherStarMeteorRadius); -// sanguineHelmet = new ItemSanguineArmour(sanguineHelmetItemID).setUnlocalizedName("sanguineHelmet"); -// -// LanguageRegistry.addName(sanguineHelmet,"Sanguine Helmet"); + + //Register spell component recipes + ItemStack quartzRodStack = new ItemStack(ModItems.baseItems,1,0); + ItemStack emptyCoreStack = new ItemStack(ModItems.baseItems,1,1); + ItemStack magicalesCableStack = new ItemStack(ModItems.baseItems,1,2); + ItemStack woodBraceStack = new ItemStack(ModItems.baseItems,1,3); + ItemStack stoneBraceStack = new ItemStack(ModItems.baseItems,1,4); + ItemStack projectileCoreStack = new ItemStack(ModItems.baseItems,1,5); + ItemStack selfCoreStack = new ItemStack(ModItems.baseItems,1,6); + ItemStack meleeCoreStack = new ItemStack(ModItems.baseItems,1,7); + ItemStack paradigmBackPlateStack = new ItemStack(ModItems.baseItems,1,8); + ItemStack outputCableStack = new ItemStack(ModItems.baseItems,1,9); + ItemStack flameCoreStack = new ItemStack(ModItems.baseItems,1,10); + ItemStack iceCoreStack = new ItemStack(ModItems.baseItems,1,11); + ItemStack windCoreStack = new ItemStack(ModItems.baseItems,1,12); + ItemStack earthCoreStack = new ItemStack(ModItems.baseItems,1,13); + ItemStack inputCableStack = new ItemStack(ModItems.baseItems,1,14); + + ItemStack magicalesCraftedCableStack = new ItemStack(ModItems.baseItems,5,2); + + GameRegistry.addRecipe(quartzRodStack, "qqq", 'q', new ItemStack(Items.quartz)); + GameRegistry.addRecipe(emptyCoreStack,"gig","nrn","gig",'n',goldIngotStack,'i',ironIngotStack,'g',glassStack,'r',simpleCatalystStack); + GameRegistry.addRecipe(magicalesCraftedCableStack,"sss","mmm","sss",'s',new ItemStack(Items.string),'m',magicalesStack); + GameRegistry.addRecipe(woodBraceStack," il","ili","li ",'l', new ItemStack(Blocks.log,1,craftingConstant),'i',new ItemStack(Items.string)); + GameRegistry.addRecipe(stoneBraceStack," is","isi","si ",'i', ironIngotStack,'s',reinforcedSlateStack); + + GameRegistry.addRecipe(projectileCoreStack, "mbm","aca","mom",'c', emptyCoreStack,'b',weakBloodShardStack,'m', magicalesStack,'o', magicianBloodOrbStack,'a',new ItemStack(Items.arrow)); + GameRegistry.addRecipe(selfCoreStack,"sbs","ncn","sos",'c', emptyCoreStack, 's',sanctusStack,'b', weakBloodShardStack,'o', magicianBloodOrbStack,'n',glowstoneDustStack); + GameRegistry.addRecipe(meleeCoreStack,"sbs","ncn","sos",'c', emptyCoreStack, 's',incendiumStack,'b', weakBloodShardStack,'o', magicianBloodOrbStack,'n',new ItemStack(Items.flint_and_steel)); + GameRegistry.addRecipe(paradigmBackPlateStack,"isi","rgr","isi",'i',ironIngotStack,'r',stoneStack,'g',goldIngotStack,'s',reinforcedSlateStack); + GameRegistry.addRecipe(outputCableStack, " si","s c"," si",'s',stoneStack,'i',ironIngotStack,'c',simpleCatalystStack); + + GameRegistry.addRecipe(flameCoreStack,"mdm","scs","mom",'m',incendiumStack,'c',emptyCoreStack,'o',magicianBloodOrbStack,'d',diamondStack,'s',weakBloodShardStack); + GameRegistry.addRecipe(iceCoreStack,"mdm","scs","mom",'m',crystallosStack,'c',emptyCoreStack,'o',magicianBloodOrbStack,'d',diamondStack,'s',weakBloodShardStack); + GameRegistry.addRecipe(windCoreStack,"mdm","scs","mom",'m',aetherStack,'c',emptyCoreStack,'o',magicianBloodOrbStack,'d',diamondStack,'s',weakBloodShardStack); + GameRegistry.addRecipe(earthCoreStack,"mdm","scs","mom",'m',terraeStack,'c',emptyCoreStack,'o',magicianBloodOrbStack,'d',diamondStack,'s',weakBloodShardStack); + + GameRegistry.addRecipe(inputCableStack, "ws ","rcs","ws ",'w',blankSlateStack,'s',stoneStack,'r',imbuedSlateStack,'c',simpleCatalystStack); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockConduit,1,0),"q q","ccc","q q",'q', quartzRodStack,'c', magicalesCableStack); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm,1,0),"gb ","pcw","gb ",'p',paradigmBackPlateStack,'c', projectileCoreStack,'g',goldIngotStack,'b',stoneBraceStack,'w',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm,1,1),"gb ","pcw","gb ",'p',paradigmBackPlateStack,'c', selfCoreStack,'g',goldIngotStack,'b',stoneBraceStack,'w',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm,1,2),"gb ","pcw","gb ",'p',paradigmBackPlateStack,'c', meleeCoreStack,'g',goldIngotStack,'b',stoneBraceStack,'w',outputCableStack); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect,1,0),"bgb","ico","bgb",'c',flameCoreStack,'b',stoneBraceStack,'g',goldIngotStack,'i',inputCableStack,'o',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect,1,1),"bgb","ico","bgb",'c',iceCoreStack,'b',stoneBraceStack,'g',goldIngotStack,'i',inputCableStack,'o',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect,1,2),"bgb","ico","bgb",'c',windCoreStack,'b',stoneBraceStack,'g',goldIngotStack,'i',inputCableStack,'o',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect,1,3),"bgb","ico","bgb",'c',earthCoreStack,'b',stoneBraceStack,'g',goldIngotStack,'i',inputCableStack,'o',outputCableStack); } @EventHandler diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java b/1.7.2/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java index 88184381..e2b55612 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java @@ -48,6 +48,7 @@ public class BloodMagicConfiguration AlchemicalWizardry.customPotionIceCloakID = config.get("Potion ID","IceCloak",107).getInt(); AlchemicalWizardry.customPotionHeavyHeartID = config.get("Potion ID","HeavyHeart",108).getInt(); AlchemicalWizardry.customPotionFireFuseID = config.get("Potion ID","FireFuse",109).getInt(); + AlchemicalWizardry.customPotionPlanarBindingID = config.get("Potion ID","PlanarBinding",110).getInt(); MeteorParadigm.maxChance = config.get("meteor", "maxChance", 1000).getInt(); AlchemicalWizardry.doMeteorsDestroyBlocks = config.get("meteor", "doMeteorsDestroyBlocks", true).getBoolean(true); @@ -60,6 +61,7 @@ public class BloodMagicConfiguration AlchemicalWizardry.netherStarMeteorArray = config.get("meteor", "netherStarMeteor", new String[]{"oreDiamond", "150", "oreEmerald", "100", "oreQuartz", "250", "oreSunstone", "5", "oreMoonstone", "50", "oreIridium", "5", "oreCertusQuartz", "150"}).getStringList(); AlchemicalWizardry.netherStarMeteorRadius = config.get("meteor", "netherStarMeteorRadius", 3).getInt(); + AlchemicalWizardry.allowedCrushedOresArray = config.get("oreCrushing", "allowedOres", new String[]{"iron","gold","copper","tin","lead","silver","osmium"}).getStringList(); // AlchemicalWizardry.testingBlockBlockID = config.getBlock("TestingBlock", 1400).getInt(); // AlchemicalWizardry.lifeEssenceFlowingBlockID = config.getBlock("LifeEssenceFlowing", 1401).getInt(); // AlchemicalWizardry.lifeEssenceStillBlockID = config.getBlock("LifeEssenceStill", 1402).getInt(); diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/ModItems.java b/1.7.2/java/WayofTime/alchemicalWizardry/ModItems.java index ba96f5d8..82ae2cff 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/ModItems.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/ModItems.java @@ -27,6 +27,7 @@ import WayofTime.alchemicalWizardry.common.items.EnergyBlast; import WayofTime.alchemicalWizardry.common.items.EnergySword; import WayofTime.alchemicalWizardry.common.items.EnhancedTelepositionFocus; import WayofTime.alchemicalWizardry.common.items.FireScribeTool; +import WayofTime.alchemicalWizardry.common.items.ItemAlchemyBase; import WayofTime.alchemicalWizardry.common.items.ItemComplexSpellCrystal; import WayofTime.alchemicalWizardry.common.items.ItemComponents; import WayofTime.alchemicalWizardry.common.items.ItemDiabloKey; @@ -55,6 +56,7 @@ import WayofTime.alchemicalWizardry.common.items.potion.WeakFillingAgent; import WayofTime.alchemicalWizardry.common.items.sigil.AirSigil; import WayofTime.alchemicalWizardry.common.items.sigil.DivinationSigil; import WayofTime.alchemicalWizardry.common.items.sigil.ItemBloodLightSigil; +import WayofTime.alchemicalWizardry.common.items.sigil.ItemSigilOfEnderSeverance; import WayofTime.alchemicalWizardry.common.items.sigil.LavaSigil; import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfElementalAffinity; import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfGrowth; @@ -145,6 +147,7 @@ public class ModItems public static Item demonPlacer; public static Item baseItems; + public static Item baseAlchemyItems; public static Item weakFillingAgent; public static Item standardFillingAgent; @@ -161,6 +164,8 @@ public class ModItems public static Item itemComplexSpellCrystal; public static Item itemBloodFrame; + public static Item itemSigilOfEnderSeverance; + public static Item bucketLife; public static void init() @@ -243,7 +248,9 @@ public class ModItems itemBloodLightSigil = new ItemBloodLightSigil().setUnlocalizedName("bloodLightSigil"); itemComplexSpellCrystal = new ItemComplexSpellCrystal().setUnlocalizedName("itemComplexSpellCrystal"); bucketLife = (new LifeBucket(ModBlocks.blockLifeEssence)).setUnlocalizedName("bucketLife").setContainerItem(Items.bucket).setCreativeTab(CreativeTabs.tabMisc); + itemSigilOfEnderSeverance = (new ItemSigilOfEnderSeverance()).setUnlocalizedName("itemSigilOfEnderSeverance"); baseItems = new ItemComponents().setUnlocalizedName("baseItems"); + baseAlchemyItems = new ItemAlchemyBase().setUnlocalizedName("baseAlchemyItems"); } public static void registerItems() @@ -330,9 +337,12 @@ public class ModItems GameRegistry.registerItem(ModItems.energyBazooka, "energyBazooka"); GameRegistry.registerItem(ModItems.itemBloodLightSigil, "itemBloodLightSigil"); GameRegistry.registerItem(ModItems.itemComplexSpellCrystal, "itemComplexSpellCrystal"); + GameRegistry.registerItem(ModItems.itemSigilOfEnderSeverance, "sigilOfEnderSeverance"); + GameRegistry.registerItem(ModItems.bucketLife, "bucketLife"); GameRegistry.registerItem(ModItems.baseItems, "bloodMagicBaseItems"); + GameRegistry.registerItem(ModItems.baseAlchemyItems, "bloodMagicBaseAlchemyItems"); //GameRegistry.registerItem(ModItems.itemBloodFrame, "itemBloodFrame"); } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/client/ClientProxy.java b/1.7.2/java/WayofTime/alchemicalWizardry/client/ClientProxy.java index 48986b0f..c60e734d 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/client/ClientProxy.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/client/ClientProxy.java @@ -27,12 +27,16 @@ import WayofTime.alchemicalWizardry.common.renderer.block.RenderPedestal; import WayofTime.alchemicalWizardry.common.renderer.block.RenderPlinth; import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellEffectBlock; import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellEnhancementBlock; +import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellModifierBlock; +import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellParadigmBlock; import WayofTime.alchemicalWizardry.common.renderer.block.RenderWritingTable; import WayofTime.alchemicalWizardry.common.renderer.block.TEAltarRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEAltarItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEConduitItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellEffectBlockItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellEnhancementBlockItemRenderer; +import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellModifierBlockItemRenderer; +import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellParadigmBlockItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderBileDemon; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderBoulderFist; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderElemental; @@ -61,6 +65,8 @@ import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEffectBlock; import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEnhancementBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellModifierBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; @@ -114,12 +120,16 @@ public class ClientProxy extends CommonProxy ClientRegistry.bindTileEntitySpecialRenderer(TEConduit.class, new RenderConduit()); ClientRegistry.bindTileEntitySpecialRenderer(TESpellEffectBlock.class, new RenderSpellEffectBlock()); ClientRegistry.bindTileEntitySpecialRenderer(TESpellEnhancementBlock.class, new RenderSpellEnhancementBlock()); + ClientRegistry.bindTileEntitySpecialRenderer(TESpellParadigmBlock.class, new RenderSpellParadigmBlock()); + ClientRegistry.bindTileEntitySpecialRenderer(TESpellModifierBlock.class, new RenderSpellModifierBlock()); //Item Renderer stuff MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockConduit), new TEConduitItemRenderer()); MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellEffect), new TESpellEffectBlockItemRenderer()); MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellEnhancement), new TESpellEnhancementBlockItemRenderer()); - + MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellParadigm), new TESpellParadigmBlockItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellModifier), new TESpellModifierBlockItemRenderer()); + //RenderingRegistry.registerEntityRenderingHandler(FireProjectile.class, new RenderFireProjectile()); //RenderingRegistry.registerBlockHandler(new AltarRenderer()); } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java index 040af219..281792d0 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java @@ -16,6 +16,7 @@ import net.minecraft.potion.Potion; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; +import net.minecraftforge.event.entity.living.EnderTeleportEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; @@ -49,6 +50,15 @@ public class AlchemicalWizardryEventHooks event.entityLiving.motionY = 0; } } + + @SubscribeEvent + public void onEndermanTeleportEvent(EnderTeleportEvent event) + { + if(event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionPlanarBinding) && event.isCancelable()) + { + event.setCanceled(true); + } + } @SubscribeEvent public void onEntityDamaged(LivingAttackEvent event) @@ -149,18 +159,15 @@ public class AlchemicalWizardryEventHooks EntityLivingBase entity = event.entityLiving; //if(!entity.isSneaking()) { - double percentIncrease = (i + 1) * 0.03d; + float percentIncrease = (i + 1) * 0.05f; if (event.entityLiving instanceof EntityPlayer) { EntityPlayer entityPlayer = (EntityPlayer) event.entityLiving; entityPlayer.stepHeight = 1.0f; - if (!entityPlayer.worldObj.isRemote) - { - float speed = ((Float) ReflectionHelper.getPrivateValue(PlayerCapabilities.class, entityPlayer.capabilities, new String[]{"walkSpeed", "g", "field_75097_g"})).floatValue(); - ObfuscationReflectionHelper.setPrivateValue(PlayerCapabilities.class, entityPlayer.capabilities, Float.valueOf(speed + (float) percentIncrease), new String[]{"walkSpeed", "g", "field_75097_g"}); //CAUTION - } + if((entityPlayer.onGround || entityPlayer.capabilities.isFlying) && entityPlayer.moveForward > 0F) + entityPlayer.moveFlying(0F, 1F, entityPlayer.capabilities.isFlying ? (percentIncrease/2.0f) : percentIncrease); } } } @@ -312,7 +319,7 @@ public class AlchemicalWizardryEventHooks int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionHeavyHeart).getAmplifier(); double decrease = 0.025*(i+1); - if(entityLiving.motionY>-0.5) + if(entityLiving.motionY>-0.9) { entityLiving.motionY-=decrease; } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/altarRecipeRegistry/AltarRecipeRegistry.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/altarRecipeRegistry/AltarRecipeRegistry.java index 2808aa54..45d8d91c 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/altarRecipeRegistry/AltarRecipeRegistry.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/altarRecipeRegistry/AltarRecipeRegistry.java @@ -42,7 +42,7 @@ public class AltarRecipeRegistry registerAltarRecipe(new ItemStack(ModItems.telepositionFocus), new ItemStack(Items.ender_pearl),4,2000,10,10,false); registerAltarRecipe(new ItemStack(ModItems.enhancedTelepositionFocus), new ItemStack(ModItems.telepositionFocus),4,10000,25,15,false); - registerAltarRecipe(new ItemStack(ModItems.imbuedSlate), new ItemStack(ModItems.imbuedSlate),4,15000,20,20,false); + registerAltarRecipe(new ItemStack(ModItems.demonicSlate), new ItemStack(ModItems.imbuedSlate),4,15000,20,20,false); registerAltarRecipe(new ItemStack(ModItems.duskScribeTool), new ItemStack(Blocks.coal_block),4,2000,20,10,false); registerAltarRecipe(new ItemStack(ModBlocks.bloodSocket), new ItemStack(ModBlocks.emptySocket),3,30000,40,10,false); registerAltarRecipe(new ItemStack(ModItems.earthScribeTool), new ItemStack(Blocks.obsidian),3,1000,5,5,false); diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java index 4af2d1f6..10da3ed7 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockOrientable.java @@ -249,4 +249,6 @@ public class BlockOrientable extends BlockContainer { return metadata; } + + } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java index 5eb514c0..ae4e028f 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java @@ -42,4 +42,22 @@ public class BlockSpellModifier extends BlockOrientable super.getSubBlocks(par1, par2CreativeTabs, par3List); } } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java index 4f9b9bd6..0f31468c 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java @@ -91,23 +91,23 @@ public class BlockSpellParadigm extends BlockOrientable return super.onBlockActivated(world, x, y, z, player, side, what, these, are); } -// @Override -// public boolean isOpaqueCube() -// { -// return false; -// } -// -// @Override -// public boolean renderAsNormalBlock() -// { -// return false; -// } + @Override + public boolean isOpaqueCube() + { + return false; + } -// @Override -// public int getRenderType() -// { -// return -1; -// } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } //TODO Need to make a renderer for the paradigm blocks and other spell blocks. /* diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/EnergyItems.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/EnergyItems.java index 8f426c85..cafe19bf 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/EnergyItems.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/EnergyItems.java @@ -289,7 +289,7 @@ public class EnergyItems extends Item implements IBindable } } - public String getOwnerName(ItemStack item) + public static String getOwnerName(ItemStack item) { if (item.stackTagCompound == null) { diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/IHolding.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/IHolding.java new file mode 100644 index 00000000..29de5115 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/IHolding.java @@ -0,0 +1,6 @@ +package WayofTime.alchemicalWizardry.common.items; + +public interface IHolding +{ + +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java new file mode 100644 index 00000000..f7bcfabb --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java @@ -0,0 +1,107 @@ +package WayofTime.alchemicalWizardry.common.items; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import org.lwjgl.input.Keyboard; + +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.alchemy.AlchemyRecipeRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemAlchemyBase extends Item +{ + private static final String[] ITEM_NAMES = new String[]{}; + + @SideOnly(Side.CLIENT) + private IIcon[] icons; + + public ItemAlchemyBase() + { + super(); + this.maxStackSize = 64; + this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.hasSubtypes = true; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) + { + icons = new IIcon[ITEM_NAMES.length]; + + for (int i = 0; i < ITEM_NAMES.length; ++i) + { + icons[i] = iconRegister.registerIcon("AlchemicalWizardry:" + "baseAlchemyItem" + ITEM_NAMES[i]); + } + } + + @Override + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) + { + par3List.add("Used in alchemy"); + + if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) + { + ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); + + if (recipe != null) + { + par3List.add(EnumChatFormatting.BLUE + "Recipe:"); + + for (ItemStack item : recipe) + { + if (item != null) + { + par3List.add("" + item.getDisplayName()); + } + } + } + } else + { + par3List.add("-Press " + EnumChatFormatting.BLUE + "shift" + EnumChatFormatting.GRAY + " for Recipe-"); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) + { + return par1ItemStack; + } + + @Override + public String getUnlocalizedName(ItemStack itemStack) + { + //This is what will do all the localisation things on the alchemy components so you dont have to set it :D + int meta = MathHelper.clamp_int(itemStack.getItemDamage(), 0, ITEM_NAMES.length - 1); + return ("" + "item.bloodMagicAlchemyItem." + ITEM_NAMES[meta]); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) + { + int j = MathHelper.clamp_int(meta, 0, ITEM_NAMES.length - 1); + return icons[j]; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item id, CreativeTabs creativeTab, List list) + { + for (int meta = 0; meta < ITEM_NAMES.length; ++meta) + { + list.add(new ItemStack(id, 1, meta)); + } + } +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java index 51b1e7d2..ff839d08 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java @@ -21,7 +21,7 @@ import cpw.mods.fml.relauncher.SideOnly; public class ItemComponents extends Item { - private static final String[] ITEM_NAMES = new String[]{"QuartzRod"}; + private static final String[] ITEM_NAMES = new String[]{"QuartzRod", "EmptyCore", "MagicalesCable", "WoodBrace", "StoneBrace", "ProjectileCore", "SelfCore","MeleeCore","ParadigmBackPlate","OutputCable","FlameCore","IcyCore","GustCore","EarthenCore","InputCable","CrackedRunicPlate","RunicPlate","ScribedRunicPlate","DefaultCore","OffensiveCore","DefensiveCore","EnvironmentalCore"}; @SideOnly(Side.CLIENT) private IIcon[] icons; @@ -29,7 +29,7 @@ public class ItemComponents extends Item public ItemComponents() { super(); - this.maxStackSize = 1; + this.maxStackSize = 64; this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); this.hasSubtypes = true; } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyFlask.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyFlask.java index 56fba9c8..2e625415 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyFlask.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/potion/AlchemyFlask.java @@ -42,7 +42,6 @@ public class AlchemyFlask extends Item this.setMaxDamage(8); this.setMaxStackSize(1); setCreativeTab(AlchemicalWizardry.tabBloodMagic); - setNoRepair(); // TODO Auto-generated constructor stub } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemSigilOfEnderSeverance.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemSigilOfEnderSeverance.java new file mode 100644 index 00000000..b2751264 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemSigilOfEnderSeverance.java @@ -0,0 +1,171 @@ +package WayofTime.alchemicalWizardry.common.items.sigil; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +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.IIcon; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.items.EnergyItems; +import WayofTime.alchemicalWizardry.common.items.IHolding; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemSigilOfEnderSeverance extends EnergyItems implements IHolding +{ + @SideOnly(Side.CLIENT) + private static IIcon activeIcon; + @SideOnly(Side.CLIENT) + private static IIcon passiveIcon; + + public ItemSigilOfEnderSeverance() + { + super(); + this.maxStackSize = 1; + setEnergyUsed(200); + setCreativeTab(AlchemicalWizardry.tabBloodMagic); + } + + @Override + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) + { + par3List.add("Put those endermen in a Dire situation!"); + + if (!(par1ItemStack.stackTagCompound == null)) + { + if (par1ItemStack.stackTagCompound.getBoolean("isActive")) + { + par3List.add("Activated"); + } else + { + par3List.add("Deactivated"); + } + + par3List.add("Current owner: " + par1ItemStack.stackTagCompound.getString("ownerName")); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) + { + this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:SigilOfTheFastMiner"); + this.activeIcon = iconRegister.registerIcon("AlchemicalWizardry:ElementalSigil_activated"); + this.passiveIcon = iconRegister.registerIcon("AlchemicalWizardry:ElementalSigil_deactivated"); + } + + @Override + public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) + { + if (stack.stackTagCompound == null) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.stackTagCompound; + + if (tag.getBoolean("isActive")) + { + return this.activeIcon; + } else + { + return this.passiveIcon; + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int par1) + { + if (par1 == 1) + { + return this.activeIcon; + } else + { + return this.passiveIcon; + } + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) + { + EnergyItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer); + + if (par3EntityPlayer.isSneaking()) + { + return par1ItemStack; + } + + if (par1ItemStack.stackTagCompound == null) + { + par1ItemStack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = par1ItemStack.stackTagCompound; + tag.setBoolean("isActive", !(tag.getBoolean("isActive"))); + + if (tag.getBoolean("isActive")) + { + par1ItemStack.setItemDamage(1); + tag.setInteger("worldTimeDelay", (int) (par2World.getWorldTime() - 1) % 200); + + if (!par3EntityPlayer.capabilities.isCreativeMode) + { + if (!EnergyItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed())) + { + } + } + } else + { + par1ItemStack.setItemDamage(par1ItemStack.getMaxDamage()); + } + + return par1ItemStack; + } + + @Override + public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) + { + if (!(par3Entity instanceof EntityPlayer)) + { + return; + } + + EntityPlayer par3EntityPlayer = (EntityPlayer) par3Entity; + + if (par1ItemStack.stackTagCompound == null) + { + par1ItemStack.setTagCompound(new NBTTagCompound()); + } + + if (par1ItemStack.stackTagCompound.getBoolean("isActive")) + { + List list = SpellHelper.getEntitiesInRange(par2World, par3Entity.posX, par3Entity.posY, par3Entity.posZ, 4.5, 4.5); + for(Entity entity : list) + { + if(!entity.equals(par3Entity)&&entity instanceof EntityLiving) + { + ((EntityLiving)entity).addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionPlanarBinding.id,2,0)); + } + } + } + + if (par2World.getWorldTime() % 200 == par1ItemStack.stackTagCompound.getInteger("worldTimeDelay") && par1ItemStack.stackTagCompound.getBoolean("isActive")) + { + //par3EntityPlayer.addPotionEffect(new PotionEffect(Potion.field_76444_x.id, 2400,99)); + if (!par3EntityPlayer.capabilities.isCreativeMode) + { + EnergyItems.syphonBatteries(par1ItemStack, par3EntityPlayer, getEnergyUsed()); + } + } + + return; + } +} \ No newline at end of file diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfElementalAffinity.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfElementalAffinity.java index 3b1bd3cf..daa017a1 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfElementalAffinity.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfElementalAffinity.java @@ -27,7 +27,6 @@ public class SigilOfElementalAffinity extends EnergyItems { super(); this.maxStackSize = 1; - setMaxDamage(100); setEnergyUsed(200); setCreativeTab(AlchemicalWizardry.tabBloodMagic); } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfHolding.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfHolding.java index 9cc9dcd3..db18ae01 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfHolding.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfHolding.java @@ -16,6 +16,7 @@ import net.minecraftforge.common.util.Constants; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.ModItems; import WayofTime.alchemicalWizardry.common.items.EnergyItems; +import WayofTime.alchemicalWizardry.common.items.IHolding; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -304,6 +305,13 @@ public class SigilOfHolding extends EnergyItems return false; } + if(addedItemStack.getItem() instanceof IHolding) + { + inv[candidateSlot] = addedItemStack; + saveInternalInventory(sigilItemStack, inv); + return true; + } + for (ItemStack i : allowedSigils) { if (i != null && i.getItem() == item) diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/potion/PotionPlanarBinding.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/potion/PotionPlanarBinding.java new file mode 100644 index 00000000..54d6cd72 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/potion/PotionPlanarBinding.java @@ -0,0 +1,18 @@ +package WayofTime.alchemicalWizardry.common.potion; + +import net.minecraft.potion.Potion; + +public class PotionPlanarBinding extends Potion +{ + public PotionPlanarBinding(int par1, boolean par2, int par3) + { + super(par1, par2, par3); + } + + @Override + public Potion setIconIndex(int par1, int par2) + { + super.setIconIndex(par1, par2); + return this; + } +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java new file mode 100644 index 00000000..a01c0726 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java @@ -0,0 +1,49 @@ +package WayofTime.alchemicalWizardry.common.renderer.block; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellModifierBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellModifierBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class RenderSpellModifierBlock extends TileEntitySpecialRenderer +{ + private ModelSpellModifierBlock modelSpellModifierBlock = new ModelSpellModifierBlock(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) + { + if (tileEntity instanceof TESpellModifierBlock) + { + TESpellModifierBlock tileSpellBlock = (TESpellModifierBlock) tileEntity; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/BlockSpellModifier.png"); + int meta = tileEntity.getWorldObj().getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + String resource = tileSpellBlock.getResourceLocationForMeta(meta); + test = new ResourceLocation(resource); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellModifierBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + } +} \ No newline at end of file diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java new file mode 100644 index 00000000..47a5b271 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java @@ -0,0 +1,49 @@ +package WayofTime.alchemicalWizardry.common.renderer.block; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellParadigmBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class RenderSpellParadigmBlock extends TileEntitySpecialRenderer +{ + private ModelSpellParadigmBlock modelSpellParadigmBlock = new ModelSpellParadigmBlock(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) + { + if (tileEntity instanceof TESpellParadigmBlock) + { + TESpellParadigmBlock tileSpellBlock = (TESpellParadigmBlock) tileEntity; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/BlockSpellParadigm.png"); + int meta = tileEntity.getWorldObj().getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + String resource = tileSpellBlock.getResourceLocationForMeta(meta); + test = new ResourceLocation(resource); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellParadigmBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + } +} \ No newline at end of file diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java new file mode 100644 index 00000000..c7809540 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java @@ -0,0 +1,108 @@ +package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellModifierBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class TESpellModifierBlockItemRenderer implements IItemRenderer +{ + private ModelSpellModifierBlock modelSpellBlock = new ModelSpellModifierBlock(); + + private void renderConduitItem(RenderBlocks render, ItemStack item, float translateX, float translateY, float translateZ) + { + Tessellator tessellator = Tessellator.instance; + + Block block = ModBlocks.blockSpellEffect; + //Icon icon = item.getItem().getIconFromDamage(0); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); + ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, ForgeDirection.DOWN, ForgeDirection.UP); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + + + /** + * IItemRenderer implementation * + */ + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + switch (type) { + case ENTITY: + return true; + case EQUIPPED: + return true; + case EQUIPPED_FIRST_PERSON: + return true; + case INVENTORY: + return true; + default: + return false; + } + } + + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + switch (type) { + case ENTITY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + case EQUIPPED: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case EQUIPPED_FIRST_PERSON: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case INVENTORY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + default: + } + } + + public String getResourceLocationForMeta(int meta) + { + switch(meta) + { + case 0: return "alchemicalwizardry:textures/models/SpellModifierDefault.png"; + case 1: return "alchemicalwizardry:textures/models/SpellModifierOffensive.png"; + case 2: return "alchemicalwizardry:textures/models/SpellModifierDefensive.png"; + case 3: return "alchemicalwizardry:textures/models/SpellModifierEnvironmental.png"; + } + return "alchemicalwizardry:textures/models/SpellModifierDefault.png"; + } +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java new file mode 100644 index 00000000..7b706c26 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java @@ -0,0 +1,107 @@ +package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellParadigmBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class TESpellParadigmBlockItemRenderer implements IItemRenderer +{ + private ModelSpellParadigmBlock modelSpellBlock = new ModelSpellParadigmBlock(); + + private void renderConduitItem(RenderBlocks render, ItemStack item, float translateX, float translateY, float translateZ) + { + Tessellator tessellator = Tessellator.instance; + + Block block = ModBlocks.blockSpellEffect; + //Icon icon = item.getItem().getIconFromDamage(0); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); + ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, ForgeDirection.DOWN, ForgeDirection.UP); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + + + /** + * IItemRenderer implementation * + */ + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + switch (type) { + case ENTITY: + return true; + case EQUIPPED: + return true; + case EQUIPPED_FIRST_PERSON: + return true; + case INVENTORY: + return true; + default: + return false; + } + } + + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + switch (type) { + case ENTITY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + case EQUIPPED: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case EQUIPPED_FIRST_PERSON: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case INVENTORY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + default: + } + } + + public String getResourceLocationForMeta(int meta) + { + switch(meta) + { + case 0: return "alchemicalwizardry:textures/models/SpellParadigmProjectile.png"; + case 1: return "alchemicalwizardry:textures/models/SpellParadigmSelf.png"; + case 2: return "alchemicalwizardry:textures/models/SpellParadigmMelee.png"; + } + return "alchemicalwizardry:textures/models/SpellParadigmProjectile.png"; + } +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java new file mode 100644 index 00000000..3ceed7e9 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java @@ -0,0 +1,303 @@ +package WayofTime.alchemicalWizardry.common.renderer.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.common.util.ForgeDirection; + +public class ModelSpellModifierBlock extends ModelBase +{ + //fields + ModelRenderer core; + ModelRenderer inputMain; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape4; + ModelRenderer Shape5; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape8; + ModelRenderer Shape9; + ModelRenderer outputMain; + ModelRenderer Shape11; + ModelRenderer Shape12; + ModelRenderer Shape13; + ModelRenderer Shape14; + ModelRenderer output1; + ModelRenderer output2; + ModelRenderer output3; + ModelRenderer output4; + + public ModelSpellModifierBlock() + { + textureWidth = 64; + textureHeight = 64; + + core = new ModelRenderer(this, 0, 0); + core.addBox(-3F, -3F, -3F, 6, 6, 6); + core.setRotationPoint(0F, 16F, 0F); + core.setTextureSize(64, 64); + core.mirror = true; + setRotation(core, 0F, 0F, 0F); + inputMain = new ModelRenderer(this, 25, 18); + inputMain.addBox(-2F, -2F, -8F, 4, 4, 1); + inputMain.setRotationPoint(0F, 16F, 0F); + inputMain.setTextureSize(64, 64); + inputMain.mirror = true; + setRotation(inputMain, 0F, 0F, 0F); + Shape2 = new ModelRenderer(this, 0, 13); + Shape2.addBox(-5F, -5F, -8F, 10, 2, 2); + Shape2.setRotationPoint(0F, 16F, 0F); + Shape2.setTextureSize(64, 64); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 0, 27); + Shape3.addBox(-5F, 3F, -8F, 10, 2, 2); + Shape3.setRotationPoint(0F, 16F, 0F); + Shape3.setTextureSize(64, 64); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 16, 18); + Shape4.addBox(3F, -3F, -8F, 2, 6, 2); + Shape4.setRotationPoint(0F, 16F, 0F); + Shape4.setTextureSize(64, 64); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + Shape5 = new ModelRenderer(this, 0, 18); + Shape5.addBox(-5F, -3F, -8F, 2, 6, 2); + Shape5.setRotationPoint(0F, 16F, 0F); + Shape5.setTextureSize(64, 64); + Shape5.mirror = true; + setRotation(Shape5, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 0, 32); + Shape6.addBox(-1F, -6F, -7F, 2, 1, 5); + Shape6.setRotationPoint(0F, 16F, 0F); + Shape6.setTextureSize(64, 64); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 15, 32); + Shape7.addBox(-2F, -6F, -2F, 4, 1, 4); + Shape7.setRotationPoint(0F, 16F, 0F); + Shape7.setTextureSize(64, 64); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0F); + Shape8 = new ModelRenderer(this, 15, 39); + Shape8.addBox(-2F, 5F, -2F, 4, 1, 4); + Shape8.setRotationPoint(0F, 16F, 0F); + Shape8.setTextureSize(64, 64); + Shape8.mirror = true; + setRotation(Shape8, 0F, 0F, 0F); + Shape9 = new ModelRenderer(this, 0, 39); + Shape9.addBox(-1F, 5F, -7F, 2, 1, 5); + Shape9.setRotationPoint(0F, 16F, 0F); + Shape9.setTextureSize(64, 64); + Shape9.mirror = true; + setRotation(Shape9, 0F, 0F, 0F); + outputMain = new ModelRenderer(this, 51, 23); + outputMain.addBox(7F, -2F, -2F, 1, 4, 4); + outputMain.setRotationPoint(0F, 16F, 0F); + outputMain.setTextureSize(64, 64); + outputMain.mirror = true; + setRotation(outputMain, 0F, 0F, 0F); + Shape11 = new ModelRenderer(this, 13, 46); + Shape11.addBox(5F, -2F, -2F, 1, 4, 4); + Shape11.setRotationPoint(0F, 16F, 0F); + Shape11.setTextureSize(64, 64); + Shape11.mirror = true; + setRotation(Shape11, 0F, 0F, 0F); + Shape12 = new ModelRenderer(this, 0, 46); + Shape12.addBox(5F, -1F, -7F, 1, 2, 5); + Shape12.setRotationPoint(0F, 16F, 0F); + Shape12.setTextureSize(64, 64); + Shape12.mirror = true; + setRotation(Shape12, 0F, 0F, 0F); + Shape13 = new ModelRenderer(this, 0, 56); + Shape13.addBox(-6F, -1F, -7F, 1, 2, 5); + Shape13.setRotationPoint(0F, 16F, 0F); + Shape13.setTextureSize(64, 64); + Shape13.mirror = true; + setRotation(Shape13, 0F, 0F, 0F); + Shape14 = new ModelRenderer(this, 13, 56); + Shape14.addBox(-6F, -2F, -2F, 1, 4, 4); + Shape14.setRotationPoint(0F, 16F, 0F); + Shape14.setTextureSize(64, 64); + Shape14.mirror = true; + setRotation(Shape14, 0F, 0F, 0F); + output1 = new ModelRenderer(this, 51, 18); + output1.addBox(5F, -5F, -5F, 3, 2, 2); + output1.setRotationPoint(0F, 16F, 0F); + output1.setTextureSize(64, 64); + output1.mirror = true; + setRotation(output1, 0F, 0F, 0F); + output2 = new ModelRenderer(this, 51, 18); + output2.addBox(5F, -5F, 3F, 3, 2, 2); + output2.setRotationPoint(0F, 16F, 0F); + output2.setTextureSize(64, 64); + output2.mirror = true; + setRotation(output2, 0F, 0F, 0F); + output3 = new ModelRenderer(this, 51, 18); + output3.addBox(5F, 3F, -5F, 3, 2, 2); + output3.setRotationPoint(0F, 16F, 0F); + output3.setTextureSize(64, 64); + output3.mirror = true; + setRotation(output3, 0F, 0F, 0F); + output4 = new ModelRenderer(this, 51, 18); + output4.addBox(5F, 3F, 3F, 3, 2, 2); + output4.setRotationPoint(0F, 16F, 0F); + output4.setTextureSize(64, 64); + output4.mirror = true; + setRotation(output4, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, ForgeDirection input, ForgeDirection output) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + float xInputRot = 0.0f; + float yInputRot = 0.0f; + float zInputRot = 0.0f; + float xOutputRot = 0.0f; + float yOutputRot = 0.0f; + float zOutputRot = 0.0f; + + switch (input) + { + case NORTH: + xInputRot = 0.0f; + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case EAST: + xInputRot = 0.0f; + yInputRot = (float) (0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case SOUTH: + xInputRot = 0.0f; + yInputRot = (float) (1.0f * Math.PI); + zInputRot = 0.0f; + break; + + case WEST: + xInputRot = 0.0f; + yInputRot = (float) (-0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case UP: + xInputRot = (float) (-0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case DOWN: + xInputRot = (float) (0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + default: + break; + } + + switch (output) + { + case NORTH: + xOutputRot = 0.0f; + yOutputRot = (float) (0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case EAST: + xOutputRot = 0.0f; + yOutputRot = (float) (1.0f * Math.PI); + zOutputRot = 0.0f; + break; + + case SOUTH: + xOutputRot = 0.0f; + yOutputRot = (float) (-0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case WEST: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = 0.0f; + break; + + case UP: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (-0.5f * Math.PI); + break; + + case DOWN: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (0.5f * Math.PI); + break; + + default: + break; + } + + this.setRotation(inputMain, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape2, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape3, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape4, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape5, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape6, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape7, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape8, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape9, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape12, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape11, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape13, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape14, xInputRot, yInputRot, zInputRot); + + this.setRotation(outputMain, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output1, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output2, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output3, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output4, xOutputRot, yOutputRot, zOutputRot); + + + core.render(f5); + inputMain.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape4.render(f5); + Shape5.render(f5); + Shape6.render(f5); + Shape7.render(f5); + Shape8.render(f5); + Shape9.render(f5); + outputMain.render(f5); + Shape11.render(f5); + Shape12.render(f5); + Shape13.render(f5); + Shape14.render(f5); + output1.render(f5); + output2.render(f5); + output3.render(f5); + output4.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); + } + +} + diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java new file mode 100644 index 00000000..da48b87d --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java @@ -0,0 +1,234 @@ +package WayofTime.alchemicalWizardry.common.renderer.model; + +//Date: 07/03/2014 9:30:25 PM +//Template version 1.1 +//Java generated by Techne +//Keep in mind that you still need to fill in some blanks +//- ZeuX + + + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.common.util.ForgeDirection; + +public class ModelSpellParadigmBlock extends ModelBase +{ +//fields + ModelRenderer core; + ModelRenderer outputMain; + ModelRenderer output1; + ModelRenderer output2; + ModelRenderer output3; + ModelRenderer output4; + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape4; + ModelRenderer Shape5; + +public ModelSpellParadigmBlock() +{ + textureWidth = 64; + textureHeight = 64; + + core = new ModelRenderer(this, 0, 0); + core.addBox(-3F, -3F, -3F, 6, 6, 6); + core.setRotationPoint(0F, 16F, 0F); + core.setTextureSize(64, 64); + core.mirror = true; + setRotation(core, 0F, 0F, 0F); + outputMain = new ModelRenderer(this, 0, 13); + outputMain.addBox(6F, -2F, -2F, 2, 4, 4); + outputMain.setRotationPoint(0F, 16F, 0F); + outputMain.setTextureSize(64, 64); + outputMain.mirror = true; + setRotation(outputMain, 0F, 0F, 0F); + output1 = new ModelRenderer(this, 0, 22); + output1.addBox(5F, -5F, -5F, 3, 2, 2); + output1.setRotationPoint(0F, 16F, 0F); + output1.setTextureSize(64, 64); + output1.mirror = true; + setRotation(output1, 0F, 0F, 0F); + output2 = new ModelRenderer(this, 0, 22); + output2.addBox(5F, -5F, 3F, 3, 2, 2); + output2.setRotationPoint(0F, 16F, 0F); + output2.setTextureSize(64, 64); + output2.mirror = true; + setRotation(output2, 0F, 0F, 0F); + output3 = new ModelRenderer(this, 0, 22); + output3.addBox(5F, 3F, -5F, 3, 2, 2); + output3.setRotationPoint(0F, 16F, 0F); + output3.setTextureSize(64, 64); + output3.mirror = true; + setRotation(output3, 0F, 0F, 0F); + output4 = new ModelRenderer(this, 0, 22); + output4.addBox(5F, 3F, 3F, 3, 2, 2); + output4.setRotationPoint(0F, 16F, 0F); + output4.setTextureSize(64, 64); + output4.mirror = true; + setRotation(output4, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 28); + Shape1.addBox(-5F, -5F, -1F, 10, 1, 2); + Shape1.setRotationPoint(0F, 16F, 0F); + Shape1.setTextureSize(64, 64); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + Shape2 = new ModelRenderer(this, 25, 28); + Shape2.addBox(-5F, -4F, -4F, 1, 8, 8); + Shape2.setRotationPoint(0F, 16F, 0F); + Shape2.setTextureSize(64, 64); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 0, 33); + Shape3.addBox(-5F, 4F, -1F, 10, 1, 2); + Shape3.setRotationPoint(0F, 16F, 0F); + Shape3.setTextureSize(64, 64); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 0, 38); + Shape4.addBox(-5F, -1F, -5F, 10, 2, 1); + Shape4.setRotationPoint(0F, 16F, 0F); + Shape4.setTextureSize(64, 64); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + Shape5 = new ModelRenderer(this, 0, 43); + Shape5.addBox(-5F, -1F, 4F, 10, 2, 1); + Shape5.setRotationPoint(0F, 16F, 0F); + Shape5.setTextureSize(64, 64); + Shape5.mirror = true; + setRotation(Shape5, 0F, 0F, 0F); +} + +public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, ForgeDirection input, ForgeDirection output) +{ + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + float xInputRot = 0.0f; + float yInputRot = 0.0f; + float zInputRot = 0.0f; + float xOutputRot = 0.0f; + float yOutputRot = 0.0f; + float zOutputRot = 0.0f; + + switch (input) + { + case NORTH: + xInputRot = 0.0f; + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case EAST: + xInputRot = 0.0f; + yInputRot = (float) (0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case SOUTH: + xInputRot = 0.0f; + yInputRot = (float) (1.0f * Math.PI); + zInputRot = 0.0f; + break; + + case WEST: + xInputRot = 0.0f; + yInputRot = (float) (-0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case UP: + xInputRot = (float) (-0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case DOWN: + xInputRot = (float) (0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + default: + break; + } + + switch (output) + { + case NORTH: + xOutputRot = 0.0f; + yOutputRot = (float) (0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case EAST: + xOutputRot = 0.0f; + yOutputRot = (float) (1.0f * Math.PI); + zOutputRot = 0.0f; + break; + + case SOUTH: + xOutputRot = 0.0f; + yOutputRot = (float) (-0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case WEST: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = 0.0f; + break; + + case UP: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (-0.5f * Math.PI); + break; + + case DOWN: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (0.5f * Math.PI); + break; + + default: + break; + } + + this.setRotation(outputMain, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output1, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output2, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output3, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output4, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape1, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape2, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape3, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape4, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape5, xOutputRot, yOutputRot, zOutputRot); + core.render(f5); + outputMain.render(f5); + output1.render(f5); + output2.render(f5); + output3.render(f5); + output4.render(f5); + Shape1.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape4.render(f5); + Shape5.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); +} + +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonPlayer.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonPlayer.java new file mode 100644 index 00000000..38863ff0 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSummonPlayer.java @@ -0,0 +1,103 @@ +package WayofTime.alchemicalWizardry.common.rituals; + +import java.util.List; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.common.IBindable; +import WayofTime.alchemicalWizardry.common.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.common.items.EnergyItems; +import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; + +public class RitualEffectSummonPlayer extends RitualEffect //Summons a player via the bound item +{ + @Override + public void performEffect(TEMasterStone ritualStone) + { + String owner = ritualStone.getOwner(); + World worldSave = MinecraftServer.getServer().worldServers[0]; + LifeEssenceNetwork data = (LifeEssenceNetwork) worldSave.loadItemData(LifeEssenceNetwork.class, owner); + + if (data == null) + { + data = new LifeEssenceNetwork(owner); + worldSave.setItemData(owner, data); + } + + int currentEssence = data.currentEssence; + World world = ritualStone.getWorldObj(); + int x = ritualStone.xCoord; + int y = ritualStone.yCoord; + int z = ritualStone.zCoord; + + if (ritualStone.getCooldown() > 0) + { + ritualStone.setCooldown(0); + } + + if (currentEssence < this.getCostPerRefresh()) + { + EntityPlayer entityOwner = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(owner); + + if (entityOwner == null) + { + return; + } + + entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + } else + { + List entities = world.getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getBoundingBox(x, y + 1, z, x + 1, y + 2, z + 1)); + + if (entities == null) + { + return; + } + + for (EntityItem entityItem : entities) + { + if (entityItem != null && entityItem.getEntityItem().getItem() instanceof IBindable) + { + String str = EnergyItems.getOwnerName(entityItem.getEntityItem()); + + EntityPlayer entityPlayer = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(str); + if(entityPlayer!=null) + { + entityPlayer.posX = x; + entityPlayer.posY = y+1; + entityPlayer.posZ = z; + + if(entityPlayer instanceof EntityPlayerMP) + { + ((EntityPlayerMP)entityPlayer).mcServer.getConfigurationManager().transferPlayerToDimension(((EntityPlayerMP)entityPlayer), 0); + } + + entityItem.setDead(); + + data.currentEssence = currentEssence - this.getCostPerRefresh(); + data.markDirty(); + } + break; + } + } + +// EnergyBlastProjectile proj = new EnergyBlastProjectile(world, x, y+20, z); +// proj.motionX = 0.0d; +// proj.motionZ = 0.0d; +// proj.motionY = -1.0d; +// world.spawnEntityInWorld(proj); + } + } + + @Override + public int getCostPerRefresh() + { + return 0; + } +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectEarth.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectEarth.java index c168d34b..030abd06 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectEarth.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectEarth.java @@ -4,10 +4,17 @@ import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmMelee; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmProjectile; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmSelf; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeDefaultEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeDefensiveEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeEnvironmentalEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeOffensiveEarth; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileDefaultEarth; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileDefensiveEarth; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileEnvironmentalEarth; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileOffensiveEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfDefaultEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfDefensiveEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfEnvironmentalEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfOffensiveEarth; public class SpellEffectEarth extends SpellEffect { @@ -38,29 +45,25 @@ public class SpellEffectEarth extends SpellEffect @Override public void defaultModificationSelf(SpellParadigmSelf parad) { - // TODO Auto-generated method stub - + parad.addSelfSpellEffect(new SelfDefaultEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override public void offensiveModificationSelf(SpellParadigmSelf parad) { - // TODO Auto-generated method stub - + parad.addSelfSpellEffect(new SelfOffensiveEarth(this.powerEnhancement,this.potencyEnhancement, this.costEnhancement)); } @Override public void defensiveModificationSelf(SpellParadigmSelf parad) { - // TODO Auto-generated method stub - + parad.addSelfSpellEffect(new SelfDefensiveEarth(this.powerEnhancement,this.potencyEnhancement, this.costEnhancement)); } @Override public void environmentalModificationSelf(SpellParadigmSelf parad) { - // TODO Auto-generated method stub - + parad.addSelfSpellEffect(new SelfEnvironmentalEarth(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override @@ -72,22 +75,19 @@ public class SpellEffectEarth extends SpellEffect @Override public void offensiveModificationMelee(SpellParadigmMelee parad) { - // TODO Auto-generated method stub - + parad.addWorldEffect(new MeleeOffensiveEarth(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override public void defensiveModificationMelee(SpellParadigmMelee parad) { - // TODO Auto-generated method stub - + parad.addWorldEffect(new MeleeDefensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override public void environmentalModificationMelee(SpellParadigmMelee parad) { - // TODO Auto-generated method stub - + parad.addWorldEffect(new MeleeEnvironmentalEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override @@ -100,7 +100,7 @@ public class SpellEffectEarth extends SpellEffect protected int getCostForOffenseProjectile() { - return (int)(3*(1.5*this.potencyEnhancement+1)*(Math.pow(1*this.powerEnhancement+1,2))*Math.pow(0.8, costEnhancement)); + return (int)(10*(1.5*this.potencyEnhancement+1)*(Math.pow(1*this.powerEnhancement+1,2))*Math.pow(0.8, costEnhancement)); } @Override @@ -118,22 +118,19 @@ public class SpellEffectEarth extends SpellEffect @Override protected int getCostForDefaultSelf() { - // TODO Auto-generated method stub - return 0; + return (int)(20*Math.pow(1.5*powerEnhancement+1,2)*(2*this.potencyEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForOffenseSelf() { - // TODO Auto-generated method stub - return 0; + return (int)(10*Math.pow(2*this.powerEnhancement+1,2)*(this.potencyEnhancement+1)); } @Override protected int getCostForDefenseSelf() { - // TODO Auto-generated method stub - return 0; + return (int)(750*(1.1*this.powerEnhancement+1)*(0.5*this.potencyEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override @@ -146,28 +143,24 @@ public class SpellEffectEarth extends SpellEffect @Override protected int getCostForDefaultMelee() { - // TODO Auto-generated method stub - return 0; + return (int)(50*Math.pow(1.5*this.potencyEnhancement + 1,3)*(0.5*this.powerEnhancement + 1)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForOffenseMelee() { - // TODO Auto-generated method stub - return 0; + return (int)(20*Math.pow(1.5*this.powerEnhancement+1,3)*(0.25*this.powerEnhancement+1)); } @Override protected int getCostForDefenseMelee() { - // TODO Auto-generated method stub - return 0; + return (int)(5*(1.2*this.powerEnhancement+1)*(1.0f/3.0f*Math.pow(this.potencyEnhancement,2)+2+1.0f/2.0f*this.potencyEnhancement)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForEnvironmentMelee() { - // TODO Auto-generated method stub - return 0; + return (int)(500*Math.pow(2*this.potencyEnhancement+1, 3)*(0.25*this.powerEnhancement+1)*Math.pow(0.8, costEnhancement)); } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java index d10a6494..30cc07dd 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java @@ -1,5 +1,6 @@ package WayofTime.alchemicalWizardry.common.spell.complex.effect; +import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -16,6 +17,8 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.common.NewPacketHandler; public class SpellHelper @@ -201,14 +204,17 @@ public class SpellHelper if(block==Blocks.stone) { world.setBlock(posX, posY, posZ, Blocks.cobblestone); + return; } else if(block==Blocks.cobblestone) { world.setBlock(posX, posY, posZ, Blocks.gravel); + return; } else if(block==Blocks.gravel) { world.setBlock(posX, posY, posZ, Blocks.sand); + return; } } @@ -226,4 +232,40 @@ public class SpellHelper world.setBlockToAir(posX, posY, posZ); } } + + public static ItemStack getDustForOre(ItemStack item) + { + String oreName = OreDictionary.getOreName(OreDictionary.getOreID(item)); + + if(oreName.contains("ore")) + { + String lowercaseOre = oreName; + lowercaseOre.toLowerCase(); + boolean isAllowed = false; + + for(String str : AlchemicalWizardry.allowedCrushedOresArray) + { + if(lowercaseOre.contains(str)) + { + isAllowed = true; + } + } + + if(!isAllowed) + { + return null; + } + + String dustName = oreName.replace("ore", "dust"); + + ArrayList items = OreDictionary.getOres(dustName); + + if(items!=null && items.size()>=1) + { + return(items.get(0).copy()); + } + } + + return null; + } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/MeleeSpellCenteredWorldEffect.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/MeleeSpellCenteredWorldEffect.java index 1ab9f89c..f4ab64e1 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/MeleeSpellCenteredWorldEffect.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/MeleeSpellCenteredWorldEffect.java @@ -11,18 +11,17 @@ public abstract class MeleeSpellCenteredWorldEffect extends MeleeSpellWorldEffec public MeleeSpellCenteredWorldEffect(int power, int potency, int cost) { super(power, potency, cost); - range = 0; } @Override public void onWorldEffect(World world, EntityPlayer entityPlayer) { - Vec3 lookVec = entityPlayer.getLook(range); - int x = (int)(entityPlayer.posX + lookVec.xCoord); - int y = (int)(entityPlayer.posY + entityPlayer.getEyeHeight() + lookVec.yCoord); - int z = (int)(entityPlayer.posZ + lookVec.zCoord); + Vec3 lookVec = entityPlayer.getLook(range).normalize(); + int x = (int)(entityPlayer.posX + lookVec.xCoord*range); + int y = (int)(entityPlayer.posY + entityPlayer.getEyeHeight() + lookVec.yCoord*range); + int z = (int)(entityPlayer.posZ + lookVec.zCoord*range); - this.onCenteredWorldEffect(world, x, y, z); + this.onCenteredWorldEffect(entityPlayer, world, x, y, z); } public void setRange(float range) @@ -30,5 +29,5 @@ public abstract class MeleeSpellCenteredWorldEffect extends MeleeSpellWorldEffec this.range = range; } - public abstract void onCenteredWorldEffect(World world, int posX, int posY, int posZ); + public abstract void onCenteredWorldEffect(EntityPlayer player, World world, int posX, int posY, int posZ); } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java index bed566cc..8a9d4313 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java @@ -2,6 +2,7 @@ package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.e import net.minecraft.block.Block; import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.MeleeSpellCenteredWorldEffect; @@ -10,17 +11,19 @@ public class MeleeDefaultEarth extends MeleeSpellCenteredWorldEffect public MeleeDefaultEarth(int power, int potency, int cost) { super(power, potency, cost); - this.setRange(2); + this.setRange(3*power + 2); } @Override - public void onCenteredWorldEffect(World world, int posX, int posY, int posZ) + public void onCenteredWorldEffect(EntityPlayer player, World world, int posX, int posY, int posZ) { - for(int i=-3; i<=3; i++) + int radius = this.potencyUpgrades; + + for(int i=-radius; i<=radius; i++) { - for(int j=-3; j<=3; j++) + for(int j=-radius; j<=radius; j++) { - for(int k=-3; k<=3; k++) + for(int k=-radius; k<=radius; k++) { if(!world.isAirBlock(posX + i, posY + j, posZ + k) && world.getTileEntity(posX + i, posY + j, posZ + k)==null) { diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java new file mode 100644 index 00000000..2177e6b9 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java @@ -0,0 +1,39 @@ +package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; + +import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.MeleeSpellCenteredWorldEffect; + +public class MeleeDefensiveEarth extends MeleeSpellCenteredWorldEffect +{ + public MeleeDefensiveEarth(int power, int potency, int cost) + { + super(power, potency, cost); + this.setRange(3*power+2); + } + + @Override + public void onCenteredWorldEffect(EntityPlayer player, World world, int posX, int posY, int posZ) + { + ForgeDirection dir = SpellHelper.getDirectionForLookVector(player.getLook(1)); + + int vertRadius = (int)(2 + 1.0f/2.0f*Math.pow(this.potencyUpgrades,2)+1.0f/2.0f*this.potencyUpgrades); + int horizRadius = this.potencyUpgrades+1; + + int xOff = dir.offsetX; + int zOff = dir.offsetZ; + + for(int i=-horizRadius; i<=horizRadius; i++) + { + for(int j=0; j=-vertRange; j--) + { + if(!world.isAirBlock(posX+i, posY+j, posZ+k)&&!SpellHelper.isBlockFluid(world.getBlock(posX+i, posY+j, posZ+k))) + { + BlockTeleposer.swapBlocks(world, world, posX+i, posY, posZ+k, posX+i, posY+j, posZ+k); + + break; + } + } + } + } + } +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java new file mode 100644 index 00000000..d0053320 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java @@ -0,0 +1,27 @@ +package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.SelfSpellEffect; + +public class SelfDefensiveEarth extends SelfSpellEffect +{ + + public SelfDefensiveEarth(int power, int potency, int cost) + { + super(power, potency, cost); + } + + @Override + public void onSelfUse(World world, EntityPlayer player) + { + int pot = 2*this.potencyUpgrades + 1; + int duration = 20*60*(this.powerUpgrades+1); + + player.addPotionEffect(new PotionEffect(Potion.field_76434_w.id,duration, pot)); + player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionHeavyHeart.id, duration, pot)); + } +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java new file mode 100644 index 00000000..a19b3f39 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java @@ -0,0 +1,45 @@ +package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.SelfSpellEffect; + +public class SelfEnvironmentalEarth extends SelfSpellEffect +{ + public SelfEnvironmentalEarth(int power, int potency, int cost) + { + super(power, potency, cost); + } + + @Override + public void onSelfUse(World world, EntityPlayer player) + { + int horizRadius = this.powerUpgrades + 1; + int vertRadius = this.potencyUpgrades + 2; + + Vec3 blockVec = SpellHelper.getEntityBlockVector(player); + + int posX = (int)(blockVec.xCoord); + int posY = (int)(blockVec.yCoord); + int posZ = (int)(blockVec.zCoord); + + for(int i=-horizRadius; i<=horizRadius; i++) + { + for(int j=0; jigP)WFU8GbZ8()Nlj2>E@cM*00C}EL_t(I%cYasisC>J zhQDq%2ML-46Ez~}mG8ChE^}cDAtn%##;&>ApzEy5?ABFNG=Kl6Hmb`1jQwg^mZg?u zss9XMt>thyP*s&~w_80Pk3ateU>+qHVk6%EXebmD2iCG*Dun3{H{GsQ_klz-g}nIC8~;Z4r2^eRZaH*>bf>h47~Sr zUB@_%0K{>ObB^2X#%wkNU>rxXEPM5!EKA+(b~xv-)*>RraZKO$L{Y?YxkN-Aw6xLhuH?*RycU^+KVLl6Ws zP4kq-9{okAT)t>+e!;rr3xn8g4TL6zhsyZ?JHo&|21j~-hG}&Q0;s5{u M07*qoM6N<$f}m#GP5=M^ literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fa7764537254147c35c1e356ab75ec29a1e0ef GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(~4_-VEMl2N~A^MK}vQ zB8wRq_zr_GH=O_Iu2Hj2h<4_wMck3SIGZaSX9IeRh(s&_M@**8MD^ zT+;*AHF~c+B^mOx=-anLO`n84TYAn0n*3N;FJ+pHO&Xs%KVy->PS|EHewtRV$z?l$E`3Pp_ z$^wB8E6S3*k9IftvC1%{ug<;QueVwfUZ7v!=>Z=Db+|6Zw5=!tJK z&%vJ5ghh8;xq>PK>Si&Ceh4jO`m!%_NkF&BB@X|r=blogx|6b%S2F%PU&*i~!a4QN T)b3e8|1o&F`njxgN@xNATKIKf literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png new file mode 100644 index 0000000000000000000000000000000000000000..49c595c35c93ee2a7ef35adaf6c89dfeeda9cdbf GIT binary patch literal 502 zcmVZ5010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-UAK{6Dsi0t2_Vz0fR|I zK~y-)&62%t6G0S4&+g2umvwd>DW(G2Q1~541r)%0SaM+r35f@wK%$~R;(a1&KLElK zP~kYp-ktUQ>|dG$WlbXJ;I?;kbiTPC{ObvBTfBbtvh&^}g&>L|-n@Mm{1sq6n|1)t zp1;65hp#+BNsIG+1ML2E7R0S+da~MV^ypDWxvhZntD@ z$G7ia5kj)f^B$mQa5Nqh1mL~n;2=e7jgpGQnBEn_{VUwN|A3}$`Lg^>kr!yK@l}PjmMl$wD^l+dt}Fl^9v>5_ s2x|>=0Y6q}*WdiP%2$otga3zf0cPm98WtUqV*mgE07*qoM6N<$f=tNOvj6}9 literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png new file mode 100644 index 0000000000000000000000000000000000000000..d275736f943f4192cade3ef5c7f388dd7d1877a1 GIT binary patch literal 454 zcmV;%0XhDOP)VGd000McNliru-UA5@F&gc!k3IkZ0aHmt zK~y-)y_4T7L_rkCKWAp{y)GgzQg|V1Np1Xlvhv{XyHY$TdGsSn?B2aUW{!u+Zi^Ku z=WUuf-!tDIM-KM8{G|+kEH~|_KfWz%VRdrHCo8*My3r701!+_1emx@@>CIZ+Dw1Qy?A~Ff! zn-XnG0)PSmf(L6E=@7g{#gWcbpKS~tOaguwxrSy;P#kCp)nJKw@G@ckNQ2|^u3X%M z2-r08HUgGNL6aQga_$!^POrvRehQMw;&cu1N7XZUpW?$DmRm@E5F}ODwBYM^3WnyMF0Q*07*qoM6N<$g55j4eEYueawTGU=YH*LbS$-n(?x42AQ e;`99u2gCAY&!hiyH=O_Iu2HJo=ha+Rc?fq5qyPjv*GO&rUk+ci4f)wLksR z1us#dHI9EcJKm>VJn!hSRQihhq?tQ)=7?PqxF}ok{QAby+#lJSR~~t5yh$>GA+@6Z z=gw=(q@I^AU~zR|e>?lR`Rc^}x#s$E4y;~`LPuCW+JW?!#xCy$tUDvPW*Ub{qH4RB+MPWEU@Ev0%GuaU{upD>J9l z-Tccx)RY^zp6EW=c0M{j#!*#6^ujK^`%CQ^&9v9V{@$gw;Kz{)-rcq@t{$xXeOff7 zuHNc|^>sy#O$VL{%;J{wP)VGd000McNliru-UA5@DIA8^vQhv50d+}4 zK~y-)#ga{K(_j#WpZRRZc0-60+(Mv;RW~d^+@Lq;o@;R#&H&3Ukf;Py>LNCUKpV%2 z?Qez!2oX#wc71pA_vjtXz->!*70Nw~^{+tTU`KB+S%UFG*gHDJT?H_V;9Rj_qigTjgev|9K=JemO%r#hjq^CEa_Ee`h?n>5=|aaTn7yNB~_8 ehd1=zu6_WnH==*`+Ut=30000P)VGd000McNliru-UA5@H3pr+7Igps0d+}4 zK~y-)#gfTR8$l3;zouv69^(bGNJxNCSY$Xrl$VK=Cq!`J4LEQ^IYbr-0tFC?*^JFH z2G4k=d%C$<*fIifp>CzB`fB^(vrW7f@HeXNrLTV;iFX0~jj9WzVr6|5i>0A&iETo7 z&>RX9gT;&M%amk+Fzi9xTjD%z@IAkZFC>9bjCn@_!0R^S}N0ZEn; z+k}U#&7@ah%Byf^?irV5gngpoP2h|LKR+DM{!tSbfBtik-XM`APBZRTxQzc1c5e_u z5qTExY_jhQ-rx-$vksB%qMf0oTU@pGaoQkMfufqHEA-n!0w`4jx^bN-3K4-q)@R-p e(nqBH`SuKE>#Zxx%kgXg0000VGd000McNliru-UA5@G7UvhSvmj!0kla( zK~y-)y_3Oe6Hyd~zkBaYGLtj}8%J#+6&J;gi_+OB?tF$Sf-6_<6kOFOh#=xqxKIK< zNj5GNL3$FGuXMp7&!MVwe5((hc~jcKs&=+g!YC(obY*W(Her%P&eR0$LNQplm)4C z%L<$`RFq&+mfgT( zI2D@C(GP}DYS5Ks1@Zkul@1fW)-yt@3ACo+8BD2Y=#r5?fy9RspZM`pwVFh|0H+`j z3>L4nL?X0OfxG}$gL=Lm<@nJv#rIQw4u)9Y66PS|1vv$bH6-W651*^QlKA_qZ(qw+ p*gOc03&Bbd^HSNl@ zoxV36|yh`RVo8B|;Swmf2cp84PckZ^} jP&1s-oFLSE{0HM=TVIavpN{VZx}Cw()z4*}Q$iB}5pr$7 literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png new file mode 100644 index 0000000000000000000000000000000000000000..40606587c0ad2ab997f8922a98b01baaa799046a GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({xitX5C6w)^mS#w$IQvV%lzs6S&&gHJzX3_EKa|@WaxJ|K*05)@qNCC zO$@B5>^l6NQx&ewXcG&RIKDBN-_=9XRVnw~m+<_wxSZGG*8^fs`a1CPYrTIP%~$3B zF~{iEOCQUon=DR&A#%xYxBl+Ai=P(S4H^(T{c{G zI^Qm?zB+5a;PDP`J-6l~GpgCyYs>cem}M2N^l09)IV1Glxw{X9vakN%e_>A9PScM% a`%nI~J#jyG$3CE=89ZJ6T-G@yGywpJRc-|U literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png new file mode 100644 index 0000000000000000000000000000000000000000..77af87239ab5a01dcd417af7f5bb35a3a012ebb7 GIT binary patch literal 461 zcmV;;0W$uHP)VGd000McNliru-UA5?IUwS=wzB{L0a{5! zK~y-)#nMe{Q$ZBQ@!!o&n?@5`6jXH6t^~ndcPd@Qjp9P^yZI%=t+b$m1y^p>jVKiH zElF<^)BBQ_adEY`wTasv7-r6y^ZaM#%;BspTC}mfE*$soeV(5iEfRL_-y}ce@E7OX zc6L6^1x5dgJDm+KU1#qd@e<>_9PtwAz;2(ryOpkX>Q0w8=zS^Yan2~ANJ$4^nw?BP z0=(K3I*&H#?a{he21m&${#Kh8x2pQo|1RPc)atBW;p5x#)F}!qquD%)rC%#x1!y$M zM;!blO-tdq76HQv{k#OdXPC@+LYPfC_(AfG80`z}=fr_VL1RV_eOj$KfZH#N=*{=E z+L;yXHyO^D%;@3+Pa_^A)i2bK7ic;f&_IS-#?`D84wdzou+skHFS6Hngza@9JQTtW zAuJ1FO?VOs&l)GY^S`b9{F;z;>5f^g^LV^C_iXJqNK=L_`VB}A00000NkvXXu0mjf Dqb$tE literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png new file mode 100644 index 0000000000000000000000000000000000000000..33dc2d425064582429903fa52f7d197d814c2a3d GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(~4_-VEMl2N~A^MK}vQ zB8wRq_zr_GH=O_Iu2HJgh=TyqA>%h2D9(IEGl9K03)T@2~-n>wFFM z0&eja6IOaZpQo69Dzj+WJ+;V5hofoZqL?iOy%m!CgRRZQ*HdBVip8H-oJuM) zan!vXajD%xu(qCcQrJ{hx98@Hxxwf6mWY>`b_xm{w-r|LaJtU_^3BJ2ryOsbcBwP% iRM9=#`uDH-K1QZhMO!V^U1tNG&fw|l=d#Wzp$PzReQR9+ literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png new file mode 100644 index 0000000000000000000000000000000000000000..2b84b9765924ce2c92b0dd29a9d3551d3cd44f83 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)2d5J`7&lR{mZK6yYrJ zh%9Dc;5!V$jK}j=qyPokOFVsD+3zuP@^Yx}cJ`YJ6x#3U;uvCadTH=M-opw!CLNrU z{>)tXHo-$s>laZ=pUpdtS)VZc!(dodF5v#YYxBbQ33tmZWIQ-7^DHiJoxpO| zbBfN+he=VJdY>4ab>-2E>Ak?E`*d08O6ixjeu5Qg|I}=nc5VvGUi^aL_pM8ARpAc} y{(hSJ(ni8c!P{r1b*9|1{8CnigtfVOkJ-=cD{3q4x&9aE6$VdNKbLh*2~7a3)^U0O literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png new file mode 100644 index 0000000000000000000000000000000000000000..6719e820c1817ac7267f3075894610f562221dd5 GIT binary patch literal 478 zcmV<40U`d0P)VGd000McNliru-UA5%3?V;O*T4V(0c%M_ zK~y-)t<%A36JZp^@!vO-WC&K#hSHT-72m*xAc9>8E=An&?q}>sH5y&l+|4(`rGFvIGFvOM|KGpyH_~v4 URlWBA>Hq)$07*qoM6N<$f|@eYhyVZp literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemRunicPlate.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemRunicPlate.png new file mode 100644 index 0000000000000000000000000000000000000000..1f1ed624ed757122da3135c7f70715cad8de4f4b GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPqGY^BY`i}31&H#mEGeaUuobz*YQ}arITm}Z`qSVBa z)D(sC%#sWRcTeAd6une-1_nkBPZ!4!i_=RdTd!_45NJ_%e9ITLqqV7{_y2!;PP1hK zB0ZHkc}r!!R_yJ6J88q@oBG0nP6z6}>Tanla&UQgo+-%dN@?#R4Y}4Mzd4*Zo>a=+ z+Sa;NEKtNTyLa7d28P219h)7#?Bh^ekSWEXc;L*1C}xIJo9?(A( zb(i&l+WYVO_;@C%G=7(hdVM=BnP-#EZYPyR0imKjhW$^D7q$d>#Yh+!@A1~*=M{neamzemgM85!1J=e}%WtNt-2-F<)AhsnQ~*y`qOTRVB1ASkdrUHx3v IIVCg!0PX3a4*&oF literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png new file mode 100644 index 0000000000000000000000000000000000000000..bd01c9b96e850de88cae7c55b017238717c659a7 GIT binary patch literal 481 zcmV<70UrK|P)WFU8GbZ8()Nlj2>E@cM*00BiwL_t(I%cYYsPr^_T z$A3qRwM173CPTu&=IF<;3=$Iu62F{_fyv3i&DGgR!a&mKU_c75VC^}0uT~&v$~LRA?qejPk%;~q0MMz|X^Uv<7m$=o5D`v6JIy9(5D<>XxH#r2O#$et z$}(W5{GzHvB50QJHW-jQ#|&s$pf9To`k^2a(aT1IEJ+x}F*y(b@3sTH0C)D>Rh1PF zG|O0wMg%|zd;lqs0M1}1>pW;zt9ntZk@Wk;p#v7c0Wde%6YvQ1EVodwa1P|Fw9IY- z5MbhCOqKVmFfkI*^Dso@+hl*ESkM%>HxF)0CKd{=f!T0aP%D-!z|2$~0{ff#!2hN* zOPB&VuxGVD05?m$AnRtqgN}h+;5iJL%;&u3`ARd%reX4+BVh2CPF!9-VbfsAw&VN> X6Wy4XZvL^Y00000NkvXXu0mjf2G+tI literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e9bab691060a86a3e2d010919ee944e055dd4a GIT binary patch literal 433 zcmV;i0Z#sjP)VGd000McNliru-UA5?C>IIbFsuLo0X|7Y zK~y-)#gffR0#O)-pBbk@X%P{D$UsE}bp@^31c5GsT34GcArQI(!Apo%<|6trq;<3k zx&c=%Z6kpe>6szZw?&gUzOFM{&j znz~(|-EA9~1*U*1=cPIThx^f@+?H1*Z(TA;$)qK7B$-Lc&|ifj8pPP4i|v4#z%q(& z0uMk8tW>0^J!pMrD+WxXcqVx50CS*rA8@b-gD#w(L#NXMd|(61y9XWv{`N0b&mZEz z_v^qsAm9`5!e9a2?^dNUgrL{^0IEO>cnM1i=mopLbt49Hb(56Lie#2Tlh-@a8&U&h zPr|?8ghF9C!1GYs08GH*!XMGRxSUa;h|~&HUy+*VIEzlt!s;WVoXev|10=9*$md2R baIEzOzk`?B*H-nU00000NkvXXu0mjf0PC^| literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1103225d80d74642e7008218ac4b0c1816f2c3 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({F}bqv)PWuGwvMK}vQ zB8wRq_zr_GH=O_Iu2n4BGq_?M$&ip@W_-jv*GOljqD@ecpjHLCO7c z%iH*W{x|+TweMm)(bQt%?(UjU?pPAS!ffZ9Fl)MA^ud4!Cl7ZdIW(&CKfaWzT_Dxu zYuv_NAlc+?%nSs|+aek=Z*0qDKm40tUZNoLSSABd^zfm_I{%9|6-&IkyT3Wu_+CcM z|A)+n_x>)Im?9D?!NSVo;mv-cZk|yoSM&7g?B{MIDv8|sIIaG}F+O3#z*haPnH`;4 wHEjlhizV+0^klTm?C>|%JK(g=O@e_T{nWfIWxIb&1$u_T)78&qol`;+0ORv*1^@s6 literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png b/1.7.2/resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png new file mode 100644 index 0000000000000000000000000000000000000000..329d46bc7e70fef9460479dc10ab5b83ff5cb8b7 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(}u{avAiwtIJG*BAf*t zk;M!Qe1}1p@p%4<6rdn`iKnkC`#ok(22s=feg`H2g-&|9IEGl9PQG*E!YK#N1SR*& zJg0B|PmehFuRn=llY-(|JGDPIVjmZ5010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-UAK+7#*WPM5_P*1U5-T zK~#9!?VG=E6h{=tKYO>t=U)LUq=3YVqWlw)6{SEakf(Cto`MJ}DoUhCQ97b1MH-x7xYeGZ%Yj*(a@TZ)V4L@B7|--}jBq z2?4taZW~Cwu}RYCZhC-eYU}l5;4cy2q{wksYsUo0ZVVidMRr{g z{akzeUy)#25uFtvTfmw!BLig`c&W^2DVrV(q{;)3$dNHcvgMKBp5CwNbshLeU}W0h zG4MHs zS57$9{0xu@k0<={aoPjMY5jq&NgAtu8O&}T+`?VCZ2(wWv^;wOXB0wz{PM3CyE>uW zJ{4RH`gkH)rVDg!f2W8$Ex3p-Py;N;3Oy-So zqxeIyZiNIO17XmY&4U%oJ}*Ur@9Ny3^?8#0KQm?C826R6>;w0V;iBzk=d}W9(mD>5 zi+E;f(e`l1uv|3AUeP_OLn3bDs2nitwkTSkJ+q)ltQd2o&l)BR=d5MRD|3ki+waEo zd`>IR;338zmJpA+c2qW{W-L{jJMT=RCjCAi?3XIJJHUO7eWTL&o#%J@E@|AaYdi^C_4LI( z@BV_d>;S)IW7gKQ84CF_XDuDzjsWn#Q=twBIn*!ZtFRSrg1ajx=d5L00_YEoeQhlh zfu5i_5*tO^>#tj|wny_XSX;^85RAMV%r`uP8lc(%uwu-i(?#!V4M1$s59)xjwLQP* zi?YF=UjXNiRpCf22`Ruqf~XGXfsHj~u!d!D-WcZxVj0|WpN{aoFM}i90?Rp;&u@b& z5@%Yb!wa3)Rj~|a&0W@nU03@57zlRl%HXg7G**U5%k2G89jruI2CJ;~k6j16w*XYR z)(@=%@=Q9Y-iN@5;lD`IV)C+uf+#D0zRWEWJ}U*s&$ZhEdFNx0y`{Inuw7rM8Z>7H zjWtTJQG$&UY?NT51gi}|*WV{AuYjS_5>V6XiL%TF)$0o!;&00000NkvXX Hu0mjfa$77s literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png b/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png new file mode 100644 index 0000000000000000000000000000000000000000..1dbdeed6610c8302c0d1391c2fc6d144e0e04403 GIT binary patch literal 1608 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 IM6N<$f>z{NK>z>% literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png b/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png new file mode 100644 index 0000000000000000000000000000000000000000..c74a2dd85c136aa12372adaffdb62bdd5826758b GIT binary patch literal 1230 zcmV;<1Tp)GP)VGd000McNliru-UA315i5ZB>SX``1Y1c& zK~#9!?U_q!8&?#^f9K8}Nq*FEDJ>7$f|X@P!g`NP`0onIOw8+}`H^7l;Yj zo31gAVUG~VChT8HcmOht;*!H)h=Gh`nR;`Bcldm^H3no5vP8s;Gse#J+x{TII!Z=z z#9J;QFo^@yn;d}CZi6Dt)>y|Ui-T%JtUePsWDr7p0(?fWh%rpPndFeT_Z^VI06w>I zaS6#{Xiy{I5Cv4TKnBG@fD9H#T=r-nNYWJ)P~7CFaYUqzzG#ldCnikPURE+m%mq*) zB4X-PsI#kk_%v`NCe%8U2sHv!-ZZEe4a1&GC_p!{o z4Ai}+bH$^l3SR@T;%%TP-xlt)*CImko3EPd)lE#WHc$>Q6UkuXeNA+>udeZ6mcY%$JQZRp zPyZUa5=hZPv-jWAn$7E6v8Yu$tC7tQmkux}wM4&X5#k{Tyc|_~e|Q`CL{x!M3=ZHT z%ok?(vs4<$+P5cFU=D{I5TO_(z0dVJZ?!Ubdl@~cVlQSmhn%|zXSAYt9X!+58BkTU+Wc0_tCz3!)yvlxE&+Sdx;YyCqme(E2^WcK zOKDD(hO`bZOJGA^0{^QHxK0x686k9Cc<<1wCxMD^k)pNe>Cb+cV2-6(-8?E+7{ zG7k&+j^}>!*0IS13gCBdojUL!DUEJ)fh!@wUT%ZZBCHQF>@1vhc4?v1H{TD2{xXyz sMT!(DQlv|Jkz&~JA4WtSF1RdZaR2}S07*qoM6N<$f)%SOAOHXW literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png b/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png new file mode 100644 index 0000000000000000000000000000000000000000..f579c0283fc36a62f396b78694fa9720358bea1d GIT binary patch literal 1229 zcmV;;1Ty=HP)VGd000McNliru-UA2%9t^mLB3b|d1X@W% zK~#9!?V34{97Pz0pQ`F(=h)c`)@YIc2LTxgY)giKK>{2sk$(e`<%r+lY=jU5hyYMo z`~i@#GY13~5i1Z0Fgr(2PhUka-Mw?IykmLRbM!mGOm}@lZqJmMC#gIM@ET>B0>@pBocu{p@@hG7*L^#K&*!ZEG#;- z8RCZ=AO<!|^Nw%4Bb?NW+)N34diDV+Dc`hy*g6T6g;4(E)bmV7 zD|&P}@v1!2f8*ft8^3Jyj!%d>pie|pw6fda>*Cb&ib(gT?xV1>#wVmh2Mdcgy&8|S z78~yYqs}lzqS)gA2dAhEOROMHJ;>)0(4GxA-06>(;*J>ZnP=9Iez;K}2s=E>uy3roOSR5#(=*$-G^uIa^$HQ z;&Pj1oJPq-V!-qCKfd7UXX{>6EFNIryF6^okuScj1&M9|vo>2%2iV!4G;SmdT)LGW zcj0SKFwb^gN&AOx<5J<4=N7IlkbNvOx*8jo4OYj*Bw2Q zK>l80`g&Z5010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-UA313NWLq=o0_{1U5-T zK~#9!?U_w)TSXLxpEGl>?Ibmjblsl=2{94~C6+1>9}*J3fmPKNzaa}m7DcE@79i?= zz&~hr{R@#`L7TM6wH@1c=CGK1;|~&AS2*>@eOLC(+$*1V&ikG-W8o4sd!qitB4v-1 z{rR|_M94LVloV|m)C;ESSQdmCM0DANb_9BYp2nyXsCcC0QD@L+2C>;fQK&j*73NX` zUPRyp@<6)=5O6@xpl1f{3Pg&YnfW6?Ry?GFL<$0wJ?aE`H$|2mverXlMczr#)*KR` zEdxfO;vrH{kl3S%g|dS)gH%&U&40XQmNUR+seWoh+ILMLCGve)#EO3&Ln<>%fF#c% z#R(cK7)2rtf%;7EmJpy5P{R0%3!b2W4bR{O^%Ane3Ff^NVCt)bQ7^&F+6IO2xnn}m zX{ZEL(?CQyNP)x#SyUYoE0h%VAVv|RXw%|fTKuVC6vgrf(jaYXjzCosKA*J(rB6qP=ShribB&uk064q^`K=?1yazCg_1{G5=fYS6U=t+%s|EA73gO5Kgm+q2`s13mdqOjZ14lI2K;@}AwoqhtO>cN9F4Kyv*26v|&j8HoU1jL6RMM62Gla;@gg|0zX(m;v_ znl`k{OP&JLUIs@84tE*K+Z$gY3&lvYZFI9%)8xeJX04|49Coi2`!xV|wj1+HNUr(KT1}G|R+GQu^Y6{J(ZTsm;HQ7VD;k&i9JULe(@wwAj4*@rpccrZ7IPIo=2J-M+?>mM2dfz>E3F%3z&BT za)<95U&P)Ie`HOOA^EE`*B#+d6_8~IPQp!Z+aT9mINcSPUf;^I^Kcg(?PA~PEU>W0 z;lo`tuloSEZ+#EIt=r!XJ+QOg;C0sBZ!~0_ogDX>iJb;#2`xoi8q)sBzM=o;!@e{epwfA;}c*xvdOfP;Gt{82>xi}lG8FlhtK z-@o_sL-0`lY$K3x=Ml%h_Ag>r*GtsDd4K3#`v(s=x*JYplempC<9NWU^gkHzg={am z^WXvMpRW(i=fUs&_. Subcommands are tps, track -commands.forge.usage.tracking=Use /forge track . Valid types are te (Tile Entities). Duration is < 60. -commands.forge.tps.summary=%s : Mean tick time: %d ms. Mean TPS: %d - -commands.forge.tracking.te.enabled=Tile Entity tracking enabled for %d seconds. \ No newline at end of file diff --git a/BM_src/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/BM_src/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 346aaabe..6337e32c 100644 --- a/BM_src/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/BM_src/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -22,7 +22,6 @@ import net.minecraftforge.oredict.OreDictionary; import thaumcraft.api.ItemApi; import WayofTime.alchemicalWizardry.common.AlchemicalWizardryEventHooks; import WayofTime.alchemicalWizardry.common.AlchemicalWizardryFuelHandler; -import WayofTime.alchemicalWizardry.common.AlchemicalWizardryTickHandler; import WayofTime.alchemicalWizardry.common.CommonProxy; import WayofTime.alchemicalWizardry.common.EntityAirElemental; import WayofTime.alchemicalWizardry.common.LifeBucketHandler; @@ -30,10 +29,13 @@ import WayofTime.alchemicalWizardry.common.ModLivingDropsEvent; import WayofTime.alchemicalWizardry.common.PacketHandler; import WayofTime.alchemicalWizardry.common.PotionBoost; import WayofTime.alchemicalWizardry.common.PotionDrowning; +import WayofTime.alchemicalWizardry.common.PotionFireFuse; import WayofTime.alchemicalWizardry.common.PotionFlameCloak; import WayofTime.alchemicalWizardry.common.PotionFlight; +import WayofTime.alchemicalWizardry.common.PotionHeavyHeart; import WayofTime.alchemicalWizardry.common.PotionIceCloak; import WayofTime.alchemicalWizardry.common.PotionInhibit; +import WayofTime.alchemicalWizardry.common.PotionPlanarBinding; import WayofTime.alchemicalWizardry.common.PotionProjectileProtect; import WayofTime.alchemicalWizardry.common.PotionReciprocation; import WayofTime.alchemicalWizardry.common.alchemy.AlchemicalPotionCreationHandler; @@ -62,7 +64,6 @@ import WayofTime.alchemicalWizardry.common.items.ItemSpellEnhancementBlock; import WayofTime.alchemicalWizardry.common.items.ItemSpellModifierBlock; import WayofTime.alchemicalWizardry.common.items.ItemSpellParadigmBlock; import WayofTime.alchemicalWizardry.common.items.LifeBucket; -import WayofTime.alchemicalWizardry.common.items.forestry.ItemBloodFrame; import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfHolding; import WayofTime.alchemicalWizardry.common.items.thaumcraft.ItemSanguineArmour; import WayofTime.alchemicalWizardry.common.rituals.Rituals; @@ -107,10 +108,8 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -import cpw.mods.fml.common.registry.TickRegistry; -import cpw.mods.fml.relauncher.Side; -@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v0.7.3c") +@Mod(modid = "AWWayofTime", name = "AlchemicalWizardry", version = "v0.7.3e") @NetworkMod(clientSideRequired = true, serverSideRequired = false, channels = {"BloodAltar", "particle", "SetLifeEssence", "GetLifeEssence", "Ritual", "GetAltarEssence", "TESocket", "TEWritingTable", "CustomParticle", "SetPlayerVel", "SetPlayerPos", "TEPedestal", "TEPlinth", "TETeleposer", "InfiniteLPPath", "TEOrientor"}, packetHandler = PacketHandler.class) public class AlchemicalWizardry @@ -124,6 +123,8 @@ public class AlchemicalWizardry public static int ironBlockMeteorRadius; public static String[] netherStarMeteorArray; public static int netherStarMeteorRadius; + + public static String[] allowedCrushedOresArray; public static Potion customPotionDrowning; public static Potion customPotionBoost; @@ -133,6 +134,9 @@ public class AlchemicalWizardry public static Potion customPotionReciprocation; public static Potion customPotionFlameCloak; public static Potion customPotionIceCloak; + public static Potion customPotionHeavyHeart; + public static Potion customPotionFireFuse; + public static Potion customPotionPlanarBinding; public static int customPotionDrowningID; public static int customPotionBoostID; @@ -142,6 +146,9 @@ public class AlchemicalWizardry public static int customPotionReciprocationID; public static int customPotionFlameCloakID; public static int customPotionIceCloakID; + public static int customPotionHeavyHeartID; + public static int customPotionFireFuseID; + public static int customPotionPlanarBindingID; public static boolean isThaumcraftLoaded; public static boolean isForestryLoaded; @@ -274,6 +281,8 @@ public class AlchemicalWizardry public static int itemBloodLightSigilItemID; public static int itemComplexSpellCrystalItemID; public static int itemBloodFrameItemID; + public static int baseComponentsItemID; + public static int baseAlchemyComponentsItemID; public static int testingBlockBlockID; public static int lifeEssenceFlowingBlockID; @@ -392,7 +401,7 @@ public class AlchemicalWizardry ItemStack lavaBucketStack = new ItemStack(Item.bucketLava); ItemStack cobblestoneStack = new ItemStack(Block.cobblestone); ItemStack glassStack = new ItemStack(Block.glass, 1, craftingConstant); - ItemStack ironStack = new ItemStack(Item.ingotIron); + ItemStack ironIngotStack = new ItemStack(Item.ingotIron); ItemStack diamondStack = new ItemStack(Item.diamond, 1, craftingConstant); ItemStack woolStack = new ItemStack(Block.cloth); ItemStack goldNuggetStack = new ItemStack(Item.goldNugget); @@ -495,18 +504,18 @@ public class AlchemicalWizardry ItemStack magicalesStack = new ItemStack(ModItems.magicales); //All crafting goes here // GameRegistry.addRecipe(orbOfTestingStack, "x x", " ", "x x", 'x', cobblestoneStack); - //GameRegistry.addRecipe(glassShardStack, " x", "y ", 'x', ironStack, 'y', glassStack); + //GameRegistry.addRecipe(glassShardStack, " x", "y ", 'x', ironIngotStack, 'y', glassStack); //GameRegistry.addRecipe(weakBloodOrbStackCrafted, "xxx", "xdx", "www", 'x', bloodiedShardStack, 'd', diamondStack, 'w', woolStack); - GameRegistry.addRecipe(sacrificialDaggerStack, "ggg", " dg", "i g", 'g', glassStack, 'd', goldIngotStack, 'i', ironStack); - //GameRegistry.addRecipe(blankSlateStack, "sgs", "gig", "sgs", 's', stoneStack, 'g', goldNuggetStack, 'i', ironStack); - //GameRegistry.addRecipe(reinforcedSlateStack, "rir", "ibi", "gig", 'r', redstoneStack, 'i', ironStack, 'b', blankSlateStack, 'g', glowstoneBlockStack); + GameRegistry.addRecipe(sacrificialDaggerStack, "ggg", " dg", "i g", 'g', glassStack, 'd', goldIngotStack, 'i', ironIngotStack); + //GameRegistry.addRecipe(blankSlateStack, "sgs", "gig", "sgs", 's', stoneStack, 'g', goldNuggetStack, 'i', ironIngotStack); + //GameRegistry.addRecipe(reinforcedSlateStack, "rir", "ibi", "gig", 'r', redstoneStack, 'i', ironIngotStack, 'b', blankSlateStack, 'g', glowstoneBlockStack); GameRegistry.addRecipe(lavaCrystalStackCrafted, "glg", "lbl", "odo", 'g', glassStack, 'l', lavaBucketStack, 'b', weakBloodOrbStack, 'd', diamondStack, 'o', obsidianStack); GameRegistry.addRecipe(waterSigilStackCrafted, "www", "wbw", "wow", 'w', waterBucketStack, 'b', blankSlateStack, 'o', weakBloodOrbStack); GameRegistry.addRecipe(lavaSigilStackCrafted, "lml", "lbl", "lcl", 'l', lavaBucketStack, 'b', blankSlateStack, 'm', magmaCreamStack, 'c', lavaCrystalStack); GameRegistry.addRecipe(voidSigilStackCrafted, "ese", "ere", "eoe", 'e', emptyBucketStack, 'r', reinforcedSlateStack, 'o', apprenticeBloodOrbStack, 's', stringStack); GameRegistry.addRecipe(bloodAltarStack, "s s", "scs", "gdg", 's', stoneStack, 'c', furnaceStack, 'd', diamondStack, 'g', goldIngotStack); //GameRegistry.addRecipe(energySwordStack, " o ", " o ", " s ", 'o', weakBloodOrbStack, 's', diamondSwordStack); - //GameRegistry.addRecipe(energyBlasterStack, "oi ", "gdi", " rd", 'o', weakBloodOrbStack, 'i', ironStack, 'd', diamondStack, 'r', reinforcedSlateStack, 'g', goldIngotStack); + //GameRegistry.addRecipe(energyBlasterStack, "oi ", "gdi", " rd", 'o', weakBloodOrbStack, 'i', ironIngotStack, 'd', diamondStack, 'r', reinforcedSlateStack, 'g', goldIngotStack); GameRegistry.addRecipe(bloodRuneCraftedStack, "sss", "ror", "sss", 's', stoneStack, 'o', weakBloodOrbStack, 'r', blankSlateStack); GameRegistry.addRecipe(speedRuneStack, "sbs", "uru", "sbs", 'u', sugarStack, 's', stoneStack, 'r', bloodRuneStack, 'b', blankSlateStack); //GameRegistry.addRecipe(efficiencyRuneStack, "sbs", "rur", "sbs", 'r', redstoneStack, 's', stoneStack, 'u', bloodRuneStack,'b',blankSlateStack); @@ -562,6 +571,10 @@ public class AlchemicalWizardry customPotionReciprocation = (new PotionReciprocation(customPotionReciprocationID, false, 0xFFFFFF)).setIconIndex(0, 0).setPotionName("Reciprocation"); customPotionFlameCloak = (new PotionFlameCloak(customPotionFlameCloakID,false,0).setIconIndex(0,0).setPotionName("Flame Cloak")); customPotionIceCloak = (new PotionIceCloak(customPotionIceCloakID,false,0).setIconIndex(0,0).setPotionName("Ice Cloak")); + customPotionHeavyHeart = (new PotionHeavyHeart(customPotionHeavyHeartID,true,0).setIconIndex(0, 0).setPotionName("Heavy Heart")); + customPotionFireFuse = (new PotionFireFuse(customPotionFireFuseID,true,0).setIconIndex(0, 0).setPotionName("Fire Fuse")); + customPotionPlanarBinding = (new PotionPlanarBinding(customPotionPlanarBindingID,true,0).setIconIndex(0,0).setPotionName("Planar Binding")); + //All items registered go here //LanguageRegistry.addName(orbOfTesting, "Orb of Testing"); LanguageRegistry.addName(ModItems.weakBloodOrb, "Weak Blood Orb"); @@ -902,6 +915,56 @@ public class AlchemicalWizardry MeteorRegistry.registerMeteorParadigm(stoneStack, this.stoneMeteorArray, this.stoneMeteorRadius); MeteorRegistry.registerMeteorParadigm(ironBlockStack, this.ironBlockMeteorArray, this.ironBlockMeteorRadius); MeteorRegistry.registerMeteorParadigm(new ItemStack(Item.netherStar), this.netherStarMeteorArray, this.netherStarMeteorRadius); + + //Register spell component recipes + ItemStack quartzRodStack = new ItemStack(ModItems.baseItems,1,0); + ItemStack emptyCoreStack = new ItemStack(ModItems.baseItems,1,1); + ItemStack magicalesCableStack = new ItemStack(ModItems.baseItems,1,2); + ItemStack woodBraceStack = new ItemStack(ModItems.baseItems,1,3); + ItemStack stoneBraceStack = new ItemStack(ModItems.baseItems,1,4); + ItemStack projectileCoreStack = new ItemStack(ModItems.baseItems,1,5); + ItemStack selfCoreStack = new ItemStack(ModItems.baseItems,1,6); + ItemStack meleeCoreStack = new ItemStack(ModItems.baseItems,1,7); + ItemStack paradigmBackPlateStack = new ItemStack(ModItems.baseItems,1,8); + ItemStack outputCableStack = new ItemStack(ModItems.baseItems,1,9); + ItemStack flameCoreStack = new ItemStack(ModItems.baseItems,1,10); + ItemStack iceCoreStack = new ItemStack(ModItems.baseItems,1,11); + ItemStack windCoreStack = new ItemStack(ModItems.baseItems,1,12); + ItemStack earthCoreStack = new ItemStack(ModItems.baseItems,1,13); + ItemStack inputCableStack = new ItemStack(ModItems.baseItems,1,14); + + ItemStack magicalesCraftedCableStack = new ItemStack(ModItems.baseItems,5,2); + + GameRegistry.addRecipe(quartzRodStack, "qqq", 'q', new ItemStack(Item.netherQuartz)); + GameRegistry.addRecipe(emptyCoreStack,"gig","nrn","gig",'n',goldIngotStack,'i',ironIngotStack,'g',glassStack,'r',simpleCatalystStack); + GameRegistry.addRecipe(magicalesCraftedCableStack,"sss","mmm","sss",'s',new ItemStack(Item.silk),'m',magicalesStack); + GameRegistry.addRecipe(woodBraceStack," il","ili","li ",'l', new ItemStack(Block.wood,1,craftingConstant),'i',new ItemStack(Item.silk)); + GameRegistry.addRecipe(stoneBraceStack," is","isi","si ",'i', ironIngotStack,'s',reinforcedSlateStack); + + GameRegistry.addRecipe(projectileCoreStack, "mbm","aca","mom",'c', emptyCoreStack,'b',weakBloodShardStack,'m', magicalesStack,'o', magicianBloodOrbStack,'a',new ItemStack(Item.arrow)); + GameRegistry.addRecipe(selfCoreStack,"sbs","ncn","sos",'c', emptyCoreStack, 's',sanctusStack,'b', weakBloodShardStack,'o', magicianBloodOrbStack,'n',glowstoneDustStack); + GameRegistry.addRecipe(meleeCoreStack,"sbs","ncn","sos",'c', emptyCoreStack, 's',incendiumStack,'b', weakBloodShardStack,'o', magicianBloodOrbStack,'n',new ItemStack(Item.flintAndSteel)); + GameRegistry.addRecipe(paradigmBackPlateStack,"isi","rgr","isi",'i',ironIngotStack,'r',stoneStack,'g',goldIngotStack,'s',reinforcedSlateStack); + GameRegistry.addRecipe(outputCableStack, " si","s c"," si",'s',stoneStack,'i',ironIngotStack,'c',simpleCatalystStack); + + GameRegistry.addRecipe(flameCoreStack,"mdm","scs","mom",'m',incendiumStack,'c',emptyCoreStack,'o',magicianBloodOrbStack,'d',diamondStack,'s',weakBloodShardStack); + GameRegistry.addRecipe(iceCoreStack,"mdm","scs","mom",'m',crystallosStack,'c',emptyCoreStack,'o',magicianBloodOrbStack,'d',diamondStack,'s',weakBloodShardStack); + GameRegistry.addRecipe(windCoreStack,"mdm","scs","mom",'m',aetherStack,'c',emptyCoreStack,'o',magicianBloodOrbStack,'d',diamondStack,'s',weakBloodShardStack); + GameRegistry.addRecipe(earthCoreStack,"mdm","scs","mom",'m',terraeStack,'c',emptyCoreStack,'o',magicianBloodOrbStack,'d',diamondStack,'s',weakBloodShardStack); + + GameRegistry.addRecipe(inputCableStack, "ws ","rcs","ws ",'w',blankSlateStack,'s',stoneStack,'r',imbuedSlateStack,'c',simpleCatalystStack); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockConduit,1,0),"q q","ccc","q q",'q', quartzRodStack,'c', magicalesCableStack); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm,1,0),"gb ","pcw","gb ",'p',paradigmBackPlateStack,'c', projectileCoreStack,'g',goldIngotStack,'b',stoneBraceStack,'w',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm,1,1),"gb ","pcw","gb ",'p',paradigmBackPlateStack,'c', selfCoreStack,'g',goldIngotStack,'b',stoneBraceStack,'w',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellParadigm,1,2),"gb ","pcw","gb ",'p',paradigmBackPlateStack,'c', meleeCoreStack,'g',goldIngotStack,'b',stoneBraceStack,'w',outputCableStack); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect,1,0),"bgb","ico","bgb",'c',flameCoreStack,'b',stoneBraceStack,'g',goldIngotStack,'i',inputCableStack,'o',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect,1,1),"bgb","ico","bgb",'c',iceCoreStack,'b',stoneBraceStack,'g',goldIngotStack,'i',inputCableStack,'o',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect,1,2),"bgb","ico","bgb",'c',windCoreStack,'b',stoneBraceStack,'g',goldIngotStack,'i',inputCableStack,'o',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEffect,1,3),"bgb","ico","bgb",'c',earthCoreStack,'b',stoneBraceStack,'g',goldIngotStack,'i',inputCableStack,'o',outputCableStack); + // sanguineHelmet = new ItemSanguineArmour(sanguineHelmetItemID).setUnlocalizedName("sanguineHelmet"); // // LanguageRegistry.addName(sanguineHelmet,"Sanguine Helmet"); diff --git a/BM_src/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java b/BM_src/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java index 22676828..4a4b2288 100644 --- a/BM_src/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java +++ b/BM_src/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java @@ -46,6 +46,9 @@ public class BloodMagicConfiguration AlchemicalWizardry.customPotionReciprocationID = config.get("Potion ID", "Reciprocation", 105).getInt(); AlchemicalWizardry.customPotionFlameCloakID = config.get("Potion ID","FlameCloak",106).getInt(); AlchemicalWizardry.customPotionIceCloakID = config.get("Potion ID","IceCloak",107).getInt(); + AlchemicalWizardry.customPotionHeavyHeartID = config.get("Potion ID","HeavyHeart",108).getInt(); + AlchemicalWizardry.customPotionFireFuseID = config.get("Potion ID","FireFuse",109).getInt(); + AlchemicalWizardry.customPotionPlanarBindingID = config.get("Potion ID","PlanarBinding",110).getInt(); MeteorParadigm.maxChance = config.get("meteor", "maxChance", 1000).getInt(); AlchemicalWizardry.doMeteorsDestroyBlocks = config.get("meteor", "doMeteorsDestroyBlocks", true).getBoolean(true); @@ -58,6 +61,8 @@ public class BloodMagicConfiguration AlchemicalWizardry.netherStarMeteorArray = config.get("meteor", "netherStarMeteor", new String[]{"oreDiamond", "150", "oreEmerald", "100", "oreQuartz", "250", "oreSunstone", "5", "oreMoonstone", "50", "oreIridium", "5", "oreCertusQuartz", "150"}).getStringList(); AlchemicalWizardry.netherStarMeteorRadius = config.get("meteor", "netherStarMeteorRadius", 3).getInt(); + AlchemicalWizardry.allowedCrushedOresArray = config.get("oreCrushing", "allowedOres", new String[]{"iron","gold","copper","tin","lead","silver","osmium"}).getStringList(); + AlchemicalWizardry.testingBlockBlockID = config.getBlock("TestingBlock", 1400).getInt(); AlchemicalWizardry.lifeEssenceFlowingBlockID = config.getBlock("LifeEssenceFlowing", 1401).getInt(); AlchemicalWizardry.lifeEssenceStillBlockID = config.getBlock("LifeEssenceStill", 1402).getInt(); @@ -176,6 +181,8 @@ public class BloodMagicConfiguration AlchemicalWizardry.sigilOfMagnetismItemID = config.getItem("SigilOfMagnetism", 17080).getInt(); AlchemicalWizardry.itemComplexSpellCrystalItemID = config.getItem("ComplexSpellCrystal",17081).getInt(); AlchemicalWizardry.itemBloodFrameItemID = config.getItem("BloodFrame", 17082).getInt(); + AlchemicalWizardry.baseComponentsItemID = config.getItem("BaseComponents", 17083).getInt(); + AlchemicalWizardry.baseAlchemyComponentsItemID = config.getItem("BaseAlchemyComponents", 17084).getInt(); } catch (Exception e) { diff --git a/BM_src/WayofTime/alchemicalWizardry/ModItems.java b/BM_src/WayofTime/alchemicalWizardry/ModItems.java index 8cb6a9a0..7a161e8b 100644 --- a/BM_src/WayofTime/alchemicalWizardry/ModItems.java +++ b/BM_src/WayofTime/alchemicalWizardry/ModItems.java @@ -90,6 +90,9 @@ public class ModItems public static Item armourInhibitor; public static Item creativeFiller; public static Item demonPlacer; + + public static Item baseItems; + public static Item baseAlchemyItems; public static Item weakFillingAgent; public static Item standardFillingAgent; @@ -185,5 +188,7 @@ public class ModItems energyBazooka = new EnergyBazooka(AlchemicalWizardry.energyBazookaItemID).setUnlocalizedName("energyBazooka"); itemBloodLightSigil = new ItemBloodLightSigil(AlchemicalWizardry.itemBloodLightSigilItemID).setUnlocalizedName("bloodLightSigil"); itemComplexSpellCrystal = new ItemComplexSpellCrystal(AlchemicalWizardry.itemComplexSpellCrystalItemID).setUnlocalizedName("itemComplexSpellCrystal"); + baseItems = new ItemComponents(AlchemicalWizardry.baseComponentsItemID).setUnlocalizedName("baseItems"); + baseAlchemyItems = new ItemAlchemyBase(AlchemicalWizardry.baseAlchemyComponentsItemID).setUnlocalizedName("baseAlchemyItems"); } } diff --git a/BM_src/WayofTime/alchemicalWizardry/client/ClientProxy.java b/BM_src/WayofTime/alchemicalWizardry/client/ClientProxy.java index c3c18cac..6e63aa15 100644 --- a/BM_src/WayofTime/alchemicalWizardry/client/ClientProxy.java +++ b/BM_src/WayofTime/alchemicalWizardry/client/ClientProxy.java @@ -1,5 +1,6 @@ package WayofTime.alchemicalWizardry.client; +import net.minecraft.item.ItemBlock; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import WayofTime.alchemicalWizardry.ModBlocks; @@ -25,11 +26,17 @@ import WayofTime.alchemicalWizardry.common.renderer.block.RenderConduit; import WayofTime.alchemicalWizardry.common.renderer.block.RenderPedestal; import WayofTime.alchemicalWizardry.common.renderer.block.RenderPlinth; import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellEffectBlock; +import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellEnhancementBlock; +import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellModifierBlock; +import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellParadigmBlock; import WayofTime.alchemicalWizardry.common.renderer.block.RenderWritingTable; import WayofTime.alchemicalWizardry.common.renderer.block.TEAltarRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEAltarItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEConduitItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellEffectBlockItemRenderer; +import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellEnhancementBlockItemRenderer; +import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellModifierBlockItemRenderer; +import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellParadigmBlockItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderBileDemon; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderBoulderFist; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderElemental; @@ -57,6 +64,9 @@ import WayofTime.alchemicalWizardry.common.tileEntity.TEConduit; import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEffectBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEnhancementBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellModifierBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; @@ -108,10 +118,15 @@ public class ClientProxy extends CommonProxy ClientRegistry.bindTileEntitySpecialRenderer(TEWritingTable.class, new RenderWritingTable()); ClientRegistry.bindTileEntitySpecialRenderer(TEConduit.class, new RenderConduit()); ClientRegistry.bindTileEntitySpecialRenderer(TESpellEffectBlock.class, new RenderSpellEffectBlock()); - + ClientRegistry.bindTileEntitySpecialRenderer(TESpellEnhancementBlock.class, new RenderSpellEnhancementBlock()); + ClientRegistry.bindTileEntitySpecialRenderer(TESpellParadigmBlock.class, new RenderSpellParadigmBlock()); + ClientRegistry.bindTileEntitySpecialRenderer(TESpellModifierBlock.class, new RenderSpellModifierBlock()); //Item Renderer stuff MinecraftForgeClient.registerItemRenderer(ModBlocks.blockConduit.blockID, new TEConduitItemRenderer()); MinecraftForgeClient.registerItemRenderer(ModBlocks.blockSpellEffect.blockID, new TESpellEffectBlockItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ModBlocks.blockSpellEnhancement.blockID, new TESpellEnhancementBlockItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ModBlocks.blockSpellParadigm.blockID, new TESpellParadigmBlockItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ModBlocks.blockSpellModifier.blockID, new TESpellModifierBlockItemRenderer()); //RenderingRegistry.registerEntityRenderingHandler(FireProjectile.class, new RenderFireProjectile()); //RenderingRegistry.registerBlockHandler(new AltarRenderer()); } diff --git a/BM_src/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java b/BM_src/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java index e3cb2c94..66512d4c 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java @@ -10,21 +10,19 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IProjectile; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.PlayerCapabilities; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.potion.Potion; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; import net.minecraftforge.event.ForgeSubscribe; +import net.minecraftforge.event.entity.living.EnderTeleportEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.common.entity.projectile.EnergyBlastProjectile; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; -import cpw.mods.fml.common.ObfuscationReflectionHelper; -import cpw.mods.fml.relauncher.ReflectionHelper; public class AlchemicalWizardryEventHooks { @@ -41,6 +39,15 @@ public class AlchemicalWizardryEventHooks event.entityLiving.motionY += (0.1f) * (2 + i); } } + + @ForgeSubscribe + public void onEndermanTeleportEvent(EnderTeleportEvent event) + { + if(event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionPlanarBinding) && event.isCancelable()) + { + event.setCanceled(true); + } + } @ForgeSubscribe public void onEntityDamaged(LivingAttackEvent event) @@ -136,13 +143,6 @@ public class AlchemicalWizardryEventHooks if((entityPlayer.onGround || entityPlayer.capabilities.isFlying) && entityPlayer.moveForward > 0F) entityPlayer.moveFlying(0F, 1F, entityPlayer.capabilities.isFlying ? (percentIncrease/2.0f) : percentIncrease); - - -// if (!entityPlayer.worldObj.isRemote) -// { -// float speed = ((Float) ReflectionHelper.getPrivateValue(PlayerCapabilities.class, entityPlayer.capabilities, new String[]{"walkSpeed", "g", "field_75097_g"})).floatValue(); -// ObfuscationReflectionHelper.setPrivateValue(PlayerCapabilities.class, entityPlayer.capabilities, Float.valueOf(speed + (float) percentIncrease), new String[]{"walkSpeed", "g", "field_75097_g"}); //CAUTION -// } } } } @@ -285,6 +285,32 @@ public class AlchemicalWizardryEventHooks } } } - } + } + + if(entityLiving.isPotionActive(AlchemicalWizardry.customPotionHeavyHeart)) + { + entityLiving.worldObj.spawnParticle("flame", x+SpellHelper.gaussian(1),y-1.3+SpellHelper.gaussian(0.3),z+SpellHelper.gaussian(1), 0, 0.06d, 0); + + int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionHeavyHeart).getAmplifier(); + double decrease = 0.025*(i+1); + + if(entityLiving.motionY>-0.9) + { + entityLiving.motionY-=decrease; + } + } + + if(entityLiving.isPotionActive(AlchemicalWizardry.customPotionFireFuse)) + { + entityLiving.worldObj.spawnParticle("flame", x+SpellHelper.gaussian(1),y-1.3+SpellHelper.gaussian(0.3),z+SpellHelper.gaussian(1), 0, 0.06d, 0); + + int r = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionFireFuse).getAmplifier(); + int radius = r+1; + + if(entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionFireFuse).getDuration()<=2) + { + entityLiving.worldObj.createExplosion(null, x, y, z, radius, false); + } + } } } diff --git a/BM_src/WayofTime/alchemicalWizardry/common/PotionFireFuse.java b/BM_src/WayofTime/alchemicalWizardry/common/PotionFireFuse.java new file mode 100644 index 00000000..213ffbf4 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/PotionFireFuse.java @@ -0,0 +1,18 @@ +package WayofTime.alchemicalWizardry.common; + +import net.minecraft.potion.Potion; + +public class PotionFireFuse extends Potion +{ + public PotionFireFuse(int par1, boolean par2, int par3) + { + super(par1, par2, par3); + } + + @Override + public Potion setIconIndex(int par1, int par2) + { + super.setIconIndex(par1, par2); + return this; + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/PotionHeavyHeart.java b/BM_src/WayofTime/alchemicalWizardry/common/PotionHeavyHeart.java new file mode 100644 index 00000000..18bfcaf1 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/PotionHeavyHeart.java @@ -0,0 +1,18 @@ +package WayofTime.alchemicalWizardry.common; + +import net.minecraft.potion.Potion; + +public class PotionHeavyHeart extends Potion +{ + public PotionHeavyHeart(int par1, boolean par2, int par3) + { + super(par1, par2, par3); + } + + @Override + public Potion setIconIndex(int par1, int par2) + { + super.setIconIndex(par1, par2); + return this; + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/PotionPlanarBinding.java b/BM_src/WayofTime/alchemicalWizardry/common/PotionPlanarBinding.java new file mode 100644 index 00000000..8cd8fb59 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/PotionPlanarBinding.java @@ -0,0 +1,18 @@ +package WayofTime.alchemicalWizardry.common; + +import net.minecraft.potion.Potion; + +public class PotionPlanarBinding extends Potion +{ + public PotionPlanarBinding(int par1, boolean par2, int par3) + { + super(par1, par2, par3); + } + + @Override + public Potion setIconIndex(int par1, int par2) + { + super.setIconIndex(par1, par2); + return this; + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellEnhancement.java b/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellEnhancement.java index 3d166d8e..cd564c0c 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellEnhancement.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellEnhancement.java @@ -28,6 +28,24 @@ public class BlockSpellEnhancement extends BlockOrientable return new TESpellEnhancementBlock(); } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + @SideOnly(Side.CLIENT) public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) { diff --git a/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java b/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java index 1b8fb41e..31a0034f 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellModifier.java @@ -27,6 +27,24 @@ public class BlockSpellModifier extends BlockOrientable return new TESpellModifierBlock(); } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + @SideOnly(Side.CLIENT) public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) { diff --git a/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java b/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java index e022e4c5..47bb376e 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/block/BlockSpellParadigm.java @@ -52,6 +52,24 @@ public class BlockSpellParadigm extends BlockOrientable // return this.projectileIcons; // } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override public TileEntity createNewTileEntity(World world) { diff --git a/BM_src/WayofTime/alchemicalWizardry/common/items/EnergyBattery.java b/BM_src/WayofTime/alchemicalWizardry/common/items/EnergyBattery.java index 729b9ec1..3f825f95 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/items/EnergyBattery.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/items/EnergyBattery.java @@ -82,12 +82,11 @@ public class EnergyBattery extends Item implements ArmourUpgrade, IBindable world.playSoundEffect((double) ((float) posX + 0.5F), (double) ((float) posY + 0.5F), (double) ((float) posZ + 0.5F), "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); PacketDispatcher.sendPacketToAllAround(posX, posY, posZ, 20, world.provider.dimensionId, TEAltar.getParticlePacket(posX, posY, posZ, (short) 4)); } - - if (!par3EntityPlayer.worldObj.isRemote && !(par3EntityPlayer.getClass().equals(EntityPlayerMP.class))) + + if(!world.isRemote) { - return par1ItemStack; + return par1ItemStack; } - // if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) // { // return par1ItemStack; diff --git a/BM_src/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java b/BM_src/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java new file mode 100644 index 00000000..ac224ecf --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/items/ItemAlchemyBase.java @@ -0,0 +1,107 @@ +package WayofTime.alchemicalWizardry.common.items; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.Icon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import org.lwjgl.input.Keyboard; + +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.alchemy.AlchemyRecipeRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemAlchemyBase extends Item +{ + private static final String[] ITEM_NAMES = new String[]{}; + + @SideOnly(Side.CLIENT) + private Icon[] icons; + + public ItemAlchemyBase(int id) + { + super(id); + this.maxStackSize = 64; + this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.hasSubtypes = true; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister iconRegister) + { + icons = new Icon[ITEM_NAMES.length]; + + for (int i = 0; i < ITEM_NAMES.length; ++i) + { + icons[i] = iconRegister.registerIcon("AlchemicalWizardry:" + "baseAlchemyItem" + ITEM_NAMES[i]); + } + } + + @Override + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) + { + par3List.add("Used in alchemy"); + + if (Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) + { + ItemStack[] recipe = AlchemyRecipeRegistry.getRecipeForItemStack(par1ItemStack); + + if (recipe != null) + { + par3List.add(EnumChatFormatting.BLUE + "Recipe:"); + + for (ItemStack item : recipe) + { + if (item != null) + { + par3List.add("" + item.getDisplayName()); + } + } + } + } else + { + par3List.add("-Press " + EnumChatFormatting.BLUE + "shift" + EnumChatFormatting.GRAY + " for Recipe-"); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) + { + return par1ItemStack; + } + + @Override + public String getUnlocalizedName(ItemStack itemStack) + { + //This is what will do all the localisation things on the alchemy components so you dont have to set it :D + int meta = MathHelper.clamp_int(itemStack.getItemDamage(), 0, ITEM_NAMES.length - 1); + return ("" + "item.bloodMagicAlchemyItem." + ITEM_NAMES[meta]); + } + + @Override + @SideOnly(Side.CLIENT) + public Icon getIconFromDamage(int meta) + { + int j = MathHelper.clamp_int(meta, 0, ITEM_NAMES.length - 1); + return icons[j]; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(int id, CreativeTabs creativeTab, List list) + { + for (int meta = 0; meta < ITEM_NAMES.length; ++meta) + { + list.add(new ItemStack(id, 1, meta)); + } + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/items/ItemComponents.java b/BM_src/WayofTime/alchemicalWizardry/common/items/ItemComponents.java new file mode 100644 index 00000000..9b734084 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/items/ItemComponents.java @@ -0,0 +1,75 @@ +package WayofTime.alchemicalWizardry.common.items; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Icon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemComponents extends Item +{ + private static final String[] ITEM_NAMES = new String[]{"QuartzRod", "EmptyCore", "MagicalesCable", "WoodBrace", "StoneBrace", "ProjectileCore", "SelfCore","MeleeCore","ParadigmBackPlate","OutputCable","FlameCore","IcyCore","GustCore","EarthenCore","InputCable","CrackedRunicPlate","RunicPlate","ScribedRunicPlate","DefaultCore","OffensiveCore","DefensiveCore","EnvironmentalCore"}; + + @SideOnly(Side.CLIENT) + private Icon[] icons; + + public ItemComponents(int id) + { + super(id); + this.maxStackSize = 64; + this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.hasSubtypes = true; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IconRegister iconRegister) + { + icons = new Icon[ITEM_NAMES.length]; + + for (int i = 0; i < ITEM_NAMES.length; ++i) + { + icons[i] = iconRegister.registerIcon("AlchemicalWizardry:" + "baseItem" + ITEM_NAMES[i]); + } + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) + { + return par1ItemStack; + } + + @Override + public String getUnlocalizedName(ItemStack itemStack) + { + //This is what will do all the localisation things on the alchemy components so you dont have to set it :D + int meta = MathHelper.clamp_int(itemStack.getItemDamage(), 0, ITEM_NAMES.length - 1); + return ("" + "item.bloodMagicBaseItem." + ITEM_NAMES[meta]); + } + + @Override + @SideOnly(Side.CLIENT) + public Icon getIconFromDamage(int meta) + { + int j = MathHelper.clamp_int(meta, 0, ITEM_NAMES.length - 1); + return icons[j]; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(int id, CreativeTabs creativeTab, List list) + { + for (int meta = 0; meta < ITEM_NAMES.length; ++meta) + { + list.add(new ItemStack(id, 1, meta)); + } + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java new file mode 100644 index 00000000..ae2b9f2c --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java @@ -0,0 +1,49 @@ +package WayofTime.alchemicalWizardry.common.renderer.block; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellEnhancementBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellEnhancementBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class RenderSpellEnhancementBlock extends TileEntitySpecialRenderer +{ + private ModelSpellEnhancementBlock modelSpellEnhancementBlock = new ModelSpellEnhancementBlock(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) + { + if (tileEntity instanceof TESpellEnhancementBlock) + { + TESpellEnhancementBlock tileSpellBlock = (TESpellEnhancementBlock) tileEntity; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/BlockSpellEnhancementPower1.png"); + int meta = tileEntity.getWorldObj().getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + String resource = tileSpellBlock.getResourceLocationForMeta(meta); + test = new ResourceLocation(resource); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellEnhancementBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + } +} \ No newline at end of file diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java new file mode 100644 index 00000000..a01c0726 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java @@ -0,0 +1,49 @@ +package WayofTime.alchemicalWizardry.common.renderer.block; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellModifierBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellModifierBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class RenderSpellModifierBlock extends TileEntitySpecialRenderer +{ + private ModelSpellModifierBlock modelSpellModifierBlock = new ModelSpellModifierBlock(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) + { + if (tileEntity instanceof TESpellModifierBlock) + { + TESpellModifierBlock tileSpellBlock = (TESpellModifierBlock) tileEntity; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/BlockSpellModifier.png"); + int meta = tileEntity.getWorldObj().getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + String resource = tileSpellBlock.getResourceLocationForMeta(meta); + test = new ResourceLocation(resource); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellModifierBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + } +} \ No newline at end of file diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java new file mode 100644 index 00000000..47a5b271 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java @@ -0,0 +1,49 @@ +package WayofTime.alchemicalWizardry.common.renderer.block; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellParadigmBlock; +import WayofTime.alchemicalWizardry.common.tileEntity.TESpellParadigmBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class RenderSpellParadigmBlock extends TileEntitySpecialRenderer +{ + private ModelSpellParadigmBlock modelSpellParadigmBlock = new ModelSpellParadigmBlock(); + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) + { + if (tileEntity instanceof TESpellParadigmBlock) + { + TESpellParadigmBlock tileSpellBlock = (TESpellParadigmBlock) tileEntity; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/BlockSpellParadigm.png"); + int meta = tileEntity.getWorldObj().getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + String resource = tileSpellBlock.getResourceLocationForMeta(meta); + test = new ResourceLocation(resource); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellParadigmBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, tileSpellBlock.getInputDirection(), tileSpellBlock.getOutputDirection()); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + } +} \ No newline at end of file diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java new file mode 100644 index 00000000..3a885ec0 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java @@ -0,0 +1,114 @@ +package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.common.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellEnhancementBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class TESpellEnhancementBlockItemRenderer implements IItemRenderer +{ + private ModelSpellEnhancementBlock modelSpellBlock = new ModelSpellEnhancementBlock(); + + private void renderConduitItem(RenderBlocks render, ItemStack item, float translateX, float translateY, float translateZ) + { + Tessellator tessellator = Tessellator.instance; + + Block block = ModBlocks.blockSpellEffect; + //Icon icon = item.getItem().getIconFromDamage(0); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); + ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, ForgeDirection.DOWN, ForgeDirection.UP); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + + + /** + * IItemRenderer implementation * + */ + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + switch (type) { + case ENTITY: + return true; + case EQUIPPED: + return true; + case EQUIPPED_FIRST_PERSON: + return true; + case INVENTORY: + return true; + default: + return false; + } + } + + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + switch (type) { + case ENTITY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + case EQUIPPED: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case EQUIPPED_FIRST_PERSON: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case INVENTORY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + default: + } + } + + public String getResourceLocationForMeta(int meta) + { + switch(meta) + { + case 0: return "alchemicalwizardry:textures/models/SpellEnhancementPower1.png"; + case 1: return "alchemicalwizardry:textures/models/SpellEnhancementPower2.png"; + case 2: return "alchemicalwizardry:textures/models/SpellEnhancementPower3.png"; + case 5: return "alchemicalwizardry:textures/models/SpellEnhancementCost1.png"; + case 6: return "alchemicalwizardry:textures/models/SpellEnhancementCost2.png"; + case 7: return "alchemicalwizardry:textures/models/SpellEnhancementCost3.png"; + case 10: return "alchemicalwizardry:textures/models/SpellEnhancementPotency1.png"; + case 11: return "alchemicalwizardry:textures/models/SpellEnhancementPotency2.png"; + case 12: return "alchemicalwizardry:textures/models/SpellEnhancementPotency3.png"; + + } + return "alchemicalwizardry:textures/models/SpellEnhancementPower1.png"; + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java new file mode 100644 index 00000000..53dd4ca6 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellModifierBlockItemRenderer.java @@ -0,0 +1,108 @@ +package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.common.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellModifierBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class TESpellModifierBlockItemRenderer implements IItemRenderer +{ + private ModelSpellModifierBlock modelSpellBlock = new ModelSpellModifierBlock(); + + private void renderConduitItem(RenderBlocks render, ItemStack item, float translateX, float translateY, float translateZ) + { + Tessellator tessellator = Tessellator.instance; + + Block block = ModBlocks.blockSpellEffect; + //Icon icon = item.getItem().getIconFromDamage(0); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); + ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, ForgeDirection.DOWN, ForgeDirection.UP); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + + + /** + * IItemRenderer implementation * + */ + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + switch (type) { + case ENTITY: + return true; + case EQUIPPED: + return true; + case EQUIPPED_FIRST_PERSON: + return true; + case INVENTORY: + return true; + default: + return false; + } + } + + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + switch (type) { + case ENTITY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + case EQUIPPED: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case EQUIPPED_FIRST_PERSON: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case INVENTORY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + default: + } + } + + public String getResourceLocationForMeta(int meta) + { + switch(meta) + { + case 0: return "alchemicalwizardry:textures/models/SpellModifierDefault.png"; + case 1: return "alchemicalwizardry:textures/models/SpellModifierOffensive.png"; + case 2: return "alchemicalwizardry:textures/models/SpellModifierDefensive.png"; + case 3: return "alchemicalwizardry:textures/models/SpellModifierEnvironmental.png"; + } + return "alchemicalwizardry:textures/models/SpellModifierDefault.png"; + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java new file mode 100644 index 00000000..131e4212 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellParadigmBlockItemRenderer.java @@ -0,0 +1,107 @@ +package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.common.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelSpellParadigmBlock; +import cpw.mods.fml.client.FMLClientHandler; + +public class TESpellParadigmBlockItemRenderer implements IItemRenderer +{ + private ModelSpellParadigmBlock modelSpellBlock = new ModelSpellParadigmBlock(); + + private void renderConduitItem(RenderBlocks render, ItemStack item, float translateX, float translateY, float translateZ) + { + Tessellator tessellator = Tessellator.instance; + + Block block = ModBlocks.blockSpellEffect; + //Icon icon = item.getItem().getIconFromDamage(0); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + /** + * Render the ghost item inside of the Altar, slowly spinning + */ + GL11.glPushMatrix(); + GL11.glTranslatef((float) translateX + 0.5F, (float) translateY + 1.5F, (float) translateZ + 0.5F); + ResourceLocation test = new ResourceLocation(this.getResourceLocationForMeta(item.getItemDamage())); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); + GL11.glPushMatrix(); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + //GL11.glRotatef(90F, 0.0F, 0.0F, 1.0F); + //A reference to your Model file. Again, very important. + this.modelSpellBlock.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, ForgeDirection.DOWN, ForgeDirection.UP); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + + + /** + * IItemRenderer implementation * + */ + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + switch (type) { + case ENTITY: + return true; + case EQUIPPED: + return true; + case EQUIPPED_FIRST_PERSON: + return true; + case INVENTORY: + return true; + default: + return false; + } + } + + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + switch (type) { + case ENTITY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + case EQUIPPED: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case EQUIPPED_FIRST_PERSON: + renderConduitItem((RenderBlocks) data[0], item, -0.4f, 0.50f, 0.35f); + break; + case INVENTORY: + renderConduitItem((RenderBlocks) data[0], item, -0.5f, -0.5f, -0.5f); + break; + default: + } + } + + public String getResourceLocationForMeta(int meta) + { + switch(meta) + { + case 0: return "alchemicalwizardry:textures/models/SpellParadigmProjectile.png"; + case 1: return "alchemicalwizardry:textures/models/SpellParadigmSelf.png"; + case 2: return "alchemicalwizardry:textures/models/SpellParadigmMelee.png"; + } + return "alchemicalwizardry:textures/models/SpellParadigmProjectile.png"; + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java new file mode 100644 index 00000000..7283c01c --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java @@ -0,0 +1,334 @@ +package WayofTime.alchemicalWizardry.common.renderer.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.common.ForgeDirection; + + +public class ModelSpellEnhancementBlock extends ModelBase +{ + //fields + ModelRenderer core; + ModelRenderer frame1; + ModelRenderer frame2; + ModelRenderer frame3; + ModelRenderer frame4; + ModelRenderer frame5; + ModelRenderer frame6; + ModelRenderer frame7; + ModelRenderer frame8; + ModelRenderer frame9; + ModelRenderer frame10; + ModelRenderer frame11; + ModelRenderer frame12; + ModelRenderer outputMain; + ModelRenderer inputMain; + ModelRenderer output1; + ModelRenderer output2; + ModelRenderer output3; + ModelRenderer output4; + ModelRenderer input1; + ModelRenderer input2; + ModelRenderer input3; + ModelRenderer input4; + ModelRenderer outputSecond; + + public ModelSpellEnhancementBlock() + { + textureWidth = 128; + textureHeight = 64; + + core = new ModelRenderer(this, 0, 0); + core.addBox(-3F, -3F, -3F, 6, 6, 6); + core.setRotationPoint(0F, 16F, 0F); + core.setTextureSize(128, 64); + core.mirror = true; + setRotation(core, 0F, 0F, 0F); + frame1 = new ModelRenderer(this, 0, 32); + frame1.addBox(-7F, 5F, -7F, 14, 2, 2); + frame1.setRotationPoint(0F, 16F, 0F); + frame1.setTextureSize(128, 64); + frame1.mirror = true; + setRotation(frame1, 0F, 0F, 0F); + frame2 = new ModelRenderer(this, 24, 19); + frame2.addBox(5F, -5F, -7F, 2, 10, 2); + frame2.setRotationPoint(0F, 16F, 0F); + frame2.setTextureSize(128, 64); + frame2.mirror = true; + setRotation(frame2, 0F, 0F, 0F); + frame3 = new ModelRenderer(this, 0, 19); + frame3.addBox(-7F, -5F, -7F, 2, 10, 2); + frame3.setRotationPoint(0F, 16F, 0F); + frame3.setTextureSize(128, 64); + frame3.mirror = true; + setRotation(frame3, 0F, 0F, 0F); + frame4 = new ModelRenderer(this, 0, 14); + frame4.addBox(-7F, -7F, -7F, 14, 2, 2); + frame4.setRotationPoint(0F, 16F, 0F); + frame4.setTextureSize(128, 64); + frame4.mirror = true; + setRotation(frame4, 0F, 0F, 0F); + frame5 = new ModelRenderer(this, 0, 57); + frame5.addBox(-7F, 5F, 5F, 14, 2, 2); + frame5.setRotationPoint(0F, 16F, 0F); + frame5.setTextureSize(128, 64); + frame5.mirror = true; + setRotation(frame5, 0F, 0F, 0F); + frame6 = new ModelRenderer(this, 0, 44); + frame6.addBox(5F, -5F, 5F, 2, 10, 2); + frame6.setRotationPoint(0F, 16F, 0F); + frame6.setTextureSize(128, 64); + frame6.mirror = true; + setRotation(frame6, 0F, 0F, 0F); + frame7 = new ModelRenderer(this, 24, 44); + frame7.addBox(-7F, -5F, 5F, 2, 10, 2); + frame7.setRotationPoint(0F, 16F, 0F); + frame7.setTextureSize(128, 64); + frame7.mirror = true; + setRotation(frame7, 0F, 0F, 0F); + frame8 = new ModelRenderer(this, 0, 39); + frame8.addBox(-7F, -7F, 5F, 14, 2, 2); + frame8.setRotationPoint(0F, 16F, 0F); + frame8.setTextureSize(128, 64); + frame8.mirror = true; + setRotation(frame8, 0F, 0F, 0F); + frame9 = new ModelRenderer(this, 66, 14); + frame9.addBox(5F, 5F, -5F, 2, 2, 10); + frame9.setRotationPoint(0F, 16F, 0F); + frame9.setTextureSize(128, 64); + frame9.mirror = true; + setRotation(frame9, 0F, 0F, 0F); + frame10 = new ModelRenderer(this, 40, 14); + frame10.addBox(-7F, 5F, -5F, 2, 2, 10); + frame10.setRotationPoint(0F, 16F, 0F); + frame10.setTextureSize(128, 64); + frame10.mirror = true; + setRotation(frame10, 0F, 0F, 0F); + frame11 = new ModelRenderer(this, 66, 0); + frame11.addBox(5F, -7F, -5F, 2, 2, 10); + frame11.setRotationPoint(0F, 16F, 0F); + frame11.setTextureSize(128, 64); + frame11.mirror = true; + setRotation(frame11, 0F, 0F, 0F); + frame12 = new ModelRenderer(this, 40, 0); + frame12.addBox(-7F, -7F, -5F, 2, 2, 10); + frame12.setRotationPoint(0F, 16F, 0F); + frame12.setTextureSize(128, 64); + frame12.mirror = true; + setRotation(frame12, 0F, 0F, 0F); + outputMain = new ModelRenderer(this, 78, 36); + outputMain.addBox(6F, -2F, -2F, 2, 4, 4); + outputMain.setRotationPoint(0F, 16F, 0F); + outputMain.setTextureSize(128, 64); + outputMain.mirror = true; + setRotation(outputMain, 0F, 0F, 0F); + inputMain = new ModelRenderer(this, 40, 36); + inputMain.addBox(-2F, -2F, -8F, 4, 4, 5); + inputMain.setRotationPoint(0F, 16F, 0F); + inputMain.setTextureSize(128, 64); + inputMain.mirror = true; + setRotation(inputMain, 0F, 0F, 0F); + output1 = new ModelRenderer(this, 80, 30); + output1.addBox(5F, -5F, -5F, 3, 2, 2); + output1.setRotationPoint(0F, 16F, 0F); + output1.setTextureSize(128, 64); + output1.mirror = true; + setRotation(output1, 0F, 0F, 0F); + output2 = new ModelRenderer(this, 80, 30); + output2.addBox(5F, -5F, 3F, 3, 2, 2); + output2.setRotationPoint(0F, 16F, 0F); + output2.setTextureSize(128, 64); + output2.mirror = true; + setRotation(output2, 0F, 0F, 0F); + output3 = new ModelRenderer(this, 80, 30); + output3.addBox(5F, 3F, -5F, 3, 2, 2); + output3.setRotationPoint(0F, 16F, 0F); + output3.setTextureSize(128, 64); + output3.mirror = true; + setRotation(output3, 0F, 0F, 0F); + output4 = new ModelRenderer(this, 80, 30); + output4.addBox(5F, 3F, 3F, 3, 2, 2); + output4.setRotationPoint(0F, 16F, 0F); + output4.setTextureSize(128, 64); + output4.mirror = true; + setRotation(output4, 0F, 0F, 0F); + input1 = new ModelRenderer(this, 40, 27); + input1.addBox(3F, -5F, -8F, 2, 2, 5); + input1.setRotationPoint(0F, 16F, 0F); + input1.setTextureSize(128, 64); + input1.mirror = true; + setRotation(input1, 0F, 0F, 0F); + input2 = new ModelRenderer(this, 40, 27); + input2.addBox(-5F, -5F, -8F, 2, 2, 5); + input2.setRotationPoint(0F, 16F, 0F); + input2.setTextureSize(128, 64); + input2.mirror = true; + setRotation(input2, 0F, 0F, 0F); + input3 = new ModelRenderer(this, 40, 27); + input3.addBox(3F, 3F, -8F, 2, 2, 5); + input3.setRotationPoint(0F, 16F, 0F); + input3.setTextureSize(128, 64); + input3.mirror = true; + setRotation(input3, 0F, 0F, 0F); + input4 = new ModelRenderer(this, 40, 27); + input4.addBox(-5F, 3F, -8F, 2, 2, 5); + input4.setRotationPoint(0F, 16F, 0F); + input4.setTextureSize(128, 64); + input4.mirror = true; + setRotation(input4, 0F, 0F, 0F); + outputSecond = new ModelRenderer(this, 78, 47); + outputSecond.addBox(4F, -3F, -3F, 1, 6, 6); + outputSecond.setRotationPoint(0F, 16F, 0F); + outputSecond.setTextureSize(128, 64); + outputSecond.mirror = true; + setRotation(outputSecond, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, ForgeDirection input, ForgeDirection output) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + float xInputRot = 0.0f; + float yInputRot = 0.0f; + float zInputRot = 0.0f; + float xOutputRot = 0.0f; + float yOutputRot = 0.0f; + float zOutputRot = 0.0f; + + switch (input) + { + case NORTH: + xInputRot = 0.0f; + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case EAST: + xInputRot = 0.0f; + yInputRot = (float) (0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case SOUTH: + xInputRot = 0.0f; + yInputRot = (float) (1.0f * Math.PI); + zInputRot = 0.0f; + break; + + case WEST: + xInputRot = 0.0f; + yInputRot = (float) (-0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case UP: + xInputRot = (float) (-0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case DOWN: + xInputRot = (float) (0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + default: + break; + } + + switch (output) + { + case NORTH: + xOutputRot = 0.0f; + yOutputRot = (float) (0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case EAST: + xOutputRot = 0.0f; + yOutputRot = (float) (1.0f * Math.PI); + zOutputRot = 0.0f; + break; + + case SOUTH: + xOutputRot = 0.0f; + yOutputRot = (float) (-0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case WEST: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = 0.0f; + break; + + case UP: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (-0.5f * Math.PI); + break; + + case DOWN: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (0.5f * Math.PI); + break; + + default: + break; + } + + this.setRotation(inputMain, xInputRot, yInputRot, zInputRot); + this.setRotation(outputMain, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(input1, xInputRot, yInputRot, zInputRot); + this.setRotation(input2, xInputRot, yInputRot, zInputRot); + this.setRotation(input3, xInputRot, yInputRot, zInputRot); + this.setRotation(input4, xInputRot, yInputRot, zInputRot); + this.setRotation(outputSecond, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output1, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output2, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output3, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output4, xOutputRot, yOutputRot, zOutputRot); + + core.render(f5); + frame1.render(f5); + frame2.render(f5); + frame3.render(f5); + frame4.render(f5); + frame5.render(f5); + frame6.render(f5); + frame7.render(f5); + frame8.render(f5); + frame9.render(f5); + frame10.render(f5); + frame11.render(f5); + frame12.render(f5); + outputMain.render(f5); + inputMain.render(f5); + output1.render(f5); + output2.render(f5); + output3.render(f5); + output4.render(f5); + input1.render(f5); + input2.render(f5); + input3.render(f5); + input4.render(f5); + outputSecond.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); + } + +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java new file mode 100644 index 00000000..a17f229c --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellModifierBlock.java @@ -0,0 +1,303 @@ +package WayofTime.alchemicalWizardry.common.renderer.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.common.ForgeDirection; + +public class ModelSpellModifierBlock extends ModelBase +{ + //fields + ModelRenderer core; + ModelRenderer inputMain; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape4; + ModelRenderer Shape5; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape8; + ModelRenderer Shape9; + ModelRenderer outputMain; + ModelRenderer Shape11; + ModelRenderer Shape12; + ModelRenderer Shape13; + ModelRenderer Shape14; + ModelRenderer output1; + ModelRenderer output2; + ModelRenderer output3; + ModelRenderer output4; + + public ModelSpellModifierBlock() + { + textureWidth = 64; + textureHeight = 64; + + core = new ModelRenderer(this, 0, 0); + core.addBox(-3F, -3F, -3F, 6, 6, 6); + core.setRotationPoint(0F, 16F, 0F); + core.setTextureSize(64, 64); + core.mirror = true; + setRotation(core, 0F, 0F, 0F); + inputMain = new ModelRenderer(this, 25, 18); + inputMain.addBox(-2F, -2F, -8F, 4, 4, 1); + inputMain.setRotationPoint(0F, 16F, 0F); + inputMain.setTextureSize(64, 64); + inputMain.mirror = true; + setRotation(inputMain, 0F, 0F, 0F); + Shape2 = new ModelRenderer(this, 0, 13); + Shape2.addBox(-5F, -5F, -8F, 10, 2, 2); + Shape2.setRotationPoint(0F, 16F, 0F); + Shape2.setTextureSize(64, 64); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 0, 27); + Shape3.addBox(-5F, 3F, -8F, 10, 2, 2); + Shape3.setRotationPoint(0F, 16F, 0F); + Shape3.setTextureSize(64, 64); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 16, 18); + Shape4.addBox(3F, -3F, -8F, 2, 6, 2); + Shape4.setRotationPoint(0F, 16F, 0F); + Shape4.setTextureSize(64, 64); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + Shape5 = new ModelRenderer(this, 0, 18); + Shape5.addBox(-5F, -3F, -8F, 2, 6, 2); + Shape5.setRotationPoint(0F, 16F, 0F); + Shape5.setTextureSize(64, 64); + Shape5.mirror = true; + setRotation(Shape5, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 0, 32); + Shape6.addBox(-1F, -6F, -7F, 2, 1, 5); + Shape6.setRotationPoint(0F, 16F, 0F); + Shape6.setTextureSize(64, 64); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 15, 32); + Shape7.addBox(-2F, -6F, -2F, 4, 1, 4); + Shape7.setRotationPoint(0F, 16F, 0F); + Shape7.setTextureSize(64, 64); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0F); + Shape8 = new ModelRenderer(this, 15, 39); + Shape8.addBox(-2F, 5F, -2F, 4, 1, 4); + Shape8.setRotationPoint(0F, 16F, 0F); + Shape8.setTextureSize(64, 64); + Shape8.mirror = true; + setRotation(Shape8, 0F, 0F, 0F); + Shape9 = new ModelRenderer(this, 0, 39); + Shape9.addBox(-1F, 5F, -7F, 2, 1, 5); + Shape9.setRotationPoint(0F, 16F, 0F); + Shape9.setTextureSize(64, 64); + Shape9.mirror = true; + setRotation(Shape9, 0F, 0F, 0F); + outputMain = new ModelRenderer(this, 51, 23); + outputMain.addBox(7F, -2F, -2F, 1, 4, 4); + outputMain.setRotationPoint(0F, 16F, 0F); + outputMain.setTextureSize(64, 64); + outputMain.mirror = true; + setRotation(outputMain, 0F, 0F, 0F); + Shape11 = new ModelRenderer(this, 13, 46); + Shape11.addBox(5F, -2F, -2F, 1, 4, 4); + Shape11.setRotationPoint(0F, 16F, 0F); + Shape11.setTextureSize(64, 64); + Shape11.mirror = true; + setRotation(Shape11, 0F, 0F, 0F); + Shape12 = new ModelRenderer(this, 0, 46); + Shape12.addBox(5F, -1F, -7F, 1, 2, 5); + Shape12.setRotationPoint(0F, 16F, 0F); + Shape12.setTextureSize(64, 64); + Shape12.mirror = true; + setRotation(Shape12, 0F, 0F, 0F); + Shape13 = new ModelRenderer(this, 0, 56); + Shape13.addBox(-6F, -1F, -7F, 1, 2, 5); + Shape13.setRotationPoint(0F, 16F, 0F); + Shape13.setTextureSize(64, 64); + Shape13.mirror = true; + setRotation(Shape13, 0F, 0F, 0F); + Shape14 = new ModelRenderer(this, 13, 56); + Shape14.addBox(-6F, -2F, -2F, 1, 4, 4); + Shape14.setRotationPoint(0F, 16F, 0F); + Shape14.setTextureSize(64, 64); + Shape14.mirror = true; + setRotation(Shape14, 0F, 0F, 0F); + output1 = new ModelRenderer(this, 51, 18); + output1.addBox(5F, -5F, -5F, 3, 2, 2); + output1.setRotationPoint(0F, 16F, 0F); + output1.setTextureSize(64, 64); + output1.mirror = true; + setRotation(output1, 0F, 0F, 0F); + output2 = new ModelRenderer(this, 51, 18); + output2.addBox(5F, -5F, 3F, 3, 2, 2); + output2.setRotationPoint(0F, 16F, 0F); + output2.setTextureSize(64, 64); + output2.mirror = true; + setRotation(output2, 0F, 0F, 0F); + output3 = new ModelRenderer(this, 51, 18); + output3.addBox(5F, 3F, -5F, 3, 2, 2); + output3.setRotationPoint(0F, 16F, 0F); + output3.setTextureSize(64, 64); + output3.mirror = true; + setRotation(output3, 0F, 0F, 0F); + output4 = new ModelRenderer(this, 51, 18); + output4.addBox(5F, 3F, 3F, 3, 2, 2); + output4.setRotationPoint(0F, 16F, 0F); + output4.setTextureSize(64, 64); + output4.mirror = true; + setRotation(output4, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, ForgeDirection input, ForgeDirection output) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + float xInputRot = 0.0f; + float yInputRot = 0.0f; + float zInputRot = 0.0f; + float xOutputRot = 0.0f; + float yOutputRot = 0.0f; + float zOutputRot = 0.0f; + + switch (input) + { + case NORTH: + xInputRot = 0.0f; + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case EAST: + xInputRot = 0.0f; + yInputRot = (float) (0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case SOUTH: + xInputRot = 0.0f; + yInputRot = (float) (1.0f * Math.PI); + zInputRot = 0.0f; + break; + + case WEST: + xInputRot = 0.0f; + yInputRot = (float) (-0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case UP: + xInputRot = (float) (-0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case DOWN: + xInputRot = (float) (0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + default: + break; + } + + switch (output) + { + case NORTH: + xOutputRot = 0.0f; + yOutputRot = (float) (0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case EAST: + xOutputRot = 0.0f; + yOutputRot = (float) (1.0f * Math.PI); + zOutputRot = 0.0f; + break; + + case SOUTH: + xOutputRot = 0.0f; + yOutputRot = (float) (-0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case WEST: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = 0.0f; + break; + + case UP: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (-0.5f * Math.PI); + break; + + case DOWN: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (0.5f * Math.PI); + break; + + default: + break; + } + + this.setRotation(inputMain, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape2, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape3, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape4, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape5, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape6, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape7, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape8, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape9, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape12, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape11, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape13, xInputRot, yInputRot, zInputRot); + this.setRotation(Shape14, xInputRot, yInputRot, zInputRot); + + this.setRotation(outputMain, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output1, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output2, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output3, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output4, xOutputRot, yOutputRot, zOutputRot); + + + core.render(f5); + inputMain.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape4.render(f5); + Shape5.render(f5); + Shape6.render(f5); + Shape7.render(f5); + Shape8.render(f5); + Shape9.render(f5); + outputMain.render(f5); + Shape11.render(f5); + Shape12.render(f5); + Shape13.render(f5); + Shape14.render(f5); + output1.render(f5); + output2.render(f5); + output3.render(f5); + output4.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); + } + +} + diff --git a/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java b/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java new file mode 100644 index 00000000..c86c18a4 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellParadigmBlock.java @@ -0,0 +1,234 @@ +package WayofTime.alchemicalWizardry.common.renderer.model; + +//Date: 07/03/2014 9:30:25 PM +//Template version 1.1 +//Java generated by Techne +//Keep in mind that you still need to fill in some blanks +//- ZeuX + + + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; +import net.minecraftforge.common.ForgeDirection; + +public class ModelSpellParadigmBlock extends ModelBase +{ +//fields + ModelRenderer core; + ModelRenderer outputMain; + ModelRenderer output1; + ModelRenderer output2; + ModelRenderer output3; + ModelRenderer output4; + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape4; + ModelRenderer Shape5; + +public ModelSpellParadigmBlock() +{ + textureWidth = 64; + textureHeight = 64; + + core = new ModelRenderer(this, 0, 0); + core.addBox(-3F, -3F, -3F, 6, 6, 6); + core.setRotationPoint(0F, 16F, 0F); + core.setTextureSize(64, 64); + core.mirror = true; + setRotation(core, 0F, 0F, 0F); + outputMain = new ModelRenderer(this, 0, 13); + outputMain.addBox(6F, -2F, -2F, 2, 4, 4); + outputMain.setRotationPoint(0F, 16F, 0F); + outputMain.setTextureSize(64, 64); + outputMain.mirror = true; + setRotation(outputMain, 0F, 0F, 0F); + output1 = new ModelRenderer(this, 0, 22); + output1.addBox(5F, -5F, -5F, 3, 2, 2); + output1.setRotationPoint(0F, 16F, 0F); + output1.setTextureSize(64, 64); + output1.mirror = true; + setRotation(output1, 0F, 0F, 0F); + output2 = new ModelRenderer(this, 0, 22); + output2.addBox(5F, -5F, 3F, 3, 2, 2); + output2.setRotationPoint(0F, 16F, 0F); + output2.setTextureSize(64, 64); + output2.mirror = true; + setRotation(output2, 0F, 0F, 0F); + output3 = new ModelRenderer(this, 0, 22); + output3.addBox(5F, 3F, -5F, 3, 2, 2); + output3.setRotationPoint(0F, 16F, 0F); + output3.setTextureSize(64, 64); + output3.mirror = true; + setRotation(output3, 0F, 0F, 0F); + output4 = new ModelRenderer(this, 0, 22); + output4.addBox(5F, 3F, 3F, 3, 2, 2); + output4.setRotationPoint(0F, 16F, 0F); + output4.setTextureSize(64, 64); + output4.mirror = true; + setRotation(output4, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 28); + Shape1.addBox(-5F, -5F, -1F, 10, 1, 2); + Shape1.setRotationPoint(0F, 16F, 0F); + Shape1.setTextureSize(64, 64); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + Shape2 = new ModelRenderer(this, 25, 28); + Shape2.addBox(-5F, -4F, -4F, 1, 8, 8); + Shape2.setRotationPoint(0F, 16F, 0F); + Shape2.setTextureSize(64, 64); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 0, 33); + Shape3.addBox(-5F, 4F, -1F, 10, 1, 2); + Shape3.setRotationPoint(0F, 16F, 0F); + Shape3.setTextureSize(64, 64); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 0, 38); + Shape4.addBox(-5F, -1F, -5F, 10, 2, 1); + Shape4.setRotationPoint(0F, 16F, 0F); + Shape4.setTextureSize(64, 64); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + Shape5 = new ModelRenderer(this, 0, 43); + Shape5.addBox(-5F, -1F, 4F, 10, 2, 1); + Shape5.setRotationPoint(0F, 16F, 0F); + Shape5.setTextureSize(64, 64); + Shape5.mirror = true; + setRotation(Shape5, 0F, 0F, 0F); +} + +public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5, ForgeDirection input, ForgeDirection output) +{ + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + float xInputRot = 0.0f; + float yInputRot = 0.0f; + float zInputRot = 0.0f; + float xOutputRot = 0.0f; + float yOutputRot = 0.0f; + float zOutputRot = 0.0f; + + switch (input) + { + case NORTH: + xInputRot = 0.0f; + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case EAST: + xInputRot = 0.0f; + yInputRot = (float) (0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case SOUTH: + xInputRot = 0.0f; + yInputRot = (float) (1.0f * Math.PI); + zInputRot = 0.0f; + break; + + case WEST: + xInputRot = 0.0f; + yInputRot = (float) (-0.5f * Math.PI); + zInputRot = 0.0f; + break; + + case UP: + xInputRot = (float) (-0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + case DOWN: + xInputRot = (float) (0.5f * Math.PI); + yInputRot = 0.0f; + zInputRot = 0.0f; + break; + + default: + break; + } + + switch (output) + { + case NORTH: + xOutputRot = 0.0f; + yOutputRot = (float) (0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case EAST: + xOutputRot = 0.0f; + yOutputRot = (float) (1.0f * Math.PI); + zOutputRot = 0.0f; + break; + + case SOUTH: + xOutputRot = 0.0f; + yOutputRot = (float) (-0.5f * Math.PI); + zOutputRot = 0.0f; + break; + + case WEST: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = 0.0f; + break; + + case UP: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (-0.5f * Math.PI); + break; + + case DOWN: + xOutputRot = 0.0f; + yOutputRot = 0.0f; + zOutputRot = (float) (0.5f * Math.PI); + break; + + default: + break; + } + + this.setRotation(outputMain, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output1, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output2, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output3, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(output4, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape1, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape2, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape3, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape4, xOutputRot, yOutputRot, zOutputRot); + this.setRotation(Shape5, xOutputRot, yOutputRot, zOutputRot); + core.render(f5); + outputMain.render(f5); + output1.render(f5); + output2.render(f5); + output3.render(f5); + output4.render(f5); + Shape1.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape4.render(f5); + Shape5.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); +} + +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java b/BM_src/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java index cdb5db03..76e2f2c0 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java @@ -1,6 +1,7 @@ package WayofTime.alchemicalWizardry.common.rituals; import WayofTime.alchemicalWizardry.common.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; import net.minecraft.entity.player.EntityPlayer; @@ -84,7 +85,7 @@ public class RitualEffectFeatheredKnife extends RitualEffect { entity = (EntityPlayer) iterator1.next(); - if (entity.getClass().equals(EntityPlayerMP.class) || entity.getClass().equals(EntityPlayer.class)) + if (!SpellHelper.isFakePlayer(world, entity)) { entityCount++; } @@ -110,7 +111,7 @@ public class RitualEffectFeatheredKnife extends RitualEffect entity = (EntityPlayer) iterator2.next(); //entity = (EntityPlayer)iterator1.next(); - if (entity.getClass().equals(EntityPlayerMP.class) || entity.getClass().equals(EntityPlayer.class)) + if (!SpellHelper.isFakePlayer(world, entity)) { if (entity.getHealth() > 6.2f) { diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/EntitySpellProjectile.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/EntitySpellProjectile.java index 33d7baab..fbd54cb8 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/EntitySpellProjectile.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/EntitySpellProjectile.java @@ -524,7 +524,7 @@ public class EntitySpellProjectile extends Entity implements IProjectile { for(IProjectileImpactEffect impactEffect : impactList) { - impactEffect.onEntityImpact(mop); + impactEffect.onEntityImpact(mop,this); } } } diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectEarth.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectEarth.java index af5709e0..030abd06 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectEarth.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectEarth.java @@ -3,141 +3,134 @@ package WayofTime.alchemicalWizardry.common.spell.complex.effect; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmMelee; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmProjectile; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmSelf; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeDefaultEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeDefensiveEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeEnvironmentalEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.MeleeOffensiveEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileDefaultEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileDefensiveEarth; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileEnvironmentalEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.ProjectileOffensiveEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfDefaultEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfDefensiveEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfEnvironmentalEarth; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth.SelfOffensiveEarth; public class SpellEffectEarth extends SpellEffect { @Override public void defaultModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - + parad.addImpactEffect(new ProjectileDefaultEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override public void offensiveModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - + parad.addImpactEffect(new ProjectileOffensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override public void defensiveModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - + parad.addImpactEffect(new ProjectileDefensiveEarth(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override public void environmentalModificationProjectile(SpellParadigmProjectile parad) { parad.addUpdateEffect(new ProjectileEnvironmentalEarth(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); - } @Override public void defaultModificationSelf(SpellParadigmSelf parad) { - // TODO Auto-generated method stub - + parad.addSelfSpellEffect(new SelfDefaultEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override public void offensiveModificationSelf(SpellParadigmSelf parad) { - // TODO Auto-generated method stub - + parad.addSelfSpellEffect(new SelfOffensiveEarth(this.powerEnhancement,this.potencyEnhancement, this.costEnhancement)); } @Override public void defensiveModificationSelf(SpellParadigmSelf parad) { - // TODO Auto-generated method stub - + parad.addSelfSpellEffect(new SelfDefensiveEarth(this.powerEnhancement,this.potencyEnhancement, this.costEnhancement)); } @Override public void environmentalModificationSelf(SpellParadigmSelf parad) { - // TODO Auto-generated method stub - + parad.addSelfSpellEffect(new SelfEnvironmentalEarth(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override public void defaultModificationMelee(SpellParadigmMelee parad) { - // TODO Auto-generated method stub - + parad.addWorldEffect(new MeleeDefaultEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override public void offensiveModificationMelee(SpellParadigmMelee parad) { - // TODO Auto-generated method stub - + parad.addWorldEffect(new MeleeOffensiveEarth(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override public void defensiveModificationMelee(SpellParadigmMelee parad) { - // TODO Auto-generated method stub - + parad.addWorldEffect(new MeleeDefensiveEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override public void environmentalModificationMelee(SpellParadigmMelee parad) { - // TODO Auto-generated method stub - + parad.addWorldEffect(new MeleeEnvironmentalEarth(this.powerEnhancement, this.potencyEnhancement, this.costEnhancement)); } @Override protected int getCostForDefaultProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(10*Math.pow((0.5*(this.powerEnhancement)+1)*2 + 1,3)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForOffenseProjectile() { - // TODO Auto-generated method stub - return 0; + + return (int)(10*(1.5*this.potencyEnhancement+1)*(Math.pow(1*this.powerEnhancement+1,2))*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForDefenseProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(3*Math.pow((this.powerEnhancement*2+1),2)*(this.potencyEnhancement*2+1)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForEnvironmentProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(10*2*(0.1d*(this.potencyEnhancement+1))*Math.pow(3.47,this.potencyEnhancement)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForDefaultSelf() { - // TODO Auto-generated method stub - return 0; + return (int)(20*Math.pow(1.5*powerEnhancement+1,2)*(2*this.potencyEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForOffenseSelf() { - // TODO Auto-generated method stub - return 0; + return (int)(10*Math.pow(2*this.powerEnhancement+1,2)*(this.potencyEnhancement+1)); } @Override protected int getCostForDefenseSelf() { - // TODO Auto-generated method stub - return 0; + return (int)(750*(1.1*this.powerEnhancement+1)*(0.5*this.potencyEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override @@ -150,28 +143,24 @@ public class SpellEffectEarth extends SpellEffect @Override protected int getCostForDefaultMelee() { - // TODO Auto-generated method stub - return 0; + return (int)(50*Math.pow(1.5*this.potencyEnhancement + 1,3)*(0.5*this.powerEnhancement + 1)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForOffenseMelee() { - // TODO Auto-generated method stub - return 0; + return (int)(20*Math.pow(1.5*this.powerEnhancement+1,3)*(0.25*this.powerEnhancement+1)); } @Override protected int getCostForDefenseMelee() { - // TODO Auto-generated method stub - return 0; + return (int)(5*(1.2*this.powerEnhancement+1)*(1.0f/3.0f*Math.pow(this.potencyEnhancement,2)+2+1.0f/2.0f*this.potencyEnhancement)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForEnvironmentMelee() { - // TODO Auto-generated method stub - return 0; + return (int)(500*Math.pow(2*this.potencyEnhancement+1, 3)*(0.25*this.powerEnhancement+1)*Math.pow(0.8, costEnhancement)); } } diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectFire.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectFire.java index 65fe51f7..4800871f 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectFire.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectFire.java @@ -4,6 +4,9 @@ import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmMelee; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmProjectile; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmSelf; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ProjectileDefaultFire; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ProjectileDefensiveFire; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ProjectileEnvironmentalFire; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.ProjectileOffensiveFire; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.SelfDefaultFire; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.SelfDefensiveFire; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.fire.SelfEnvironmentalFire; @@ -21,25 +24,19 @@ public class SpellEffectFire extends SpellEffect @Override public void offensiveModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - parad.addImpactEffect(new ProjectileDefaultFire(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); - parad.damage+=this.potencyEnhancement; + parad.addImpactEffect(new ProjectileOffensiveFire(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override public void defensiveModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - parad.addImpactEffect(new ProjectileDefaultFire(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); - parad.damage+=this.potencyEnhancement; + parad.addImpactEffect(new ProjectileDefensiveFire(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override public void environmentalModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - parad.addImpactEffect(new ProjectileDefaultFire(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); - parad.damage+=this.potencyEnhancement; + parad.addUpdateEffect(new ProjectileEnvironmentalFire(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override @@ -97,48 +94,43 @@ public class SpellEffectFire extends SpellEffect @Override protected int getCostForDefaultProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)((5*Math.pow(1.5*this.powerEnhancement+1, 2)*(1.5*this.potencyEnhancement+1)+this.potencyEnhancement*15)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForOffenseProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(10*Math.pow((this.powerEnhancement)*1.3+1,2)*((1.5*this.potencyEnhancement+1))*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForDefenseProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(25*Math.pow(1*this.powerEnhancement+1,2)*(1*this.potencyEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForEnvironmentProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(75*(0.5*this.powerEnhancement+1)*(0.5*this.potencyEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForDefaultSelf() { - return 10*(int)(10*Math.pow(1.5, this.powerEnhancement+1.5*this.potencyEnhancement)); + return 10*(int)(10*Math.pow(1.5, this.powerEnhancement+1.5*this.potencyEnhancement)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForOffenseSelf() { - return 500*(int)((this.powerEnhancement+1)*Math.pow(2, potencyEnhancement)); + return 500*(int)((this.powerEnhancement+1)*Math.pow(2, potencyEnhancement)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForDefenseSelf() { - // TODO Auto-generated method stub - return 0; + return (int)(25*(3*this.potencyEnhancement+1)*(2*this.powerEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override @@ -174,5 +166,4 @@ public class SpellEffectFire extends SpellEffect // TODO Auto-generated method stub return 0; } - } diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectWind.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectWind.java index de3ca561..0edb3596 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectWind.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellEffectWind.java @@ -3,36 +3,34 @@ package WayofTime.alchemicalWizardry.common.spell.complex.effect; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmMelee; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmProjectile; import WayofTime.alchemicalWizardry.common.spell.complex.SpellParadigmSelf; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ProjectileDefaultWind; import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ProjectileEnvironmentalWind; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.wind.ProjectileOffensiveWind; public class SpellEffectWind extends SpellEffect { @Override public void defaultModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - + parad.addImpactEffect(new ProjectileDefaultWind(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override public void offensiveModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - + parad.addImpactEffect(new ProjectileOffensiveWind(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); } @Override public void defensiveModificationProjectile(SpellParadigmProjectile parad) { - // TODO Auto-generated method stub - + parad.ricochetMax+=this.potencyEnhancement; } @Override public void environmentalModificationProjectile(SpellParadigmProjectile parad) { parad.addUpdateEffect(new ProjectileEnvironmentalWind(this.powerEnhancement,this.potencyEnhancement,this.costEnhancement)); - } @Override @@ -94,15 +92,13 @@ public class SpellEffectWind extends SpellEffect @Override protected int getCostForDefaultProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(100*(this.potencyEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override protected int getCostForOffenseProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(100*(0.5*this.potencyEnhancement+1)*(this.powerEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override @@ -115,8 +111,7 @@ public class SpellEffectWind extends SpellEffect @Override protected int getCostForEnvironmentProjectile() { - // TODO Auto-generated method stub - return 0; + return (int)(50*(this.powerEnhancement+1)*(this.potencyEnhancement+1)*Math.pow(0.8, costEnhancement)); } @Override diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java index 17717243..7d82d9d7 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java @@ -1,10 +1,11 @@ package WayofTime.alchemicalWizardry.common.spell.complex.effect; +import java.util.ArrayList; import java.util.List; import java.util.Random; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; import net.minecraft.block.Block; +import net.minecraft.block.BlockFluid; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -16,6 +17,11 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.FakePlayer; import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.PacketHandler; +import cpw.mods.fml.common.network.PacketDispatcher; +import cpw.mods.fml.common.network.Player; public class SpellHelper { @@ -46,6 +52,11 @@ public class SpellHelper return world.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(posX-0.5f, posY-0.5f, posZ-0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(horizontalRadius, verticalRadius, horizontalRadius)); } + public static List getPlayersInRange(World world, double posX, double posY, double posZ, double horizontalRadius, double verticalRadius) + { + return world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(posX-0.5f, posY-0.5f, posZ-0.5f, posX + 0.5f, posY + 0.5f, posZ + 0.5f).expand(horizontalRadius, verticalRadius, horizontalRadius)); + } + public static double gaussian(double d) { return d * ((rand.nextFloat() - 0.5D)); @@ -110,6 +121,11 @@ public class SpellHelper } } + public static String getUsername(EntityPlayer player) + { + return player.getDisplayName(); + } + public static boolean isFakePlayer(World world, EntityPlayer player) { if(world.isRemote) @@ -135,4 +151,82 @@ public class SpellHelper return false; } + + public static void smashBlock(World world, int posX, int posY, int posZ) + { + Block block = Block.blocksList[world.getBlockId(posX, posY, posZ)]; + + if(block==Block.stone) + { + world.setBlock(posX, posY, posZ, Block.cobblestone.blockID); + return; + } + else if(block==Block.cobblestone) + { + world.setBlock(posX, posY, posZ, Block.gravel.blockID); + return; + } + else if(block==Block.gravel) + { + world.setBlock(posX, posY, posZ, Block.sand.blockID); + return; + } + } + + public static boolean isBlockFluid(Block block) + { + return block instanceof BlockFluid; + } + + public static void evaporateWaterBlock(World world, int posX, int posY, int posZ) + { + Block block = Block.blocksList[world.getBlockId(posX, posY, posZ)]; + + if(block == Block.waterMoving || block == Block.waterStill) + { + world.setBlockToAir(posX, posY, posZ); + } + } + + public static ItemStack getDustForOre(ItemStack item) + { + String oreName = OreDictionary.getOreName(OreDictionary.getOreID(item)); + + if(oreName.contains("ore")) + { + String lowercaseOre = oreName; + lowercaseOre.toLowerCase(); + boolean isAllowed = false; + + for(String str : AlchemicalWizardry.allowedCrushedOresArray) + { + if(lowercaseOre.contains(str)) + { + isAllowed = true; + } + } + + if(!isAllowed) + { + return null; + } + + String dustName = oreName.replace("ore", "dust"); + + ArrayList items = OreDictionary.getOres(dustName); + + if(items!=null && items.size()>=1) + { + return(items.get(0).copy()); + } + } + + return null; + } + + public static void setPlayerSpeedFromServer(EntityPlayer player, double xVel, double yVel, double zVel) + { + PacketDispatcher.sendPacketToPlayer(PacketHandler.getPlayerVelocitySettingPacket(xVel, yVel, zVel), (Player)player); + + } } diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/IProjectileImpactEffect.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/IProjectileImpactEffect.java index 2f2cbf92..3893f578 100644 --- a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/IProjectileImpactEffect.java +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/IProjectileImpactEffect.java @@ -6,6 +6,6 @@ import net.minecraft.world.World; public interface IProjectileImpactEffect { - public void onEntityImpact(Entity mop); + public void onEntityImpact(Entity mop, Entity proj); public void onTileImpact(World world, MovingObjectPosition mop); } diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/MeleeSpellCenteredWorldEffect.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/MeleeSpellCenteredWorldEffect.java new file mode 100644 index 00000000..f4ab64e1 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/MeleeSpellCenteredWorldEffect.java @@ -0,0 +1,33 @@ +package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public abstract class MeleeSpellCenteredWorldEffect extends MeleeSpellWorldEffect +{ + protected float range; + + public MeleeSpellCenteredWorldEffect(int power, int potency, int cost) + { + super(power, potency, cost); + } + + @Override + public void onWorldEffect(World world, EntityPlayer entityPlayer) + { + Vec3 lookVec = entityPlayer.getLook(range).normalize(); + int x = (int)(entityPlayer.posX + lookVec.xCoord*range); + int y = (int)(entityPlayer.posY + entityPlayer.getEyeHeight() + lookVec.yCoord*range); + int z = (int)(entityPlayer.posZ + lookVec.zCoord*range); + + this.onCenteredWorldEffect(entityPlayer, world, x, y, z); + } + + public void setRange(float range) + { + this.range = range; + } + + public abstract void onCenteredWorldEffect(EntityPlayer player, World world, int posX, int posY, int posZ); +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java new file mode 100644 index 00000000..28bd2dd1 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefaultEarth.java @@ -0,0 +1,41 @@ +package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; + +import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityFallingSand; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.MeleeSpellCenteredWorldEffect; + +public class MeleeDefaultEarth extends MeleeSpellCenteredWorldEffect +{ + public MeleeDefaultEarth(int power, int potency, int cost) + { + super(power, potency, cost); + this.setRange(3*power + 2); + } + + @Override + public void onCenteredWorldEffect(EntityPlayer player, World world, int posX, int posY, int posZ) + { + int radius = this.potencyUpgrades; + + for(int i=-radius; i<=radius; i++) + { + for(int j=-radius; j<=radius; j++) + { + for(int k=-radius; k<=radius; k++) + { + if(!world.isAirBlock(posX + i, posY + j, posZ + k) && world.getBlockTileEntity(posX + i, posY + j, posZ + k)==null) + { + int id = world.getBlockId(posX + i, posY + j, posZ + k); + int meta = world.getBlockMetadata(posX + i, posY + j, posZ + k); + + EntityFallingSand entity = new EntityFallingSand(world, posX + i + 0.5f, posY + j + 0.5f, posZ + k + 0.5f, id, meta); + world.spawnEntityInWorld(entity); + } + } + } + } + + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java new file mode 100644 index 00000000..49b3081d --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/MeleeDefensiveEarth.java @@ -0,0 +1,37 @@ +package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeDirection; +import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.MeleeSpellCenteredWorldEffect; + +public class MeleeDefensiveEarth extends MeleeSpellCenteredWorldEffect +{ + public MeleeDefensiveEarth(int power, int potency, int cost) + { + super(power, potency, cost); + this.setRange(3*power+2); + } + + @Override + public void onCenteredWorldEffect(EntityPlayer player, World world, int posX, int posY, int posZ) + { + ForgeDirection dir = SpellHelper.getDirectionForLookVector(player.getLook(1)); + + int vertRadius = (int)(2 + 1.0f/2.0f*Math.pow(this.potencyUpgrades,2)+1.0f/2.0f*this.potencyUpgrades); + int horizRadius = this.potencyUpgrades+1; + + int xOff = dir.offsetX; + int zOff = dir.offsetZ; + + for(int i=-horizRadius; i<=horizRadius; i++) + { + for(int j=0; j=-vertRange; j--) + { + if(!world.isAirBlock(posX+i, posY+j, posZ+k)&&!SpellHelper.isBlockFluid(Block.blocksList[world.getBlockId(posX+i, posY+j, posZ+k)])) + { + BlockTeleposer.swapBlocks(world, world, posX+i, posY, posZ+k, posX+i, posY+j, posZ+k); + + break; + } + } + } + } + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java new file mode 100644 index 00000000..d0053320 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfDefensiveEarth.java @@ -0,0 +1,27 @@ +package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.SelfSpellEffect; + +public class SelfDefensiveEarth extends SelfSpellEffect +{ + + public SelfDefensiveEarth(int power, int potency, int cost) + { + super(power, potency, cost); + } + + @Override + public void onSelfUse(World world, EntityPlayer player) + { + int pot = 2*this.potencyUpgrades + 1; + int duration = 20*60*(this.powerUpgrades+1); + + player.addPotionEffect(new PotionEffect(Potion.field_76434_w.id,duration, pot)); + player.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionHeavyHeart.id, duration, pot)); + } +} diff --git a/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java new file mode 100644 index 00000000..a19b3f39 --- /dev/null +++ b/BM_src/WayofTime/alchemicalWizardry/common/spell/complex/effect/impactEffects/earth/SelfEnvironmentalEarth.java @@ -0,0 +1,45 @@ +package WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.earth; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.impactEffects.SelfSpellEffect; + +public class SelfEnvironmentalEarth extends SelfSpellEffect +{ + public SelfEnvironmentalEarth(int power, int potency, int cost) + { + super(power, potency, cost); + } + + @Override + public void onSelfUse(World world, EntityPlayer player) + { + int horizRadius = this.powerUpgrades + 1; + int vertRadius = this.potencyUpgrades + 2; + + Vec3 blockVec = SpellHelper.getEntityBlockVector(player); + + int posX = (int)(blockVec.xCoord); + int posY = (int)(blockVec.yCoord); + int posZ = (int)(blockVec.zCoord); + + for(int i=-horizRadius; i<=horizRadius; i++) + { + for(int j=0; jigP)WFU8GbZ8()Nlj2>E@cM*00C}EL_t(I%cYasisC>J zhQDq%2ML-46Ez~}mG8ChE^}cDAtn%##;&>ApzEy5?ABFNG=Kl6Hmb`1jQwg^mZg?u zss9XMt>thyP*s&~w_80Pk3ateU>+qHVk6%EXebmD2iCG*Dun3{H{GsQ_klz-g}nIC8~;Z4r2^eRZaH*>bf>h47~Sr zUB@_%0K{>ObB^2X#%wkNU>rxXEPM5!EKA+(b~xv-)*>RraZKO$L{Y?YxkN-Aw6xLhuH?*RycU^+KVLl6Ws zP4kq-9{okAT)t>+e!;rr3xn8g4TL6zhsyZ?JHo&|21j~-hG}&Q0;s5{u M07*qoM6N<$f}m#GP5=M^ literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png b/resources/assets/alchemicalwizardry/textures/items/baseItemDefaultCore.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fa7764537254147c35c1e356ab75ec29a1e0ef GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(~4_-VEMl2N~A^MK}vQ zB8wRq_zr_GH=O_Iu2Hj2h<4_wMck3SIGZaSX9IeRh(s&_M@**8MD^ zT+;*AHF~c+B^mOx=-anLO`n84TYAn0n*3N;FJ+pHO&Xs%KVy->PS|EHewtRV$z?l$E`3Pp_ z$^wB8E6S3*k9IftvC1%{ug<;QueVwfUZ7v!=>Z=Db+|6Zw5=!tJK z&%vJ5ghh8;xq>PK>Si&Ceh4jO`m!%_NkF&BB@X|r=blogx|6b%S2F%PU&*i~!a4QN T)b3e8|1o&F`njxgN@xNATKIKf literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png b/resources/assets/alchemicalwizardry/textures/items/baseItemDefensiveCore.png new file mode 100644 index 0000000000000000000000000000000000000000..49c595c35c93ee2a7ef35adaf6c89dfeeda9cdbf GIT binary patch literal 502 zcmVZ5010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-UAK{6Dsi0t2_Vz0fR|I zK~y-)&62%t6G0S4&+g2umvwd>DW(G2Q1~541r)%0SaM+r35f@wK%$~R;(a1&KLElK zP~kYp-ktUQ>|dG$WlbXJ;I?;kbiTPC{ObvBTfBbtvh&^}g&>L|-n@Mm{1sq6n|1)t zp1;65hp#+BNsIG+1ML2E7R0S+da~MV^ypDWxvhZntD@ z$G7ia5kj)f^B$mQa5Nqh1mL~n;2=e7jgpGQnBEn_{VUwN|A3}$`Lg^>kr!yK@l}PjmMl$wD^l+dt}Fl^9v>5_ s2x|>=0Y6q}*WdiP%2$otga3zf0cPm98WtUqV*mgE07*qoM6N<$f=tNOvj6}9 literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png b/resources/assets/alchemicalwizardry/textures/items/baseItemEarthenCore.png new file mode 100644 index 0000000000000000000000000000000000000000..d275736f943f4192cade3ef5c7f388dd7d1877a1 GIT binary patch literal 454 zcmV;%0XhDOP)VGd000McNliru-UA5@F&gc!k3IkZ0aHmt zK~y-)y_4T7L_rkCKWAp{y)GgzQg|V1Np1Xlvhv{XyHY$TdGsSn?B2aUW{!u+Zi^Ku z=WUuf-!tDIM-KM8{G|+kEH~|_KfWz%VRdrHCo8*My3r701!+_1emx@@>CIZ+Dw1Qy?A~Ff! zn-XnG0)PSmf(L6E=@7g{#gWcbpKS~tOaguwxrSy;P#kCp)nJKw@G@ckNQ2|^u3X%M z2-r08HUgGNL6aQga_$!^POrvRehQMw;&cu1N7XZUpW?$DmRm@E5F}ODwBYM^3WnyMF0Q*07*qoM6N<$g55j4eEYueawTGU=YH*LbS$-n(?x42AQ e;`99u2gCAY&!hiyH=O_Iu2HJo=ha+Rc?fq5qyPjv*GO&rUk+ci4f)wLksR z1us#dHI9EcJKm>VJn!hSRQihhq?tQ)=7?PqxF}ok{QAby+#lJSR~~t5yh$>GA+@6Z z=gw=(q@I^AU~zR|e>?lR`Rc^}x#s$E4y;~`LPuCW+JW?!#xCy$tUDvPW*Ub{qH4RB+MPWEU@Ev0%GuaU{upD>J9l z-Tccx)RY^zp6EW=c0M{j#!*#6^ujK^`%CQ^&9v9V{@$gw;Kz{)-rcq@t{$xXeOff7 zuHNc|^>sy#O$VL{%;J{wP)VGd000McNliru-UA5@DIA8^vQhv50d+}4 zK~y-)#ga{K(_j#WpZRRZc0-60+(Mv;RW~d^+@Lq;o@;R#&H&3Ukf;Py>LNCUKpV%2 z?Qez!2oX#wc71pA_vjtXz->!*70Nw~^{+tTU`KB+S%UFG*gHDJT?H_V;9Rj_qigTjgev|9K=JemO%r#hjq^CEa_Ee`h?n>5=|aaTn7yNB~_8 ehd1=zu6_WnH==*`+Ut=30000P)VGd000McNliru-UA5@H3pr+7Igps0d+}4 zK~y-)#gfTR8$l3;zouv69^(bGNJxNCSY$Xrl$VK=Cq!`J4LEQ^IYbr-0tFC?*^JFH z2G4k=d%C$<*fIifp>CzB`fB^(vrW7f@HeXNrLTV;iFX0~jj9WzVr6|5i>0A&iETo7 z&>RX9gT;&M%amk+Fzi9xTjD%z@IAkZFC>9bjCn@_!0R^S}N0ZEn; z+k}U#&7@ah%Byf^?irV5gngpoP2h|LKR+DM{!tSbfBtik-XM`APBZRTxQzc1c5e_u z5qTExY_jhQ-rx-$vksB%qMf0oTU@pGaoQkMfufqHEA-n!0w`4jx^bN-3K4-q)@R-p e(nqBH`SuKE>#Zxx%kgXg0000VGd000McNliru-UA5@G7UvhSvmj!0kla( zK~y-)y_3Oe6Hyd~zkBaYGLtj}8%J#+6&J;gi_+OB?tF$Sf-6_<6kOFOh#=xqxKIK< zNj5GNL3$FGuXMp7&!MVwe5((hc~jcKs&=+g!YC(obY*W(Her%P&eR0$LNQplm)4C z%L<$`RFq&+mfgT( zI2D@C(GP}DYS5Ks1@Zkul@1fW)-yt@3ACo+8BD2Y=#r5?fy9RspZM`pwVFh|0H+`j z3>L4nL?X0OfxG}$gL=Lm<@nJv#rIQw4u)9Y66PS|1vv$bH6-W651*^QlKA_qZ(qw+ p*gOc03&Bbd^HSNl@ zoxV36|yh`RVo8B|;Swmf2cp84PckZ^} jP&1s-oFLSE{0HM=TVIavpN{VZx}Cw()z4*}Q$iB}5pr$7 literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png b/resources/assets/alchemicalwizardry/textures/items/baseItemMagicalesCable.png new file mode 100644 index 0000000000000000000000000000000000000000..40606587c0ad2ab997f8922a98b01baaa799046a GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({xitX5C6w)^mS#w$IQvV%lzs6S&&gHJzX3_EKa|@WaxJ|K*05)@qNCC zO$@B5>^l6NQx&ewXcG&RIKDBN-_=9XRVnw~m+<_wxSZGG*8^fs`a1CPYrTIP%~$3B zF~{iEOCQUon=DR&A#%xYxBl+Ai=P(S4H^(T{c{G zI^Qm?zB+5a;PDP`J-6l~GpgCyYs>cem}M2N^l09)IV1Glxw{X9vakN%e_>A9PScM% a`%nI~J#jyG$3CE=89ZJ6T-G@yGywpJRc-|U literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png b/resources/assets/alchemicalwizardry/textures/items/baseItemMeleeCore.png new file mode 100644 index 0000000000000000000000000000000000000000..77af87239ab5a01dcd417af7f5bb35a3a012ebb7 GIT binary patch literal 461 zcmV;;0W$uHP)VGd000McNliru-UA5?IUwS=wzB{L0a{5! zK~y-)#nMe{Q$ZBQ@!!o&n?@5`6jXH6t^~ndcPd@Qjp9P^yZI%=t+b$m1y^p>jVKiH zElF<^)BBQ_adEY`wTasv7-r6y^ZaM#%;BspTC}mfE*$soeV(5iEfRL_-y}ce@E7OX zc6L6^1x5dgJDm+KU1#qd@e<>_9PtwAz;2(ryOpkX>Q0w8=zS^Yan2~ANJ$4^nw?BP z0=(K3I*&H#?a{he21m&${#Kh8x2pQo|1RPc)atBW;p5x#)F}!qquD%)rC%#x1!y$M zM;!blO-tdq76HQv{k#OdXPC@+LYPfC_(AfG80`z}=fr_VL1RV_eOj$KfZH#N=*{=E z+L;yXHyO^D%;@3+Pa_^A)i2bK7ic;f&_IS-#?`D84wdzou+skHFS6Hngza@9JQTtW zAuJ1FO?VOs&l)GY^S`b9{F;z;>5f^g^LV^C_iXJqNK=L_`VB}A00000NkvXXu0mjf Dqb$tE literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png b/resources/assets/alchemicalwizardry/textures/items/baseItemOffensiveCore.png new file mode 100644 index 0000000000000000000000000000000000000000..33dc2d425064582429903fa52f7d197d814c2a3d GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(~4_-VEMl2N~A^MK}vQ zB8wRq_zr_GH=O_Iu2HJgh=TyqA>%h2D9(IEGl9K03)T@2~-n>wFFM z0&eja6IOaZpQo69Dzj+WJ+;V5hofoZqL?iOy%m!CgRRZQ*HdBVip8H-oJuM) zan!vXajD%xu(qCcQrJ{hx98@Hxxwf6mWY>`b_xm{w-r|LaJtU_^3BJ2ryOsbcBwP% iRM9=#`uDH-K1QZhMO!V^U1tNG&fw|l=d#Wzp$PzReQR9+ literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png b/resources/assets/alchemicalwizardry/textures/items/baseItemParadigmBackPlate.png new file mode 100644 index 0000000000000000000000000000000000000000..2b84b9765924ce2c92b0dd29a9d3551d3cd44f83 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)2d5J`7&lR{mZK6yYrJ zh%9Dc;5!V$jK}j=qyPokOFVsD+3zuP@^Yx}cJ`YJ6x#3U;uvCadTH=M-opw!CLNrU z{>)tXHo-$s>laZ=pUpdtS)VZc!(dodF5v#YYxBbQ33tmZWIQ-7^DHiJoxpO| zbBfN+he=VJdY>4ab>-2E>Ak?E`*d08O6ixjeu5Qg|I}=nc5VvGUi^aL_pM8ARpAc} y{(hSJ(ni8c!P{r1b*9|1{8CnigtfVOkJ-=cD{3q4x&9aE6$VdNKbLh*2~7a3)^U0O literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png b/resources/assets/alchemicalwizardry/textures/items/baseItemProjectileCore.png new file mode 100644 index 0000000000000000000000000000000000000000..6719e820c1817ac7267f3075894610f562221dd5 GIT binary patch literal 478 zcmV<40U`d0P)VGd000McNliru-UA5%3?V;O*T4V(0c%M_ zK~y-)t<%A36JZp^@!vO-WC&K#hSHT-72m*xAc9>8E=An&?q}>sH5y&l+|4(`rGFvIGFvOM|KGpyH_~v4 URlWBA>Hq)$07*qoM6N<$f|@eYhyVZp literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemQuartzRod.png b/resources/assets/alchemicalwizardry/textures/items/baseItemQuartzRod.png new file mode 100644 index 0000000000000000000000000000000000000000..46e59b32a340819bda956cc1a8e0e8c29e9c6ae2 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkETanla&UQgo+-%dN@?#R4Y}4Mzd4*Zo>a=+ z+Sa;NEKtNTyLa7d28P219h)7#?Bh^ekSWEXc;L*1C}xIJo9?(A( zb(i&l+WYVO_;@C%G=7(hdVM=BnP-#EZYPyR0imKjhW$^D7q$d>#Yh+!@A1~*=M{neamzemgM85!1J=e}%WtNt-2-F<)AhsnQ~*y`qOTRVB1ASkdrUHx3v IIVCg!0PX3a4*&oF literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png b/resources/assets/alchemicalwizardry/textures/items/baseItemScribedRunicPlate.png new file mode 100644 index 0000000000000000000000000000000000000000..bd01c9b96e850de88cae7c55b017238717c659a7 GIT binary patch literal 481 zcmV<70UrK|P)WFU8GbZ8()Nlj2>E@cM*00BiwL_t(I%cYYsPr^_T z$A3qRwM173CPTu&=IF<;3=$Iu62F{_fyv3i&DGgR!a&mKU_c75VC^}0uT~&v$~LRA?qejPk%;~q0MMz|X^Uv<7m$=o5D`v6JIy9(5D<>XxH#r2O#$et z$}(W5{GzHvB50QJHW-jQ#|&s$pf9To`k^2a(aT1IEJ+x}F*y(b@3sTH0C)D>Rh1PF zG|O0wMg%|zd;lqs0M1}1>pW;zt9ntZk@Wk;p#v7c0Wde%6YvQ1EVodwa1P|Fw9IY- z5MbhCOqKVmFfkI*^Dso@+hl*ESkM%>HxF)0CKd{=f!T0aP%D-!z|2$~0{ff#!2hN* zOPB&VuxGVD05?m$AnRtqgN}h+;5iJL%;&u3`ARd%reX4+BVh2CPF!9-VbfsAw&VN> X6Wy4XZvL^Y00000NkvXXu0mjf2G+tI literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png b/resources/assets/alchemicalwizardry/textures/items/baseItemSelfCore.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e9bab691060a86a3e2d010919ee944e055dd4a GIT binary patch literal 433 zcmV;i0Z#sjP)VGd000McNliru-UA5?C>IIbFsuLo0X|7Y zK~y-)#gffR0#O)-pBbk@X%P{D$UsE}bp@^31c5GsT34GcArQI(!Apo%<|6trq;<3k zx&c=%Z6kpe>6szZw?&gUzOFM{&j znz~(|-EA9~1*U*1=cPIThx^f@+?H1*Z(TA;$)qK7B$-Lc&|ifj8pPP4i|v4#z%q(& z0uMk8tW>0^J!pMrD+WxXcqVx50CS*rA8@b-gD#w(L#NXMd|(61y9XWv{`N0b&mZEz z_v^qsAm9`5!e9a2?^dNUgrL{^0IEO>cnM1i=mopLbt49Hb(56Lie#2Tlh-@a8&U&h zPr|?8ghF9C!1GYs08GH*!XMGRxSUa;h|~&HUy+*VIEzlt!s;WVoXev|10=9*$md2R baIEzOzk`?B*H-nU00000NkvXXu0mjf0PC^| literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png b/resources/assets/alchemicalwizardry/textures/items/baseItemStoneBrace.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1103225d80d74642e7008218ac4b0c1816f2c3 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({F}bqv)PWuGwvMK}vQ zB8wRq_zr_GH=O_Iu2n4BGq_?M$&ip@W_-jv*GOljqD@ecpjHLCO7c z%iH*W{x|+TweMm)(bQt%?(UjU?pPAS!ffZ9Fl)MA^ud4!Cl7ZdIW(&CKfaWzT_Dxu zYuv_NAlc+?%nSs|+aek=Z*0qDKm40tUZNoLSSABd^zfm_I{%9|6-&IkyT3Wu_+CcM z|A)+n_x>)Im?9D?!NSVo;mv-cZk|yoSM&7g?B{MIDv8|sIIaG}F+O3#z*haPnH`;4 wHEjlhizV+0^klTm?C>|%JK(g=O@e_T{nWfIWxIb&1$u_T)78&qol`;+0ORv*1^@s6 literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png b/resources/assets/alchemicalwizardry/textures/items/baseItemWoodBrace.png new file mode 100644 index 0000000000000000000000000000000000000000..329d46bc7e70fef9460479dc10ab5b83ff5cb8b7 GIT binary patch literal 316 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 literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost2.png b/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementCost2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a340ef754b97c9b9be376f9c2e8d0faabd8734b GIT binary patch literal 3603 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 literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency1.png b/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPotency1.png new file mode 100644 index 0000000000000000000000000000000000000000..1266816fb829c147baa4ba7fa95222e322e9fe37 GIT binary patch literal 4329 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 XI*x2&VGd000McNliru-U1pE8Vc_mJ%|7R4PZ$` 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 literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png b/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d61b2ed1da398b77b78dc87dad339f2d04be5f GIT binary patch literal 3738 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 Eg3IVN761SM literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower3.png b/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower3.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b6fd536d7e18b2643c559e1f7c2f32b369971c GIT binary patch literal 4068 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 Hu0mjfa$77s literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png b/resources/assets/alchemicalwizardry/textures/models/SpellModifierDefensive.png new file mode 100644 index 0000000000000000000000000000000000000000..1dbdeed6610c8302c0d1391c2fc6d144e0e04403 GIT binary patch literal 1608 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 IM6N<$f>z{NK>z>% literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png b/resources/assets/alchemicalwizardry/textures/models/SpellParadigmMelee.png new file mode 100644 index 0000000000000000000000000000000000000000..c74a2dd85c136aa12372adaffdb62bdd5826758b GIT binary patch literal 1230 zcmV;<1Tp)GP)VGd000McNliru-UA315i5ZB>SX``1Y1c& zK~#9!?U_q!8&?#^f9K8}Nq*FEDJ>7$f|X@P!g`NP`0onIOw8+}`H^7l;Yj zo31gAVUG~VChT8HcmOht;*!H)h=Gh`nR;`Bcldm^H3no5vP8s;Gse#J+x{TII!Z=z z#9J;QFo^@yn;d}CZi6Dt)>y|Ui-T%JtUePsWDr7p0(?fWh%rpPndFeT_Z^VI06w>I zaS6#{Xiy{I5Cv4TKnBG@fD9H#T=r-nNYWJ)P~7CFaYUqzzG#ldCnikPURE+m%mq*) zB4X-PsI#kk_%v`NCe%8U2sHv!-ZZEe4a1&GC_p!{o z4Ai}+bH$^l3SR@T;%%TP-xlt)*CImko3EPd)lE#WHc$>Q6UkuXeNA+>udeZ6mcY%$JQZRp zPyZUa5=hZPv-jWAn$7E6v8Yu$tC7tQmkux}wM4&X5#k{Tyc|_~e|Q`CL{x!M3=ZHT z%ok?(vs4<$+P5cFU=D{I5TO_(z0dVJZ?!Ubdl@~cVlQSmhn%|zXSAYt9X!+58BkTU+Wc0_tCz3!)yvlxE&+Sdx;YyCqme(E2^WcK zOKDD(hO`bZOJGA^0{^QHxK0x686k9Cc<<1wCxMD^k)pNe>Cb+cV2-6(-8?E+7{ zG7k&+j^}>!*0IS13gCBdojUL!DUEJ)fh!@wUT%ZZBCHQF>@1vhc4?v1H{TD2{xXyz sMT!(DQlv|Jkz&~JA4WtSF1RdZaR2}S07*qoM6N<$f)%SOAOHXW literal 0 HcmV?d00001 diff --git a/resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png b/resources/assets/alchemicalwizardry/textures/models/SpellParadigmProjectile.png new file mode 100644 index 0000000000000000000000000000000000000000..f579c0283fc36a62f396b78694fa9720358bea1d GIT binary patch literal 1229 zcmV;;1Ty=HP)VGd000McNliru-UA2%9t^mLB3b|d1X@W% zK~#9!?V34{97Pz0pQ`F(=h)c`)@YIc2LTxgY)giKK>{2sk$(e`<%r+lY=jU5hyYMo z`~i@#GY13~5i1Z0Fgr(2PhUka-Mw?IykmLRbM!mGOm}@lZqJmMC#gIM@ET>B0>@pBocu{p@@hG7*L^#K&*!ZEG#;- z8RCZ=AO<!|^Nw%4Bb?NW+)N34diDV+Dc`hy*g6T6g;4(E)bmV7 zD|&P}@v1!2f8*ft8^3Jyj!%d>pie|pw6fda>*Cb&ib(gT?xV1>#wVmh2Mdcgy&8|S z78~yYqs}lzqS)gA2dAhEOROMHJ;>)0(4GxA-06>(;*J>ZnP=9Iez;K}2s=E>uy3roOSR5#(=*$-G^uIa^$HQ z;&Pj1oJPq-V!-qCKfd7UXX{>6EFNIryF6^okuScj1&M9|vo>2%2iV!4G;SmdT)LGW zcj0SKFwb^gN&AOx<5J<4=N7IlkbNvOx*8jo4OYj*Bw2Q zK>l80`g&Z5010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-UA313NWLq=o0_{1U5-T zK~#9!?U_w)TSXLxpEGl>?Ibmjblsl=2{94~C6+1>9}*J3fmPKNzaa}m7DcE@79i?= zz&~hr{R@#`L7TM6wH@1c=CGK1;|~&AS2*>@eOLC(+$*1V&ikG-W8o4sd!qitB4v-1 z{rR|_M94LVloV|m)C;ESSQdmCM0DANb_9BYp2nyXsCcC0QD@L+2C>;fQK&j*73NX` zUPRyp@<6)=5O6@xpl1f{3Pg&YnfW6?Ry?GFL<$0wJ?aE`H$|2mverXlMczr#)*KR` zEdxfO;vrH{kl3S%g|dS)gH%&U&40XQmNUR+seWoh+ILMLCGve)#EO3&Ln<>%fF#c% z#R(cK7)2rtf%;7EmJpy5P{R0%3!b2W4bR{O^%Ane3Ff^NVCt)bQ7^&F+6IO2xnn}m zX{ZEL(?CQyNP)x#SyUYoE0h%VAVv|RXw%|fTKuVC6vgrf(jaYXjzCosKA*J(rB6qP=ShribB&uk064q^`K=?1yazCg_1{G5=fYS6U=t+%s|EA73gO5Kgm+q2`s13mdqOjZ14lI2K;@}AwoqhtO>cN9F4Kyv*26v|&j8HoU1jL6RMM62Gla;@gg|0zX(m;v_ znl`k{OP&JLUIs@84tE*K+Z$gY3&lvYZFI9%)8xeJX04|49Coi2`!xV|wj1+HNUr(KT1}G|R+GQu^Y6{J(ZTsm;HQ7VD;k&i9JULe(@wwAj4*@rpccrZ7IPIo=2J-M+?>mM2dfz>E3F%3z&BT za)<95U&P)Ie`HOOA^EE`*B#+d6_8~IPQp!Z+aT9mINcSPUf;^I^Kcg(?PA~PEU>W0 z;lo`tuloSEZ+#EIt=r!XJ+QOg;C0sBZ!~0_ogDX>iJb;#2`xoi8q)sBzM=o;!@e{epwfA;}c*xvdOfP;Gt{82>xi}lG8FlhtK z-@o_sL-0`lY$K3x=Ml%h_Ag>r*GtsDd4K3#`v(s=x*JYplempC<9NWU^gkHzg={am z^WXvMpRW(i=fUs&_