From d5ba110323068a3b72b7d09b7cf20af9f087ab0a Mon Sep 17 00:00:00 2001 From: WayofTime Date: Wed, 19 Feb 2014 17:03:56 -0500 Subject: [PATCH] More changes --- .../AlchemicalWizardry.java | 186 +--- .../alchemicalWizardry/ModBlocks.java | 13 +- .../client/ClientProxy.java | 16 +- .../common/NewPacketHandler.java | 796 ++++++++++-------- .../AlchemyPotionHandlerComponent.java | 4 +- .../common/alchemy/AlchemyRecipe.java | 40 +- .../common/block/ArmourForge.java | 1 + .../common/block/BlockAltar.java | 9 +- .../common/block/BlockBloodLightSource.java | 2 +- .../common/block/BlockConduit.java | 2 +- .../common/block/BlockHomHeart.java | 2 +- .../common/block/BlockMasterStone.java | 2 +- .../common/block/BlockPedestal.java | 2 +- .../common/block/BlockPlinth.java | 2 +- .../common/block/BlockSocket.java | 2 +- .../common/block/BlockSpellEffect.java | 2 +- .../common/block/BlockSpellEnhancement.java | 20 +- .../common/block/BlockSpellModifier.java | 2 +- .../common/block/BlockSpellParadigm.java | 2 +- .../common/block/BlockTeleposer.java | 2 +- .../common/block/BlockWritingTable.java | 2 +- .../common/block/BloodRune.java | 2 +- .../common/block/BloodStoneBrick.java | 2 +- .../common/block/EfficiencyRune.java | 2 +- .../common/block/EmptySocket.java | 2 +- .../common/block/ImperfectRitualStone.java | 2 +- .../common/block/LargeBloodStoneBrick.java | 2 +- .../common/block/LifeEssenceBlock.java | 3 +- .../common/block/RitualStone.java | 2 +- .../common/block/RuneOfSacrifice.java | 2 +- .../common/block/RuneOfSelfSacrifice.java | 2 +- .../common/block/SpectralBlock.java | 2 +- .../common/block/SpeedRune.java | 2 +- .../common/items/EnergyBattery.java | 16 +- .../common/items/EnergyItems.java | 5 + .../common/items/ItemSpellEffectBlock.java | 2 +- .../common/items/ItemSpellModifierBlock.java | 10 +- .../common/items/sigil/DivinationSigil.java | 2 +- .../block/RenderSpellEnhancementBlock.java | 49 ++ .../TESpellEnhancementBlockItemRenderer.java | 107 +++ .../model/ModelSpellEnhancementBlock.java | 334 ++++++++ .../common/rituals/RitualEffectCrushing.java | 2 +- .../spell/complex/effect/SpellHelper.java | 16 +- .../common/tileEntity/TEAltar.java | 15 +- .../common/tileEntity/TEConduit.java | 6 - .../common/tileEntity/TEHomHeartRenderer.java | 13 - .../common/tileEntity/TEOrientable.java | 4 +- .../common/tileEntity/TEPedestal.java | 1 + .../common/tileEntity/TEPlinth.java | 1 + .../common/tileEntity/TESocket.java | 1 + .../tileEntity/TESpellEnhancementBlock.java | 13 + .../common/tileEntity/TETeleposer.java | 5 +- .../assets/alchemicalwizardry/lang/en_US.lang | 132 +++ .../models/SpellEnhancementPower1.png | Bin 0 -> 4387 bytes .../models/SpellEnhancementPower2.png | Bin 0 -> 3718 bytes .../models/SpellEnhancementPower3.png | Bin 0 -> 3718 bytes 56 files changed, 1250 insertions(+), 618 deletions(-) create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java create mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java delete mode 100644 1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEHomHeartRenderer.java create mode 100644 1.7.2/resources/assets/alchemicalwizardry/lang/en_US.lang create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower1.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png create mode 100644 1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower3.png diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/1.7.2/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 6adbc972..0b802faa 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -27,6 +27,7 @@ import WayofTime.alchemicalWizardry.common.AlchemicalWizardryTickHandler; import WayofTime.alchemicalWizardry.common.CommonProxy; import WayofTime.alchemicalWizardry.common.EntityAirElemental; import WayofTime.alchemicalWizardry.common.LifeBucketHandler; +import WayofTime.alchemicalWizardry.common.LifeEssence; import WayofTime.alchemicalWizardry.common.ModLivingDropsEvent; import WayofTime.alchemicalWizardry.common.NewPacketHandler; import WayofTime.alchemicalWizardry.common.PacketHandler; @@ -234,7 +235,14 @@ public class AlchemicalWizardry System.err.println(e); } } + AlchemicalWizardry.lifeEssenceFluid = new LifeEssence("Life Essence"); + FluidRegistry.registerFluid(lifeEssenceFluid); + ModBlocks.init(); + + + ModBlocks.registerBlocksInPre(); + ModItems.init(); ModItems.registerItems(); @@ -249,10 +257,8 @@ public class AlchemicalWizardry int craftingConstant = OreDictionary.WILDCARD_VALUE; //TickRegistry.registerTickHandler(new AlchemicalWizardryTickHandler(), Side.SERVER); - ModBlocks.registerBlocks(); - + ModBlocks.registerBlocksInInit(); //blocks - proxy.registerRenderers(); proxy.registerEntities(); @@ -305,7 +311,7 @@ public class AlchemicalWizardry ItemStack energySwordStack = new ItemStack(ModItems.energySword); ItemStack energyBlasterStack = new ItemStack(ModItems.energyBlaster); ItemStack sacrificialDaggerStack = new ItemStack(ModItems.sacrificialDagger); - ItemStack bloodAltarStack = new ItemStack(ModBlocks.blockAltar); + ItemStack bloodAltarStack = new ItemStack(ModBlocks.blockAltar,1,0); ItemStack bloodRuneCraftedStack = new ItemStack(ModBlocks.bloodRune, 1); ItemStack bloodRuneStack = new ItemStack(ModBlocks.bloodRune); ItemStack speedRuneStack = new ItemStack(ModBlocks.speedRune); @@ -430,105 +436,20 @@ 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")); - //All items registered go here - //LanguageRegistry.addName(orbOfTesting, "Orb of Testing"); - LanguageRegistry.addName(ModItems.weakBloodOrb, "Weak Blood Orb"); - LanguageRegistry.addName(ModItems.apprenticeBloodOrb, "Apprentice Blood Orb"); - LanguageRegistry.addName(ModItems.magicianBloodOrb, "Magician's Blood Orb"); - LanguageRegistry.addName(ModItems.archmageBloodOrb, "Archmage's Blood Orb"); - LanguageRegistry.addName(ModItems.energyBlaster, "Energy Blaster"); - LanguageRegistry.addName(ModItems.energySword, "Bound Blade"); - LanguageRegistry.addName(ModItems.lavaCrystal, "Lava Crystal"); - LanguageRegistry.addName(ModItems.waterSigil, "Water Sigil"); - LanguageRegistry.addName(ModItems.lavaSigil, "Lava Sigil"); - LanguageRegistry.addName(ModItems.voidSigil, "Void Sigil"); - //LanguageRegistry.addName(glassShard, "Glass Shard"); - //LanguageRegistry.addName(bloodiedShard, "Bloodied Shard"); - LanguageRegistry.addName(ModItems.blankSlate, "Blank Slate"); - LanguageRegistry.addName(ModItems.reinforcedSlate, "Reinforced Slate"); - LanguageRegistry.addName(ModItems.sacrificialDagger, "Sacrificial Knife"); - LanguageRegistry.addName(ModItems.daggerOfSacrifice, "Dagger of Sacrifice"); - LanguageRegistry.addName(ModItems.airSigil, "Air Sigil"); - LanguageRegistry.addName(ModItems.sigilOfTheFastMiner, "Sigil of the Fast Miner"); - LanguageRegistry.addName(ModItems.sigilOfElementalAffinity, "Sigil of Elemental Affinity"); - LanguageRegistry.addName(ModItems.sigilOfHaste, "Sigil of Haste"); - LanguageRegistry.addName(ModItems.sigilOfHolding, "Sigil of Holding"); - LanguageRegistry.addName(ModItems.growthSigil, "Sigil of the Green Grove"); -// LanguageRegistry.addName(elementalInkWater, "Elemental Ink: Water"); -// LanguageRegistry.addName(elementalInkFire, "Elemental Ink: Fire"); -// LanguageRegistry.addName(elementalInkEarth, "Elemental Ink: Earth"); -// LanguageRegistry.addName(elementalInkAir, "Elemental Ink: Air"); - LanguageRegistry.addName(ModItems.divinationSigil, "Divination Sigil"); - LanguageRegistry.addName(new ItemStack(ModItems.activationCrystal, 1, 0), "Weak Activation Crystal"); - LanguageRegistry.addName(new ItemStack(ModItems.activationCrystal, 1, 1), "Awakened Activation Crystal"); - LanguageRegistry.addName(ModItems.waterScribeTool, "Elemental Inscription Tool: Water"); - LanguageRegistry.addName(ModItems.fireScribeTool, "Elemental Inscription Tool: Fire"); - LanguageRegistry.addName(ModItems.earthScribeTool, "Elemental Inscription Tool: Earth"); - LanguageRegistry.addName(ModItems.airScribeTool, "Elemental Inscription Tool: Air"); - LanguageRegistry.addName(ModItems.boundPickaxe, "Bound Pickaxe"); - LanguageRegistry.addName(ModItems.boundAxe, "Bound Axe"); - LanguageRegistry.addName(ModItems.boundShovel, "Bound Shovel"); - LanguageRegistry.addName(ModItems.boundHelmet, "Bound Helmet"); - LanguageRegistry.addName(ModItems.boundPlate, "Bound Chestplate"); - LanguageRegistry.addName(ModItems.boundLeggings, "Bound Leggings"); - LanguageRegistry.addName(ModItems.boundBoots, "Bound Boots"); - LanguageRegistry.addName(ModItems.weakBloodShard, "Weak Blood Shard"); - LanguageRegistry.addName(ModItems.blankSpell, "Unbound Crystal"); - LanguageRegistry.addName(ModItems.masterBloodOrb, "Master Blood Orb"); - LanguageRegistry.addName(ModItems.alchemyFlask, "Potion Flask"); - LanguageRegistry.addName(ModItems.mundanePowerCatalyst, "Mundane Power Catalyst"); - LanguageRegistry.addName(ModItems.averagePowerCatalyst, "Average Power Catalyst"); - LanguageRegistry.addName(ModItems.greaterPowerCatalyst, "Greater Power Catalyst"); - LanguageRegistry.addName(ModItems.mundaneLengtheningCatalyst, "Mundane Lengthening Catalyst"); - LanguageRegistry.addName(ModItems.averageLengtheningCatalyst, "Average Lengthening Catalyst"); - LanguageRegistry.addName(ModItems.greaterLengtheningCatalyst, "Greater Lengthening Catalyst"); - LanguageRegistry.addName(ModItems.standardBindingAgent, "Standard Binding Agent"); - LanguageRegistry.addName(ModItems.incendium, "Incendium"); - LanguageRegistry.addName(ModItems.magicales, "Magicales"); - LanguageRegistry.addName(ModItems.sanctus, "Sanctus"); - LanguageRegistry.addName(ModItems.aether, "Aether"); - LanguageRegistry.addName(ModItems.simpleCatalyst, "Simple Catalyst"); - LanguageRegistry.addName(ModItems.crepitous, "Crepitous"); - LanguageRegistry.addName(ModItems.crystallos, "Crystallos"); - LanguageRegistry.addName(ModItems.terrae, "Terrae"); - LanguageRegistry.addName(ModItems.aquasalus, "Aquasalus"); - LanguageRegistry.addName(ModItems.tennebrae, "Tennebrae"); - LanguageRegistry.addName(ModItems.sigilOfWind, "Sigil of the Whirlwind"); - LanguageRegistry.addName(ModItems.telepositionFocus, "Teleposition Focus"); - LanguageRegistry.addName(ModItems.enhancedTelepositionFocus, "Enhanced Teleposition Focus"); - LanguageRegistry.addName(ModItems.reinforcedTelepositionFocus, "Reinforced Teleposition Focus"); - LanguageRegistry.addName(ModItems.demonicTelepositionFocus, "Demonic Teleposition Focus"); - LanguageRegistry.addName(ModItems.imbuedSlate, "Imbued Slate"); - LanguageRegistry.addName(ModItems.demonicSlate, "Demonic Slate"); - LanguageRegistry.addName(ModItems.duskScribeTool, "Elemental Inscription Tool: Dusk"); - LanguageRegistry.addName(ModItems.sigilOfTheBridge, "Sigil of the Phantom Bridge"); - LanguageRegistry.addName(ModItems.armourInhibitor, "Armour Inhibitor"); - LanguageRegistry.addName(ModItems.creativeFiller, "Orb of Testing"); - LanguageRegistry.addName(ModItems.weakFillingAgent, "Weak Filling Agent"); - LanguageRegistry.addName(ModItems.standardFillingAgent, "Standard Filling Agent"); - LanguageRegistry.addName(ModItems.enhancedFillingAgent, "Enhanced Filling Agent"); - LanguageRegistry.addName(ModItems.weakBindingAgent, "Weak Binding Agent"); - LanguageRegistry.addName(ModItems.itemRitualDiviner, "Ritual Diviner"); - LanguageRegistry.addName(ModItems.sigilOfMagnetism, "Sigil of Magnetism"); - LanguageRegistry.addName(ModItems.itemKeyOfDiablo, "Key of Binding"); - LanguageRegistry.addName(ModItems.energyBazooka, "Energy Bazooka"); - LanguageRegistry.addName(ModItems.itemBloodLightSigil, "Sigil of the Blood Lamp"); - LanguageRegistry.addName(ModItems.demonBloodShard, "Demon Blood Shard"); + //FluidStack lifeEssenceFluidStack = new FluidStack(lifeEssenceFluid, 1); //LiquidStack lifeEssence = new LiquidStack(lifeEssenceFlowing, 1); //LiquidDictionary.getOrCreateLiquid("Life Essence", lifeEssence); - FluidRegistry.registerFluid(lifeEssenceFluid); - ModBlocks.blockLifeEssence = new LifeEssenceBlock(); + + // ModBlocks.blockLifeEssence.setUnlocalizedName("lifeEssenceBlock"); FluidContainerRegistry.registerFluidContainer(lifeEssenceFluid, new ItemStack(ModItems.bucketLife), FluidContainerRegistry.EMPTY_BUCKET); - FluidRegistry.registerFluid(lifeEssenceFluid); + //lifeEssenceFluid.setUnlocalizedName("lifeEssence"); //LiquidContainerRegistry.registerLiquid(new LiquidContainerData(LiquidDictionary.getLiquid("Life Essence", LiquidContainerRegistry.BUCKET_VOLUME), new ItemStack(AlchemicalWizardry.bucketLife), new ItemStack(Item.bucketEmpty))); //GameRegistry.registerBlock(testingBlock, "testingBlock"); //LanguageRegistry.addName(testingBlock, "Testing Block"); //(testingBlock, "pickaxe", 0); - LanguageRegistry.addName(ModBlocks.blockAltar, "Blood Altar"); - LanguageRegistry.addName(ModBlocks.blockLifeEssence, "Life Essence"); ModBlocks.blockAltar.setHarvestLevel("pickaxe", 1); //Register Tile Entity GameRegistry.registerTileEntity(TEAltar.class, "containerAltar"); @@ -545,69 +466,7 @@ public class AlchemicalWizardry GameRegistry.registerTileEntity(TESpellEffectBlock.class, "containerSpellEffectBlock"); GameRegistry.registerTileEntity(TESpellModifierBlock.class, "containerSpellModifierBlock"); GameRegistry.registerTileEntity(TESpellEnhancementBlock.class, "containerSpellEnhancementBlock"); - // - LanguageRegistry.addName(new ItemStack(ModBlocks.bloodRune, 1, 0), "Blood Rune"); - LanguageRegistry.addName(new ItemStack(ModBlocks.bloodRune, 1, 1), "Rune of Augmented Capacity"); - LanguageRegistry.addName(new ItemStack(ModBlocks.bloodRune, 1, 2), "Rune of Dislocation"); - LanguageRegistry.addName(new ItemStack(ModBlocks.bloodRune, 1, 3), "Rune of the Orb"); - //TODO - - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellParadigm, 1, 0), "Particle Generator"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellParadigm, 1, 1), "Self Augmentator"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellParadigm, 1, 2), "Melee Aggregator"); - - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 0), "Unstable Spell Empowerer"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 1), "Standard Spell Empowerer"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 2), "Reinforced Spell Empowerer"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 3), "Imbued Spell Empowerer"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 4), "Demonic Spell Empowerer"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 5), "Unstable Spell Dampener"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 6), "Standard Spell Dampener"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 7), "Reinforced Spell Dampener"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 8), "Imbued Spell Dampener"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 9), "Demonic Spell Dampener"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 10), "Unstable Spell Augmenter"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 11), "Standard Spell Augmenter"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 12), "Reinforced Spell Augmenter"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 13), "Imbued Spell Augmenter"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEnhancement, 1, 14), "Demonic Spell Augmenter"); - - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellModifier, 1, 0), "Default Spell Modifier"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellModifier, 1, 1), "Offensive Spell Modifier"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellModifier, 1, 2), "Defensive Spell Modifier"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellModifier, 1, 3), "Environmental Spell Modifier"); - - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEffect, 1, 0), "Crucible of Fire"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEffect, 1, 1), "Ice Maker"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEffect, 1, 2), "Wind Generator"); - LanguageRegistry.addName(new ItemStack(ModBlocks.blockSpellEffect, 1, 3), "Earth Former"); - - LanguageRegistry.addName(ModBlocks.speedRune, "Speed Rune"); - LanguageRegistry.addName(ModBlocks.efficiencyRune, "Efficiency Rune"); - LanguageRegistry.addName(ModBlocks.runeOfSacrifice, "Rune of Sacrifice"); - LanguageRegistry.addName(ModBlocks.runeOfSelfSacrifice, "Rune of Self-sacrifice"); -// GameRegistry.registerBlock(lifeEssenceStill, "lifeEssenceStill"); -// GameRegistry.registerBlock(lifeEssenceFlowing, "lifeEssenceFlowing"); - //LanguageRegistry.addName(lifeEssenceStill, "Life Essence"); - LanguageRegistry.addName(ModItems.bucketLife, "Bucket of Life"); - LanguageRegistry.addName(ModBlocks.blockMasterStone, "Master Ritual Stone"); - LanguageRegistry.addName(ModBlocks.imperfectRitualStone, "Imperfect Ritual Stone"); - LanguageRegistry.addName(ModBlocks.ritualStone, "Ritual Stone"); - LanguageRegistry.addName(ModBlocks.armourForge, "Soul Armour Forge"); - LanguageRegistry.addName(ModBlocks.emptySocket, "Empty Socket"); - LanguageRegistry.addName(ModBlocks.bloodSocket, "Filled Socket"); - LanguageRegistry.addName(ModBlocks.bloodStoneBrick, "Bloodstone Brick"); - LanguageRegistry.addName(ModBlocks.largeBloodStoneBrick, "Large Bloodstone Brick"); - LanguageRegistry.addName(ModBlocks.blockHomHeart, "Spell Table"); - LanguageRegistry.addName(ModBlocks.blockPedestal, "Arcane Pedestal"); - LanguageRegistry.addName(ModBlocks.blockPlinth, "Arcane Plinth"); - LanguageRegistry.addName(ModBlocks.blockWritingTable, "Alchemic Chemistry Set"); - LanguageRegistry.addName(ModBlocks.blockTeleposer, "Teleposer"); - LanguageRegistry.addName(ModBlocks.spectralBlock, "Spectral Block"); - LanguageRegistry.addName(ModBlocks.blockBloodLight, "Blood Light"); - LanguageRegistry.addName(ModBlocks.blockConduit, "Spell Conduit"); - //TODO - + //GameRegistry.registerBlock(ModBlocks.blockSpellEffect,"blockSpellEffect"); ModBlocks.bloodRune.setHarvestLevel("pickaxe", 2); ModBlocks.speedRune.setHarvestLevel("pickaxe", 2); @@ -715,21 +574,6 @@ public class AlchemicalWizardry EntityRegistry.registerModEntity(EntityShadeElemental.class, "ShadeElemental", this.entityShadeElementalID, this, 120, 3, true); EntityRegistry.registerModEntity(EntityHolyElemental.class, "HolyElemental", this.entityHolyElementalID, this, 120, 3, true); //EntityRegistry.addSpawn(EntityFallenAngel.class, 5, 1, 5, EnumCreatureType.creature, BiomeGenBase.biomeList); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.FallenAngel.name", "en_US", "Fallen Angel"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.LowerGuardian.name", "en_US", "Lower Stone Guardian"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.BileDemon.name", "en_US", "Bile Demon"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.WingedFireDemon.name", "en_US", "Winged Fire Demon"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.SmallEarthGolem.name", "en_US", "Small Earth Golem"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.IceDemon.name", "en_US", "Ice Demon"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.BoulderFist.name", "en_US", "Boulder Fist"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.Shade.name", "en_US", "Shade"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.AirElemental.name", "en_US", "Air Elemental"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.WaterElemental.name", "en_US", "Water Elemental"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.EarthElemental.name", "en_US", "Earth Elemental"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.FireElemental.name", "en_US", "Fire Elemental"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.ShadeElemental.name", "en_US", "Shade Elemental"); - LanguageRegistry.instance().addStringLocalization("entity.AlchemicalWizardry.HolyElemental.name", "en_US", "Holy Elemental"); - LanguageRegistry.instance().addStringLocalization("itemGroup.tabBloodMagic", "en_US", "Blood Magic"); ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.standardBindingAgent), 1, 3, this.standardBindingAgentDungeonChance)); ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.mundanePowerCatalyst), 1, 1, this.mundanePowerCatalystDungeonChance)); ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST).addItem(new WeightedRandomChestContent(new ItemStack(ModItems.mundaneLengtheningCatalyst), 1, 1, this.mundaneLengtheningCatalystDungeonChance)); diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/ModBlocks.java b/1.7.2/java/WayofTime/alchemicalWizardry/ModBlocks.java index c92f9dd5..18cf8810 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/ModBlocks.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/ModBlocks.java @@ -60,7 +60,7 @@ public class ModBlocks efficiencyRune = new EfficiencyRune(); runeOfSacrifice = new RuneOfSacrifice(); runeOfSelfSacrifice = new RuneOfSelfSacrifice(); - AlchemicalWizardry.lifeEssenceFluid = new LifeEssence("Life Essence"); + blockTeleposer = new BlockTeleposer(); spectralBlock = new SpectralBlock(); ritualStone = new RitualStone(); @@ -81,12 +81,14 @@ public class ModBlocks blockSpellParadigm = new BlockSpellParadigm(); blockSpellModifier = new BlockSpellModifier(); blockSpellEnhancement = new BlockSpellEnhancement(); + + blockLifeEssence = new LifeEssenceBlock(); } - public static void registerBlocks() + public static void registerBlocksInPre() { + GameRegistry.registerBlock(ModBlocks.blockAltar, "Altar"); GameRegistry.registerBlock(ModBlocks.bloodRune, ItemBloodRuneBlock.class, "AlchemicalWizardry" + (ModBlocks.bloodRune.getUnlocalizedName().substring(5))); - GameRegistry.registerBlock(ModBlocks.blockAltar, "bloodAltar"); GameRegistry.registerBlock(ModBlocks.blockLifeEssence, "lifeEssence"); GameRegistry.registerBlock(ModBlocks.blockSpellParadigm, ItemSpellParadigmBlock.class, "AlchemicalWizardry" + (ModBlocks.blockSpellParadigm.getUnlocalizedName())); GameRegistry.registerBlock(ModBlocks.blockSpellEnhancement, ItemSpellEnhancementBlock.class,"AlchemicalWizardry" + (ModBlocks.blockSpellEnhancement.getUnlocalizedName())); @@ -114,4 +116,9 @@ public class ModBlocks GameRegistry.registerBlock(ModBlocks.blockBloodLight, "bloodLight"); GameRegistry.registerBlock(ModBlocks.blockConduit,"blockConduit"); } + + public static void registerBlocksInInit() + { + //GameRegistry.registerBlock(ModBlocks.blockLifeEssence, "lifeEssence"); + } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/client/ClientProxy.java b/1.7.2/java/WayofTime/alchemicalWizardry/client/ClientProxy.java index e9bf768f..48986b0f 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/client/ClientProxy.java +++ b/1.7.2/java/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,13 @@ 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.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.mob.RenderBileDemon; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderBoulderFist; import WayofTime.alchemicalWizardry.common.renderer.mob.RenderElemental; @@ -57,6 +60,7 @@ 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.TEWritingTable; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; @@ -103,15 +107,19 @@ public class ClientProxy extends CommonProxy RenderingRegistry.registerEntityRenderingHandler(EntityShadeElemental.class, new RenderElemental(new ModelElemental(), 0.5F)); //EntityRegistry.registerGlobalEntityID(EntityHolyElemental.class, "AlchemicalWizardry.HolyElemental", EntityRegistry.findGlobalUniqueEntityId(),0x40FF00, 0x0B610B); RenderingRegistry.registerEntityRenderingHandler(EntityHolyElemental.class, new RenderElemental(new ModelElemental(), 0.5F)); + ClientRegistry.bindTileEntitySpecialRenderer(TEAltar.class, new TEAltarRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TEPedestal.class, new RenderPedestal()); ClientRegistry.bindTileEntitySpecialRenderer(TEPlinth.class, new RenderPlinth()); ClientRegistry.bindTileEntitySpecialRenderer(TEWritingTable.class, new RenderWritingTable()); ClientRegistry.bindTileEntitySpecialRenderer(TEConduit.class, new RenderConduit()); ClientRegistry.bindTileEntitySpecialRenderer(TESpellEffectBlock.class, new RenderSpellEffectBlock()); + ClientRegistry.bindTileEntitySpecialRenderer(TESpellEnhancementBlock.class, new RenderSpellEnhancementBlock()); //Item Renderer stuff - //MinecraftForgeClient.registerItemRenderer(ModBlocks.blockConduit.blockID, new TEConduitItemRenderer()); - //MinecraftForgeClient.registerItemRenderer(ModBlocks.blockSpellEffect.blockID, new TESpellEffectBlockItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockConduit), new TEConduitItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellEffect), new TESpellEffectBlockItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellEnhancement), new TESpellEnhancementBlockItemRenderer()); + //RenderingRegistry.registerEntityRenderingHandler(FireProjectile.class, new RenderFireProjectile()); //RenderingRegistry.registerBlockHandler(new AltarRenderer()); } @@ -125,8 +133,8 @@ public class ClientProxy extends CommonProxy @Override public void InitRendering() { - ClientRegistry.bindTileEntitySpecialRenderer(TEAltar.class, new TEAltarRenderer()); - //MinecraftForgeClient.registerItemRenderer(ModBlocks.blockAltar.blockID, new TEAltarItemRenderer()); + + MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockAltar), new TEAltarItemRenderer()); //MinecraftForgeClient.registerItemRenderer(AlchemicalWizardry.blockWritingTable.blockID, new TEWritingTableItemRenderer()); } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java index 9f95230f..f492117c 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java @@ -6,6 +6,9 @@ import io.netty.channel.SimpleChannelInboundHandler; import java.util.EnumMap; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -21,6 +24,7 @@ import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.FMLEmbeddedChannel; import cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec; +import cpw.mods.fml.common.network.FMLOutboundHandler; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -47,7 +51,7 @@ public enum NewPacketHandler { // request a channel pair for IronChest from the network registry // Add the IronChestCodec as a member of both channel pipelines - this.channels = NetworkRegistry.INSTANCE.newChannel("BloodMagic", new TEAltarCodec(), new TEOrientableCodec(), new TEPedestalCodec(), new TEPlinthCodec(), new TESocketCodec()); + this.channels = NetworkRegistry.INSTANCE.newChannel("BloodMagic", new TEAltarCodec()); if (FMLCommonHandler.instance().getSide() == Side.CLIENT) { addClientHandler(); @@ -64,22 +68,17 @@ public enum NewPacketHandler private void addClientHandler() { FMLEmbeddedChannel clientChannel = this.channels.get(Side.CLIENT); - // These two lines find the existing codec (Ironchestcodec) and insert our message handler after it - // in the pipeline + String tileAltarCodec = clientChannel.findChannelHandlerNameForType(TEAltarCodec.class); - clientChannel.pipeline().addAfter(tileAltarCodec, "TEAltarHandler", new TEAltarMessageHandler()); - - String tileOrientableCodec = clientChannel.findChannelHandlerNameForType(TEOrientableCodec.class); - clientChannel.pipeline().addAfter(tileOrientableCodec, "TEOrientableHandler", new TEOrientableMessageHandler()); - - String tilePedestalCodec = clientChannel.findChannelHandlerNameForType(TEPedestalCodec.class); - clientChannel.pipeline().addAfter(tilePedestalCodec, "TEPedestalHandler", new TEPedestalMessageHandler()); - - String tilePlinthCodec = clientChannel.findChannelHandlerNameForType(TEPlinthCodec.class); - clientChannel.pipeline().addAfter(tilePlinthCodec, "TEPlinthHandler", new TEPlinthMessageHandler()); - - String tileSocketCodec = clientChannel.findChannelHandlerNameForType(TESocketCodec.class); - clientChannel.pipeline().addAfter(tileSocketCodec, "TESocketHandler", new TESocketMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "ClientHandler", new TEAltarMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "TEOrientableHandler", new TEOrientableMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "TEPedestalHandler", new TEPedestalMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "TEPlinthHandler", new TEPlinthMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "TESocketHandler", new TESocketMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "TETeleposerHandler", new TETeleposerMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "TEWritingTableHandler", new TEWritingTableMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "ParticleHandler", new ParticleMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "VelocityHandler", new VelocityMessageHandler()); } @@ -101,6 +100,12 @@ public enum NewPacketHandler if (te instanceof TEAltar) { TEAltar altar = (TEAltar) te; + + System.out.println("x: " + msg.x + ", y: " + msg.y + ", z: " + msg.z); + for(int in : msg.items) + { + System.out.println("" + in); + } altar.handlePacketData(msg.items, msg.fluids, msg.capacity); } @@ -203,8 +208,40 @@ public enum NewPacketHandler } } } + + private static class ParticleMessageHandler extends SimpleChannelInboundHandler + { + @Override + protected void channelRead0(ChannelHandlerContext ctx, ParticleMessage msg) throws Exception + { + World world = AlchemicalWizardry.proxy.getClientWorld(); + + world.spawnParticle(msg.particle, msg.xCoord, msg.yCoord, msg.zCoord, msg.xVel, msg.yVel, msg.zVel); + } + } + + private static class VelocityMessageHandler extends SimpleChannelInboundHandler + { + @Override + protected void channelRead0(ChannelHandlerContext ctx, VelocityMessage msg) throws Exception + { + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + + if(player!=null) + { + player.motionX = msg.xVel; + player.motionY = msg.yVel; + player.motionZ = msg.zVel; + } + } + } - public static class TEAltarMessage + public static class BMMessage + { + int index; + } + + public static class TEAltarMessage extends BMMessage { int x; int y; @@ -215,7 +252,7 @@ public enum NewPacketHandler int capacity; } - public static class TEOrientableMessage + public static class TEOrientableMessage extends BMMessage { int x; int y; @@ -225,7 +262,7 @@ public enum NewPacketHandler int output; } - public static class TEPedestalMessage + public static class TEPedestalMessage extends BMMessage { int x; int y; @@ -234,7 +271,7 @@ public enum NewPacketHandler int[] items; } - public static class TEPlinthMessage + public static class TEPlinthMessage extends BMMessage { int x; int y; @@ -243,7 +280,7 @@ public enum NewPacketHandler int[] items; } - public static class TESocketMessage + public static class TESocketMessage extends BMMessage { int x; int y; @@ -252,7 +289,7 @@ public enum NewPacketHandler int[] items; } - public static class TETeleposerMessage + public static class TETeleposerMessage extends BMMessage { int x; int y; @@ -261,7 +298,7 @@ public enum NewPacketHandler int[] items; } - public static class TEWritingTableMessage + public static class TEWritingTableMessage extends BMMessage { int x; int y; @@ -269,344 +306,385 @@ public enum NewPacketHandler int[] items; } + + public static class ParticleMessage extends BMMessage + { + String particle; + + double xCoord; + double yCoord; + double zCoord; + + double xVel; + double yVel; + double zVel; + } + + public static class VelocityMessage extends BMMessage + { + double xVel; + double yVel; + double zVel; + } - private class TEAltarCodec extends FMLIndexedMessageToMessageCodec + private class TEAltarCodec extends FMLIndexedMessageToMessageCodec { public TEAltarCodec() { addDiscriminator(0, TEAltarMessage.class); + addDiscriminator(1, TEOrientableMessage.class); + addDiscriminator(2, TEPedestalMessage.class); + addDiscriminator(3, TEPlinthMessage.class); + addDiscriminator(4, TESocketMessage.class); + addDiscriminator(5, TETeleposerMessage.class); + addDiscriminator(6, TEWritingTableMessage.class); + addDiscriminator(7, ParticleMessage.class); + addDiscriminator(8, VelocityMessage.class); } @Override - public void encodeInto(ChannelHandlerContext ctx, TEAltarMessage msg, ByteBuf target) throws Exception + public void encodeInto(ChannelHandlerContext ctx, BMMessage msg, ByteBuf target) throws Exception { - target.writeInt(msg.x); - target.writeInt(msg.y); - target.writeInt(msg.z); + target.writeInt(msg.index); + + switch(msg.index) + { + case 0: + target.writeInt(((TEAltarMessage)msg).x); + target.writeInt(((TEAltarMessage)msg).y); + target.writeInt(((TEAltarMessage)msg).z); - target.writeBoolean(msg.items != null); - if (msg.items != null) - { - int[] items = msg.items; - for (int j = 0; j < items.length; j++) + target.writeBoolean(((TEAltarMessage)msg).items != null); + if (((TEAltarMessage)msg).items != null) { - int i = items[j]; - target.writeInt(i); + int[] items = ((TEAltarMessage)msg).items; + for (int j = 0; j < items.length; j++) + { + int i = items[j]; + target.writeInt(i); + System.out.println("" + i); + } } - } - - if(msg.fluids != null) - { - int[] fluids = msg.fluids; - for (int j = 0; j < fluids.length; j++) + + target.writeBoolean(((TEAltarMessage)msg).fluids != null); + if(((TEAltarMessage)msg).fluids != null) { - int i = fluids[j]; - target.writeInt(i); + int[] fluids = ((TEAltarMessage)msg).fluids; + for (int j = 0; j < fluids.length; j++) + { + int i = fluids[j]; + target.writeInt(i); + } } - } - - target.writeInt(msg.capacity); + + target.writeInt(((TEAltarMessage)msg).capacity); + + break; + + case 1: + target.writeInt(((TEOrientableMessage)msg).x); + target.writeInt(((TEOrientableMessage)msg).y); + target.writeInt(((TEOrientableMessage)msg).z); + + target.writeInt(((TEOrientableMessage)msg).input); + target.writeInt(((TEOrientableMessage)msg).output); + + break; + + case 2: + target.writeInt(((TEPedestalMessage)msg).x); + target.writeInt(((TEPedestalMessage)msg).y); + target.writeInt(((TEPedestalMessage)msg).z); + + target.writeBoolean(((TEPedestalMessage)msg).items != null); + if (((TEPedestalMessage)msg).items != null) + { + int[] items = ((TEPedestalMessage)msg).items; + for (int j = 0; j < items.length; j++) + { + int i = items[j]; + target.writeInt(i); + } + } + + break; + + case 3: + target.writeInt(((TEPlinthMessage)msg).x); + target.writeInt(((TEPlinthMessage)msg).y); + target.writeInt(((TEPlinthMessage)msg).z); + + target.writeBoolean(((TEPlinthMessage)msg).items != null); + if (((TEPlinthMessage)msg).items != null) + { + int[] items = ((TEPlinthMessage)msg).items; + for (int j = 0; j < items.length; j++) + { + int i = items[j]; + target.writeInt(i); + } + } + + break; + + case 4: + target.writeInt(((TESocketMessage)msg).x); + target.writeInt(((TESocketMessage)msg).y); + target.writeInt(((TESocketMessage)msg).z); + + target.writeBoolean(((TESocketMessage)msg).items != null); + if (((TESocketMessage)msg).items != null) + { + int[] items = ((TESocketMessage)msg).items; + for (int j = 0; j < items.length; j++) + { + int i = items[j]; + target.writeInt(i); + } + } + + break; + + case 5: + target.writeInt(((TETeleposerMessage)msg).x); + target.writeInt(((TETeleposerMessage)msg).y); + target.writeInt(((TETeleposerMessage)msg).z); + + target.writeBoolean(((TETeleposerMessage)msg).items != null); + if (((TETeleposerMessage)msg).items != null) + { + int[] items = ((TETeleposerMessage)msg).items; + for (int j = 0; j < items.length; j++) + { + int i = items[j]; + target.writeInt(i); + } + } + + break; + + case 6: + target.writeInt(((TEWritingTableMessage)msg).x); + target.writeInt(((TEWritingTableMessage)msg).y); + target.writeInt(((TEWritingTableMessage)msg).z); + + target.writeBoolean(((TEWritingTableMessage)msg).items != null); + if (((TEWritingTableMessage)msg).items != null) + { + int[] items = ((TEWritingTableMessage)msg).items; + for (int j = 0; j < items.length; j++) + { + int i = items[j]; + target.writeInt(i); + } + } + + break; + + case 7: + String str = ((ParticleMessage)msg).particle; + target.writeInt(str.length()); + for(int i=0; i - { - public TEOrientableCodec() - { - addDiscriminator(0, TEOrientableMessage.class); - } - - @Override - public void encodeInto(ChannelHandlerContext ctx, TEOrientableMessage msg, ByteBuf target) throws Exception - { - target.writeInt(msg.x); - target.writeInt(msg.y); - target.writeInt(msg.z); - target.writeInt(msg.input); - target.writeInt(msg.output); - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, TEOrientableMessage msg) - { - msg.x = dat.readInt(); - msg.y = dat.readInt(); - msg.z = dat.readInt(); - - msg.input = dat.readInt(); - msg.output = dat.readInt(); - } - } - - private class TEPedestalCodec extends FMLIndexedMessageToMessageCodec - { - public TEPedestalCodec() - { - addDiscriminator(0, TEPedestalMessage.class); - } - - @Override - public void encodeInto(ChannelHandlerContext ctx, TEPedestalMessage msg, ByteBuf target) throws Exception - { - target.writeInt(msg.x); - target.writeInt(msg.y); - target.writeInt(msg.z); - - target.writeBoolean(msg.items != null); - if (msg.items != null) - { - int[] items = msg.items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - target.writeInt(i); - } - } - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, TEPedestalMessage msg) - { - msg.x = dat.readInt(); - msg.y = dat.readInt(); - msg.z = dat.readInt(); - int typDat = dat.readByte(); - boolean hasStacks = dat.readBoolean(); - - msg.items = new int[TEPedestal.sizeInv*3]; - if (hasStacks) - { - msg.items = new int[TEPedestal.sizeInv*3]; - for (int i = 0; i < msg.items.length; i++) - { - msg.items[i] = dat.readInt(); - } - } - } - } - - private class TEPlinthCodec extends FMLIndexedMessageToMessageCodec - { - public TEPlinthCodec() - { - addDiscriminator(0, TEPlinthMessage.class); - } - - @Override - public void encodeInto(ChannelHandlerContext ctx, TEPlinthMessage msg, ByteBuf target) throws Exception - { - target.writeInt(msg.x); - target.writeInt(msg.y); - target.writeInt(msg.z); - - target.writeBoolean(msg.items != null); - if (msg.items != null) - { - int[] items = msg.items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - target.writeInt(i); - } - } - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, TEPlinthMessage msg) - { - msg.x = dat.readInt(); - msg.y = dat.readInt(); - msg.z = dat.readInt(); - int typDat = dat.readByte(); - boolean hasStacks = dat.readBoolean(); - - msg.items = new int[TEPlinth.sizeInv*3]; - if (hasStacks) - { - msg.items = new int[TEPlinth.sizeInv*3]; - for (int i = 0; i < msg.items.length; i++) - { - msg.items[i] = dat.readInt(); - } - } - } - } - - private class TESocketCodec extends FMLIndexedMessageToMessageCodec - { - public TESocketCodec() - { - addDiscriminator(0, TESocketMessage.class); - } - - @Override - public void encodeInto(ChannelHandlerContext ctx, TESocketMessage msg, ByteBuf target) throws Exception - { - target.writeInt(msg.x); - target.writeInt(msg.y); - target.writeInt(msg.z); - - target.writeBoolean(msg.items != null); - if (msg.items != null) - { - int[] items = msg.items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - target.writeInt(i); - } - } - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, TESocketMessage msg) - { - msg.x = dat.readInt(); - msg.y = dat.readInt(); - msg.z = dat.readInt(); - int typDat = dat.readByte(); - boolean hasStacks = dat.readBoolean(); - - msg.items = new int[TESocket.sizeInv*3]; - if (hasStacks) - { - msg.items = new int[TESocket.sizeInv*3]; - for (int i = 0; i < msg.items.length; i++) - { - msg.items[i] = dat.readInt(); - } - } - } - } - - private class TETeleposerCodec extends FMLIndexedMessageToMessageCodec - { - public TETeleposerCodec() - { - addDiscriminator(0, TETeleposerMessage.class); - } - - @Override - public void encodeInto(ChannelHandlerContext ctx, TETeleposerMessage msg, ByteBuf target) throws Exception - { - target.writeInt(msg.x); - target.writeInt(msg.y); - target.writeInt(msg.z); - - target.writeBoolean(msg.items != null); - if (msg.items != null) - { - int[] items = msg.items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - target.writeInt(i); - } - } - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, TETeleposerMessage msg) - { - msg.x = dat.readInt(); - msg.y = dat.readInt(); - msg.z = dat.readInt(); - int typDat = dat.readByte(); - boolean hasStacks = dat.readBoolean(); - - msg.items = new int[TETeleposer.sizeInv*3]; - if (hasStacks) - { - msg.items = new int[TETeleposer.sizeInv*3]; - for (int i = 0; i < msg.items.length; i++) - { - msg.items[i] = dat.readInt(); - } - } - } - } - - private class TEWritingTableCodec extends FMLIndexedMessageToMessageCodec - { - public TEWritingTableCodec() - { - addDiscriminator(0, TEWritingTableMessage.class); - } - - @Override - public void encodeInto(ChannelHandlerContext ctx, TEWritingTableMessage msg, ByteBuf target) throws Exception - { - target.writeInt(msg.x); - target.writeInt(msg.y); - target.writeInt(msg.z); - - target.writeBoolean(msg.items != null); - if (msg.items != null) - { - int[] items = msg.items; - for (int j = 0; j < items.length; j++) - { - int i = items[j]; - target.writeInt(i); - } - } - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, TEWritingTableMessage msg) - { - msg.x = dat.readInt(); - msg.y = dat.readInt(); - msg.z = dat.readInt(); - int typDat = dat.readByte(); - boolean hasStacks = dat.readBoolean(); - - msg.items = new int[TEWritingTable.sizeInv*3]; - if (hasStacks) - { - msg.items = new int[TEWritingTable.sizeInv*3]; - for (int i = 0; i < msg.items.length; i++) - { - msg.items[i] = dat.readInt(); - } - } - } - } - //Packets to be obtained public static Packet getPacket(TEAltar tileAltar) { TEAltarMessage msg = new TEAltarMessage(); + msg.index = 0; msg.x = tileAltar.xCoord; msg.y = tileAltar.yCoord; msg.z = tileAltar.zCoord; @@ -620,6 +698,7 @@ public enum NewPacketHandler public static Packet getPacket(TEOrientable tileOrientable) { TEOrientableMessage msg = new TEOrientableMessage(); + msg.index = 1; msg.x = tileOrientable.xCoord; msg.y = tileOrientable.yCoord; msg.z = tileOrientable.zCoord; @@ -632,6 +711,7 @@ public enum NewPacketHandler public static Packet getPacket(TEPedestal tilePedestal) { TEPedestalMessage msg = new TEPedestalMessage(); + msg.index = 2; msg.x = tilePedestal.xCoord; msg.y = tilePedestal.yCoord; msg.z = tilePedestal.zCoord; @@ -643,6 +723,7 @@ public enum NewPacketHandler public static Packet getPacket(TEPlinth tilePlinth) { TEPlinthMessage msg = new TEPlinthMessage(); + msg.index = 3; msg.x = tilePlinth.xCoord; msg.y = tilePlinth.yCoord; msg.z = tilePlinth.zCoord; @@ -654,6 +735,7 @@ public enum NewPacketHandler public static Packet getPacket(TESocket tileSocket) { TESocketMessage msg = new TESocketMessage(); + msg.index = 4; msg.x = tileSocket.xCoord; msg.y = tileSocket.yCoord; msg.z = tileSocket.zCoord; @@ -665,6 +747,7 @@ public enum NewPacketHandler public static Packet getPacket(TETeleposer tileTeleposer) { TETeleposerMessage msg = new TETeleposerMessage(); + msg.index = 5; msg.x = tileTeleposer.xCoord; msg.y = tileTeleposer.yCoord; msg.z = tileTeleposer.zCoord; @@ -676,6 +759,7 @@ public enum NewPacketHandler public static Packet getPacket(TEWritingTable tileWritingTable) { TEWritingTableMessage msg = new TEWritingTableMessage(); + msg.index = 6; msg.x = tileWritingTable.xCoord; msg.y = tileWritingTable.yCoord; msg.z = tileWritingTable.zCoord; @@ -683,4 +767,50 @@ public enum NewPacketHandler return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); } + + public static Packet getParticlePacket(String str, double xCoord, double yCoord, double zCoord, double xVel, double yVel, double zVel) + { + ParticleMessage msg = new ParticleMessage(); + msg.index = 7; + msg.particle = str; + msg.xCoord = xCoord; + msg.yCoord = yCoord; + msg.zCoord = zCoord; + msg.xVel = xVel; + msg.yVel = yVel; + msg.zVel = zVel; + + return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); + } + + public static Packet getVelSettingPacket(double xVel, double yVel, double zVel) + { + VelocityMessage msg = new VelocityMessage(); + msg.index = 8; + msg.xVel = xVel; + msg.yVel = yVel; + msg.zVel = zVel; + + return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); + } + + public void sendTo(Packet message, EntityPlayerMP player) + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.PLAYER); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(player); + this.channels.get(Side.SERVER).writeAndFlush(message); + } + + public void sendToAll(Packet message) + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALL); + this.channels.get(Side.SERVER).writeAndFlush(message); + } + + public void sendToAllAround(Packet message, NetworkRegistry.TargetPoint point) + { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(point); + this.channels.get(Side.SERVER).writeAndFlush(message); + } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/alchemy/AlchemyPotionHandlerComponent.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/alchemy/AlchemyPotionHandlerComponent.java index 58c6120e..79765ee4 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/alchemy/AlchemyPotionHandlerComponent.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/alchemy/AlchemyPotionHandlerComponent.java @@ -24,11 +24,11 @@ public class AlchemyPotionHandlerComponent { if (itemStack.getItem() instanceof ItemBlock) { - return comparedStack.equals(itemStack) && comparedStack.getItemDamage() == itemStack.getItemDamage(); + return comparedStack.getItem().equals(itemStack.getItem()) && comparedStack.getItemDamage() == itemStack.getItemDamage(); } } else if (!(itemStack.getItem() instanceof ItemBlock)) { - return comparedStack.equals(itemStack) && comparedStack.getItemDamage() == itemStack.getItemDamage(); + return comparedStack.getItem().equals(itemStack.getItem()) && comparedStack.getItemDamage() == itemStack.getItemDamage(); } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/alchemy/AlchemyRecipe.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/alchemy/AlchemyRecipe.java index a3423fa3..f54ebb3d 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/alchemy/AlchemyRecipe.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/alchemy/AlchemyRecipe.java @@ -104,7 +104,7 @@ public class AlchemyRecipe continue; } - if ((checkedItemStack.getItemDamage() == recipeItemStack.getItemDamage() || OreDictionary.WILDCARD_VALUE == recipeItemStack.getItemDamage()) && checkedItemStack.equals(recipeItemStack)) + if ((checkedItemStack.getItemDamage() == recipeItemStack.getItemDamage() || OreDictionary.WILDCARD_VALUE == recipeItemStack.getItemDamage()) && checkedItemStack.getItem()==recipeItemStack.getItem()) { test = true; checkList[j] = true; @@ -119,44 +119,6 @@ public class AlchemyRecipe } return true; -// if(slottedBloodOrbLevel=maximum) + { + return; + } + data.currentEssence = Math.min(maximum, data.currentEssence + amount); data.markDirty(); } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEffectBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEffectBlock.java index 5b06e576..2c5e106d 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEffectBlock.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemSpellEffectBlock.java @@ -41,7 +41,7 @@ public class ItemSpellEffectBlock extends ItemBlock break; case 3: - name = "water"; + name = "earth"; break; default: diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemSpellModifierBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemSpellModifierBlock.java index 5be244a4..acd47516 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemSpellModifierBlock.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/ItemSpellModifierBlock.java @@ -26,18 +26,22 @@ public class ItemSpellModifierBlock extends ItemBlock { case 0: { - name = "power"; + name = "default"; break; } case 1: { - name = "efficiency"; + name = "offensive"; break; } case 2: - name = "potency"; + name = "defensive"; + break; + + case 3: + name = "environmental"; break; default: diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/DivinationSigil.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/DivinationSigil.java index 082a5472..dfcce632 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/DivinationSigil.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/items/sigil/DivinationSigil.java @@ -68,7 +68,7 @@ public class DivinationSigil extends Item implements ArmourUpgrade //PacketDispatcher.sendPacketToServer(PacketHandler.getPacket(ownerName)); int currentEssence = EnergyItems.getCurrentEssence(ownerName); - par3EntityPlayer.addChatMessage(new ChatComponentText("Current Essence: " + 0)); + par3EntityPlayer.addChatMessage(new ChatComponentText("Current Essence: " + EnergyItems.getCurrentEssence(ownerName))); return par1ItemStack; } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java new file mode 100644 index 00000000..ae2b9f2c --- /dev/null +++ b/1.7.2/java/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/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.java new file mode 100644 index 00000000..76d1a176 --- /dev/null +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TESpellEnhancementBlockItemRenderer.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.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"; + } + return "alchemicalwizardry:textures/models/SpellEnhancementPower1.png"; + } +} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelSpellEnhancementBlock.java new file mode 100644 index 00000000..f56dca24 --- /dev/null +++ b/1.7.2/java/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.util.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/1.7.2/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java index e0c5d819..b467590f 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java @@ -80,7 +80,7 @@ public class RitualEffectCrushing extends RitualEffect Block block = world.getBlock(x + i, y + j, z + k); int meta = world.getBlockMetadata(x + i, y + j, z + k); - if (block != null) + if (block != null && !world.isAirBlock(x + i, y + j, z + k)) { if ((block.equals(ModBlocks.ritualStone) || block.equals(ModBlocks.blockMasterStone))) { 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 152493f8..ec812f42 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 @@ -3,9 +3,11 @@ package WayofTime.alchemicalWizardry.common.spell.complex.effect; import java.util.List; import java.util.Random; +import WayofTime.alchemicalWizardry.common.NewPacketHandler; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -121,7 +123,10 @@ public class SpellHelper public static void sendParticleToPlayer(EntityPlayer player, String str, double xCoord, double yCoord, double zCoord, double xVel, double yVel, double zVel) { - + if(player instanceof EntityPlayerMP) + { + NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getParticlePacket(str, xCoord, yCoord, zCoord, xVel, yVel, zVel),(EntityPlayerMP) player); + } } public static void sendIndexedParticleToPlayer(EntityPlayer player, int index, double xCoord, double yCoord, double zCoord) @@ -130,10 +135,13 @@ public class SpellHelper { case 1: SpellHelper.sendParticleToPlayer(player, "mobSpell", xCoord + 0.5D + rand.nextGaussian() / 8, yCoord + 1.1D, zCoord + 0.5D + rand.nextGaussian() / 8, 0.5117D, 0.0117D, 0.0117D); + break; case 2: SpellHelper.sendParticleToPlayer(player, "reddust", xCoord + 0.5D + rand.nextGaussian() / 8, yCoord + 1.1D, zCoord + 0.5D + rand.nextGaussian() / 8, 0.82D, 0.941D, 0.91D); + break; case 3: SpellHelper.sendParticleToPlayer(player, "mobSpell", xCoord + 0.5D + rand.nextGaussian() / 8, yCoord + 1.1D, zCoord + 0.5D + rand.nextGaussian() / 8, 1.0D, 0.371D, 0.371D); + break; case 4: float f = (float) 1.0F; float f1 = f * 0.6F + 0.4F; @@ -144,6 +152,7 @@ public class SpellHelper { SpellHelper.sendParticleToPlayer(player,"reddust", xCoord + Math.random() - Math.random(), yCoord + Math.random() - Math.random(), zCoord + Math.random() - Math.random(), f1, f2, f3); } + break; } } @@ -179,6 +188,9 @@ public class SpellHelper public static void setPlayerSpeedFromServer(EntityPlayer player, double motionX, double motionY, double motionZ) { - + if(player instanceof EntityPlayerMP) + { + NewPacketHandler.INSTANCE.sendTo(NewPacketHandler.getVelSettingPacket(motionX, motionY, motionZ), (EntityPlayerMP) player); + } } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java index c1353871..7312c391 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java @@ -11,8 +11,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; @@ -32,6 +34,7 @@ import WayofTime.alchemicalWizardry.common.altarRecipeRegistry.AltarRecipeRegist import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.AltarUpgradeComponent; import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.UpgradedAltars; import WayofTime.alchemicalWizardry.common.items.EnergyBattery; +import WayofTime.alchemicalWizardry.common.items.EnergyItems; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFluidHandler @@ -682,10 +685,11 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui @Override public Packet getDescriptionPacket() { - return NewPacketHandler.getPacket(this); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + this.writeToNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 2, nbttagcompound); } - public void handlePacketData(int[] intData, int[] fluidData, int capacity) { if (intData == null) @@ -1021,4 +1025,11 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui return sortList; } + + public void sendChatInfoToPlayer(EntityPlayer player) + { + player.addChatMessage(new ChatComponentText("Altar's Current Essence: " + this.fluid.amount+ "LP")); + player.addChatMessage(new ChatComponentText("Altar's Current Tier: " + UpgradedAltars.isAltarValid(worldObj, xCoord, yCoord, zCoord))); + player.addChatMessage(new ChatComponentText("Capacity: " + this.getCapacity() + "LP")); + } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEConduit.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEConduit.java index 4b5fe8bc..a4d475fb 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEConduit.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEConduit.java @@ -24,12 +24,6 @@ public class TEConduit extends TESpellBlock public void updateEntity() { - } - - @Override - public Packet getDescriptionPacket() - { - return super.getDescriptionPacket(); } @Override diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEHomHeartRenderer.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEHomHeartRenderer.java deleted file mode 100644 index 859a3b9c..00000000 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEHomHeartRenderer.java +++ /dev/null @@ -1,13 +0,0 @@ -package WayofTime.alchemicalWizardry.common.tileEntity; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; - -public class TEHomHeartRenderer extends TileEntitySpecialRenderer -{ - @Override - public void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float f) - { - // TODO Auto-generated method stub - } -} diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEOrientable.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEOrientable.java index d156f352..991f6e64 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEOrientable.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEOrientable.java @@ -2,6 +2,7 @@ package WayofTime.alchemicalWizardry.common.tileEntity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import WayofTime.alchemicalWizardry.common.NewPacketHandler; @@ -88,8 +89,9 @@ public class TEOrientable extends TileEntity implements IOrientable @Override public Packet getDescriptionPacket() { - return NewPacketHandler.getPacket(this); + return NewPacketHandler.getPacket(this); } + public boolean isSideRendered(ForgeDirection side) { diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java index c49c520a..d83006cc 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPedestal.java @@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.Constants; import WayofTime.alchemicalWizardry.common.NewPacketHandler; diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java index 4995d574..efb02a9d 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TEPlinth.java @@ -12,6 +12,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.Constants; import net.minecraftforge.oredict.OreDictionary; diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java index c98638c4..9f43b483 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TESocket.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.Constants; import WayofTime.alchemicalWizardry.common.NewPacketHandler; diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEnhancementBlock.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEnhancementBlock.java index e6110498..d40004b6 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEnhancementBlock.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TESpellEnhancementBlock.java @@ -99,4 +99,17 @@ public class TESpellEnhancementBlock extends TESpellBlock { } + + @Override + 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"; + + } + return "alchemicalwizardry:textures/models/SpellEnhancementPower1.png"; + } } diff --git a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java index 26239d1c..e1ae21fc 100644 --- a/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java +++ b/1.7.2/java/WayofTime/alchemicalWizardry/common/tileEntity/TETeleposer.java @@ -11,6 +11,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; @@ -309,8 +310,8 @@ public class TETeleposer extends TileEntity implements IInventory @Override public Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); + { + return NewPacketHandler.getPacket(this); } public void handlePacketData(int[] intData) diff --git a/1.7.2/resources/assets/alchemicalwizardry/lang/en_US.lang b/1.7.2/resources/assets/alchemicalwizardry/lang/en_US.lang new file mode 100644 index 00000000..df2c8853 --- /dev/null +++ b/1.7.2/resources/assets/alchemicalwizardry/lang/en_US.lang @@ -0,0 +1,132 @@ +#Block Localization +tile.bloodAltar.name=Blood Altar +tile.bloodRune.blank.name=Blood Rune +tile.bloodRune.fill.name=Rune of Augmented Capacity +tile.bloodRune.empty.name=Rune of Dislocation +tile.bloodRune.test.name=Rune of the Orb +tile.speedRune.name=Speed Rune +tile.efficiencyRune.name=Efficiency Rune +tile.runeOfSacrifice.name=Rune of Sacrifice +tile.runeOfSelfSacrifice.name=Rune of Self-Sacrifice +tile.ritualStone.name=Ritual Stone +tile.blockMasterStone.name=Master Ritual Stone +tile.bloodSocket.name=Filled Socket +tile.imperfectRitualStone.name=Imperfect Ritual Stone +tile.armourForge.name=Soul Armour Forge +tile.emptySocket.name=Empty Socket +tile.bloodStoneBrick.name=Bloodstone Brick +tile.largeBloodStoneBrick.name=Large Bloodstone Brick +tile.blockWritingTable.name=Alchemic Chemistry Set +tile.blockHomHeart.name=Spell Table +tile.bloodPedestal.name=Arcane Pedestal +tile.bloodPlinth.name=Arcane Plinth +tile.bloodTeleposer.name=Teleposer +tile.blockConduit.name=Spell Conduit +tile.blockSpellParadigm.projectile.name=Particle Generator +tile.blockSpellParadigm.self.name=Self Augmentator +tile.blockSpellParadigm.melee.name=Melee Aggregator +tile.blockSpellEnhancement.power1.name=Unstable Spell Empowerer +tile.blockSpellEnhancement.power2.name=Standard Spell Empowerer +tile.blockSpellEnhancement.power3.name=Reinforced Spell Empowerer +tile.blockSpellEnhancement.power4.name=Imbued Spell Empowerer +tile.blockSpellEnhancement.power5.name=Demonic Spell Empowerer +tile.blockSpellEnhancement.cost1.name=Unstable Spell Dampener +tile.blockSpellEnhancement.cost2.name=Standard Spell Dampener +tile.blockSpellEnhancement.cost3.name=Reinforced Spell Dampener +tile.blockSpellEnhancement.cost4.name=Imbued Spell Dampener +tile.blockSpellEnhancement.cost5.name=Demonic Spell Dampener +tile.blockSpellEnhancement.potency1.name=Unstable Spell Augmentor +tile.blockSpellEnhancement.potency2.name=Standard Spell Augmentor +tile.blockSpellEnhancement.potency3.name=Reinforced Spell Augmentor +tile.blockSpellEnhancement.potency4.name=Imbued Spell Augmentor +tile.blockSpellEnhancement.potency5.name=Demonic Spell Augmentor +tile.blockSpellModifier.default.name=Default Spell Modifier +tile.blockSpellModifier.offensive.name=Offensive Spell Modifier +tile.blockSpellModifier.defensive.name=Defensive Spell Modifier +tile.blockSpellModifier.environmental.name=Environmental Spell Modifier +tile.blockSpellEffect.fire.name=Crucible of Fire +tile.blockSpellEffect.ice.name=Ice Maker +tile.blockSpellEffect.wind.name=Wind Generator +tile.blockSpellEffect.earth.name=Earth Former + +#Item Localization +item.weakBloodOrb.name=Weak Blood Orb +item.apprenticeBloodOrb.name=Apprentice Blood Orb +item.magicianBloodOrb.name=Magician's Blood Orb +item.masterBloodOrb.name=Master Blood Orb +item.archmageBloodOrb.name=Archamge's Blood Orb +item.energyBlast.name=Energy Blaster +item.energySword.name=Bound Blade +item.lavaCrystal.name=Lava Crystal +item.waterSigil.name=Water Sigil +item.lavaSigil.name=Lava Sigil +item.voidSigil.name=Void Sigil +item.blankSlate.name=Blank Slate +item.reinforcedSlate.name=Reinforced Slate +item.sacrificialDagger.name=Sacrificial Knife +item.daggerOfSacrifice.name=Dagger of Sacrifice +item.airSigil.name=Air Sigil +item.sigilOfTheFastMiner.name=Sigil of the Fast Miner +item.sigilOfElementalAffinity.name=Sigil of Elemental Affinity +item.sigilOfHaste.name=Sigil of Haste +item.sigilOfHolding.name=Sigil of Holding +item.divinationSigil.name=Divination Sigil +item.waterScribeTool.name=Elemental Inscription Tool: Water +item.fireScribeTool.name=Elemental Inscription Tool: Fire +item.earthScribeTool.name=Elemental Inscription Tool: Earth +item.airScribeTool.name=Elemental Inscription Tool: Air +item.duskScribeTool.name=Elemental Inscription Tool: Dusk +item.activationCrystalWeak.name=Weak Activation Crystal +item.activationCrystalAwakened.name=Awakened Activation Crystal +item.boundPickaxe.name=Bound Pickaxe +item.boundAxe.name=Bound Axe +item.boundShovel.name=Bound Shovel +item.boundHelmet.name=Bound Helmet +item.boundPlate.name=Bound Plate +item.boundLeggings.name=Bound Leggings +item.boundBoots.name=Bound Boots +item.weakBloodShard.name=Weak Blood Shard +item.growthSigil.name=Sigil of the Green Grove +item.blankSpell.name=Unbound Crystal +item.alchemyFlask.name=Potion Flask +item.standardBindingAgent.name=Standard Binding Agent +item.mundanePowerCatalyst.name=Mundane Power Catalyst +item.averagePowerCatalyst.name=Average Power Catalyst +item.greaterPowerCatalyst.name=Greater Power Catalyst +item.mundaneLengtheningCatalyst.name=Mundane Lengthening Catalyst +item.averageLengtheningCatalyst.name=Average Lengthening Catalyst +item.greaterLengtheningCatalyst.name=Greater Lengthening Catalyst +item.incendium.name=Incendium +item.magicales.name=Magicales +item.sanctus.name=Sanctus +item.aether.name=Aether +item.simpleCatalyst.name=Simple Catalyst +item.crepitous.name=Crepitous +item.crystallos.name=Crystallos +item.terrae.name=Terrae +item.aquasalus.name=Aquasalus +item.tennebrae.name=Tennebrae +item.demonBloodShard.name=Demon Blood Shard +item.sigilOfWind.name=Sigil of the Whirlwind +item.telepositionFocus.name=Teleposition Focus +item.enhancedTelepositionFocus.name=Enhanced Teleposition Focus +item.reinforcedTelepositionFocus.name=Reinforced Teleposition Focus +item.demonicTelepositionFocus.name=Demonic Teleposition Focus +item.imbuedSlate.name=Imbued Slate +item.demonicSlate.name=Demonic Slate +item.sigilOfTheBridge.name=Sigil of the Phantom Bridge +item.armourInhibitor.name=Armour Inhibitor +item.cheatyItem.name=Orb of Testing +item.weakFillingAgent.name=Weak Filling Agent +item.standardFillingAgent.name=Standard Filling Agent +item.enhancedFillingAgent.name=Enhanced Filling Agent +item.weakBindingAgent.name=Weak Binding Agent +item.ritualDiviner.name=Ritual Diviner +item.sigilOfMagnetism.name=Sigil of Magnetism +item.itemDiabloKey.name=Key of Binding +item.energyBazooka.name=Energy Bazooka +item.bloodLightSigil.name=Sigil of the Blood Lamp +item.itemComplexSpellCrystal.name=[WIP] Complex Spell Crystal + +#Creative Tab +itemGroup.tabBloodMagic=Blood Magic \ No newline at end of file diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower1.png b/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ebb892fbe7a833d2dc14537fce64aade0d87cd GIT binary patch literal 4387 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 literal 0 HcmV?d00001 diff --git a/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png b/1.7.2/resources/assets/alchemicalwizardry/textures/models/SpellEnhancementPower2.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca6c0cc3d2305ae41e1299e3539969650a5aecb GIT binary patch literal 3718 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 kE3zUhvLY+8B1