diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java index 69d11348..0e1b719c 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/AlchemicalWizardry.java @@ -33,6 +33,7 @@ import net.minecraftforge.oredict.RecipeSorter.Category; import thaumcraft.api.ItemApi; import WayofTime.alchemicalWizardry.api.alchemy.AlchemicalPotionCreationHandler; import WayofTime.alchemicalWizardry.api.alchemy.AlchemyRecipeRegistry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.altarRecipeRegistry.AltarRecipeRegistry; import WayofTime.alchemicalWizardry.api.bindingRegistry.BindingRegistry; import WayofTime.alchemicalWizardry.api.harvest.HarvestRegistry; @@ -69,7 +70,9 @@ import WayofTime.alchemicalWizardry.common.items.ItemRitualDiviner; import WayofTime.alchemicalWizardry.common.items.sigil.SigilOfHolding; import WayofTime.alchemicalWizardry.common.items.thaumcraft.ItemSanguineArmour; import WayofTime.alchemicalWizardry.common.potion.PotionBoost; +import WayofTime.alchemicalWizardry.common.potion.PotionDeaf; import WayofTime.alchemicalWizardry.common.potion.PotionDrowning; +import WayofTime.alchemicalWizardry.common.potion.PotionFeatherFall; import WayofTime.alchemicalWizardry.common.potion.PotionFireFuse; import WayofTime.alchemicalWizardry.common.potion.PotionFlameCloak; import WayofTime.alchemicalWizardry.common.potion.PotionFlight; @@ -104,6 +107,7 @@ import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLeap; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectLifeConduit; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectMagnetic; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSoulBound; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSupression; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectUnbinding; @@ -121,7 +125,9 @@ import WayofTime.alchemicalWizardry.common.spell.simple.SpellWateryGrave; import WayofTime.alchemicalWizardry.common.spell.simple.SpellWindGust; import WayofTime.alchemicalWizardry.common.summoning.SummoningHelperAW; import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorRegistry; +import WayofTime.alchemicalWizardry.common.tileEntity.TEAlchemicCalcinator; import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; +import WayofTime.alchemicalWizardry.common.tileEntity.TEBellJar; import WayofTime.alchemicalWizardry.common.tileEntity.TEConduit; import WayofTime.alchemicalWizardry.common.tileEntity.TEDemonPortal; import WayofTime.alchemicalWizardry.common.tileEntity.TEHomHeart; @@ -184,6 +190,8 @@ public class AlchemicalWizardry public static Potion customPotionPlanarBinding; public static Potion customPotionSoulFray; public static Potion customPotionSoulHarden; + public static Potion customPotionDeaf; + public static Potion customPotionFeatherFall; public static int customPotionDrowningID; public static int customPotionBoostID; @@ -198,6 +206,8 @@ public class AlchemicalWizardry public static int customPotionPlanarBindingID; public static int customPotionSoulFrayID; public static int customPotionSoulHardenID; + public static int customPotionDeafID; + public static int customPotionFeatherFallID; public static boolean isThaumcraftLoaded; public static boolean isForestryLoaded; @@ -205,6 +215,7 @@ public class AlchemicalWizardry public static boolean wimpySettings; public static boolean respawnWithDebuff; public static boolean lockdownAltar; + public static boolean causeHungerWithRegen; public static List wellBlacklist; @@ -373,10 +384,11 @@ public class AlchemicalWizardry proxy.registerRenderers(); proxy.registerEntities(); proxy.registerEntityTrackers(); + proxy.registerEvents(); //ItemStacks used for crafting go here ItemStack lapisStack = new ItemStack(Items.dye,1,4); ItemStack lavaBucketStack = new ItemStack(Items.lava_bucket); - ItemStack cobblestoneStack = new ItemStack(Blocks.cobblestone); + ItemStack cobblestoneStack = new ItemStack(Blocks.cobblestone, 1, craftingConstant); ItemStack glassStack = new ItemStack(Blocks.glass, 1, craftingConstant); ItemStack ironIngotStack = new ItemStack(Items.iron_ingot); ItemStack diamondStack = new ItemStack(Items.diamond, 1, craftingConstant); @@ -557,6 +569,8 @@ public class AlchemicalWizardry customPotionPlanarBinding = (new PotionPlanarBinding(customPotionPlanarBindingID,true,0).setIconIndex(0,0).setPotionName("Planar Binding")); customPotionSoulFray = (new PotionSoulFray(customPotionSoulFrayID,true,0).setIconIndex(0,0).setPotionName("Soul Fray")); customPotionSoulHarden = (new PotionSoulHarden(customPotionSoulHardenID,false,0).setIconIndex(0,0).setPotionName("Soul Harden")); + customPotionDeaf = (new PotionDeaf(customPotionDeafID,true,0).setIconIndex(0,0).setPotionName("Deafness")); + customPotionFeatherFall = (new PotionFeatherFall(customPotionFeatherFallID,false,0).setIconIndex(0,0).setPotionName("Feather Fall")); ItemStack masterBloodOrbStack = new ItemStack(ModItems.masterBloodOrb); @@ -594,6 +608,8 @@ public class AlchemicalWizardry GameRegistry.registerTileEntity(TESchematicSaver.class, "containerSchematicSaver"); GameRegistry.registerTileEntity(TESpectralBlock.class, "containerSpectralBlock"); GameRegistry.registerTileEntity(TEReagentConduit.class, "containerReagentConduit"); + GameRegistry.registerTileEntity(TEBellJar.class, "containerBellJar"); + GameRegistry.registerTileEntity(TEAlchemicCalcinator.class, "containerAlchemicCalcinator"); //GameRegistry.registerBlock(ModBlocks.blockSpellEffect,"blockSpellEffect"); ModBlocks.bloodRune.setHarvestLevel("pickaxe", 2); ModBlocks.speedRune.setHarvestLevel("pickaxe", 2); @@ -630,6 +646,7 @@ public class AlchemicalWizardry this.initBindingRecipes(); this.initHarvestRegistry(); this.initCombinedAlchemyPotionRecipes(); + ReagentRegistry.initReagents(); //MinecraftForge.setToolClass(ModItems.boundPickaxe, "pickaxe", 5); //MinecraftForge.setToolClass(ModItems.boundAxe, "axe", 5); @@ -761,6 +778,7 @@ public class AlchemicalWizardry 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 toolCoreStack = new ItemStack(ModItems.baseItems,1,26); ItemStack paradigmBackPlateStack = new ItemStack(ModItems.baseItems,1,8); ItemStack outputCableStack = new ItemStack(ModItems.baseItems,1,9); ItemStack flameCoreStack = new ItemStack(ModItems.baseItems,1,10); @@ -794,6 +812,8 @@ public class AlchemicalWizardry GameRegistry.addRecipe(new ShapedBloodOrbRecipe(projectileCoreStack, "mbm","aca","mom",'c', emptyCoreStack,'b',weakBloodShardStack,'m', magicalesStack,'o', magicianBloodOrbStack,'a',new ItemStack(Items.arrow))); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(selfCoreStack,"sbs","ncn","sos",'c', emptyCoreStack, 's',sanctusStack,'b', weakBloodShardStack,'o', magicianBloodOrbStack,'n',glowstoneDustStack)); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(meleeCoreStack,"sbs","ncn","sos",'c', emptyCoreStack, 's',incendiumStack,'b', weakBloodShardStack,'o', magicianBloodOrbStack,'n',new ItemStack(Items.fire_charge))); + GameRegistry.addRecipe(new ShapedBloodOrbRecipe(toolCoreStack,"sbs","ncn","sos",'c', emptyCoreStack, 's',terraeStack,'b', weakBloodShardStack,'o', magicianBloodOrbStack,'n',new ItemStack(Blocks.obsidian))); + 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); @@ -823,6 +843,7 @@ public class AlchemicalWizardry 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.blockSpellParadigm,1,3),"gb ","pcw","gb ",'p',paradigmBackPlateStack,'c', toolCoreStack,'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); @@ -844,6 +865,14 @@ public class AlchemicalWizardry GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement,1,11),"bpb","ico","bpb",'c', potencyCoreStack,'b',stoneBraceStack,'p',runicPlateStack,'i',inputCableStack,'o',outputCableStack); GameRegistry.addRecipe(new ItemStack(ModBlocks.blockSpellEnhancement,1,12),"bpb","ico","bpb",'c', potencyCoreStack,'b',obsidianBraceStack,'p',imbuedRunicPlateStack,'i',inputCableStack,'o',outputCableStack); + GameRegistry.addRecipe(new ItemStack(ModItems.itemAttunedCrystal), "Sr ", " ar", "s S", 'r', quartzRodStack, 's', new ItemStack(Items.stick,1,craftingConstant), 'a', strengthenedCatalystStack, 'S', stoneStack); + GameRegistry.addRecipe(new ItemStack(ModItems.itemTankSegmenter), "gqi", " rq", "q g", 'q', quartzRodStack, 'i', ironIngotStack, 'r', strengthenedCatalystStack, 'g', goldIngotStack); + GameRegistry.addRecipe(new ItemStack(ModItems.itemDestinationClearer), "qcq", "c c", "qcq", 'q', quartzRodStack, 'c', simpleCatalystStack); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockAlchemicCalcinator), "pgp", "gsg", "ccc", 'p', crackedRunicPlateStack, 'g', glassStack, 's', strengthenedCatalystStack, 'c', cobblestoneStack); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockCrystalBelljar), "GGG", "GcG", "www", 'G', glassStack, 'c', concentratedCatalystStack, 'w', new ItemStack(Blocks.wooden_slab,1,craftingConstant)); + GameRegistry.addRecipe(new ItemStack(ModBlocks.blockReagentConduit), "isi", "scs", "isi", 'c', concentratedCatalystStack, 's', stringStack, 'i', ironIngotStack); + GameRegistry.addShapelessRecipe(new ItemStack(Items.dye,5,15),fracturedBoneStack); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(ModItems.itemSigilOfSupression),"wtl","wvl","wol",'v',new ItemStack(ModItems.voidSigil),'t',new ItemStack(ModBlocks.blockTeleposer),'o',masterBloodOrbStack,'l',lavaBucketStack,'w',waterBucketStack)); @@ -951,6 +980,7 @@ public class AlchemicalWizardry AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.sugar), Potion.moveSpeed.id, 2 * 60 * 20); AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.speckled_melon), Potion.heal.id, 2 * 60 * 20); AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.spider_eye), Potion.poison.id, 450); + AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.dye,1,0), Potion.blindness.id, 450); AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.fermented_spider_eye), Potion.weakness.id, 450); AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.blaze_powder), Potion.damageBoost.id, 2 * 60 * 20); AlchemicalPotionCreationHandler.addPotion(new ItemStack(ModItems.aether), Potion.jump.id, 2 * 60 * 20); @@ -969,6 +999,7 @@ public class AlchemicalWizardry AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.ender_pearl),AlchemicalWizardry.customPotionPlanarBinding.id,1*60*20); AlchemicalPotionCreationHandler.addPotion(new ItemStack(Blocks.soul_sand),AlchemicalWizardry.customPotionSoulFray.id,30*20); AlchemicalPotionCreationHandler.addPotion(new ItemStack(ModItems.baseItems,1,16),AlchemicalWizardry.customPotionSoulHarden.id,30*20); + AlchemicalPotionCreationHandler.addPotion(new ItemStack(Items.slime_ball),AlchemicalWizardry.customPotionDeaf.id,60*20); } public static void initAltarRecipes() @@ -1032,7 +1063,8 @@ public class AlchemicalWizardry Rituals.registerRitual("AW024Harvest", 1, 20000, new RitualEffectHarvest(), "Reap of the Harvest Moon"); Rituals.registerRitual("AW025Conduit", 2, 2000000, new RitualEffectLifeConduit(), "Cry of the Eternal Soul"); Rituals.registerRitual("AW026Ellipsoid", 1, 25000, new RitualEffectEllipsoid(), "Ellipsoid"); - Rituals.registerRitual("AW027Evaporation", 1, 1000, new RitualEffectEvaporation(), "Evaporation"); + Rituals.registerRitual("AW027Evaporation", 1, 20000, new RitualEffectEvaporation(), "Evaporation"); + Rituals.registerRitual("AW028SpawnWard", 1, 1000, new RitualEffectSpawnWard(), "Ward of Sacrosanctity"); //Rituals.registerRitual(1,100,new RitualEffectApiaryOverclock(),"Apiary Overclock")); } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java index 351ea952..998b8b26 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/BloodMagicConfiguration.java @@ -3,11 +3,14 @@ package WayofTime.alchemicalWizardry; import java.io.File; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.List; import java.util.Map.Entry; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLivingBase; import net.minecraftforge.common.config.Configuration; +import WayofTime.alchemicalWizardry.client.renderer.ColourThreshold; +import WayofTime.alchemicalWizardry.client.renderer.RenderHelper; import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorParadigm; /** @@ -18,7 +21,8 @@ import WayofTime.alchemicalWizardry.common.summoning.meteor.MeteorParadigm; */ public class BloodMagicConfiguration { - + private static final String DEFAULT_COLOR_LIST = "100,f; 80,7; 60,e; 40,6; 25,c; 10,4"; + public static final List colorList = new ArrayList(); public static Configuration config; public static final String CATEGORY_GAMEPLAY = "gameplay"; @@ -26,7 +30,13 @@ public class BloodMagicConfiguration public static void init(File configFile) { + for (String s : DEFAULT_COLOR_LIST.split(";")) + { + String[] ct = s.split(","); + colorList.add(new ColourThreshold(Integer.valueOf(ct[0].trim()), ct[1].trim())); + } + config = new Configuration(configFile); try @@ -54,6 +64,8 @@ public class BloodMagicConfiguration AlchemicalWizardry.customPotionPlanarBindingID = config.get("Potion ID","PlanarBinding",110).getInt(); AlchemicalWizardry.customPotionSoulFrayID = config.get("Potion ID","SoulFray",111).getInt(); AlchemicalWizardry.customPotionSoulHardenID = config.get("Potion ID", "SoulHarden", 112).getInt(); + AlchemicalWizardry.customPotionDeafID = config.get("Potion ID", "Deaf", 113).getInt(); + AlchemicalWizardry.customPotionFeatherFallID = config.get("Potion ID", "FeatherFall", 114).getInt(); MeteorParadigm.maxChance = config.get("meteor", "maxChance", 1000).getInt(); AlchemicalWizardry.doMeteorsDestroyBlocks = config.get("meteor", "doMeteorsDestroyBlocks", true).getBoolean(true); @@ -70,8 +82,12 @@ public class BloodMagicConfiguration AlchemicalWizardry.wimpySettings = config.get("WimpySettings","IDontLikeFun",false).getBoolean(false); AlchemicalWizardry.respawnWithDebuff = config.get("WimpySettings", "RespawnWithDebuff", true).getBoolean(); + AlchemicalWizardry.causeHungerWithRegen = config.get("WimpySettings", "causeHungerWithRegen", true).getBoolean(); // AlchemicalWizardry.lockdownAltar = config.get("WimpySettings", "LockdownAltarWithRegen", true).getBoolean(); AlchemicalWizardry.lockdownAltar = false; + + RenderHelper.xOffset = config.get("ClientSettings", "AlchemyHUDxOffset", 50).getInt(); + RenderHelper.yOffset = config.get("ClientSettings", "AlchemyHUDyOffset", 2).getInt(); } catch (Exception e) diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/ModBlocks.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/ModBlocks.java index f6e0aa5a..f1e036de 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/ModBlocks.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/ModBlocks.java @@ -2,7 +2,9 @@ package WayofTime.alchemicalWizardry; import net.minecraft.block.Block; import WayofTime.alchemicalWizardry.common.block.ArmourForge; +import WayofTime.alchemicalWizardry.common.block.BlockAlchemicCalcinator; import WayofTime.alchemicalWizardry.common.block.BlockAltar; +import WayofTime.alchemicalWizardry.common.block.BlockBelljar; import WayofTime.alchemicalWizardry.common.block.BlockBloodLightSource; import WayofTime.alchemicalWizardry.common.block.BlockConduit; import WayofTime.alchemicalWizardry.common.block.BlockDemonPortal; @@ -82,6 +84,8 @@ public class ModBlocks public static Block blockBuildingSchematicSaver; public static Block blockDemonPortal; public static Block blockReagentConduit; + public static Block blockAlchemicCalcinator; + public static Block blockCrystalBelljar; public static void init() { @@ -116,6 +120,8 @@ public class ModBlocks blockDemonPortal = new BlockDemonPortal(); blockBuildingSchematicSaver = new BlockSchematicSaver(); blockReagentConduit = new BlockReagentConduit(); + blockAlchemicCalcinator = new BlockAlchemicCalcinator(); + blockCrystalBelljar = new BlockBelljar(); blockLifeEssence = new LifeEssenceBlock(); } @@ -156,6 +162,8 @@ public class ModBlocks GameRegistry.registerBlock(ModBlocks.blockDemonPortal, "demonPortalMain"); GameRegistry.registerBlock(ModBlocks.blockBuildingSchematicSaver, "blockSchemSaver"); GameRegistry.registerBlock(ModBlocks.blockReagentConduit, "blockReagentConduit"); + GameRegistry.registerBlock(ModBlocks.blockAlchemicCalcinator, "blockAlchemicCalcinator"); + GameRegistry.registerBlock(ModBlocks.blockCrystalBelljar, "blockCrystalBelljar"); } public static void registerBlocksInInit() diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/ModItems.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/ModItems.java index ec01a8f2..b7f2fcfa 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/ModItems.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/ModItems.java @@ -40,6 +40,9 @@ import WayofTime.alchemicalWizardry.common.items.ReinforcedTelepositionFocus; import WayofTime.alchemicalWizardry.common.items.SacrificialDagger; import WayofTime.alchemicalWizardry.common.items.TelepositionFocus; import WayofTime.alchemicalWizardry.common.items.WaterScribeTool; +import WayofTime.alchemicalWizardry.common.items.energy.ItemAttunedCrystal; +import WayofTime.alchemicalWizardry.common.items.energy.ItemDestinationClearer; +import WayofTime.alchemicalWizardry.common.items.energy.ItemTankSegmenter; import WayofTime.alchemicalWizardry.common.items.potion.AlchemyFlask; import WayofTime.alchemicalWizardry.common.items.potion.AlchemyReagent; import WayofTime.alchemicalWizardry.common.items.potion.AverageLengtheningCatalyst; @@ -180,6 +183,10 @@ public class ModItems public static Item customTool; + public static Item itemAttunedCrystal; + public static Item itemTankSegmenter; + public static Item itemDestinationClearer; + public static Item bucketLife; public static void init() @@ -270,6 +277,9 @@ public class ModItems itemSeerSigil = new ItemSeerSigil().setUnlocalizedName("itemSeerSigil"); customTool = new ItemSpellMultiTool().setUnlocalizedName("multiTool"); itemCombinationalCatalyst = new CombinationalCatalyst().setUnlocalizedName("itemCombinationalCatalyst"); + itemAttunedCrystal = new ItemAttunedCrystal().setUnlocalizedName("itemAttunedCrystal"); + itemTankSegmenter = new ItemTankSegmenter().setUnlocalizedName("itemTankSegmenter"); + itemDestinationClearer = new ItemDestinationClearer().setUnlocalizedName("destinationClearer"); } public static void registerItems() @@ -348,9 +358,6 @@ public class ModItems GameRegistry.registerItem(ModItems.enhancedFillingAgent, "enhancedFillingAgent"); GameRegistry.registerItem(ModItems.weakBindingAgent, "weakBindingAgent"); GameRegistry.registerItem(ModItems.itemRitualDiviner, "itemRitualDiviner"); - //GameRegistry.registerItem(ModItems.sanguineHelmet, "sanguineHelmet"); - //GameRegistry.registerItem(ModItems.focusBloodBlast, "focusBloodBlast"); - //GameRegistry.registerItem(ModItems.focusGravityWell, "focusGravityWell"); GameRegistry.registerItem(ModItems.sigilOfMagnetism, "sigilOfMagnetism"); GameRegistry.registerItem(ModItems.itemKeyOfDiablo, "itemKeyOfDiablo"); GameRegistry.registerItem(ModItems.energyBazooka, "energyBazooka"); @@ -366,6 +373,10 @@ public class ModItems GameRegistry.registerItem(ModItems.bucketLife, "bucketLife"); GameRegistry.registerItem(ModItems.itemCombinationalCatalyst, "itemCombinationalCatalyst"); + GameRegistry.registerItem(ModItems.itemAttunedCrystal, "itemAttunedCrystal"); + GameRegistry.registerItem(ModItems.itemTankSegmenter, "itemTankSegmenter"); + GameRegistry.registerItem(ModItems.itemDestinationClearer, "itemDestinationClearer"); + GameRegistry.registerItem(ModItems.baseItems, "bloodMagicBaseItems"); GameRegistry.registerItem(ModItems.baseAlchemyItems, "bloodMagicBaseAlchemyItems"); //GameRegistry.registerItem(ModItems.itemBloodFrame, "itemBloodFrame"); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/ColourAndCoords.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/ColourAndCoords.java new file mode 100644 index 00000000..08f71bff --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/ColourAndCoords.java @@ -0,0 +1,45 @@ +package WayofTime.alchemicalWizardry.api; + +import net.minecraft.nbt.NBTTagCompound; + +public class ColourAndCoords +{ + public int colourRed; + public int colourGreen; + public int colourBlue; + public int colourIntensity; + + public int xCoord; + public int yCoord; + public int zCoord; + + public ColourAndCoords(int red, int green, int blue, int intensity, int x, int y, int z) + { + this.colourRed = red; + this.colourGreen = green; + this.colourBlue = blue; + this.colourIntensity = intensity; + + this.xCoord = x; + this.yCoord = y; + this.zCoord = z; + } + + public static ColourAndCoords readFromNBT(NBTTagCompound tag) + { + return new ColourAndCoords(tag.getInteger("colourRed"), tag.getInteger("colourGreen"), tag.getInteger("colourBlue"), tag.getInteger("colourIntensity"), tag.getInteger("xCoord"), tag.getInteger("yCoord"), tag.getInteger("zCoord")); + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag) + { + tag.setInteger("colourRed", colourRed); + tag.setInteger("colourGreen", colourGreen); + tag.setInteger("colourBlue", colourBlue); + tag.setInteger("colourIntensity", colourIntensity); + tag.setInteger("xCoord", xCoord); + tag.setInteger("yCoord", yCoord); + tag.setInteger("zCoord", zCoord); + + return tag; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IAlchemyGoggles.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IAlchemyGoggles.java new file mode 100644 index 00000000..45eeaaa3 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IAlchemyGoggles.java @@ -0,0 +1,10 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public interface IAlchemyGoggles +{ + public boolean showIngameHUD(World world, ItemStack stack, EntityPlayer player); +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentContainer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentContainer.java new file mode 100644 index 00000000..91f93252 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentContainer.java @@ -0,0 +1,18 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import net.minecraftforge.fluids.FluidTankInfo; + +public interface IReagentContainer +{ + public ReagentStack getReagent(); + + public int getReagentStackAmount(); + + public int getCapacity(); + + public int fill(ReagentStack resource, boolean doFill); + + public ReagentStack drain(int maxDrain, boolean doDrain); + + public ReagentContainerInfo getInfo(); +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentHandler.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentHandler.java new file mode 100644 index 00000000..37da7b69 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/IReagentHandler.java @@ -0,0 +1,18 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import net.minecraftforge.common.util.ForgeDirection; + +public interface IReagentHandler +{ + int fill(ForgeDirection from, ReagentStack resource, boolean doFill); + + ReagentStack drain(ForgeDirection from, ReagentStack resource, boolean doDrain); + + ReagentStack drain(ForgeDirection from, int maxDrain, boolean doDrain); + + boolean canFill(ForgeDirection from, Reagent reagent); + + boolean canDrain(ForgeDirection from, Reagent reagent); + + ReagentContainerInfo[] getContainerInfo(ForgeDirection from); +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ISegmentedReagentHandler.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ISegmentedReagentHandler.java new file mode 100644 index 00000000..a6335d9e --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ISegmentedReagentHandler.java @@ -0,0 +1,14 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import java.util.Map; + +public interface ISegmentedReagentHandler extends IReagentHandler +{ + public int getNumberOfTanks(); + + public int getTanksTunedToReagent(Reagent reagent); + + public void setTanksTunedToReagent(Reagent reagent, int total); + + public Map getAttunedTankMap(); +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/Reagent.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/Reagent.java new file mode 100644 index 00000000..df4036b3 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/Reagent.java @@ -0,0 +1,54 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import net.minecraft.item.ItemStack; + +public class Reagent +{ + public final String name; + + public static final int REAGENT_SIZE = 1000; + + private int colourRed = 0; + private int colourGreen = 0; + private int colourBlue = 0; + private int colourIntensity = 255; + + public Reagent(String name) + { + this.name = name; + } + + public void setColour(int red, int green, int blue, int intensity) + { + this.colourRed = red; + this.colourGreen = green; + this.colourBlue = blue; + this.colourIntensity = intensity; + } + + public int getColourRed() + { + return colourRed; + } + + public int getColourGreen() + { + return colourGreen; + } + + public int getColourBlue() + { + return colourBlue; + } + + public int getColourIntensity() + { + return colourIntensity; + } + + @Override + public boolean equals(Object o) + { + return o instanceof Reagent ? this == o && name.equals(((Reagent)o).name) : false; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainer.java new file mode 100644 index 00000000..ea6d8306 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainer.java @@ -0,0 +1,158 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; + +public class ReagentContainer implements IReagentContainer +{ + protected ReagentStack reagentStack; + protected int capacity; + + public ReagentContainer(int capacity) + { + this(null, capacity); + } + + public ReagentContainer(ReagentStack stack, int capacity) + { + this.reagentStack = stack; + this.capacity = capacity; + } + + public ReagentContainer(Reagent reagent, int amount, int capacity) + { + this(new ReagentStack(reagent, amount), capacity); + } + + public static ReagentContainer readFromNBT(NBTTagCompound nbt) + { + ReagentStack reagent = ReagentStack.loadReagentStackFromNBT(nbt); + int capacity = nbt.getInteger("capacity"); + + if (reagent != null) + { + return new ReagentContainer(reagent, capacity); + }else + { + return new ReagentContainer(null, capacity); + } + } + + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + if (reagentStack != null) + { + reagentStack.writeToNBT(nbt); + } + + nbt.setInteger("capacity", capacity); + + return nbt; + } + + @Override + public ReagentStack getReagent() + { + return reagentStack; + } + + @Override + public int getReagentStackAmount() + { + if (reagentStack == null) + { + return 0; + } + return reagentStack.amount; + } + + @Override + public int getCapacity() + { + return capacity; + } + + @Override + public int fill(ReagentStack resource, boolean doFill) + { + if (resource == null) + { + return 0; + } + + if (!doFill) + { + if (reagentStack == null) + { + return Math.min(capacity, resource.amount); + } + + if (!reagentStack.isReagentEqual(resource)) + { + return 0; + } + + return Math.min(capacity - reagentStack.amount, resource.amount); + } + + if (reagentStack == null) + { + reagentStack = new ReagentStack(resource, Math.min(capacity, resource.amount)); + + return reagentStack.amount; + } + + if (!reagentStack.isReagentEqual(resource)) + { + return 0; + } + int filled = capacity - reagentStack.amount; + + if (resource.amount < filled) + { + reagentStack.amount += resource.amount; + filled = resource.amount; + } + else + { + reagentStack.amount = capacity; + } + + return filled; + } + + @Override + public ReagentStack drain(int maxDrain, boolean doDrain) + { + if (reagentStack == null) + { + return null; + } + + int drained = maxDrain; + if (reagentStack.amount < drained) + { + drained = reagentStack.amount; + } + + ReagentStack stack = new ReagentStack(reagentStack, drained); + if (doDrain) + { + reagentStack.amount -= drained; + if (reagentStack.amount <= 0) + { + reagentStack = null; + } + } + return stack; + } + + @Override + public ReagentContainerInfo getInfo() + { + return new ReagentContainerInfo(this); + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainerInfo.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainerInfo.java new file mode 100644 index 00000000..8dea2a50 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentContainerInfo.java @@ -0,0 +1,22 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; + +public final class ReagentContainerInfo +{ + public final ReagentStack reagent; + public final int capacity; + + public ReagentContainerInfo(ReagentStack reagent, int capacity) + { + this.reagent = reagent; + this.capacity = capacity; + } + + public ReagentContainerInfo(IReagentContainer tank) + { + this.reagent = tank.getReagent(); + this.capacity = tank.getCapacity(); + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentRegistry.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentRegistry.java new file mode 100644 index 00000000..2120d9ef --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentRegistry.java @@ -0,0 +1,191 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import net.minecraft.item.ItemStack; +import WayofTime.alchemicalWizardry.ModItems; + +public class ReagentRegistry +{ + public static Map reagentList = new HashMap(); + public static Map itemToReagentMap = new HashMap(); + + public static Reagent sanctusReagent; + public static Reagent incendiumReagent; + public static Reagent aquasalusReagent; + public static Reagent magicalesReagent; + public static Reagent aetherReagent; + public static Reagent crepitousReagent; + public static Reagent crystallosReagent; + public static Reagent terraeReagent; + public static Reagent tenebraeReagent; + + public static Reagent offensaReagent; + public static Reagent praesidiumReagent; + public static Reagent orbisTerraeReagent; + public static Reagent virtusReagent; + public static Reagent reductusReagent; + public static Reagent potentiaReagent; + + public static void initReagents() + { + sanctusReagent = new Reagent("sanctus"); + incendiumReagent = new Reagent("incendium"); + aquasalusReagent = new Reagent("aquasalus"); + magicalesReagent = new Reagent("magicales"); + aetherReagent = new Reagent("aether"); + crepitousReagent = new Reagent("crepitous"); + crystallosReagent = new Reagent("crystallos"); + terraeReagent = new Reagent("terrae"); + tenebraeReagent = new Reagent("tenebrae"); + offensaReagent = new Reagent("offensa"); + praesidiumReagent = new Reagent("praesidium"); + orbisTerraeReagent = new Reagent("orbisTerrae"); + virtusReagent = new Reagent("virtus"); + reductusReagent = new Reagent("reductus"); + potentiaReagent = new Reagent("potentia"); + + sanctusReagent.setColour(255, 255, 0, 255); + incendiumReagent.setColour(255, 0, 0, 255); + aquasalusReagent.setColour(47, 0, 196, 255); + magicalesReagent.setColour(150, 0, 146, 255); + aetherReagent.setColour(105, 223, 86, 255); + crepitousReagent.setColour(145, 145, 145, 255); + crystallosReagent.setColour(135, 255, 231, 255); + terraeReagent.setColour(147, 48, 13, 255); + tenebraeReagent.setColour(86, 86, 86, 255); + offensaReagent.setColour(126, 0, 0, 255); + praesidiumReagent.setColour(135, 135, 135, 255); + orbisTerraeReagent.setColour(32, 94, 14, 255); + virtusReagent.setColour(180, 0, 0, 255); + reductusReagent.setColour(20, 93, 2, 255); + potentiaReagent.setColour(64, 81, 208, 255); + + registerReagent("sanctus", sanctusReagent); + registerReagent("incendium", incendiumReagent); + registerReagent("aquasalus", aquasalusReagent); + registerReagent("magicales", magicalesReagent); + registerReagent("aether", aetherReagent); + registerReagent("crepitous", crepitousReagent); + registerReagent("crystallos", crystallosReagent); + registerReagent("terrae", terraeReagent); + registerReagent("tenebrae", tenebraeReagent); + registerReagent("offensa", offensaReagent); + registerReagent("praesidium", praesidiumReagent); + registerReagent("orbisTerrae", orbisTerraeReagent); + registerReagent("virtus", virtusReagent); + registerReagent("reductus", reductusReagent); + registerReagent("potentia", potentiaReagent); + + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.sanctus), new ReagentStack(sanctusReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.incendium), new ReagentStack(incendiumReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.aquasalus), new ReagentStack(aquasalusReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.magicales), new ReagentStack(magicalesReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.aether), new ReagentStack(aetherReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.crepitous), new ReagentStack(crepitousReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.crystallos), new ReagentStack(crystallosReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.terrae), new ReagentStack(terraeReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.tennebrae), new ReagentStack(tenebraeReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.baseAlchemyItems,1,0), new ReagentStack(offensaReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.baseAlchemyItems,1,1), new ReagentStack(praesidiumReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.baseAlchemyItems,1,2), new ReagentStack(orbisTerraeReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.baseAlchemyItems,1,6), new ReagentStack(virtusReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.baseAlchemyItems,1,7), new ReagentStack(reductusReagent, 1000)); + ReagentRegistry.registerItemAndReagent(new ItemStack(ModItems.baseAlchemyItems,1,8), new ReagentStack(potentiaReagent, 1000)); + } + + public static boolean registerReagent(String key, Reagent reagent) + { + if(reagentList.containsKey(key) || reagent == null) + { + return false; + } + + reagentList.put(key, reagent); + + return true; + } + + public static Reagent getReagentForKey(String key) + { + if(reagentList.containsKey(key)) + { + return reagentList.get(key); + } + + return null; + } + + public static String getKeyForReagent(Reagent reagent) + { + if(reagentList.containsValue(reagent)) + { + Set> set = reagentList.entrySet(); + for(Entry entry : set) + { + if(entry.getValue().equals(reagent)) + { + return entry.getKey(); + } + } + } + + return ""; + } + + public static void registerItemAndReagent(ItemStack stack, ReagentStack reagentStack) + { + itemToReagentMap.put(stack, reagentStack); + } + + public static ReagentStack getReagentStackForItem(ItemStack stack) + { + if(stack == null) + { + return null; + } + + for(Entry entry : itemToReagentMap.entrySet()) + { + if(entry.getKey() != null && entry.getKey().isItemEqual(stack)) + { + if(entry.getValue() == null) + { + return null; + }else + { + return entry.getValue().copy(); + } + } + } + + return null; + } + + public static ItemStack getItemForReagent(Reagent reagent) + { + if(reagent == null) + { + return null; + } + + for(Entry entry : itemToReagentMap.entrySet()) + { + if(entry.getValue() != null && entry.getValue().reagent == reagent) + { + if(entry.getKey() == null) + { + return null; + }else + { + return entry.getKey().copy(); + } + } + } + + return null; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentStack.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentStack.java new file mode 100644 index 00000000..f39b35ab --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/ReagentStack.java @@ -0,0 +1,64 @@ +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.FluidStack; + +public class ReagentStack +{ + public Reagent reagent; + public int amount; + + public ReagentStack(Reagent reagent, int amount) + { + this.reagent = reagent; + this.amount = amount; + } + + public ReagentStack(ReagentStack reagentStack, int amount) + { + this(reagentStack.reagent,amount); + } + + public static ReagentStack loadReagentStackFromNBT(NBTTagCompound tag) + { + Reagent reagent = ReagentRegistry.getReagentForKey(tag.getString("Reagent")); + + if(reagent == null) + { + return null; + } + + int amount = tag.getInteger("amount"); + ReagentStack stack = new ReagentStack(reagent, amount); + + return stack; + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag) + { + tag.setString("Reagent", ReagentRegistry.getKeyForReagent(this.reagent)); + tag.setInteger("amount", this.amount); + + return tag; + } + + public ReagentStack splitStack(int amount) + { + ReagentStack copyStack = this.copy(); + int splitAmount = Math.min(amount, this.amount); + copyStack.amount = splitAmount; + this.amount -= splitAmount; + + return copyStack; + } + + public ReagentStack copy() + { + return new ReagentStack(this.reagent, this.amount); + } + + public boolean isReagentEqual(ReagentStack other) + { + return other != null && this.reagent == other.reagent; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileReagentHandler.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileReagentHandler.java new file mode 100644 index 00000000..270efaa3 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileReagentHandler.java @@ -0,0 +1,68 @@ + +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.IFluidHandler; + +public class TileReagentHandler extends TileEntity implements IReagentHandler +{ + protected ReagentContainer tank = new ReagentContainer(4000); + + @Override + public void readFromNBT(NBTTagCompound tag) + { + super.readFromNBT(tag); + tank.readFromNBT(tag); + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + super.writeToNBT(tag); + tank.writeToNBT(tag); + } + + /* IReagentHandler */ + @Override + public int fill(ForgeDirection from, ReagentStack resource, boolean doFill) + { + return tank.fill(resource, doFill); + } + + @Override + public ReagentStack drain(ForgeDirection from, ReagentStack resource, boolean doDrain) + { + if (resource == null || !resource.isReagentEqual(tank.getReagent())) + { + return null; + } + return tank.drain(resource.amount, doDrain); + } + + @Override + public ReagentStack drain(ForgeDirection from, int maxDrain, boolean doDrain) + { + return tank.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(ForgeDirection from, Reagent reagent) + { + return true; + } + + @Override + public boolean canDrain(ForgeDirection from, Reagent reagent) + { + return true; + } + + @Override + public ReagentContainerInfo[] getContainerInfo(ForgeDirection from) + { + return new ReagentContainerInfo[] {tank.getInfo()}; + } +} \ No newline at end of file diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileSegmentedReagentHandler.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileSegmentedReagentHandler.java new file mode 100644 index 00000000..6cf25c04 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/alchemy/energy/TileSegmentedReagentHandler.java @@ -0,0 +1,283 @@ + +package WayofTime.alchemicalWizardry.api.alchemy.energy; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileSegmentedReagentHandler extends TileEntity implements ISegmentedReagentHandler +{ + protected ReagentContainer[] tanks; + protected Map attunedTankMap; + + public TileSegmentedReagentHandler() + { + this(1); + } + + public TileSegmentedReagentHandler(int numberOfTanks) + { + this(numberOfTanks, 1000); + } + + public TileSegmentedReagentHandler(int numberOfTanks, int tankSize) + { + super(); + + this.attunedTankMap = new HashMap(); + this.tanks = new ReagentContainer[numberOfTanks]; + for(int i=0; i entry : this.attunedTankMap.entrySet()) + { + NBTTagCompound savedTag = new NBTTagCompound(); + savedTag.setString("reagent", ReagentRegistry.getKeyForReagent(entry.getKey())); + savedTag.setInteger("amount", entry.getValue()); + attunedTagList.appendTag(savedTag); + } + + tag.setTag("attunedTankMap", attunedTagList); + } + + /* ISegmentedReagentHandler */ + @Override + public int fill(ForgeDirection from, ReagentStack resource, boolean doFill) + { + int totalFill = 0; + + boolean useTankLimit = !this.attunedTankMap.isEmpty(); + + if(resource != null) + { + int totalTanksFillable = useTankLimit ? this.getTanksTunedToReagent(resource.reagent) : this.tanks.length; + int tanksFilled = 0; + + int maxFill = resource.amount; + + for(int i=this.tanks.length-1; i>=0; i--) + { + ReagentStack remainingStack = resource.copy(); + remainingStack.amount = maxFill - totalFill; + + boolean doesReagentMatch = tanks[i].getReagent() == null ? false : tanks[i].getReagent().isReagentEqual(remainingStack); + + if(doesReagentMatch) + { + totalFill += tanks[i].fill(remainingStack, doFill); + tanksFilled++; + }else + { + continue; + } + + if(totalFill >= maxFill || tanksFilled >= totalTanksFillable) + { + return totalFill; + } + } + + if(tanksFilled >= totalTanksFillable) + { + return totalFill; + } + + for(int i=this.tanks.length-1; i>=0; i--) + { + ReagentStack remainingStack = resource.copy(); + remainingStack.amount = maxFill - totalFill; + + boolean isTankEmpty = tanks[i].getReagent() == null; + + if(isTankEmpty) + { + totalFill += tanks[i].fill(remainingStack, doFill); + tanksFilled++; + }else + { + continue; + } + + if(totalFill >= maxFill || tanksFilled >= totalTanksFillable) + { + return totalFill; + } + } + } + return totalFill; + } + + @Override + public ReagentStack drain(ForgeDirection from, ReagentStack resource, boolean doDrain) + { + if(resource == null) + { + return null; + } + + int maxDrain = resource.amount; + Reagent reagent = resource.reagent; + int drained = 0; + + for(int i=0; i= maxDrain) + { + break; + } + + if(resource.isReagentEqual(tanks[i].getReagent())) + { + ReagentStack drainStack = tanks[i].drain(maxDrain-drained, doDrain); + if(drainStack != null) + { + drained += drainStack.amount; + } + } + } + + return new ReagentStack(reagent, drained); + } + + /* Only returns the amount from the first available tank */ + @Override + public ReagentStack drain(ForgeDirection from, int maxDrain, boolean doDrain) + { + for(int i=0; i getAttunedTankMap() + { + return this.attunedTankMap; + } + + public boolean areTanksEmpty() + { + for(int i=0; i getRitualComponentList(); + + public boolean canDrainReagent(IMasterRitualStone ritualStone, Reagent reagent, int amount, boolean doDrain) + { + if(ritualStone == null || reagent == null || amount == 0) + { + return false; + } + + ReagentStack reagentStack = new ReagentStack(reagent, amount); + + ReagentStack stack = ritualStone.drain(ForgeDirection.UNKNOWN, reagentStack, false); + + if(stack != null && stack.amount >= amount) + { + if(doDrain) + { + ritualStone.drain(ForgeDirection.UNKNOWN, reagentStack, true); + } + + return true; + } + + return false; + } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java index a4d68583..7dc74f99 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/api/soulNetwork/SoulNetworkHandler.java @@ -1,8 +1,11 @@ package WayofTime.alchemicalWizardry.api.soulNetwork; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.util.DamageSource; import net.minecraft.world.World; @@ -15,30 +18,37 @@ public class SoulNetworkHandler { String ownerName = ist.getTagCompound().getString("ownerName"); - if (MinecraftServer.getServer() == null) - { - return 0; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - if (data.currentEssence >= damageToBeDone) - { - data.currentEssence -= damageToBeDone; - data.markDirty(); - return damageToBeDone; - } + return syphonFromNetwork(ownerName, damageToBeDone); } return 0; } + public static int syphonFromNetwork(String ownerName, int damageToBeDone) + { + if (MinecraftServer.getServer() == null) + { + return 0; + } + + World world = MinecraftServer.getServer().worldServers[0]; + LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); + + if (data == null) + { + data = new LifeEssenceNetwork(ownerName); + world.setItemData(ownerName, data); + } + + if (data.currentEssence >= damageToBeDone) + { + data.currentEssence -= damageToBeDone; + data.markDirty(); + return damageToBeDone; + } + + return 0; + } + /** * Master method used to syphon from the player's network, and will damage them accordingly if they do not have enough LP. * Does not drain on the client side. @@ -68,26 +78,31 @@ public class SoulNetworkHandler { String ownerName = ist.getTagCompound().getString("ownerName"); - if (MinecraftServer.getServer() == null) - { - return false; - } - - World world = MinecraftServer.getServer().worldServers[0]; - LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); - - if (data == null) - { - data = new LifeEssenceNetwork(ownerName); - world.setItemData(ownerName, data); - } - - return data.currentEssence >= damageToBeDone; + return canSyphonFromOnlyNetwork(ownerName, damageToBeDone); } return false; } + public static boolean canSyphonFromOnlyNetwork(String ownerName, int damageToBeDone) + { + if (MinecraftServer.getServer() == null) + { + return false; + } + + World world = MinecraftServer.getServer().worldServers[0]; + LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName); + + if (data == null) + { + data = new LifeEssenceNetwork(ownerName); + world.setItemData(ownerName, data); + } + + return data.currentEssence >= damageToBeDone; + } + public static int getCurrentEssence(String ownerName) { if (MinecraftServer.getServer() == null) @@ -225,4 +240,35 @@ public class SoulNetworkHandler { return player.getDisplayName(); } + + public static EntityPlayer getPlayerForUsername(String str) + { + if(MinecraftServer.getServer() == null) + { + return null; + } + return MinecraftServer.getServer().getConfigurationManager().func_152612_a(str); + } + + public static void causeNauseaToPlayer(ItemStack stack) + { + if (stack.getTagCompound() != null && !(stack.getTagCompound().getString("ownerName").equals(""))) + { + String ownerName = stack.getTagCompound().getString("ownerName"); + + SoulNetworkHandler.causeNauseaToPlayer(ownerName); + } + } + + public static void causeNauseaToPlayer(String ownerName) + { + EntityPlayer entityOwner = SoulNetworkHandler.getPlayerForUsername(ownerName); + + if (entityOwner == null) + { + return; + } + + entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java new file mode 100644 index 00000000..1ea4077f --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/ClientEventHandler.java @@ -0,0 +1,25 @@ +package WayofTime.alchemicalWizardry.client; + +import net.minecraft.client.Minecraft; +import WayofTime.alchemicalWizardry.client.renderer.RenderHelper; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent.Phase; +import cpw.mods.fml.common.gameevent.TickEvent.RenderTickEvent; + +public class ClientEventHandler +{ + private Minecraft mcClient = FMLClientHandler.instance().getClient(); + + @SubscribeEvent + public void onTick(RenderTickEvent event) + { + if (event.phase.equals(Phase.START)) + return; + + if (!RenderHelper.onTickInGame(mcClient)) + { + + } + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java index c06e3e74..ac7d29e2 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/ClientProxy.java @@ -22,7 +22,10 @@ import WayofTime.alchemicalWizardry.common.entity.mob.EntityWingedFireDemon; import WayofTime.alchemicalWizardry.common.entity.projectile.EnergyBlastProjectile; import WayofTime.alchemicalWizardry.common.entity.projectile.EntityEnergyBazookaMainProjectile; import WayofTime.alchemicalWizardry.common.entity.projectile.EntityMeteor; +import WayofTime.alchemicalWizardry.common.entity.projectile.EntityParticleBeam; +import WayofTime.alchemicalWizardry.common.renderer.block.RenderAlchemicCalcinator; import WayofTime.alchemicalWizardry.common.renderer.block.RenderConduit; +import WayofTime.alchemicalWizardry.common.renderer.block.RenderCrystalBelljar; import WayofTime.alchemicalWizardry.common.renderer.block.RenderMasterStone; import WayofTime.alchemicalWizardry.common.renderer.block.RenderPedestal; import WayofTime.alchemicalWizardry.common.renderer.block.RenderPlinth; @@ -34,7 +37,9 @@ import WayofTime.alchemicalWizardry.common.renderer.block.RenderSpellParadigmBlo import WayofTime.alchemicalWizardry.common.renderer.block.RenderWritingTable; import WayofTime.alchemicalWizardry.common.renderer.block.ShaderHelper; import WayofTime.alchemicalWizardry.common.renderer.block.TEAltarRenderer; +import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEAlchemicalCalcinatorItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEAltarItemRenderer; +import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEBellJarItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TEConduitItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellEffectBlockItemRenderer; import WayofTime.alchemicalWizardry.common.renderer.block.itemRender.TESpellEnhancementBlockItemRenderer; @@ -62,7 +67,9 @@ import WayofTime.alchemicalWizardry.common.renderer.projectile.RenderEnergyBazoo import WayofTime.alchemicalWizardry.common.renderer.projectile.RenderEnergyBlastProjectile; import WayofTime.alchemicalWizardry.common.renderer.projectile.RenderMeteor; import WayofTime.alchemicalWizardry.common.spell.complex.EntitySpellProjectile; +import WayofTime.alchemicalWizardry.common.tileEntity.TEAlchemicCalcinator; import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; +import WayofTime.alchemicalWizardry.common.tileEntity.TEBellJar; import WayofTime.alchemicalWizardry.common.tileEntity.TEConduit; import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; @@ -76,6 +83,7 @@ import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.FMLCommonHandler; public class ClientProxy extends CommonProxy { @@ -89,6 +97,7 @@ public class ClientProxy extends CommonProxy RenderingRegistry.registerEntityRenderingHandler(EnergyBlastProjectile.class, new RenderEnergyBlastProjectile()); RenderingRegistry.registerEntityRenderingHandler(EntityEnergyBazookaMainProjectile.class, new RenderEnergyBazookaMainProjectile()); RenderingRegistry.registerEntityRenderingHandler(EntitySpellProjectile.class, new RenderEnergyBlastProjectile()); + RenderingRegistry.registerEntityRenderingHandler(EntityParticleBeam.class, new RenderEnergyBlastProjectile()); RenderingRegistry.registerEntityRenderingHandler(EntityMeteor.class, new RenderMeteor()); //EntityRegistry.registerGlobalEntityID(EntityFallenAngel.class, "AlchemicalWizardry.FallenAngel", EntityRegistry.findGlobalUniqueEntityId(),0x40FF00, 0x0B610B); RenderingRegistry.registerEntityRenderingHandler(EntityFallenAngel.class, new RenderFallenAngel(new ModelFallenAngel(), 0.5F)); @@ -129,6 +138,8 @@ public class ClientProxy extends CommonProxy ClientRegistry.bindTileEntitySpecialRenderer(TESpellModifierBlock.class, new RenderSpellModifierBlock()); ClientRegistry.bindTileEntitySpecialRenderer(TEReagentConduit.class, new RenderReagentConduit()); ClientRegistry.bindTileEntitySpecialRenderer(TEMasterStone.class, new RenderMasterStone()); + ClientRegistry.bindTileEntitySpecialRenderer(TEAlchemicCalcinator.class, new RenderAlchemicCalcinator()); + ClientRegistry.bindTileEntitySpecialRenderer(TEBellJar.class, new RenderCrystalBelljar()); //Item Renderer stuff MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockConduit), new TEConduitItemRenderer()); @@ -136,6 +147,8 @@ public class ClientProxy extends CommonProxy MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellEnhancement), new TESpellEnhancementBlockItemRenderer()); MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellParadigm), new TESpellParadigmBlockItemRenderer()); MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockSpellModifier), new TESpellModifierBlockItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockAlchemicCalcinator), new TEAlchemicalCalcinatorItemRenderer()); + MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockCrystalBelljar), new TEBellJarItemRenderer()); //RenderingRegistry.registerEntityRenderingHandler(FireProjectile.class, new RenderFireProjectile()); //RenderingRegistry.registerBlockHandler(new AltarRenderer()); @@ -156,4 +169,10 @@ public class ClientProxy extends CommonProxy MinecraftForgeClient.registerItemRenderer(ItemBlock.getItemFromBlock(ModBlocks.blockAltar), new TEAltarItemRenderer()); //MinecraftForgeClient.registerItemRenderer(AlchemicalWizardry.blockWritingTable.blockID, new TEWritingTableItemRenderer()); } + + @Override + public void registerEvents() + { + FMLCommonHandler.instance().bus().register(new ClientEventHandler()); + } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/ColourThreshold.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/ColourThreshold.java new file mode 100644 index 00000000..f7ee748a --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/ColourThreshold.java @@ -0,0 +1,49 @@ +package WayofTime.alchemicalWizardry.client.renderer; + +import java.util.List; +/** + * This class is a utility class that was created by bspkrs. + * https://github.com/bspkrs/bspkrsCore/blob/master/src/main/java/bspkrs/client/util/ColorThreshold.java + */ +public class ColourThreshold implements Comparable +{ + public int threshold; + public String colorCode; + + public ColourThreshold(int t, String c) + { + threshold = t; + colorCode = c; + } + + @Override + public String toString() + { + return String.valueOf(threshold) + ", " + colorCode; + } + + @Override + public int compareTo(ColourThreshold o) + { + if (this.threshold > o.threshold) + return 1; + else if (this.threshold < o.threshold) + return -1; + else + return 0; + } + + /** + * Returns the colorCode attached to the first threshold in the list that is + * >= value. Expects that the list has been sorted by threshold ascending. + */ + public static String getColorCode(List colorList, int value) + { + for (ColourThreshold ct : colorList) + if (value <= ct.threshold) + return ct.colorCode; + + return "f"; + } +} + diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDElement.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDElement.java new file mode 100644 index 00000000..e597135f --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDElement.java @@ -0,0 +1,146 @@ +package WayofTime.alchemicalWizardry.client.renderer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.ItemStack; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.BloodMagicConfiguration; + +public class HUDElement +{ + public final ItemStack itemStack; + public final int iconW; + public final int iconH; + public final int padW; + public final int value; + private int elementW; + private int elementH; + private String itemName = ""; + private int itemNameW; + private String itemDamage = ""; + private int itemDamageW; + private Minecraft mc = Minecraft.getMinecraft(); + + private static final int offset = 5; + + public boolean enableItemName = false; + public boolean showValue = true; + public boolean showDamageOverlay = false; + public boolean showItemCount = false; + + static RenderItem itemRenderer = new RenderItem(); + + public HUDElement(ItemStack itemStack, int iconW, int iconH, int padW, int value) + { + this.itemStack = itemStack; + this.iconW = iconW; + this.iconH = iconH; + this.padW = padW; + this.value = value; + + initSize(); + } + + public int width() + { + return elementW; + } + + public int height() + { + return elementH; + } + + private void initSize() + { + elementH = enableItemName ? Math.max(Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT * 2, iconH) : + Math.max(mc.fontRenderer.FONT_HEIGHT, iconH); + + if (itemStack != null) + { + int damage = 1; + int maxDamage = 1; + + if (showValue) + { + maxDamage = itemStack.getMaxDamage() + 1; + damage = maxDamage - itemStack.getItemDamageForDisplay(); + + boolean showSpecialValue = true; + boolean showValue = false; + boolean showPercent = false; + + boolean showMaxDamage = true; + boolean thresholdPercent = true; + + if(showSpecialValue) + { + itemDamage = "\247" + ColourThreshold.getColorCode(BloodMagicConfiguration.colorList, + (thresholdPercent ? damage * 100 / maxDamage : damage)) + this.value; + } + else if (showValue) + itemDamage = "\247" + ColourThreshold.getColorCode(BloodMagicConfiguration.colorList, + (thresholdPercent ? damage * 100 / maxDamage : damage)) + damage + + (showMaxDamage ? "/" + maxDamage : ""); + else if (showPercent) + itemDamage = "\247" + ColourThreshold.getColorCode(BloodMagicConfiguration.colorList, + (thresholdPercent ? damage * 100 / maxDamage : damage)) + + (damage * 100 / maxDamage) + "%"; + } + + itemDamageW = mc.fontRenderer.getStringWidth(HUDUtils.stripCtrl(itemDamage)); + elementW = padW + iconW + padW + itemDamageW + offset; + + if (enableItemName) + { + itemName = itemStack.getDisplayName(); + elementW = padW + iconW + padW + + Math.max(mc.fontRenderer.getStringWidth(HUDUtils.stripCtrl(itemName)), itemDamageW); + } + + itemNameW = mc.fontRenderer.getStringWidth(HUDUtils.stripCtrl(itemName)); + } + } + + public void renderToHud(int x, int y) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); + RenderHelper.enableStandardItemLighting(); + RenderHelper.enableGUIStandardItemLighting(); + itemRenderer.zLevel = 200.0F; + + //if (ArmorStatusHUD.alignMode.toLowerCase().contains("right")) + boolean toRight = true; + if(toRight) + { + itemRenderer.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), itemStack, x - (iconW + padW), y); + HUDUtils.renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, x - (iconW + padW), y, showDamageOverlay, showItemCount); + + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); + GL11.glDisable(GL11.GL_BLEND); + + mc.fontRenderer.drawStringWithShadow(itemName + "\247r", x - (padW + iconW + padW) - itemNameW, y, 0xffffff); + mc.fontRenderer.drawStringWithShadow(itemDamage + "\247r", x - (padW + iconW + padW) - itemDamageW, + y + (enableItemName ? elementH / 2 : elementH / 4), 0xffffff); + } + else + { + itemRenderer.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), itemStack, x, y); + HUDUtils.renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, x, y, showDamageOverlay, showItemCount); + + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); + GL11.glDisable(GL11.GL_BLEND); + + mc.fontRenderer.drawStringWithShadow(itemName + "\247r", x + iconW + padW, y, 0xffffff); + mc.fontRenderer.drawStringWithShadow(itemDamage + "\247r", x + iconW + padW, + y + (enableItemName ? elementH / 2 : elementH / 4), 0xffffff); + } + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +} \ No newline at end of file diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDUtils.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDUtils.java new file mode 100644 index 00000000..08217699 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/HUDUtils.java @@ -0,0 +1,272 @@ +package WayofTime.alchemicalWizardry.client.renderer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +/** + * This class is a utility class that was created by bspkrs. + * https://github.com/bspkrs/bspkrsCore/blob/master/src/main/java/bspkrs/client/util/HUDUtils.java + */ +public final class HUDUtils +{ + private static int[] colorCodes = new int[] { 0, 170, 43520, 43690, 11141120, 11141290, 16755200, 11184810, 5592405, 5592575, 5635925, 5636095, 16733525, 16733695, 16777045, 16777215, + 0, 42, 10752, 10794, 2752512, 2752554, 2763264, 2763306, 1381653, 1381695, 1392405, 1392447, 4134165, 4134207, 4144917, 4144959 }; + + public static int getColorCode(char c, boolean isLighter) + { + return colorCodes[isLighter ? "0123456789abcdef".indexOf(c) : "0123456789abcdef".indexOf(c) + 16]; + } + + /** + * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders + * and filler. It is assumed that the desired texture ResourceLocation object has been bound using + * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). + * + * @param x x axis offset + * @param y y axis offset + * @param u bound resource location image x offset + * @param v bound resource location image y offset + * @param width the desired box width + * @param height the desired box height + * @param textureWidth the width of the box texture in the resource location image + * @param textureHeight the height of the box texture in the resource location image + * @param borderSize the size of the box's borders + * @param zLevel the zLevel to draw at + */ + public static void drawContinuousTexturedBox(int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, + int borderSize, float zLevel) + { + drawContinuousTexturedBox(x, y, u, v, width, height, textureWidth, textureHeight, borderSize, borderSize, borderSize, borderSize, zLevel); + } + + /** + * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders + * and filler. The provided ResourceLocation object will be bound using + * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). + * + * @param res the ResourceLocation object that contains the desired image + * @param x x axis offset + * @param y y axis offset + * @param u bound resource location image x offset + * @param v bound resource location image y offset + * @param width the desired box width + * @param height the desired box height + * @param textureWidth the width of the box texture in the resource location image + * @param textureHeight the height of the box texture in the resource location image + * @param borderSize the size of the box's borders + * @param zLevel the zLevel to draw at + */ + public static void drawContinuousTexturedBox(ResourceLocation res, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, + int borderSize, float zLevel) + { + drawContinuousTexturedBox(res, x, y, u, v, width, height, textureWidth, textureHeight, borderSize, borderSize, borderSize, borderSize, zLevel); + } + + /** + * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders + * and filler. The provided ResourceLocation object will be bound using + * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). + * + * @param res the ResourceLocation object that contains the desired image + * @param x x axis offset + * @param y y axis offset + * @param u bound resource location image x offset + * @param v bound resource location image y offset + * @param width the desired box width + * @param height the desired box height + * @param textureWidth the width of the box texture in the resource location image + * @param textureHeight the height of the box texture in the resource location image + * @param topBorder the size of the box's top border + * @param bottomBorder the size of the box's bottom border + * @param leftBorder the size of the box's left border + * @param rightBorder the size of the box's right border + * @param zLevel the zLevel to draw at + */ + public static void drawContinuousTexturedBox(ResourceLocation res, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, + int topBorder, int bottomBorder, int leftBorder, int rightBorder, float zLevel) + { + Minecraft.getMinecraft().getTextureManager().bindTexture(res); + drawContinuousTexturedBox(x, y, u, v, width, height, textureWidth, textureHeight, topBorder, bottomBorder, leftBorder, rightBorder, zLevel); + } + + /** + * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders + * and filler. It is assumed that the desired texture ResourceLocation object has been bound using + * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). + * + * @param x x axis offset + * @param y y axis offset + * @param u bound resource location image x offset + * @param v bound resource location image y offset + * @param width the desired box width + * @param height the desired box height + * @param textureWidth the width of the box texture in the resource location image + * @param textureHeight the height of the box texture in the resource location image + * @param topBorder the size of the box's top border + * @param bottomBorder the size of the box's bottom border + * @param leftBorder the size of the box's left border + * @param rightBorder the size of the box's right border + * @param zLevel the zLevel to draw at + */ + public static void drawContinuousTexturedBox(int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, + int topBorder, int bottomBorder, int leftBorder, int rightBorder, float zLevel) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + int fillerWidth = textureWidth - leftBorder - rightBorder; + int fillerHeight = textureHeight - topBorder - bottomBorder; + int canvasWidth = width - leftBorder - rightBorder; + int canvasHeight = height - topBorder - bottomBorder; + int xPasses = canvasWidth / fillerWidth; + int remainderWidth = canvasWidth % fillerWidth; + int yPasses = canvasHeight / fillerHeight; + int remainderHeight = canvasHeight % fillerHeight; + + // Draw Border + // Top Left + drawTexturedModalRect(x, y, u, v, leftBorder, topBorder, zLevel); + // Top Right + drawTexturedModalRect(x + leftBorder + canvasWidth, y, u + leftBorder + fillerWidth, v, rightBorder, topBorder, zLevel); + // Bottom Left + drawTexturedModalRect(x, y + topBorder + canvasHeight, u, v + topBorder + fillerHeight, leftBorder, bottomBorder, zLevel); + // Bottom Right + drawTexturedModalRect(x + leftBorder + canvasWidth, y + topBorder + canvasHeight, u + leftBorder + fillerWidth, v + topBorder + fillerHeight, rightBorder, bottomBorder, zLevel); + + for (int i = 0; i < xPasses + (remainderWidth > 0 ? 1 : 0); i++) + { + // Top Border + drawTexturedModalRect(x + leftBorder + (i * fillerWidth), y, u + leftBorder, v, (i == xPasses ? remainderWidth : fillerWidth), topBorder, zLevel); + // Bottom Border + drawTexturedModalRect(x + leftBorder + (i * fillerWidth), y + topBorder + canvasHeight, u + leftBorder, v + topBorder + fillerHeight, (i == xPasses ? remainderWidth : fillerWidth), bottomBorder, zLevel); + + // Throw in some filler for good measure + for (int j = 0; j < yPasses + (remainderHeight > 0 ? 1 : 0); j++) + drawTexturedModalRect(x + leftBorder + (i * fillerWidth), y + topBorder + (j * fillerHeight), u + leftBorder, v + topBorder, (i == xPasses ? remainderWidth : fillerWidth), (j == yPasses ? remainderHeight : fillerHeight), zLevel); + } + + // Side Borders + for (int j = 0; j < yPasses + (remainderHeight > 0 ? 1 : 0); j++) + { + // Left Border + drawTexturedModalRect(x, y + topBorder + (j * fillerHeight), u, v + topBorder, leftBorder, (j == yPasses ? remainderHeight : fillerHeight), zLevel); + // Right Border + drawTexturedModalRect(x + leftBorder + canvasWidth, y + topBorder + (j * fillerHeight), u + leftBorder + fillerWidth, v + topBorder, rightBorder, (j == yPasses ? remainderHeight : fillerHeight), zLevel); + } + } + + public static void drawTexturedModalRect(int x, int y, int u, int v, int width, int height, float zLevel) + { + float var7 = 0.00390625F; + float var8 = 0.00390625F; + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV((x + 0), (y + height), zLevel, ((u + 0) * var7), ((v + height) * var8)); + tessellator.addVertexWithUV((x + width), (y + height), zLevel, ((u + width) * var7), ((v + height) * var8)); + tessellator.addVertexWithUV((x + width), (y + 0), zLevel, ((u + width) * var7), ((v + 0) * var8)); + tessellator.addVertexWithUV((x + 0), (y + 0), zLevel, ((u + 0) * var7), ((v + 0) * var8)); + tessellator.draw(); + } + + /** + * Renders the item's overlay information. Examples being stack count or damage on top of the item's image at the specified position. + */ + public static void renderItemOverlayIntoGUI(FontRenderer fontRenderer, ItemStack itemStack, int x, int y) + { + renderItemOverlayIntoGUI(fontRenderer, itemStack, x, y, true, true); + } + + /** + * Renders the item's overlay information. Examples being stack count or damage on top of the item's image at the specified position. + */ + public static void renderItemOverlayIntoGUI(FontRenderer fontRenderer, ItemStack itemStack, int x, int y, boolean showDamageBar, boolean showCount) + { + if (itemStack != null && (showDamageBar || showCount)) + { + if (itemStack.isItemDamaged() && showDamageBar) + { + int var11 = (int) Math.round(13.0D - itemStack.getItemDamageForDisplay() * 13.0D / itemStack.getMaxDamage()); + int var7 = (int) Math.round(255.0D - itemStack.getItemDamageForDisplay() * 255.0D / itemStack.getMaxDamage()); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_TEXTURE_2D); + Tessellator var8 = Tessellator.instance; + int var9 = 255 - var7 << 16 | var7 << 8; + int var10 = (255 - var7) / 4 << 16 | 16128; + renderQuad(var8, x + 2, y + 13, 13, 2, 0); + renderQuad(var8, x + 2, y + 13, 12, 1, var10); + renderQuad(var8, x + 2, y + 13, var11, 1, var9); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + if (showCount) + { + int count = 0; + + if (itemStack.getMaxStackSize() > 1) + count = HUDUtils.countInInventory(Minecraft.getMinecraft().thePlayer, itemStack.getItem(), itemStack.getItemDamage()); + else if (itemStack.getItem().equals(Items.bow)) + count = HUDUtils.countInInventory(Minecraft.getMinecraft().thePlayer, Items.arrow); + + if (count > 1) + { + String var6 = "" + count; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + fontRenderer.drawStringWithShadow(var6, x + 19 - 2 - fontRenderer.getStringWidth(var6), y + 6 + 3, 16777215); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + } + } + } + + /** + * Adds a quad to the tesselator at the specified position with the set width and height and color. Args: tessellator, x, y, width, + * height, color + */ + public static void renderQuad(Tessellator tessellator, int x, int y, int width, int height, int color) + { + tessellator.startDrawingQuads(); + tessellator.setColorOpaque_I(color); + tessellator.addVertex((x + 0), (y + 0), 0.0D); + tessellator.addVertex((x + 0), (y + height), 0.0D); + tessellator.addVertex((x + width), (y + height), 0.0D); + tessellator.addVertex((x + width), (y + 0), 0.0D); + tessellator.draw(); + } + + public static int countInInventory(EntityPlayer player, Item item) + { + return countInInventory(player, item, -1); + } + + public static int countInInventory(EntityPlayer player, Item item, int md) + { + int count = 0; + for (int i = 0; i < player.inventory.mainInventory.length; i++) + if (player.inventory.mainInventory[i] != null && item.equals(player.inventory.mainInventory[i].getItem()) && (md == -1 || player.inventory.mainInventory[i].getItemDamage() == md)) + count += player.inventory.mainInventory[i].stackSize; + return count; + } + + public static String stripCtrl(String s) + { + return s.replaceAll("(?i)\247[0-9a-fklmnor]", ""); + } +} + diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java new file mode 100644 index 00000000..e9cfc87a --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderHelper.java @@ -0,0 +1,185 @@ +package WayofTime.alchemicalWizardry.client.renderer; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.api.alchemy.energy.IAlchemyGoggles; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; + +public class RenderHelper +{ + public static boolean showEquippedItem = true; + public static boolean enableItemName = false; + public static boolean enabled = true; + public static boolean showInChat = true; + + private static int xOffsetDefault = +50; + public static int xOffset = xOffsetDefault; + private static int yOffsetDefault = 2; + public static int yOffset = yOffsetDefault; + private static int yOffsetBottomCenterDefault = 41; + public static int yOffsetBottomCenter = yOffsetBottomCenterDefault; + private static boolean applyXOffsetToCenterDefault = true; + public static boolean applyXOffsetToCenter = applyXOffsetToCenterDefault; + private static boolean applyYOffsetToMiddleDefault = false; + public static boolean applyYOffsetToMiddle = applyYOffsetToMiddleDefault; + + public static String listMode = "horizontal"; + public static String alignMode = "bottomcenter"; + + private static ScaledResolution scaledResolution; + + public static boolean onTickInGame(Minecraft mc) + { + if (enabled && (mc.inGameHasFocus || mc.currentScreen == null || (mc.currentScreen instanceof GuiChat && showInChat)) + && !mc.gameSettings.showDebugInfo) + { + EntityPlayer player = mc.thePlayer; + World world = mc.theWorld; + if(SpellHelper.canPlayerSeeAlchemy(player)) + { + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + scaledResolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + displayArmorStatus(mc); + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + } + + } + + return true; + } + + private static List getHUDElements(Minecraft mc) + { + List elements = new ArrayList(); + + MovingObjectPosition movingobjectposition = mc.objectMouseOver; + World world = mc.theWorld; + + if (movingobjectposition == null) + { + return elements; + } else + { + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) + { + int x = movingobjectposition.blockX; + int y = movingobjectposition.blockY; + int z = movingobjectposition.blockZ; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(!(tile instanceof IReagentHandler)) + { + return elements; + } + + IReagentHandler relay = (IReagentHandler)tile; + + ReagentContainerInfo[] infos = relay.getContainerInfo(ForgeDirection.getOrientation(movingobjectposition.sideHit)); + + if(infos != null) + { + for(ReagentContainerInfo info : infos) + { + if(info == null || info.reagent == null || info.reagent.reagent == null) + { + continue; + } + + ItemStack itemStack = ReagentRegistry.getItemForReagent(info.reagent.reagent); + + if (itemStack != null) + elements.add(new HUDElement(itemStack, 16, 16, 2, info.reagent.amount)); + } + } + } + } + + return elements; + } + + private static int getX(int width) + { + if (alignMode.toLowerCase().contains("center")) + return scaledResolution.getScaledWidth() / 2 - width / 2 + (applyXOffsetToCenter ? xOffset : 0); + else if (alignMode.toLowerCase().contains("right")) + return scaledResolution.getScaledWidth() - width - xOffset; + else + return xOffset; + } + + private static int getY(int rowCount, int height) + { + if (alignMode.toLowerCase().contains("middle")) + return (scaledResolution.getScaledHeight() / 2) - ((rowCount * height) / 2) + (applyYOffsetToMiddle ? yOffset : 0); + else if (alignMode.equalsIgnoreCase("bottomleft") || alignMode.equalsIgnoreCase("bottomright")) + return scaledResolution.getScaledHeight() - (rowCount * height) - yOffset; + else if (alignMode.equalsIgnoreCase("bottomcenter")) + return scaledResolution.getScaledHeight() - (rowCount * height) - yOffsetBottomCenter; + else + return yOffset; + } + + private static int getElementsWidth(List elements) + { + int r = 0; + for (HUDElement he : elements) + r += he.width(); + + return r; + } + + private static void displayArmorStatus(Minecraft mc) + { + List elements = getHUDElements(mc); + + if (elements.size() > 0) + { + int yOffset = enableItemName ? 18 : 16; + + if (listMode.equalsIgnoreCase("vertical")) + { + int yBase = getY(elements.size(), yOffset); + + for (HUDElement e : elements) + { + e.renderToHud((alignMode.toLowerCase().contains("right") ? getX(0) : getX(e.width())), yBase); + yBase += yOffset; + } + } + else if (listMode.equalsIgnoreCase("horizontal")) + { + int totalWidth = getElementsWidth(elements); + int yBase = getY(1, yOffset); + int xBase = getX(totalWidth); + int prevX = 0; + + for (HUDElement e : elements) + { + e.renderToHud(xBase + prevX + (alignMode.toLowerCase().contains("right") ? e.width() : 0), yBase); + prevX += (e.width()); + } + }else if(listMode.equalsIgnoreCase("compound")) + { + //TODO + } + } + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java index 053f2260..f03a5f25 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/AlchemicalWizardryEventHooks.java @@ -6,34 +6,151 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IProjectile; +import net.minecraft.entity.monster.EntityMob; 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.potion.PotionEffect; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.util.Vec3; +import net.minecraftforge.client.event.sound.SoundEvent; 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 net.minecraftforge.event.entity.living.LivingSpawnEvent.CheckSpawn; import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.client.renderer.RenderHelper; import WayofTime.alchemicalWizardry.common.entity.projectile.EnergyBlastProjectile; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; +import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ObfuscationReflectionHelper; +import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent; +import cpw.mods.fml.common.gameevent.TickEvent.Phase; +import cpw.mods.fml.common.gameevent.TickEvent.RenderTickEvent; public class AlchemicalWizardryEventHooks { public static Map playerFlightBuff = new HashMap(); public static Map playerBoostStepHeight = new HashMap(); public static List playersWith1Step = new ArrayList(); - + + public static Map> respawnMap = new HashMap(); + public static Map> forceSpawnMap = new HashMap(); + + @SubscribeEvent + public void onPlayerSoundEvent(SoundEvent event) + { + if(event.isCancelable() && Minecraft.getMinecraft() != null) + { + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + + if(player != null && player.isPotionActive(AlchemicalWizardry.customPotionBoost)) + { + event.setCanceled(true); + } + } + } + + @SubscribeEvent + public void onLivingSpawnEvent(CheckSpawn event) + { + if(!(event.entityLiving instanceof EntityMob)) + { + return; + } + + String respawnRitual = "AW028SpawnWard"; + + Integer dimension = new Integer(event.world.provider.dimensionId); + if(respawnMap.containsKey(dimension)) + { + List list = respawnMap.get(dimension); + + if(list != null) + { + for(CoordAndRange coords : list) + { + TileEntity tile = event.world.getTileEntity(coords.xCoord, coords.yCoord, coords.zCoord); + + if(tile instanceof TEMasterStone && ((TEMasterStone) tile).isRunning && ((TEMasterStone) tile).getCurrentRitual().equals(respawnRitual)) + { + if(event.x > coords.xCoord-coords.horizRadius && event.x < coords.xCoord+coords.horizRadius && event.z > coords.zCoord-coords.horizRadius && event.z < coords.zCoord+coords.horizRadius && event.y > coords.yCoord-coords.vertRadius && event.y < coords.yCoord+coords.vertRadius) + { + switch(event.getResult()) + { + case ALLOW: + event.setResult(Result.DEFAULT); + break; + case DEFAULT: + event.setResult(Result.DENY); + break; + case DENY: + break; + default: + break; + } + break; + } + }else + { + list.remove(coords); + } + } + } + } + + String forceSpawnRitual = "AW028SpawnWard"; + + if(forceSpawnMap.containsKey(dimension)) + { + List list = forceSpawnMap.get(dimension); + + if(list != null) + { + for(CoordAndRange coords : list) + { + TileEntity tile = event.world.getTileEntity(coords.xCoord, coords.yCoord, coords.zCoord); + + if(tile instanceof TEMasterStone && ((TEMasterStone) tile).isRunning && ((TEMasterStone) tile).getCurrentRitual().equals(forceSpawnRitual)) + { + if(event.x > coords.xCoord-coords.horizRadius && event.x < coords.xCoord+coords.horizRadius && event.z > coords.zCoord-coords.horizRadius && event.z < coords.zCoord+coords.horizRadius && event.y > coords.yCoord-coords.vertRadius && event.y < coords.yCoord+coords.vertRadius) + { + switch(event.getResult()) + { + case ALLOW: + break; + case DEFAULT: + event.setResult(Result.ALLOW); + break; + case DENY: + event.setResult(Result.DEFAULT); + break; + default: + break; + } + break; + } + }else + { + list.remove(coords); + } + } + } + } + } + @SubscribeEvent public void onPlayerRespawnEvent(PlayerRespawnEvent event) { @@ -149,6 +266,11 @@ public class AlchemicalWizardryEventHooks } } + if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionFeatherFall)) + { + event.entityLiving.fallDistance = 0; + } + if (event.entityLiving.isPotionActive(AlchemicalWizardry.customPotionDrowning)) { int i = event.entityLiving.getActivePotionEffect(AlchemicalWizardry.customPotionDrowning).getAmplifier(); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java index d4c1198e..7135097c 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/CommonProxy.java @@ -7,6 +7,7 @@ import WayofTime.alchemicalWizardry.common.entity.projectile.EntityBloodLightPro import WayofTime.alchemicalWizardry.common.entity.projectile.EntityEnergyBazookaMainProjectile; import WayofTime.alchemicalWizardry.common.entity.projectile.EntityEnergyBazookaSecondaryProjectile; import WayofTime.alchemicalWizardry.common.entity.projectile.EntityMeteor; +import WayofTime.alchemicalWizardry.common.entity.projectile.EntityParticleBeam; import WayofTime.alchemicalWizardry.common.entity.projectile.ExplosionProjectile; import WayofTime.alchemicalWizardry.common.entity.projectile.FireProjectile; import WayofTime.alchemicalWizardry.common.entity.projectile.HolyProjectile; @@ -48,6 +49,7 @@ public class CommonProxy public void registerEvents() { + } public void registerSoundHandler() @@ -78,6 +80,7 @@ public class CommonProxy EntityRegistry.registerModEntity(EntityBloodLightProjectile.class, "bloodLightProjectile", 12, AlchemicalWizardry.instance, 128, 3, true); EntityRegistry.registerModEntity(EntityMeteor.class, "meteor", 13, AlchemicalWizardry.instance, 120, 3, true); EntityRegistry.registerModEntity(EntitySpellProjectile.class, "spellProjectile", 14, AlchemicalWizardry.instance, 128, 3, true); + EntityRegistry.registerModEntity(EntityParticleBeam.class, "particleBeam", 15, AlchemicalWizardry.instance, 120, 3, true); } public void registerTickHandlers() diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/CoordAndRange.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/CoordAndRange.java new file mode 100644 index 00000000..cb56ceb5 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/CoordAndRange.java @@ -0,0 +1,25 @@ +package WayofTime.alchemicalWizardry.common; + +public class CoordAndRange +{ + public int xCoord; + public int yCoord; + public int zCoord; + public int horizRadius; + public int vertRadius; + + public CoordAndRange(int x, int y, int z, int horiz, int vert) + { + this.xCoord = x; + this.yCoord = y; + this.zCoord = z; + this.horizRadius = horiz; + this.vertRadius = vert; + } + + @Override + public boolean equals(Object o) + { + return o instanceof CoordAndRange ? ((CoordAndRange)o).xCoord == this.xCoord && ((CoordAndRange)o).yCoord == this.yCoord && ((CoordAndRange)o).zCoord == this.zCoord && ((CoordAndRange)o).horizRadius == this.horizRadius && ((CoordAndRange)o).vertRadius == this.vertRadius: false; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/Int3.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/Int3.java index a345cd05..a43776d9 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/Int3.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/Int3.java @@ -1,5 +1,7 @@ package WayofTime.alchemicalWizardry.common; +import net.minecraft.nbt.NBTTagCompound; + public class Int3 { @@ -14,6 +16,20 @@ public class Int3 this.zCoord = zCoord; } + public static Int3 readFromNBT(NBTTagCompound tag) + { + return new Int3(tag.getInteger("xCoord"), tag.getInteger("yCoord"), tag.getInteger("zCoord")); + } + + public NBTTagCompound writeToNBT(NBTTagCompound tag) + { + tag.setInteger("xCoord", xCoord); + tag.setInteger("yCoord", yCoord); + tag.setInteger("zCoord", zCoord); + + return tag; + } + @Override public boolean equals(Object o) { diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java index 9cf82935..1d526216 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/NewPacketHandler.java @@ -5,6 +5,8 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import java.util.EnumMap; +import java.util.LinkedList; +import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; @@ -14,11 +16,13 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.ColourAndCoords; import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; import WayofTime.alchemicalWizardry.common.tileEntity.TEOrientable; import WayofTime.alchemicalWizardry.common.tileEntity.TEPedestal; import WayofTime.alchemicalWizardry.common.tileEntity.TEPlinth; +import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; import WayofTime.alchemicalWizardry.common.tileEntity.TESocket; import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer; import WayofTime.alchemicalWizardry.common.tileEntity.TEWritingTable; @@ -75,6 +79,7 @@ public enum NewPacketHandler clientChannel.pipeline().addAfter(tileAltarCodec, "ParticleHandler", new ParticleMessageHandler()); clientChannel.pipeline().addAfter(tileAltarCodec, "VelocityHandler", new VelocityMessageHandler()); clientChannel.pipeline().addAfter(tileAltarCodec, "TEMasterStoneHandler", new TEMasterStoneMessageHandler()); + clientChannel.pipeline().addAfter(tileAltarCodec, "TEReagentConduitHandler", new TEReagentConduitMessageHandler()); } @@ -242,6 +247,22 @@ public enum NewPacketHandler } } } + + private static class TEReagentConduitMessageHandler extends SimpleChannelInboundHandler + { + @Override + protected void channelRead0(ChannelHandlerContext ctx, TEReagentConduitMessage msg) throws Exception + { + World world = AlchemicalWizardry.proxy.getClientWorld(); + TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z); + if (te instanceof TEReagentConduit) + { + TEReagentConduit reagentConduit = (TEReagentConduit) te; + + reagentConduit.destinationList = msg.destinationList; + } + } + } public static class BMMessage { @@ -343,6 +364,15 @@ public enum NewPacketHandler String ritual; boolean isRunning; } + + public static class TEReagentConduitMessage extends BMMessage + { + int x; + int y; + int z; + + List destinationList; + } private class TEAltarCodec extends FMLIndexedMessageToMessageCodec { @@ -358,6 +388,7 @@ public enum NewPacketHandler addDiscriminator(7, ParticleMessage.class); addDiscriminator(8, VelocityMessage.class); addDiscriminator(9, TEMasterStoneMessage.class); + addDiscriminator(10, TEReagentConduitMessage.class); } @Override @@ -537,6 +568,27 @@ public enum NewPacketHandler target.writeBoolean(((TEMasterStoneMessage)msg).isRunning); + break; + + case 10: + target.writeInt(((TEReagentConduitMessage)msg).x); + target.writeInt(((TEReagentConduitMessage)msg).y); + target.writeInt(((TEReagentConduitMessage)msg).z); + + List list = ((TEReagentConduitMessage)msg).destinationList; + target.writeInt(list.size()); + + for(ColourAndCoords colourSet : list) + { + target.writeInt(colourSet.colourRed); + target.writeInt(colourSet.colourGreen); + target.writeInt(colourSet.colourBlue); + target.writeInt(colourSet.colourIntensity); + target.writeInt(colourSet.xCoord); + target.writeInt(colourSet.yCoord); + target.writeInt(colourSet.zCoord); + } + break; } } @@ -725,6 +777,26 @@ public enum NewPacketHandler ((TEMasterStoneMessage)msg).ritual = ritual; ((TEMasterStoneMessage)msg).isRunning = dat.readBoolean(); + + break; + + case 10: + ((TEReagentConduitMessage)msg).x = dat.readInt(); + ((TEReagentConduitMessage)msg).y = dat.readInt(); + ((TEReagentConduitMessage)msg).z = dat.readInt(); + + int listSize = dat.readInt(); + + List list = new LinkedList(); + + for(int i=0; i < listSize; i++) + { + list.add(new ColourAndCoords(dat.readInt(), dat.readInt(), dat.readInt(), dat.readInt(), dat.readInt(), dat.readInt(), dat.readInt())); + } + + ((TEReagentConduitMessage)msg).destinationList = list; + + break; } } } @@ -857,6 +929,19 @@ public enum NewPacketHandler return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); } + public static Packet getPacket(TEReagentConduit tile) + { + TEReagentConduitMessage msg = new TEReagentConduitMessage(); + msg.index = 10; + msg.x = tile.xCoord; + msg.y = tile.yCoord; + msg.z = tile.zCoord; + + msg.destinationList = tile.destinationList; + + 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); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockAlchemicCalcinator.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockAlchemicCalcinator.java new file mode 100644 index 00000000..6ed95221 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockAlchemicCalcinator.java @@ -0,0 +1,168 @@ +package WayofTime.alchemicalWizardry.common.block; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.items.interfaces.IBloodOrb; +import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; +import WayofTime.alchemicalWizardry.common.tileEntity.TEAlchemicCalcinator; + +public class BlockAlchemicCalcinator extends BlockContainer +{ + public BlockAlchemicCalcinator() + { + super(Material.rock); + setHardness(2.0F); + setResistance(5.0F); + this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.setBlockName("alchemicCalcinator"); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TEAlchemicCalcinator(); + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean hasTileEntity() + { + return true; + } + + @Override + public boolean canProvidePower() + { + return true; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block par5, int par6) + { + dropItems(world, x, y, z); + super.breakBlock(world, x, y, z, par5, par6); + } + + private void dropItems(World world, int x, int y, int z) + { + Random rand = new Random(); + TileEntity tileEntity = world.getTileEntity(x, y, z); + + if (!(tileEntity instanceof IInventory)) + { + return; + } + + IInventory inventory = (IInventory) tileEntity; + + for (int i = 0; i < inventory.getSizeInventory(); i++) + { + ItemStack item = inventory.getStackInSlot(i); + + if (item != null && item.stackSize > 0) + { + float rx = rand.nextFloat() * 0.8F + 0.1F; + float ry = rand.nextFloat() * 0.8F + 0.1F; + float rz = rand.nextFloat() * 0.8F + 0.1F; + EntityItem entityItem = new EntityItem(world, + x + rx, y + ry, z + rz, + new ItemStack(item.getItem(), item.stackSize, item.getItemDamage())); + + if (item.hasTagCompound()) + { + entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy()); + } + + float factor = 0.05F; + entityItem.motionX = rand.nextGaussian() * factor; + entityItem.motionY = rand.nextGaussian() * factor + 0.2F; + entityItem.motionZ = rand.nextGaussian() * factor; + world.spawnEntityInWorld(entityItem); + item.stackSize = 0; + } + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int idk, float what, float these, float are) + { + TEAlchemicCalcinator tileEntity = (TEAlchemicCalcinator) world.getTileEntity(x, y, z); + + if (tileEntity == null || player.isSneaking()) + { + return false; + } + + ItemStack playerItem = player.getCurrentEquippedItem(); + + if (playerItem != null) + { + if(playerItem.getItem() instanceof IReagentManipulator) + { + return false; + } + + if(playerItem.getItem() instanceof IBloodOrb) + { + if(tileEntity.getStackInSlot(0) == null) + { + ItemStack newItem = playerItem.copy(); + newItem.stackSize = 1; + --playerItem.stackSize; + tileEntity.setInventorySlotContents(0, newItem); + } + } + else if(tileEntity.getStackInSlot(1) == null) + { + ItemStack newItem = playerItem.copy(); + newItem.stackSize = 1; + --playerItem.stackSize; + tileEntity.setInventorySlotContents(1, newItem); + } + + } else if (playerItem == null) + { + if(tileEntity.getStackInSlot(1) != null) + { + player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(1)); + tileEntity.setInventorySlotContents(1, null); + }else if(tileEntity.getStackInSlot(0) != null) + { + player.inventory.addItemStackToInventory(tileEntity.getStackInSlot(0)); + tileEntity.setInventorySlotContents(0, null); + } + } + + tileEntity.getWorldObj().markBlockForUpdate(x, y, z); + + return true; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockBelljar.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockBelljar.java new file mode 100644 index 00000000..371177a1 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockBelljar.java @@ -0,0 +1,68 @@ +package WayofTime.alchemicalWizardry.common.block; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.common.tileEntity.TEBellJar; + +public class BlockBelljar extends BlockContainer +{ + public BlockBelljar() + { + super(Material.glass); + setHardness(2.0F); + setResistance(5.0F); + this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.setBlockName("crystalBelljar"); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TEBellJar(); + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean hasTileEntity() + { + return true; + } + + @Override + public boolean canProvidePower() + { + return true; + } + + @Override + public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int meta) + { + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TEBellJar) + { + return ((TEBellJar) tile).getRSPowerOutput(); + } + return 15; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java index 58aa94b2..83c5a91c 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/block/BlockReagentConduit.java @@ -15,7 +15,9 @@ public class BlockReagentConduit extends BlockContainer { public BlockReagentConduit() { - super(Material.rock); + super(Material.cloth); + setHardness(2.0F); + setResistance(5.0F); this.setBlockName("blockReagentConduit"); this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); } @@ -24,7 +26,7 @@ public class BlockReagentConduit extends BlockContainer @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { - super.registerBlockIcons(iconRegister); + this.blockIcon = iconRegister.registerIcon("AlchemicalWizardry:SimpleTransCircle"); } @Override @@ -33,6 +35,12 @@ public class BlockReagentConduit extends BlockContainer return new TEReagentConduit(); } + @Override + public boolean canProvidePower() + { + return true; + } + // @Override // @SideOnly(Side.CLIENT) // public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityBeamParticle.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityBeamParticle.java new file mode 100644 index 00000000..a0cf955c --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityBeamParticle.java @@ -0,0 +1,16 @@ +package WayofTime.alchemicalWizardry.common.entity.projectile; + +import net.minecraft.client.particle.EntityFX; +import net.minecraft.world.World; + +public class EntityBeamParticle extends EntityFX +{ + + protected EntityBeamParticle(World p_i1218_1_, double p_i1218_2_, + double p_i1218_4_, double p_i1218_6_) + { + super(p_i1218_1_, p_i1218_2_, p_i1218_4_, p_i1218_6_); + // TODO Auto-generated constructor stub + } + +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java index 221dc58a..26a26062 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityMeteor.java @@ -50,14 +50,7 @@ public class EntityMeteor extends EnergyBlastProjectile @Override public void onImpact(Entity mop) { - if (mop == shootingEntity && ticksInAir > 3) - { - shootingEntity.attackEntityFrom(DamageSource.causeMobDamage(shootingEntity), 1); - this.setDead(); - } else - { - MeteorRegistry.createMeteorImpact(worldObj, (int) this.posX, (int) this.posY, (int) this.posZ, meteorID); - } + MeteorRegistry.createMeteorImpact(worldObj, (int) this.posX, (int) this.posY, (int) this.posZ, meteorID); this.setDead(); } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityParticleBeam.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityParticleBeam.java new file mode 100644 index 00000000..564e7dea --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/entity/projectile/EntityParticleBeam.java @@ -0,0 +1,350 @@ +package WayofTime.alchemicalWizardry.common.entity.projectile; + +import net.minecraft.client.particle.EntityCloudFX; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.common.registry.IThrowableEntity; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +//Shamelessly ripped off from x3n0ph0b3 +public class EntityParticleBeam extends Entity implements IProjectile, IThrowableEntity +{ + protected int xTile = -1; + protected int yTile = -1; + protected int zTile = -1; + protected int inTile = 0; + protected int inData = 0; + protected float colourRed = 0f; + protected float colourGreen = 0f; + protected float colourBlue = 0f; + protected int xDest = 0; + protected int yDest = 0; + protected int zDest = 0; + protected boolean inGround = false; + /** + * The owner of this arrow. + */ + public EntityLivingBase shootingEntity; + protected int ticksInAir = 0; + protected int maxTicksInAir = 600; + private int ricochetCounter = 0; + private boolean scheduledForDeath = false; + protected int projectileDamage; + + public EntityParticleBeam(World par1World) + { + super(par1World); + this.setSize(0.5F, 0.5F); + this.maxTicksInAir = 600; + } + + public EntityParticleBeam(World par1World, double par2, double par4, double par6) + { + super(par1World); + this.setSize(0.5F, 0.5F); + this.setPosition(par2, par4, par6); + yOffset = 0.0F; + this.maxTicksInAir = 600; + } + + public EntityParticleBeam(World par1World, EntityLivingBase par2EntityPlayer, int damage) + { + super(par1World); + shootingEntity = par2EntityPlayer; + float par3 = 0.8F; + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(par2EntityPlayer.posX, par2EntityPlayer.posY + par2EntityPlayer.getEyeHeight(), par2EntityPlayer.posZ, par2EntityPlayer.rotationYaw, par2EntityPlayer.rotationPitch); + posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; + posY -= 0.2D; + posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; + this.setPosition(posX, posY, posZ); + yOffset = 0.0F; + motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); + motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); + motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); + this.setThrowableHeading(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); + this.projectileDamage = damage; + this.maxTicksInAir = 600; + } + + public EntityParticleBeam(World par1World, EntityLivingBase par2EntityPlayer, int damage, int maxTicksInAir, double posX, double posY, double posZ, float rotationYaw, float rotationPitch) + { + super(par1World); + shootingEntity = par2EntityPlayer; + float par3 = 0.8F; + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch); + posX -= MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; + posY -= 0.2D; + posZ -= MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * 0.16F; + this.setPosition(posX, posY, posZ); + yOffset = 0.0F; + motionX = -MathHelper.sin(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); + motionZ = MathHelper.cos(rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(rotationPitch / 180.0F * (float) Math.PI); + motionY = -MathHelper.sin(rotationPitch / 180.0F * (float) Math.PI); + this.setThrowableHeading(motionX, motionY, motionZ, par3 * 1.5F, 1.0F); + this.projectileDamage = damage; + this.maxTicksInAir = maxTicksInAir; + } + + public EntityParticleBeam(World par1World, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase, float par4, float par5, int damage, int maxTicksInAir) + { + super(par1World); + this.renderDistanceWeight = 10.0D; + this.shootingEntity = par2EntityLivingBase; + this.posY = par2EntityLivingBase.posY + (double) par2EntityLivingBase.getEyeHeight() - 0.10000000149011612D; + double d0 = par3EntityLivingBase.posX - par2EntityLivingBase.posX; + double d1 = par3EntityLivingBase.boundingBox.minY + (double) (par3EntityLivingBase.height / 1.5F) - this.posY; + double d2 = par3EntityLivingBase.posZ - par2EntityLivingBase.posZ; + double d3 = (double) MathHelper.sqrt_double(d0 * d0 + d2 * d2); + + if (d3 >= 1.0E-7D) + { + float f2 = (float) (Math.atan2(d2, d0) * 180.0D / Math.PI) - 90.0F; + float f3 = (float) (-(Math.atan2(d1, d3) * 180.0D / Math.PI)); + double d4 = d0 / d3; + double d5 = d2 / d3; + this.setLocationAndAngles(par2EntityLivingBase.posX + d4, this.posY, par2EntityLivingBase.posZ + d5, f2, f3); + this.yOffset = 0.0F; + float f4 = (float) d3 * 0.2F; + this.setThrowableHeading(d0, d1, d2, par4, par5); + } + + this.projectileDamage = damage; + this.maxTicksInAir = maxTicksInAir; + } + + @Override + protected void entityInit() + { + dataWatcher.addObject(16, Byte.valueOf((byte) 0)); + } + + /** + * Similar to setArrowHeading, it's point the throwable entity to a x, y, z + * direction. + */ + @Override + public void setThrowableHeading(double var1, double var3, double var5, float var7, float var8) + { + float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); + var1 /= var9; + var3 /= var9; + var5 /= var9; + var1 += rand.nextGaussian() * 0.007499999832361937D * var8; + var3 += rand.nextGaussian() * 0.007499999832361937D * var8; + var5 += rand.nextGaussian() * 0.007499999832361937D * var8; + var1 *= var7; + var3 *= var7; + var5 *= var7; + motionX = var1; + motionY = var3; + motionZ = var5; + float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + prevRotationYaw = rotationYaw = (float) (Math.atan2(var1, var5) * 180.0D / Math.PI); + prevRotationPitch = rotationPitch = (float) (Math.atan2(var3, var10) * 180.0D / Math.PI); + } + + @Override + @SideOnly(Side.CLIENT) + /** + * Sets the position and rotation. Only difference from the other one is no bounding on the rotation. Args: posX, + * posY, posZ, yaw, pitch + */ + public void setPositionAndRotation2(double par1, double par3, double par5, float par7, float par8, int par9) + { + this.setPosition(par1, par3, par5); + this.setRotation(par7, par8); + } + + @Override + @SideOnly(Side.CLIENT) + /** + * Sets the velocity to the args. Args: x, y, z + */ + public void setVelocity(double par1, double par3, double par5) + { + motionX = par1; + motionY = par3; + motionZ = par5; + + if (prevRotationPitch == 0.0F && prevRotationYaw == 0.0F) + { + float var7 = MathHelper.sqrt_double(par1 * par1 + par5 * par5); + prevRotationYaw = rotationYaw = (float) (Math.atan2(par1, par5) * 180.0D / Math.PI); + prevRotationPitch = rotationPitch = (float) (Math.atan2(par3, var7) * 180.0D / Math.PI); + prevRotationPitch = rotationPitch; + prevRotationYaw = rotationYaw; + this.setLocationAndAngles(posX, posY, posZ, rotationYaw, rotationPitch); + } + } + + /** + * Called to update the entity's position/logic. + */ + @Override + public void onUpdate() + { + super.onUpdate(); + + if (ticksInAir > maxTicksInAir) + { + this.setDead(); + } + + posX += motionX; + posY += motionY; + posZ += motionZ; + MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ); + this.setPosition(posX, posY, posZ); + + this.doFiringParticles(); + + if(Math.pow(posX - xDest, 2) + Math.pow(posY - yDest, 2) + Math.pow(posZ - zDest, 2) <= 1) + { + this.scheduledForDeath = true; + } + + if(this.scheduledForDeath) + { + this.setDead(); + } + } + + public void doFiringParticles() + { + if(!worldObj.isRemote) + { + return; + } + //worldObj.spawnParticle("mobSpellAmbient", posX + smallGauss(0.1D), posY + smallGauss(0.1D), posZ + smallGauss(0.1D), 0.5D, 0.5D, 0.5D); + EntityFX particle = new EntityCloudFX(worldObj, posX, posY, posZ, 0, 0, 0); + particle.setRBGColorF(colourRed + 0.15f * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()), colourGreen + 0.15f * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()), colourBlue + 0.15f * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat())); + FMLClientHandler.instance().getClient().effectRenderer.addEffect(particle); + //worldObj.spawnParticle("happyVillager", posX, posY, posZ, 0, 0, 0); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + @Override + public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + par1NBTTagCompound.setShort("xTile", (short) xTile); + par1NBTTagCompound.setShort("yTile", (short) yTile); + par1NBTTagCompound.setShort("zTile", (short) zTile); + par1NBTTagCompound.setByte("inTile", (byte) inTile); + par1NBTTagCompound.setByte("inData", (byte) inData); + par1NBTTagCompound.setByte("inGround", (byte) (inGround ? 1 : 0)); + par1NBTTagCompound.setInteger("ticksInAir", ticksInAir); + par1NBTTagCompound.setInteger("maxTicksInAir", maxTicksInAir); + par1NBTTagCompound.setInteger("projectileDamage", this.projectileDamage); + par1NBTTagCompound.setFloat("colourRed", colourRed); + par1NBTTagCompound.setFloat("colourGreen", colourGreen); + par1NBTTagCompound.setFloat("colourBlue", colourBlue); + par1NBTTagCompound.setInteger("xDest", xDest); + par1NBTTagCompound.setInteger("yDest", yDest); + par1NBTTagCompound.setInteger("zDest", zDest); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + @Override + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + xTile = par1NBTTagCompound.getShort("xTile"); + yTile = par1NBTTagCompound.getShort("yTile"); + zTile = par1NBTTagCompound.getShort("zTile"); + inTile = par1NBTTagCompound.getByte("inTile") & 255; + inData = par1NBTTagCompound.getByte("inData") & 255; + inGround = par1NBTTagCompound.getByte("inGround") == 1; + ticksInAir = par1NBTTagCompound.getInteger("ticksInAir"); + maxTicksInAir = par1NBTTagCompound.getInteger("maxTicksInAir"); + projectileDamage = par1NBTTagCompound.getInteger("projectileDamage"); + colourRed = par1NBTTagCompound.getFloat("colourRed"); + colourGreen = par1NBTTagCompound.getFloat("colourGreen"); + colourBlue = par1NBTTagCompound.getFloat("colourBlue"); + xDest = par1NBTTagCompound.getInteger("xDest"); + yDest = par1NBTTagCompound.getInteger("yDest"); + zDest = par1NBTTagCompound.getInteger("zDest"); + } + + @Override + protected boolean canTriggerWalking() + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public float getShadowSize() + { + return 0.0F; + } + + protected void spawnHitParticles(String string, int i) + { + for (int particles = 0; particles < i; particles++) + { + worldObj.spawnParticle(string, posX, posY - (string == "portal" ? 1 : 0), posZ, gaussian(motionX), gaussian(motionY), gaussian(motionZ)); + } + } + + public DamageSource getDamageSource() + { + return DamageSource.causeMobDamage(shootingEntity); + } + + public double smallGauss(double d) + { + return (worldObj.rand.nextFloat() - 0.5D) * d; + } + + public double gaussian(double d) + { + return d + d * ((rand.nextFloat() - 0.5D) / 4); + } + + private int getRicochetMax() + { + return 0; + } + + @Override + public Entity getThrower() + { + // TODO Auto-generated method stub + return this.shootingEntity; + } + + @Override + public void setThrower(Entity entity) + { + if(entity instanceof EntityLivingBase) + this.shootingEntity = (EntityLivingBase)entity; + + } + + public void setColour(float red, float green, float blue) + { + this.colourRed = red; + this.colourGreen = green; + this.colourBlue = blue; + } + + public void setDestination(int xDest, int yDest, int zDest) + { + this.xDest = xDest; + this.yDest = yDest; + this.zDest = zDest; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundArmour.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundArmour.java index 30cbda83..3febfe58 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundArmour.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/BoundArmour.java @@ -22,6 +22,7 @@ import thaumcraft.api.IRunicArmor; import thaumcraft.api.nodes.IRevealer; import WayofTime.alchemicalWizardry.AlchemicalWizardry; import WayofTime.alchemicalWizardry.ModItems; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IAlchemyGoggles; import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; import cpw.mods.fml.common.Optional; @@ -30,7 +31,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @Optional.InterfaceList(value = {@Interface(iface="thaumcraft.api.nodes.IRevealer", modid = "Thaumcraft"), @Interface(iface="thaumcraft.api.IGoggles", modid = "Thaumcraft"), @Interface(iface="thaumcraft.api.IRunicArmor", modid = "Thaumcraft")}) -public class BoundArmour extends ItemArmor implements ISpecialArmor,IBindable ,IRevealer, IGoggles, IRunicArmor +public class BoundArmour extends ItemArmor implements IAlchemyGoggles,ISpecialArmor,IBindable ,IRevealer, IGoggles, IRunicArmor { private static int invSize = 9; private static IIcon helmetIcon; @@ -694,4 +695,30 @@ public class BoundArmour extends ItemArmor implements ISpecialArmor,IBindable ,I return harden; } + + @Override + public boolean showIngameHUD(World world, ItemStack stack, EntityPlayer player) + { + ItemStack[] inv = getInternalInventory(stack); + + if (inv == null) + { + return false; + } + + for (ItemStack item : inv) + { + if (item == null) + { + continue; + } + + if (item.getItem().equals(ModItems.itemSeerSigil)) + { + return true; + } + } + + return false; + } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java index 9f9d949f..9f8189f4 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/ItemComponents.java +++ b/1.7.10/main/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", "EmptyCore", "MagicalesCable", "WoodBrace", "StoneBrace", "ProjectileCore", "SelfCore","MeleeCore","ParadigmBackPlate","OutputCable","FlameCore","IcyCore","GustCore","EarthenCore","InputCable","CrackedRunicPlate","RunicPlate","ScribedRunicPlate","DefaultCore","OffensiveCore","DefensiveCore","EnvironmentalCore","PowerCore","CostCore","PotencyCore","ObsidianBrace"}; + 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","PowerCore","CostCore","PotencyCore","ObsidianBrace","ToolCore"}; @SideOnly(Side.CLIENT) private IIcon[] icons; diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemAttunedCrystal.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemAttunedCrystal.java new file mode 100644 index 00000000..ac8a9326 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemAttunedCrystal.java @@ -0,0 +1,391 @@ +package WayofTime.alchemicalWizardry.common.items.energy; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; +import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; +import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; +import WayofTime.alchemicalWizardry.common.Int3; +import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemAttunedCrystal extends Item implements IReagentManipulator +{ + public static final int maxDistance = 5; + + public IIcon crystalBody; + public IIcon crystalLabel; + + public ItemAttunedCrystal() + { + super(); + this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.hasSubtypes = true; + this.maxStackSize = 1; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) + { + Reagent reagent = this.getReagent(stack); + + String name = super.getItemStackDisplayName(stack); + + if(reagent != null) + { + name = name + " (" + reagent.name + ")"; + } + + return name; + } + + @Override + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) + { + par3List.add("A tool to tune alchemy"); + par3List.add("reagent transmission"); + + if (!(par1ItemStack.stackTagCompound == null)) + { + Reagent reagent = this.getReagent(par1ItemStack); + if(reagent != null) + { + par3List.add("Currently selected reagent: " + reagent.name); + } + + if(this.getHasSavedCoordinates(par1ItemStack)) + { + par3List.add(""); + Int3 coords = this.getCoordinates(par1ItemStack); + par3List.add("Coords: " + coords.xCoord + ", " + coords.yCoord + ", " + coords.zCoord); + par3List.add("Bound Dimension: " + getDimension(par1ItemStack)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) + { + this.crystalBody = iconRegister.registerIcon("AlchemicalWizardry:AttunedCrystal1"); + this.crystalLabel = iconRegister.registerIcon("AlchemicalWizardry:AttunedCrystal2"); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int pass) + { + switch(pass) + { + case 0: + return 256*(256*255 + 255) + 255; + case 1: + Reagent reagent = this.getReagent(stack); + if(reagent != null) + { + return (reagent.getColourRed()*256*256 + reagent.getColourGreen()*256 + reagent.getColourBlue()); + } + break; + } + + return 256*(256*255 + 255) + 255; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderPasses(int meta) + { + return 2; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int pass) + { + switch(pass) + { + case 0: + return this.crystalBody; + case 1: + return this.crystalLabel; + } + return this.itemIcon; + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) + { + if(world.isRemote) + { + return itemStack; + } + + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, false); + + if (movingobjectposition == null) + { + if(player.isSneaking()) + { + this.setHasSavedCoordinates(itemStack, false); + player.addChatComponentMessage(new ChatComponentText("Clearing saved container...")); + } + + return itemStack; + } else + { + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) + { + int x = movingobjectposition.blockX; + int y = movingobjectposition.blockY; + int z = movingobjectposition.blockZ; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(!(tile instanceof IReagentHandler)) + { + return itemStack; + } + + IReagentHandler relay = (IReagentHandler)tile; + + if(player.isSneaking()) + { + ReagentContainerInfo[] infos = relay.getContainerInfo(ForgeDirection.UNKNOWN); + if(infos != null) + { + List reagentList = new LinkedList(); + for(ReagentContainerInfo info : infos) + { + if(info != null) + { + ReagentStack reagentStack = info.reagent; + if(reagentStack != null) + { + Reagent reagent = reagentStack.reagent; + if(reagent != null) + { + reagentList.add(reagent); + } + } + } + } + + Reagent pastReagent = this.getReagent(itemStack); + + boolean goForNext = false; + boolean hasFound = false; + for(Reagent reagent : reagentList) + { + if(goForNext) + { + goForNext = false; + this.setReagentWithNotification(itemStack, reagent, player); + } + + if(reagent == pastReagent) + { + goForNext = true; + hasFound = true; + } + } + + if(hasFound) + { + if(goForNext) + { + this.setReagentWithNotification(itemStack, reagentList.get(0), player); + } + }else + { + if(reagentList.size() >= 1) + { + this.setReagentWithNotification(itemStack, reagentList.get(0), player); + } + } + } + }else + { + if(this.getHasSavedCoordinates(itemStack)) + { + Int3 coords = this.getCoordinates(itemStack); + int dimension = this.getDimension(itemStack); + + if(dimension != world.provider.dimensionId || Math.abs(coords.xCoord - x) > maxDistance || Math.abs(coords.yCoord - y) > maxDistance || Math.abs(coords.zCoord - z) > maxDistance) + { + player.addChatComponentMessage(new ChatComponentText("Linked container is either too far or is in a different dimension.")); + return itemStack; + } + + TileEntity pastTile = world.getTileEntity(coords.xCoord, coords.yCoord, coords.zCoord); + if(!(pastTile instanceof TEReagentConduit)) + { + player.addChatComponentMessage(new ChatComponentText("Can no longer find linked container.")); + return itemStack; + } + + Reagent reagent = this.getReagent(itemStack); + + TEReagentConduit pastRelay = (TEReagentConduit)pastTile; + + if(player.isSneaking()) + { + pastRelay.removeReagentDestinationViaActual(reagent, x, y, z); + }else + { + if(pastRelay.addReagentDestinationViaActual(reagent, x, y, z)) + { + player.addChatComponentMessage(new ChatComponentText("Container is now linked. Transmitting: " + reagent.name)); + }else + { + player.addChatComponentMessage(new ChatComponentText("Linked container has no connections remaining!")); + } + } + world.markBlockForUpdate(coords.xCoord, coords.yCoord, coords.zCoord); + }else + { + int dimension = world.provider.dimensionId; + + this.setDimension(itemStack, dimension); + this.setCoordinates(itemStack, new Int3(x, y, z)); + + player.addChatComponentMessage(new ChatComponentText("Linking to selected container.")); + } + } + } + } + + return itemStack; + } + + public void setCoordinates(ItemStack stack, Int3 coords) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + coords.writeToNBT(tag); + + this.setHasSavedCoordinates(stack, true); + } + + public void setDimension(ItemStack stack, int dimension) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + tag.setInteger("dimension", dimension); + } + + public Int3 getCoordinates(ItemStack stack) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + return Int3.readFromNBT(tag); + } + + public int getDimension(ItemStack stack) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + return tag.getInteger("dimension"); + } + + public void setHasSavedCoordinates(ItemStack stack, boolean flag) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + tag.setBoolean("hasSavedCoordinates", flag); + } + + public boolean getHasSavedCoordinates(ItemStack stack) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + return tag.getBoolean("hasSavedCoordinates"); + } + + public Reagent getReagent(ItemStack stack) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + return ReagentRegistry.getReagentForKey(tag.getString("reagent")); + } + + public void setReagent(ItemStack stack, Reagent reagent) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + tag.setString("reagent", ReagentRegistry.getKeyForReagent(reagent)); + } + + public void setReagentWithNotification(ItemStack stack, Reagent reagent, EntityPlayer player) + { + this.setReagent(stack, reagent); + + if(reagent != null) + { + player.addChatComponentMessage(new ChatComponentText("Attuned Crystal now set to: " + reagent.name)); + } + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemDestinationClearer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemDestinationClearer.java new file mode 100644 index 00000000..38ae34fc --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemDestinationClearer.java @@ -0,0 +1,82 @@ +package WayofTime.alchemicalWizardry.common.items.energy; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; +import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; +import WayofTime.alchemicalWizardry.common.Int3; +import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemDestinationClearer extends Item implements IReagentManipulator +{ + public ItemDestinationClearer() + { + super(); + this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.maxStackSize = 1; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) + { + this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:TankClearer"); + } + + @Override + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) + { + par3List.add("Used to clear the destination"); + par3List.add("list for an alchemy container"); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) + { + if(world.isRemote) + { + return itemStack; + } + + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, false); + + if (movingobjectposition == null) + { + return itemStack; + } else + { + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) + { + int x = movingobjectposition.blockX; + int y = movingobjectposition.blockY; + int z = movingobjectposition.blockZ; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(!(tile instanceof TEReagentConduit)) + { + return itemStack; + } + + TEReagentConduit relay = (TEReagentConduit)tile; + + relay.reagentTargetList.clear(); + + player.addChatComponentMessage(new ChatComponentText("Destination list now cleared.")); + } + } + + return itemStack; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemTankSegmenter.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemTankSegmenter.java new file mode 100644 index 00000000..14772607 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/energy/ItemTankSegmenter.java @@ -0,0 +1,278 @@ +package WayofTime.alchemicalWizardry.common.items.energy; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ISegmentedReagentHandler; +import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; +import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; +import WayofTime.alchemicalWizardry.common.Int3; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemTankSegmenter extends Item implements IReagentManipulator +{ + public IIcon crystalBody; + public IIcon crystalLabel; + + public ItemTankSegmenter() + { + super(); + this.setCreativeTab(AlchemicalWizardry.tabBloodMagic); + this.hasSubtypes = true; + this.maxStackSize = 1; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) + { + Reagent reagent = this.getReagent(stack); + + String name = super.getItemStackDisplayName(stack); + + if(reagent != null) + { + name = name + " (" + reagent.name + ")"; + } + + return name; + } + + @Override + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) + { + par3List.add("Used to designate which"); + par3List.add("reagents can go into a container"); + + if (!(par1ItemStack.stackTagCompound == null)) + { + Reagent reagent = this.getReagent(par1ItemStack); + if(reagent != null) + { + par3List.add("Currently selected reagent: " + reagent.name); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) + { + this.crystalBody = iconRegister.registerIcon("AlchemicalWizardry:TankSegmenter1"); + this.crystalLabel = iconRegister.registerIcon("AlchemicalWizardry:TankSegmenter2"); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int pass) + { + switch(pass) + { + case 0: + return 256*(256*255 + 255) + 255; + case 1: + Reagent reagent = this.getReagent(stack); + if(reagent != null) + { + return (reagent.getColourRed()*256*256 + reagent.getColourGreen()*256 + reagent.getColourBlue()); + } + break; + } + + return 256*(256*255 + 255) + 255; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() + { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderPasses(int meta) + { + return 2; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int pass) + { + switch(pass) + { + case 0: + return this.crystalBody; + case 1: + return this.crystalLabel; + } + return this.itemIcon; + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) + { + if(world.isRemote) + { + return itemStack; + } + + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(world, player, false); + + if (movingobjectposition == null) + { + return itemStack; + } else + { + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) + { + int x = movingobjectposition.blockX; + int y = movingobjectposition.blockY; + int z = movingobjectposition.blockZ; + + TileEntity tile = world.getTileEntity(x, y, z); + + if(!(tile instanceof ISegmentedReagentHandler)) + { + return itemStack; + } + + ISegmentedReagentHandler reagentHandler = (ISegmentedReagentHandler)tile; + + if(player.isSneaking()) + { + ReagentContainerInfo[] infos = reagentHandler.getContainerInfo(ForgeDirection.UNKNOWN); + if(infos != null) + { + List reagentList = new LinkedList(); + for(ReagentContainerInfo info : infos) + { + if(info != null) + { + ReagentStack reagentStack = info.reagent; + if(reagentStack != null) + { + Reagent reagent = reagentStack.reagent; + if(reagent != null) + { + reagentList.add(reagent); + } + } + } + } + + Reagent pastReagent = this.getReagent(itemStack); + + boolean goForNext = false; + boolean hasFound = false; + for(Reagent reagent : reagentList) + { + if(goForNext) + { + goForNext = false; + break; + } + + if(reagent == pastReagent) + { + goForNext = true; + hasFound = true; + } + } + + if(hasFound) + { + if(goForNext) + { + this.setReagentWithNotification(itemStack, reagentList.get(0), player); + } + }else + { + if(reagentList.size() >= 1) + { + this.setReagentWithNotification(itemStack, reagentList.get(0), player); + } + } + } + + }else + { + Reagent reagent = this.getReagent(itemStack); + if(reagent == null) + { + //TODO: Send message that "All are wiped" + reagentHandler.getAttunedTankMap().clear(); + return itemStack; + } + int totalTankSize = reagentHandler.getNumberOfTanks(); + int numberAssigned = reagentHandler.getTanksTunedToReagent(reagent) + 1; + + if(numberAssigned > totalTankSize) + { + numberAssigned = 0; + } + + player.addChatComponentMessage(new ChatComponentText("Tank now has " + numberAssigned + " tank(s) set to: " + reagent.name)); + + reagentHandler.setTanksTunedToReagent(reagent, numberAssigned); + } + }else if(movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.MISS) + { + this.setReagent(itemStack, null); + } + } + + return itemStack; + } + + public Reagent getReagent(ItemStack stack) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + return ReagentRegistry.getReagentForKey(tag.getString("reagent")); + } + + public void setReagent(ItemStack stack, Reagent reagent) + { + if(!stack.hasTagCompound()) + { + stack.setTagCompound(new NBTTagCompound()); + } + + NBTTagCompound tag = stack.getTagCompound(); + + tag.setString("reagent", ReagentRegistry.getKeyForReagent(reagent)); + } + + public void setReagentWithNotification(ItemStack stack, Reagent reagent, EntityPlayer player) + { + this.setReagent(stack, reagent); + + if(reagent != null) + { + player.addChatComponentMessage(new ChatComponentText("Tank Segmenter now set to: " + reagent.name)); + } + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/sigil/DivinationSigil.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/sigil/DivinationSigil.java index a5d61a79..a04d73be 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/sigil/DivinationSigil.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/sigil/DivinationSigil.java @@ -9,16 +9,23 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; -import WayofTime.alchemicalWizardry.common.PacketHandler; +import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; +import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; import WayofTime.alchemicalWizardry.common.items.EnergyItems; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class DivinationSigil extends Item implements ArmourUpgrade +public class DivinationSigil extends Item implements ArmourUpgrade, IReagentManipulator, IBindable { public DivinationSigil() { @@ -67,8 +74,44 @@ public class DivinationSigil extends Item implements ArmourUpgrade String ownerName = itemTag.getString("ownerName"); //PacketDispatcher.sendPacketToServer(PacketHandler.getPacket(ownerName)); int currentEssence = EnergyItems.getCurrentEssence(ownerName); - - par3EntityPlayer.addChatMessage(new ChatComponentText("Current Essence: " + EnergyItems.getCurrentEssence(ownerName) + "LP")); + + MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(par2World, par3EntityPlayer, false); + + if (movingobjectposition == null) + { + par3EntityPlayer.addChatMessage(new ChatComponentText("Current Essence: " + EnergyItems.getCurrentEssence(ownerName) + "LP")); + + return par1ItemStack; + } else + { + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) + { + int x = movingobjectposition.blockX; + int y = movingobjectposition.blockY; + int z = movingobjectposition.blockZ; + + TileEntity tile = par2World.getTileEntity(x, y, z); + + if(!(tile instanceof IReagentHandler)) + { + return par1ItemStack; + } + + IReagentHandler relay = (IReagentHandler)tile; + + ReagentContainerInfo[] infoList = relay.getContainerInfo(ForgeDirection.UNKNOWN); + if(infoList != null) + { + for(ReagentContainerInfo info : infoList) + { + if(info != null && info.reagent != null && info.reagent.reagent != null) + { + par3EntityPlayer.addChatComponentMessage(new ChatComponentText("Reagent: " + ReagentRegistry.getKeyForReagent(info.reagent.reagent) + ", Amount: " + info.reagent.amount)); + } + } + } + } + } return par1ItemStack; } @@ -77,7 +120,7 @@ public class DivinationSigil extends Item implements ArmourUpgrade public void onArmourUpdate(World world, EntityPlayer player, ItemStack thisItemStack) { // TODO Auto-generated method stub - player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 400, 9,true)); + player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 400, 9, true)); } @Override diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemSeerSigil.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemSeerSigil.java index 827a3244..ea4e4db2 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemSeerSigil.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/sigil/ItemSeerSigil.java @@ -2,21 +2,20 @@ package WayofTime.alchemicalWizardry.common.items.sigil; import java.util.List; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.items.interfaces.ArmourUpgrade; import WayofTime.alchemicalWizardry.api.items.interfaces.IHolding; import WayofTime.alchemicalWizardry.common.items.EnergyItems; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class ItemSeerSigil extends Item implements IHolding +public class ItemSeerSigil extends Item implements IHolding, ArmourUpgrade { public ItemSeerSigil() { @@ -64,4 +63,26 @@ public class ItemSeerSigil extends Item implements IHolding return par1ItemStack; } + + @Override + public void onArmourUpdate(World world, EntityPlayer player, + ItemStack thisItemStack) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean isUpgrade() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public int getEnergyForTenSeconds() + { + // TODO Auto-generated method stub + return 0; + } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/thaumcraft/ItemSanguineArmour.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/thaumcraft/ItemSanguineArmour.java index e418babc..6a91c8f8 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/thaumcraft/ItemSanguineArmour.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/items/thaumcraft/ItemSanguineArmour.java @@ -164,10 +164,10 @@ public class ItemSanguineArmour extends ItemArmor implements ArmourUpgrade, IGog { switch(this.armorType) { - case 0: return 8; - case 1: return 4; - case 2: return 3; - case 3: return 3; + case 0: return 7; + case 1: return 3; + case 2: return 2; + case 3: return 2; } return 0; } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/potion/PotionDeaf.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/potion/PotionDeaf.java new file mode 100644 index 00000000..fc46e77b --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/potion/PotionDeaf.java @@ -0,0 +1,18 @@ +package WayofTime.alchemicalWizardry.common.potion; + +import net.minecraft.potion.Potion; + +public class PotionDeaf extends Potion +{ + public PotionDeaf(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.10/main/java/WayofTime/alchemicalWizardry/common/potion/PotionFeatherFall.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/potion/PotionFeatherFall.java new file mode 100644 index 00000000..0c35263b --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/potion/PotionFeatherFall.java @@ -0,0 +1,18 @@ +package WayofTime.alchemicalWizardry.common.potion; + +import net.minecraft.potion.Potion; + +public class PotionFeatherFall extends Potion +{ + public PotionFeatherFall(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.10/main/java/WayofTime/alchemicalWizardry/common/renderer/BeamRenderer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/BeamRenderer.java index e8c78f78..01f6d125 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/BeamRenderer.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/BeamRenderer.java @@ -8,16 +8,54 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import cpw.mods.fml.client.FMLClientHandler; +import WayofTime.alchemicalWizardry.api.ColourAndCoords; public class BeamRenderer { private static final ResourceLocation field_110629_a = new ResourceLocation("textures/entity/beacon_beam.png"); - protected static TileEntityRendererDispatcher field_147501_a; - + + public int xInit; + public int yInit; + public int zInit; + + public int xFinal; + public int yFinal; + public int zFinal; + + public int colourRed; + public int colourGreen; + public int colourBlue; + public int colourIntensity; + + public double size; + + public void setInitialPosition(int x, int y, int z) + { + this.xInit = x; + this.yInit = y; + this.zInit = z; + } + + public void setColourAndFinalPosition(ColourAndCoords col) + { + this.colourRed = col.colourRed; + this.colourGreen = col.colourGreen; + this.colourBlue = col.colourBlue; + this.colourIntensity = col.colourIntensity; + + this.xFinal = col.xCoord; + this.yFinal = col.yCoord; + this.zFinal = col.zCoord; + } + + public void setSize(double size) + { + this.size = size; + } + protected static void bindTexture(ResourceLocation p_147499_1_) { - TextureManager texturemanager = BeamRenderer.field_147501_a.field_147553_e; + TextureManager texturemanager = TileEntityRendererDispatcher.instance.field_147553_e; if (texturemanager != null) { @@ -25,14 +63,16 @@ public class BeamRenderer } } - public static void render() + public void render(double d0, double d1, double d2) { - double d0 = 0; - double d1 = 0; - double d2 = 0; - - - float distance = 5; //Total distance + int xDiff = this.xFinal - this.xInit; + int yDiff = this.yFinal - this.yInit; + int zDiff = this.zFinal - this.zInit; + + float planarAngle = (float)(Math.atan2(-zDiff, xDiff) * 180d / Math.PI); //Radians + float verticalAngle = (float)(Math.atan2(yDiff, Math.sqrt(xDiff*xDiff + zDiff+zDiff)) * 180d / Math.PI); + + float distance = (float) Math.sqrt(xDiff*xDiff + yDiff*yDiff + zDiff*zDiff); //Total distance GL11.glPushMatrix(); float f1 = 1.0f; @@ -51,11 +91,11 @@ public class BeamRenderer GL11.glDepthMask(false); tessellator.startDrawingQuads(); - tessellator.setColorRGBA(255, 0, 0, 50); + tessellator.setColorRGBA(colourRed, colourGreen, colourBlue, colourIntensity); //tessellator.setColorOpaque(255, 255, 255); - double inside = 0.45d-0.5d; - double outside = 1.0d-0.45d-0.5d; + double inside = -(this.size/2d); + double outside = 1.0d-(0.50d - this.size/2d)-0.5d; double d18 = inside; double d19 = inside; @@ -73,8 +113,8 @@ public class BeamRenderer GL11.glTranslated(d0+0.5, d1+0.5, d2+0.5); - GL11.glRotatef(45F, 0F, 1F, 0F); //Rotate on planar axis - GL11.glRotatef(30F, 0F, 0F, 1F); //Rotate vertical axis + GL11.glRotatef(planarAngle, 0F, 1F, 0F); //Rotate on planar axis + GL11.glRotatef(verticalAngle, 0F, 0F, 1F); //Rotate vertical axis //GL11.glRotatef(tileAltar.getWorldObj().getWorldTime()*2f, 1F, 0F, 0F); //Rotate cylindrically double offset = 0; diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAlchemicCalcinator.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAlchemicCalcinator.java new file mode 100644 index 00000000..59c70a85 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderAlchemicCalcinator.java @@ -0,0 +1,485 @@ +package WayofTime.alchemicalWizardry.common.renderer.block; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelAlchemicalCalcinator; +import WayofTime.alchemicalWizardry.common.tileEntity.TEAlchemicCalcinator; +import cpw.mods.fml.client.FMLClientHandler; + +public class RenderAlchemicCalcinator extends TileEntitySpecialRenderer +{ + private final RenderItem customRenderItem; + private ModelAlchemicalCalcinator modelConduit = new ModelAlchemicalCalcinator(); + + private ResourceLocation resourceLocation = new ResourceLocation("alchemicalwizardry:textures/models/Reagent.png"); + + public RenderAlchemicCalcinator() + { + customRenderItem = new RenderItem() + { + @Override + public boolean shouldBob() + { + return false; + } + }; + customRenderItem.setRenderManager(RenderManager.instance); + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) + { + if (tileEntity instanceof TEAlchemicCalcinator) + { + TEAlchemicCalcinator tileAltar = (TEAlchemicCalcinator) 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/AlchemicalCalcinator.png"); + 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.modelConduit.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + //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); + + GL11.glPushMatrix(); + + if (tileAltar.getStackInSlot(1) != null) + { + float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(1)); + EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorldObj()); + ghostEntityItem.hoverStart = 0.0F; + ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(1)); + //translateGhostItemByOrientation(ghostEntityItem.getEntityItem(), d0, d1, d2, ForgeDirection.DOWN); + float displacement = 0.2F; + + if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) + { + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.7F, (float) d2 + 0.5F); + } else + { + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 10.4f / 16.0f, (float) d2 + 0.5F - 0.0625f*2f); + } + + //GL11.glTranslatef((float) tileAltar.xCoord + 0.5F, (float) tileAltar.yCoord + 2.7F, (float) tileAltar.zCoord + 0.5F); + GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); + + if (!(ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock)) + { + GL11.glRotatef(90f, 1.0f, 0.0f, 0.0F); + } + + customRenderItem.doRender(ghostEntityItem, 0, 0, 0, 0, 0); + } + + + GL11.glPopMatrix(); + GL11.glPushMatrix(); + + if (tileAltar.getStackInSlot(0) != null) + { + float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(0)); + EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorldObj()); + ghostEntityItem.hoverStart = 0.0F; + ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(0)); + //translateGhostItemByOrientation(ghostEntityItem.getEntityItem(), d0, d1, d2, ForgeDirection.DOWN); + float displacement = -0.5F; + + if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) + { + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 0.7F, (float) d2 + 0.5F); + } else + { + GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + displacement + 10.4f / 16.0f, (float) d2 + 0.5F - 0.0625f*2f); + } + + //GL11.glTranslatef((float) tileAltar.xCoord + 0.5F, (float) tileAltar.yCoord + 2.7F, (float) tileAltar.zCoord + 0.5F); + GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); + + if (!(ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock)) + { + GL11.glRotatef(90f, 1.0f, 0.0f, 0.0F); + } + + customRenderItem.doRender(ghostEntityItem, 0, 0, 0, 0, 0); + } + + GL11.glPopMatrix(); + + + ReagentContainerInfo[] info = tileAltar.getContainerInfo(ForgeDirection.UNKNOWN); + if(info.length >= 1 && info[0] != null) + { + ReagentStack reagentStack = info[0].reagent; + int capacity = info[0].capacity; + if(reagentStack != null && reagentStack.reagent != null) + { + Reagent reagent = reagentStack.reagent; + this.renderTankContents(d0, d1, d2, reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), 200 * reagentStack.amount / capacity); + } + } + + + +// for (int i = 0; i <= 1; i++) +// { +// GL11.glPushMatrix(); +// +// if (tileAltar.getStackInSlot(i) != null) +// { +// float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(i)); +// float rotationAngle = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); +// EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorldObj()); +// ghostEntityItem.hoverStart = 0.0F; +// ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(i)); +// //translateGhostItemByOrientation(ghostEntityItem.getEntityItem(), d0, d1, d2, ForgeDirection.DOWN); +// float displacementX = getXDisplacementForSlot(i); +// float displacementY = getYDisplacementForSlot(i); +// float displacementZ = getZDisplacementForSlot(i); +// +// if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) +// { +// GL11.glTranslatef((float) d0 + 0.5F + displacementX, (float) d1 + displacementY + 0.7F, (float) d2 + 0.5F + displacementZ); +// } else +// { +// GL11.glTranslatef((float) d0 + 0.5F + displacementX, (float) d1 + displacementY + 0.6F, (float) d2 + 0.5F + displacementZ); +// } +// +// //GL11.glTranslatef((float) tileAltar.xCoord + 0.5F, (float) tileAltar.yCoord + 2.7F, (float) tileAltar.zCoord + 0.5F); +// GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); +// GL11.glRotatef(rotationAngle, 0.0F, 1.0F, 0.0F); +// customRenderItem.doRender(ghostEntityItem, 0, 0, 0, 0, 0); +// } +// +// GL11.glPopMatrix(); +// } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + } + + private void renderTankContents(double x, double y, double z, int colourRed, int colourGreen, int colourBlue, int colourIntensity) + { + GL11.glPushMatrix(); + float f1 = 1.0f; + Tessellator tessellator = Tessellator.instance; + this.bindTexture(resourceLocation); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + float f2 = 0; + float f3 = -f2 * 0.2F - (float)MathHelper.floor_float(-f2 * 0.1F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + GL11.glDepthMask(false); + + tessellator.startDrawingQuads(); + tessellator.setColorRGBA(colourRed, colourGreen, colourBlue, colourIntensity); + + GL11.glTranslated(x+0.5, y+0.5, z+0.5); + //GL11.glRotatef(30F, 0F, 0F, 1F); //Rotate vertical axis + //GL11.glRotatef(tileAltar.getWorldObj().getWorldTime()*2f, 1F, 0F, 0F); //Rotate cylindrically + + tessellator.setBrightness(240); + + double x1 = -7d/16d; + double x2 = 7d/16d; + double y1 = 1d/16d; + double y2 = 5d/16d; + double z1 = -7d/16d; + double z2 = 7d/16d; + + double resx1 = 0.0d; + double resx2 = 0.0d; + double resy1 = 1.0d; + double resy2 = 1.0d; + + tessellator.addVertexWithUV(x1, y1, z1, resx1, resy1); + tessellator.addVertexWithUV(x2, y1, z1, resx2, resy1); + tessellator.addVertexWithUV(x2, y2, z1, resx2, resy2); + tessellator.addVertexWithUV(x1, y2, z1, resx1, resy2); + tessellator.addVertexWithUV(x1, y1, z1, resx1, resy1); + tessellator.addVertexWithUV(x1, y1, z2, resx2, resy1); + tessellator.addVertexWithUV(x1, y2, z2, resx2, resy2); + tessellator.addVertexWithUV(x1, y2, z1, resx1, resy2); + tessellator.addVertexWithUV(x1, y1, z2, resx1, resy1); + tessellator.addVertexWithUV(x2, y1, z2, resx2, resy1); + tessellator.addVertexWithUV(x2, y2, z2, resx2, resy2); + tessellator.addVertexWithUV(x1, y2, z2, resx1, resy2); + tessellator.addVertexWithUV(x2, y1, z1, resx1, resy1); + tessellator.addVertexWithUV(x2, y1, z2, resx2, resy1); + tessellator.addVertexWithUV(x2, y2, z2, resx2, resy2); + tessellator.addVertexWithUV(x2, y2, z1, resx1, resy2); + tessellator.draw(); + + GL11.glDepthMask(true); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glPopMatrix(); + } + + private float getGhostItemScaleFactor(ItemStack itemStack) + { + float scaleFactor = 1.5F; + + if (itemStack != null) + { + if (itemStack.getItem() instanceof ItemBlock) + { + switch (customRenderItem.getMiniBlockCount(itemStack,(byte)1)) + { + case 1: + return 0.90F * scaleFactor; + + case 2: + return 0.90F * scaleFactor; + + case 3: + return 0.90F * scaleFactor; + + case 4: + return 0.90F * scaleFactor; + + case 5: + return 0.80F * scaleFactor; + + default: + return 0.90F * scaleFactor; + } + } else + { + switch (customRenderItem.getMiniItemCount(itemStack,(byte)1)) + { + case 1: + return 0.65F * scaleFactor; + + case 2: + return 0.65F * scaleFactor; + + case 3: + return 0.65F * scaleFactor; + + case 4: + return 0.65F * scaleFactor; + + default: + return 0.65F * scaleFactor; + } + } + } + + return scaleFactor; + } + + private float getXDisplacementForSlot(int slot) + { + switch (slot) + { + case 0: + return 0.0f; + + case 1: + return -0.375f; + + case 2: + return -0.125f; + + case 3: + return 0.3125f; + + case 4: + return 0.3125f; + + case 5: + return -0.125f; + + default: + return 0.0f; + } + } + + private float getYDisplacementForSlot(int slot) + { + switch (slot) + { + case 0: + return 0.4f; + + case 1: + return -0.35f; + + case 6: + return 0.4f; + + default: + return -0.35f; + } + } + + private float getZDisplacementForSlot(int slot) + { + switch (slot) + { + case 0: + return 0.0f; + + case 1: + return 0.0f; + + case 2: + return 0.375f; + + case 3: + return 0.25f; + + case 4: + return -0.25f; + + case 5: + return -0.375f; + + default: + return 0.0f; + } + } + + private void translateGhostItemByOrientation(ItemStack ghostItemStack, double x, double y, double z, ForgeDirection forgeDirection) + { + if (ghostItemStack != null) + { + if (ghostItemStack.getItem() instanceof ItemBlock) + { + switch (forgeDirection) + { + case DOWN: + { + GL11.glTranslatef((float) x + 0.5F, (float) y + 2.7F, (float) z + 0.5F); + return; + } + + case UP: + { + GL11.glTranslatef((float) x + 0.5F, (float) y + 0.25F, (float) z + 0.5F); + return; + } + + case NORTH: + { + GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.7F); + return; + } + + case SOUTH: + { + GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.3F); + return; + } + + case EAST: + { + GL11.glTranslatef((float) x + 0.3F, (float) y + 0.5F, (float) z + 0.5F); + return; + } + + case WEST: + { + GL11.glTranslatef((float) x + 0.70F, (float) y + 0.5F, (float) z + 0.5F); + return; + } + + case UNKNOWN: + { + return; + } + + default: + { + return; + } + } + } else + { + switch (forgeDirection) + { + case DOWN: + { + GL11.glTranslatef((float) x + 0.5F, (float) y + 0.6F, (float) z + 0.5F); + return; + } + + case UP: + { + GL11.glTranslatef((float) x + 0.5F, (float) y + 0.20F, (float) z + 0.5F); + return; + } + + case NORTH: + { + GL11.glTranslatef((float) x + 0.5F, (float) y + 0.4F, (float) z + 0.7F); + return; + } + + case SOUTH: + { + GL11.glTranslatef((float) x + 0.5F, (float) y + 0.4F, (float) z + 0.3F); + return; + } + + case EAST: + { + GL11.glTranslatef((float) x + 0.3F, (float) y + 0.4F, (float) z + 0.5F); + return; + } + + case WEST: + { + GL11.glTranslatef((float) x + 0.70F, (float) y + 0.4F, (float) z + 0.5F); + return; + } + + case UNKNOWN: + { + return; + } + + default: + { + return; + } + } + } + } + } +} \ No newline at end of file diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderCrystalBelljar.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderCrystalBelljar.java new file mode 100644 index 00000000..c5d0a372 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderCrystalBelljar.java @@ -0,0 +1,184 @@ +package WayofTime.alchemicalWizardry.common.renderer.block; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainerInfo; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelAlchemicalCalcinator; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelCrystalBelljar; +import WayofTime.alchemicalWizardry.common.tileEntity.TEBellJar; +import cpw.mods.fml.client.FMLClientHandler; + +public class RenderCrystalBelljar extends TileEntitySpecialRenderer +{ + private ModelCrystalBelljar modelConduit = new ModelCrystalBelljar(); + + private ResourceLocation resourceLocation = new ResourceLocation("alchemicalwizardry:textures/models/Reagent.png"); + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) + { + if (tileEntity instanceof TEBellJar) + { + TEBellJar tileAltar = (TEBellJar) 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/CrystalBelljar.png"); + 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.modelConduit.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + //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); + + + + + ReagentContainerInfo[] info = tileAltar.getContainerInfo(ForgeDirection.UNKNOWN); + if(info.length >= 1 && info[0] != null) + { + ReagentStack reagentStack = info[0].reagent; + int capacity = info[0].capacity; + if(reagentStack != null && reagentStack.reagent != null) + { + Reagent reagent = reagentStack.reagent; + this.renderTankContents(d0, d1, d2, reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), 200 * reagentStack.amount / capacity); + } + } + +// this.renderTankContents(d0, d1, d2, 255, 0, 0, 200); + + + + +// for (int i = 0; i <= 1; i++) +// { +// GL11.glPushMatrix(); +// +// if (tileAltar.getStackInSlot(i) != null) +// { +// float scaleFactor = getGhostItemScaleFactor(tileAltar.getStackInSlot(i)); +// float rotationAngle = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL); +// EntityItem ghostEntityItem = new EntityItem(tileAltar.getWorldObj()); +// ghostEntityItem.hoverStart = 0.0F; +// ghostEntityItem.setEntityItemStack(tileAltar.getStackInSlot(i)); +// //translateGhostItemByOrientation(ghostEntityItem.getEntityItem(), d0, d1, d2, ForgeDirection.DOWN); +// float displacementX = getXDisplacementForSlot(i); +// float displacementY = getYDisplacementForSlot(i); +// float displacementZ = getZDisplacementForSlot(i); +// +// if (ghostEntityItem.getEntityItem().getItem() instanceof ItemBlock) +// { +// GL11.glTranslatef((float) d0 + 0.5F + displacementX, (float) d1 + displacementY + 0.7F, (float) d2 + 0.5F + displacementZ); +// } else +// { +// GL11.glTranslatef((float) d0 + 0.5F + displacementX, (float) d1 + displacementY + 0.6F, (float) d2 + 0.5F + displacementZ); +// } +// +// //GL11.glTranslatef((float) tileAltar.xCoord + 0.5F, (float) tileAltar.yCoord + 2.7F, (float) tileAltar.zCoord + 0.5F); +// GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); +// GL11.glRotatef(rotationAngle, 0.0F, 1.0F, 0.0F); +// customRenderItem.doRender(ghostEntityItem, 0, 0, 0, 0, 0); +// } +// +// GL11.glPopMatrix(); +// } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + } + + private void renderTankContents(double x, double y, double z, int colourRed, int colourGreen, int colourBlue, int colourIntensity) + { + GL11.glPushMatrix(); + float f1 = 1.0f; + Tessellator tessellator = Tessellator.instance; + this.bindTexture(resourceLocation); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + float f2 = 0; + float f3 = -f2 * 0.2F - (float)MathHelper.floor_float(-f2 * 0.1F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + GL11.glDepthMask(false); + + tessellator.startDrawingQuads(); + tessellator.setColorRGBA(colourRed, colourGreen, colourBlue, colourIntensity); + + GL11.glTranslated(x+0.5, y+0.5, z+0.5); + //GL11.glRotatef(30F, 0F, 0F, 1F); //Rotate vertical axis + //GL11.glRotatef(tileAltar.getWorldObj().getWorldTime()*2f, 1F, 0F, 0F); //Rotate cylindrically + + tessellator.setBrightness(240); + + double x1 = -4d/16d; + double x2 = 4d/16d; + double y1 = -6d/16d; + double y2 = 4d/16d; + double z1 = -4d/16d; + double z2 = 4d/16d; + + double resx1 = 0.0d; + double resx2 = 0.0d; + double resy1 = 1.0d; + double resy2 = 1.0d; + + tessellator.addVertexWithUV(x1, y1, z1, resx1, resy1); + tessellator.addVertexWithUV(x2, y1, z1, resx2, resy1); + tessellator.addVertexWithUV(x2, y2, z1, resx2, resy2); + tessellator.addVertexWithUV(x1, y2, z1, resx1, resy2); + tessellator.addVertexWithUV(x1, y1, z1, resx1, resy1); + tessellator.addVertexWithUV(x1, y1, z2, resx2, resy1); + tessellator.addVertexWithUV(x1, y2, z2, resx2, resy2); + tessellator.addVertexWithUV(x1, y2, z1, resx1, resy2); + tessellator.addVertexWithUV(x1, y1, z2, resx1, resy1); + tessellator.addVertexWithUV(x2, y1, z2, resx2, resy1); + tessellator.addVertexWithUV(x2, y2, z2, resx2, resy2); + tessellator.addVertexWithUV(x1, y2, z2, resx1, resy2); + tessellator.addVertexWithUV(x2, y1, z1, resx1, resy1); + tessellator.addVertexWithUV(x2, y1, z2, resx2, resy1); + tessellator.addVertexWithUV(x2, y2, z2, resx2, resy2); + tessellator.addVertexWithUV(x2, y2, z1, resx1, resy2); + tessellator.addVertexWithUV(x1, y2, z1, resx1, resy1); + tessellator.addVertexWithUV(x2, y2, z1, resx2, resy1); + tessellator.addVertexWithUV(x2, y2, z2, resx2, resy2); + tessellator.addVertexWithUV(x1, y2, z2, resx1, resy2); + tessellator.draw(); + + GL11.glDepthMask(true); + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glPopMatrix(); + } +} \ No newline at end of file diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPedestal.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPedestal.java index 3a474a32..47e63753 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPedestal.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPedestal.java @@ -44,7 +44,7 @@ public class RenderPedestal extends TileEntitySpecialRenderer { TEPedestal tileAltar = (TEPedestal) tileEntity; GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); /** * Render the ghost item inside of the Altar, slowly spinning */ @@ -92,7 +92,7 @@ public class RenderPedestal extends TileEntitySpecialRenderer GL11.glPushMatrix(); GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); FMLClientHandler.instance().getClient().renderEngine.bindTexture(test); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPlinth.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPlinth.java index 14063a37..6a233520 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPlinth.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderPlinth.java @@ -42,7 +42,7 @@ public class RenderPlinth extends TileEntitySpecialRenderer { TEPlinth tileAltar = (TEPlinth) tileEntity; GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); /** * Render the ghost item inside of the Altar, slowly spinning */ diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderReagentConduit.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderReagentConduit.java index bafec76d..66c743d7 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderReagentConduit.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderReagentConduit.java @@ -8,19 +8,24 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import WayofTime.alchemicalWizardry.common.renderer.BeamRenderer; +import WayofTime.alchemicalWizardry.common.Int3; import WayofTime.alchemicalWizardry.common.tileEntity.TEReagentConduit; -import cpw.mods.fml.client.FMLClientHandler; public class RenderReagentConduit extends TileEntitySpecialRenderer { - private static final ResourceLocation field_110629_a = new ResourceLocation("alchemicalwizardry:textures/models/TransCircle.png"); + private static final ResourceLocation field_110629_a = new ResourceLocation("alchemicalwizardry:textures/models/SimpleTransCircle.png"); @Override public void renderTileEntityAt(TileEntity tileEntity, double d0, double d1, double d2, float f) { if (tileEntity instanceof TEReagentConduit) { + int renderCount = ((TEReagentConduit)tileEntity).renderCount; + float key1 = (tileEntity.xCoord*54f - tileEntity.yCoord*38.72f + tileEntity.zCoord*10.432f); + float key2 = (tileEntity.xCoord*21.43f - tileEntity.yCoord*9.96f + tileEntity.zCoord*12.8f); + + Int3 colourMap = ((TEReagentConduit) tileEntity).getColour(); + GL11.glPushMatrix(); float f1 = 1.0f; Tessellator tessellator = Tessellator.instance; @@ -38,14 +43,14 @@ public class RenderReagentConduit extends TileEntitySpecialRenderer GL11.glDepthMask(false); tessellator.startDrawingQuads(); - tessellator.setColorRGBA(0, 0, 255, 90); + tessellator.setColorRGBA(colourMap.xCoord, colourMap.yCoord, colourMap.zCoord, 200); //tessellator.setColorOpaque(255, 255, 255); GL11.glTranslated(d0+0.5, d1+0.5, d2+0.5); GL11.glRotatef(tileEntity.getWorldObj().getWorldTime()/3.0f, 0F, 1F, 0F); //Rotate on planar axis - //GL11.glRotatef(30F, 0F, 0F, 1F); //Rotate vertical axis - //GL11.glRotatef(tileAltar.getWorldObj().getWorldTime()*2f, 1F, 0F, 0F); //Rotate cylindrically + GL11.glRotatef(renderCount + key1, 0F, 0F, 1F); //Rotate vertical axis + GL11.glRotatef(renderCount*2f + key2, 1F, 0F, 0F); //Rotate cylindrically double offset = 0; diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEffectBlock.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEffectBlock.java index 134a3f98..644bb56b 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEffectBlock.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEffectBlock.java @@ -22,7 +22,7 @@ public class RenderSpellEffectBlock extends TileEntitySpecialRenderer { TESpellEffectBlock tileSpellBlock = (TESpellEffectBlock) tileEntity; GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); /** * Render the ghost item inside of the Altar, slowly spinning */ diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java index ae2b9f2c..ad2b22ae 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellEnhancementBlock.java @@ -22,7 +22,7 @@ public class RenderSpellEnhancementBlock extends TileEntitySpecialRenderer { TESpellEnhancementBlock tileSpellBlock = (TESpellEnhancementBlock) tileEntity; GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); /** * Render the ghost item inside of the Altar, slowly spinning */ diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java index a01c0726..e61a6123 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellModifierBlock.java @@ -22,7 +22,7 @@ public class RenderSpellModifierBlock extends TileEntitySpecialRenderer { TESpellModifierBlock tileSpellBlock = (TESpellModifierBlock) tileEntity; GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); /** * Render the ghost item inside of the Altar, slowly spinning */ diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java index 47a5b271..9b28f3fb 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderSpellParadigmBlock.java @@ -22,7 +22,7 @@ public class RenderSpellParadigmBlock extends TileEntitySpecialRenderer { TESpellParadigmBlock tileSpellBlock = (TESpellParadigmBlock) tileEntity; GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); /** * Render the ghost item inside of the Altar, slowly spinning */ diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderWritingTable.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderWritingTable.java index ef098839..b53c496f 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderWritingTable.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/RenderWritingTable.java @@ -21,11 +21,6 @@ public class RenderWritingTable extends TileEntitySpecialRenderer { private ModelWritingTable modelWritingTable = new ModelWritingTable(); private final RenderItem customRenderItem; -// private final RenderItem customRenderItem1; -// private final RenderItem customRenderItem2; -// private final RenderItem customRenderItem3; -// private final RenderItem customRenderItem4; -// private final RenderItem customRenderItem5; public RenderWritingTable() { @@ -47,7 +42,7 @@ public class RenderWritingTable extends TileEntitySpecialRenderer { TEWritingTable tileAltar = (TEWritingTable) tileEntity; GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); GL11.glPushMatrix(); GL11.glTranslatef((float) d0 + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); ResourceLocation test = new ResourceLocation("alchemicalwizardry:textures/models/WritingTable.png"); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java index 20353e77..4036f435 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/TEAltarRenderer.java @@ -42,7 +42,7 @@ public class TEAltarRenderer extends TileEntitySpecialRenderer { TEAltar tileAltar = (TEAltar) tileEntity; GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); +// GL11.glDisable(GL11.GL_CULL_FACE); /** * Render the ghost item inside of the Altar, slowly spinning */ diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAlchemicalCalcinatorItemRenderer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAlchemicalCalcinatorItemRenderer.java new file mode 100644 index 00000000..22305ab4 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAlchemicalCalcinatorItemRenderer.java @@ -0,0 +1,92 @@ +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 org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelAlchemicalCalcinator; +import cpw.mods.fml.client.FMLClientHandler; + +public class TEAlchemicalCalcinatorItemRenderer implements IItemRenderer +{ + private ModelAlchemicalCalcinator modelConduit = new ModelAlchemicalCalcinator(); + + private void renderConduitItem(RenderBlocks render, ItemStack item, float translateX, float translateY, float translateZ) + { + Tessellator tessellator = Tessellator.instance; + + Block block = ModBlocks.blockAlchemicCalcinator; + + GL11.glDisable(GL11.GL_LIGHTING); + /** + * 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("alchemicalwizardry:textures/models/AlchemicalCalcinator.png"); + 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.modelConduit.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + + 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: + } + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAltarItemRenderer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAltarItemRenderer.java index 70cc34f7..b3f28015 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAltarItemRenderer.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEAltarItemRenderer.java @@ -2,9 +2,11 @@ package WayofTime.alchemicalWizardry.common.renderer.block.itemRender; import WayofTime.alchemicalWizardry.common.renderer.model.ModelBloodAltar; import cpw.mods.fml.client.FMLClientHandler; +import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; + import org.lwjgl.opengl.GL11; public class TEAltarItemRenderer implements IItemRenderer @@ -38,30 +40,25 @@ public class TEAltarItemRenderer implements IItemRenderer // TODO Auto-generated method stub switch (type) { - case ENTITY: - { - renderBloodAltar(0f, 0f, 0f, scale); - return; - } - - case EQUIPPED: - { - renderBloodAltar(0f, 0f, 0f, scale); - return; - } - - case INVENTORY: - { - renderBloodAltar(0f, -0.25f, 0f, scale); - return; - } + case ENTITY: + renderBloodAltar((RenderBlocks) data[0], item, 0, 0, 0, scale); + break; + case EQUIPPED: + renderBloodAltar((RenderBlocks) data[0], item, 0, 0, 0.5f, scale); + break; + case EQUIPPED_FIRST_PERSON: + renderBloodAltar((RenderBlocks) data[0], item, +0.5f, 0.5f, +0.5f, scale); + break; + case INVENTORY: + renderBloodAltar((RenderBlocks) data[0], item, -0.5f, -0.75f, -0.5f, scale); + break; default: return; } } - private void renderBloodAltar(float x, float y, float z, float scale) + private void renderBloodAltar(RenderBlocks render, ItemStack item, float x, float y, float z, float scale) { GL11.glPushMatrix(); // Disable Lighting Calculations diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEBellJarItemRenderer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEBellJarItemRenderer.java new file mode 100644 index 00000000..d21b4db0 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEBellJarItemRenderer.java @@ -0,0 +1,90 @@ +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 org.lwjgl.opengl.GL11; + +import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.common.renderer.model.ModelCrystalBelljar; +import cpw.mods.fml.client.FMLClientHandler; + +public class TEBellJarItemRenderer implements IItemRenderer +{ + private ModelCrystalBelljar modelConduit = new ModelCrystalBelljar(); + + private void renderConduitItem(RenderBlocks render, ItemStack item, float translateX, float translateY, float translateZ) + { + Tessellator tessellator = Tessellator.instance; + + GL11.glDisable(GL11.GL_LIGHTING); + + /** + * 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("alchemicalwizardry:textures/models/CrystalBelljar.png"); + 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.modelConduit.render((Entity) null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + //Tell it to stop rendering for both the PushMatrix's + GL11.glPopMatrix(); + GL11.glPopMatrix(); + 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: + } + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEConduitItemRenderer.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEConduitItemRenderer.java index bf875589..9e76b9f8 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEConduitItemRenderer.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/block/itemRender/TEConduitItemRenderer.java @@ -28,6 +28,7 @@ public class TEConduitItemRenderer implements IItemRenderer GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_CULL_FACE); + /** * Render the ghost item inside of the Altar, slowly spinning */ @@ -92,4 +93,4 @@ public class TEConduitItemRenderer implements IItemRenderer default: } } -} +} \ No newline at end of file diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelAlchemicalCalcinator.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelAlchemicalCalcinator.java new file mode 100644 index 00000000..499d34c5 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelAlchemicalCalcinator.java @@ -0,0 +1,140 @@ +package WayofTime.alchemicalWizardry.common.renderer.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelAlchemicalCalcinator extends ModelBase +{ + //fields + ModelRenderer top1; + ModelRenderer top2; + ModelRenderer top3; + ModelRenderer top4; + ModelRenderer tank; + ModelRenderer centreCollumn; + ModelRenderer furnaceShape; + ModelRenderer glassWindow; + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape4; + ModelRenderer Shape5; + + public ModelAlchemicalCalcinator() + { + textureWidth = 128; + textureHeight = 128; + + top1 = new ModelRenderer(this, 0, 34); + top1.addBox(4F, -8F, -8F, 4, 3, 16); + top1.setRotationPoint(0F, 16F, 0F); + top1.setTextureSize(128, 128); + top1.mirror = true; + setRotation(top1, 0F, 0F, 0F); + top2 = new ModelRenderer(this, 41, 34); + top2.addBox(-8F, -8F, -8F, 4, 3, 16); + top2.setRotationPoint(0F, 16F, 0F); + top2.setTextureSize(128, 128); + top2.mirror = true; + setRotation(top2, 0F, 0F, 0F); + top3 = new ModelRenderer(this, 25, 55); + top3.addBox(-4F, -8F, 4F, 8, 3, 4); + top3.setRotationPoint(0F, 16F, 0F); + top3.setTextureSize(128, 128); + top3.mirror = true; + setRotation(top3, 0F, 0F, 0F); + top4 = new ModelRenderer(this, 0, 55); + top4.addBox(-4F, -8F, -8F, 8, 3, 4); + top4.setRotationPoint(0F, 16F, 0F); + top4.setTextureSize(128, 128); + top4.mirror = true; + setRotation(top4, 0F, 0F, 0F); + tank = new ModelRenderer(this, 0, 0); + tank.addBox(-8F, -5F, -8F, 16, 4, 16); + tank.setRotationPoint(0F, 16F, 0F); + tank.setTextureSize(128, 128); + tank.mirror = true; + setRotation(tank, 0F, 0F, 0F); + centreCollumn = new ModelRenderer(this, 0, 21); + centreCollumn.addBox(-4F, -5F, -4F, 8, 4, 8); + centreCollumn.setRotationPoint(0F, 16F, 0F); + centreCollumn.setTextureSize(128, 128); + centreCollumn.mirror = true; + setRotation(centreCollumn, 0F, 0F, 0F); + furnaceShape = new ModelRenderer(this, 0, 63); + furnaceShape.addBox(-8F, -1F, -8F, 16, 5, 16); + furnaceShape.setRotationPoint(0F, 16F, 0F); + furnaceShape.setTextureSize(128, 128); + furnaceShape.mirror = true; + setRotation(furnaceShape, 0F, 0F, 0F); + glassWindow = new ModelRenderer(this, 0, 85); + glassWindow.addBox(-4F, -8F, -4F, 8, 0, 8); + glassWindow.setRotationPoint(0F, 16F, 0F); + glassWindow.setTextureSize(128, 128); + glassWindow.mirror = true; + setRotation(glassWindow, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 94); + Shape1.addBox(-8F, 4F, -8F, 4, 4, 4); + Shape1.setRotationPoint(0F, 16F, 0F); + Shape1.setTextureSize(128, 128); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + Shape2 = new ModelRenderer(this, 0, 103); + Shape2.addBox(-4F, 6F, -4F, 8, 1, 8); + Shape2.setRotationPoint(0F, 16F, 0F); + Shape2.setTextureSize(128, 128); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 0, 94); + Shape3.addBox(4F, 4F, -8F, 4, 4, 4); + Shape3.setRotationPoint(0F, 16F, 0F); + Shape3.setTextureSize(128, 128); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 0, 94); + Shape4.addBox(-8F, 4F, 4F, 4, 4, 4); + Shape4.setRotationPoint(0F, 16F, 0F); + Shape4.setTextureSize(128, 128); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + Shape5 = new ModelRenderer(this, 0, 94); + Shape5.addBox(4F, 4F, 4F, 4, 4, 4); + Shape5.setRotationPoint(0F, 16F, 0F); + Shape5.setTextureSize(128, 128); + 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) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + top1.render(f5); + top2.render(f5); + top3.render(f5); + top4.render(f5); + tank.render(f5); + centreCollumn.render(f5); + furnaceShape.render(f5); + glassWindow.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.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelCrystalBelljar.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelCrystalBelljar.java new file mode 100644 index 00000000..3c353377 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/renderer/model/ModelCrystalBelljar.java @@ -0,0 +1,100 @@ +package WayofTime.alchemicalWizardry.common.renderer.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelCrystalBelljar extends ModelBase +{ + //fields + ModelRenderer handle1; + ModelRenderer handle2; + ModelRenderer jar1; + ModelRenderer woodBottom; + ModelRenderer jar2; + ModelRenderer jar3; + ModelRenderer jar4; + ModelRenderer jar5; + + public ModelCrystalBelljar() + { + textureWidth = 128; + textureHeight = 64; + + handle1 = new ModelRenderer(this, 0, 17); + handle1.addBox(-2F, -7F, -2F, 4, 1, 4); + handle1.setRotationPoint(0F, 16F, 0F); + handle1.setTextureSize(128, 64); + handle1.mirror = true; + setRotation(handle1, 0F, 0F, 0F); + handle2 = new ModelRenderer(this, 0, 23); + handle2.addBox(-1F, -6F, -1F, 2, 1, 2); + handle2.setRotationPoint(0F, 16F, 0F); + handle2.setTextureSize(128, 64); + handle2.mirror = true; + setRotation(handle2, 0F, 0F, 0F); + jar1 = new ModelRenderer(this, 0, 27); + jar1.addBox(-4F, -5F, -4F, 8, 1, 8); + jar1.setRotationPoint(0F, 16F, 0F); + jar1.setTextureSize(128, 64); + jar1.mirror = true; + setRotation(jar1, 0F, 0F, 0F); + woodBottom = new ModelRenderer(this, 0, 0); + woodBottom.addBox(-7F, 6F, -7F, 14, 2, 14); + woodBottom.setRotationPoint(0F, 16F, 0F); + woodBottom.setTextureSize(128, 64); + woodBottom.mirror = true; + setRotation(woodBottom, 0F, 0F, 0F); + jar2 = new ModelRenderer(this, 0, 38); + jar2.addBox(-5F, -4F, 4F, 10, 10, 1); + jar2.setRotationPoint(0F, 16F, 0F); + jar2.setTextureSize(128, 64); + jar2.mirror = true; + setRotation(jar2, 0F, 0F, 0F); + jar3 = new ModelRenderer(this, 46, 38); + jar3.addBox(4F, -4F, -4F, 1, 10, 8); + jar3.setRotationPoint(0F, 16F, 0F); + jar3.setTextureSize(128, 64); + jar3.mirror = true; + setRotation(jar3, 0F, 0F, 0F); + jar4 = new ModelRenderer(this, 23, 38); + jar4.addBox(-5F, -4F, -5F, 10, 10, 1); + jar4.setRotationPoint(0F, 16F, 0F); + jar4.setTextureSize(128, 64); + jar4.mirror = true; + setRotation(jar4, 0F, 0F, 0F); + jar5 = new ModelRenderer(this, 65, 38); + jar5.addBox(-5F, -4F, -4F, 1, 10, 8); + jar5.setRotationPoint(0F, 16F, 0F); + jar5.setTextureSize(128, 64); + jar5.mirror = true; + setRotation(jar5, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + handle1.render(f5); + handle2.render(f5); + jar1.render(f5); + woodBottom.render(f5); + jar2.render(f5); + jar3.render(f5); + jar4.render(f5); + jar5.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.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAnimalGrowth.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAnimalGrowth.java index bc03fe33..07a5604b 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAnimalGrowth.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAnimalGrowth.java @@ -5,20 +5,30 @@ import java.util.Iterator; import java.util.List; import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectAnimalGrowth extends RitualEffect { + public static final int breedingCost = 50; + public static final int reductusDrain = 1; + public static final int virtusDrain = 10; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -43,49 +53,91 @@ public class RitualEffectAnimalGrowth extends RitualEffect return; } - int d0 = 2; - AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y + 1, (double) z, (double) (x + 1), (double) (y + 3), (double) (z + 1)).expand(d0, 0, d0); - List list = world.getEntitiesWithinAABB(EntityAgeable.class, axisalignedbb); - Iterator iterator1 = list.iterator(); - EntityAgeable entity; + double range = 2; + + AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y + 1, (double) z, (double) (x + 1), (double) (y + 3), (double) (z + 1)).expand(range, 0, range); + List list = world.getEntitiesWithinAABB(EntityAgeable.class, axisalignedbb); + int entityCount = 0; boolean flag = false; - while (iterator1.hasNext()) + if (currentEssence < this.getCostPerRefresh() * list.size()) { - entity = (EntityAgeable) iterator1.next(); - entityCount++; - } - - if (currentEssence < this.getCostPerRefresh() * entityCount) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { - Iterator iterator2 = list.iterator(); - entityCount = 0; + boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); - while (iterator2.hasNext()) + for(EntityAgeable entity : list) { - entity = (EntityAgeable) iterator2.next(); - if (entity.getGrowingAge() < 0) { entity.addGrowth(5); entityCount++; - } + }else + { + hasReductus = hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); + if(hasReductus && entity instanceof EntityAnimal && entity.getGrowingAge() > 0) + { + EntityAnimal animal = (EntityAnimal)entity; + entity.setGrowingAge(Math.max(0, animal.getGrowingAge() - 20*2)); + this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); + entityCount++; + } + } } data.currentEssence = currentEssence - this.getCostPerRefresh() * entityCount; data.markDirty(); } + + boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); + + if(hasVirtus && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, breedingCost)) + { + List animalList = world.getEntitiesWithinAABB(EntityAnimal.class, axisalignedbb); + TileEntity tile = world.getTileEntity(x, y+1, z); + IInventory inventory = null; + if(tile instanceof IInventory) + { + inventory = (IInventory)tile; + }else + { + tile = world.getTileEntity(x, y-1, z); + if(tile instanceof IInventory) + { + inventory = (IInventory)tile; + } + } + + if(inventory != null) + { + for(EntityAnimal entityAnimal : animalList) + { + if(entityAnimal.isInLove() || entityAnimal.isChild() || entityAnimal.getGrowingAge() > 0) + { + continue; + } + + hasVirtus = hasVirtus && this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); + boolean hasLP = SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, breedingCost); + + for(int i=0; i entityList = SpellHelper.getEntitiesInRange(world, x+0.5, y+0.5, z+0.5, d0, d0); boolean flag = false; - - while (iterator.hasNext()) + boolean hasCrepitous = this.canDrainReagent(ritualStone, ReagentRegistry.crepitousReagent, crepitousDrain, false); + boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); + boolean hasMagicales = this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, false); + + for(Entity entity : entityList) { - livingEntity = (EntityLivingBase) iterator.next(); + if(!(entity instanceof EntityLivingBase)) + { + continue; + } + + EntityLivingBase livingEntity = (EntityLivingBase)entity; if (livingEntity instanceof EntityPlayer) { continue; } - //if (!(livingEntity.getEntityName().equals(owner))) + + double xDif = livingEntity.posX - (x + 0.5); + double yDif = livingEntity.posY - (y + 3); + double zDif = livingEntity.posZ - (z + 0.5); + livingEntity.motionX = -0.05 * xDif; + livingEntity.motionY = -0.05 * yDif; + livingEntity.motionZ = -0.05 * zDif; + flag = true; + + livingEntity.fallDistance = 0; + + if(hasMagicales && this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, false)) { - double xDif = livingEntity.posX - (x + 0.5); - double yDif = livingEntity.posY - (y + 3); - double zDif = livingEntity.posZ - (z + 0.5); - livingEntity.motionX = -0.05 * xDif; - livingEntity.motionY = -0.05 * yDif; - livingEntity.motionZ = -0.05 * zDif; - flag = true; - //livingEntity.setVelocity(-0.05 * xDif, -0.05 * yDif, -0.05 * zDif); - - if (world.rand.nextInt(10) == 0) - { - //PacketDispatcher.sendPacketToAllPlayers(TEAltar.getParticlePacket(livingEntity.posX, livingEntity.posY, livingEntity.posZ, (short) 1)); - SpellHelper.sendIndexedParticleToAllAround(world, x, y, z, 20, world.provider.dimensionId, 1, x, y, z); - } - - livingEntity.fallDistance = 0; - //entityplayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + if(!livingEntity.isPotionActive(AlchemicalWizardry.customPotionPlanarBinding)) + { + livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionPlanarBinding.id,100,0)); + this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, true); + } + } + + if(hasCrepitous && this.canDrainReagent(ritualStone, ReagentRegistry.crepitousReagent, crepitousDrain, false)) + { + if(entity instanceof EntityCreeper) + { + ReflectionHelper.setPrivateValue(EntityCreeper.class, (EntityCreeper) entity, 2, TIME_SINCE_IGNITED); + ((EntityCreeper)entity).setAttackTarget(null); + this.canDrainReagent(ritualStone, ReagentRegistry.crepitousReagent, crepitousDrain, true); + } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java index 97d09d04..525ef904 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectCrushing.java @@ -5,24 +5,31 @@ import java.util.List; import net.minecraft.block.Block; import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectCrushing extends RitualEffect { + public static final int crystallosDrain = 10; + public static final int orbisTerraeDrain = 10; + public static final int potentiaDrain = 10; + public static final int virtusDrain = 10; + public static final int incendiumDrain = 10; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -39,12 +46,11 @@ public class RitualEffectCrushing extends RitualEffect int currentEssence = data.currentEssence; World world = ritualStone.getWorld(); - if (world.getWorldTime() % 40 != 20) + if (world.getWorldTime() % 10 != 5) { return; } - int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); @@ -64,19 +70,36 @@ public class RitualEffectCrushing extends RitualEffect return; } - boolean isSilkTouch = this.isSilkTouch(world, x, y, z); - int fortuneLevel = this.getFortuneLevel(world, x, y, z); + boolean hasRoom = false; + for(int i=0; i 0) { @@ -142,6 +134,10 @@ public class RitualEffectCrushing extends RitualEffect //flag=true; } + if(hasCrystallos) + { + this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, true); + } } else { @@ -153,46 +149,59 @@ public class RitualEffectCrushing extends RitualEffect for (ItemStack item : itemDropList) { + hasIncendium = hasIncendium && this.canDrainReagent(ritualStone, ReagentRegistry.incendiumReagent, incendiumDrain, false); ItemStack copyStack = item.copyItemStack(item); - - for (int n = 0; n < invSize; n++) + + if(this.usesIncendium(copyStack)) { - if (tileEntity.isItemValidForSlot(n, copyStack) && copyStack.stackSize != 0) - { - ItemStack itemStack = tileEntity.getStackInSlot(n); - - if (itemStack == null) - { - tileEntity.setInventorySlotContents(n, item); - copyStack.stackSize = 0; - } else - { - if (itemStack.getItem().equals(copyStack.getItem()) && itemStack.getItemDamage() == copyStack.getItemDamage()) - { - int itemSize = itemStack.stackSize; - int copySize = copyStack.stackSize; - int maxSize = itemStack.getMaxStackSize(); - - if (copySize + itemSize < maxSize) - { - copyStack.stackSize = 0; - itemStack.stackSize = itemSize + copySize; - tileEntity.setInventorySlotContents(n, itemStack); - } else - { - copyStack.stackSize = itemSize + copySize - maxSize; - itemStack.stackSize = maxSize; - } - } - } - } + copyStack = this.transformToNewItem(copyStack, hasIncendium, false); + this.canDrainReagent(ritualStone, ReagentRegistry.incendiumReagent, incendiumDrain, true); } + + SpellHelper.insertStackIntoInventory(copyStack, tileEntity); + +// for (int n = 0; n < invSize; n++) +// { +// if (tileEntity.isItemValidForSlot(n, copyStack) && copyStack.stackSize != 0) +// { +// ItemStack itemStack = tileEntity.getStackInSlot(n); +// +// if (itemStack == null) +// { +// tileEntity.setInventorySlotContents(n, item); +// copyStack.stackSize = 0; +// } else +// { +// if (itemStack.getItem().equals(copyStack.getItem()) && itemStack.getItemDamage() == copyStack.getItemDamage()) +// { +// int itemSize = itemStack.stackSize; +// int copySize = copyStack.stackSize; +// int maxSize = itemStack.getMaxStackSize(); +// +// if (copySize + itemSize < maxSize) +// { +// copyStack.stackSize = 0; +// itemStack.stackSize = itemSize + copySize; +// tileEntity.setInventorySlotContents(n, itemStack); +// } else +// { +// copyStack.stackSize = itemSize + copySize - maxSize; +// itemStack.stackSize = maxSize; +// } +// } +// } +// } +// } if (copyStack.stackSize > 0) { world.spawnEntityInWorld(new EntityItem(world, x + 0.4, y + 2, z + 0.5, copyStack)); //flag=true; } + + if(hasOrbisTerrae){this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true);} + if(hasPotentia){this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true);} + if(hasVirtus){this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true);} } } @@ -203,6 +212,9 @@ public class RitualEffectCrushing extends RitualEffect world.playSoundEffect(x + i, y + j, z + k, "mob.endermen.portal", 1.0F, 1.0F); data.currentEssence = currentEssence - this.getCostPerRefresh(); data.markDirty(); + + + return; } } @@ -211,6 +223,56 @@ public class RitualEffectCrushing extends RitualEffect } } + private boolean usesIncendium(ItemStack stack) + { + if(stack != null) + { + Item item = stack.getItem(); + if(item instanceof ItemBlock) + { + Block block = ((ItemBlock)item).field_150939_a; + + if(block == Blocks.cobblestone || block == Blocks.stone) + { + return true; + } + }else + { + + } + } + return false; + } + + private ItemStack transformToNewItem(ItemStack stack, boolean hasIncendium, boolean hasCrepitous) + { + if(stack != null) + { + ItemStack copyStack = ItemStack.copyItemStack(stack); + int stackSize = copyStack.stackSize; + + Item item = stack.getItem(); + if(item instanceof ItemBlock) + { + Block block = ((ItemBlock)item).field_150939_a; + + if(hasIncendium) + { + if(block == Blocks.cobblestone || block == Blocks.stone) + { + copyStack = new ItemStack(Blocks.netherrack, stackSize, 0); + } + } + }else + { + + } + + return copyStack; + } + return stack; + } + public boolean isSilkTouch(World world, int x, int y, int z) { int index = 0; diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEllipsoid.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEllipsoid.java index 29cb11f4..36899fdc 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEllipsoid.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectEllipsoid.java @@ -42,14 +42,7 @@ public class RitualEffectEllipsoid extends RitualEffect int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); - TileEntity tile = world.getTileEntity(x, y+1, z); - - - if(((IInventory) tile).getSizeInventory() < 3) - { - return; - } - + TileEntity tile = world.getTileEntity(x, y+1, z); if(!(tile instanceof IInventory) || ((IInventory)tile).getSizeInventory() < 3) { diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectExpulsion.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectExpulsion.java index 07bf3a9b..bd7e69b3 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectExpulsion.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectExpulsion.java @@ -1,7 +1,6 @@ package WayofTime.alchemicalWizardry.common.rituals; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Random; @@ -10,24 +9,33 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; -import net.minecraft.util.AxisAlignedBB; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.common.items.EnergyItems; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import WayofTime.alchemicalWizardry.common.spell.simple.SpellTeleport; public class RitualEffectExpulsion extends RitualEffect { + public static final int virtusDrain = 10; + public static final int potentiaDrain = 10; + public static final int tennebraeDrain = 5; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -49,45 +57,105 @@ public class RitualEffectExpulsion extends RitualEffect if (currentEssence < this.getCostPerRefresh()) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { - int d0 = 25; - AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y, (double) z, (double) (x + 1), (double) (y + 1), (double) (z + 1)).expand(d0, d0, d0); - axisalignedbb.maxY = Math.min((double) world.getHeight(), (double) (y + 1 + d0)); - List list = world.getEntitiesWithinAABB(EntityPlayer.class, axisalignedbb); - Iterator iterator = list.iterator(); - EntityPlayer entityplayer; + boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); + boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); + + int teleportDistance = hasVirtus ? 300 : 100; + int range = hasPotentia ? 50 : 25; + List playerList = SpellHelper.getPlayersInRange(world, x + 0.5, y + 0.5, z + 0.5, range, range); boolean flag = false; - while (iterator.hasNext()) + TileEntity tile = world.getTileEntity(x, y+1, z); + IInventory inventoryTile = null; + if(tile instanceof IInventory) { - entityplayer = (EntityPlayer) iterator.next(); - - if (!(SpellHelper.getUsername(entityplayer).equals(owner))) + inventoryTile = (IInventory)tile; + } + + for(EntityPlayer entityplayer : playerList) + { + String playerString = SpellHelper.getUsername(entityplayer); + if (!playerString.equals(owner)) { - if(entityplayer.isPotionActive(AlchemicalWizardry.customPotionPlanarBinding)||entityplayer.capabilities.isCreativeMode) + if(inventoryTile != null) { - continue; + for(int i=0; i livingList = SpellHelper.getLivingEntitiesInRange(world, x + 0.5, y + 0.5, z + 0.5, range, range); + boolean flag = false; + + for(EntityLivingBase livingEntity : livingList) + { + if(livingEntity instanceof EntityPlayer) + { + continue; + } + + flag = teleportRandomly(livingEntity, teleportDistance) || flag; + } + + if(flag) + { + if(hasVirtus) + { + this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); + } + + if(hasPotentia) + { + this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); + } + + this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tennebraeDrain, true); + + SoulNetworkHandler.syphonFromNetwork(owner, 1000); + } + } } @Override diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java index 6d0d1b88..9633acb4 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFeatheredKnife.java @@ -11,17 +11,23 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; public class RitualEffectFeatheredKnife extends RitualEffect { - public final int timeDelay = 20; public final int amount = 100; + + public static final int sanctusDrain = 5; + public static final int reductusDrain = 3; + public static final int magicalesDrain = 2; + public static final int potentiaDrain = 5; @Override public void performEffect(IMasterRitualStone ritualStone) @@ -41,16 +47,16 @@ public class RitualEffectFeatheredKnife extends RitualEffect int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); + + boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); + + int timeDelay = hasPotentia ? 10 : 20; - if (world.getWorldTime() % this.timeDelay != 0) + if (world.getWorldTime() % timeDelay != 0) { return; } -// if(!(world.getBlockTileEntity(x, y-1, z) instanceof TEAltar)) -// { -// return; -// } TEAltar tileAltar = null; boolean testFlag = false; @@ -73,73 +79,72 @@ public class RitualEffectFeatheredKnife extends RitualEffect { return; } + + boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); + + double range = hasReductus ? 8 : 15; + double vertRange = hasReductus ? 8 : 20; + List list = SpellHelper.getPlayersInRange(world, x+0.5, y+0.5, z+0.5, range, vertRange); - //tileAltar = (TEAltar)world.getBlockTileEntity(x,y-1,z); - int d0 = 15; - int vertRange = 20; - AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y, (double) z, (double) (x + 1), (double) (y + 1), (double) (z + 1)).expand(d0, vertRange, d0); - List list = world.getEntitiesWithinAABB(EntityPlayer.class, axisalignedbb); - Iterator iterator1 = list.iterator(); - EntityPlayer entity; int entityCount = 0; boolean flag = false; - - while (iterator1.hasNext()) + + if (currentEssence < this.getCostPerRefresh() * list.size()) { - entity = (EntityPlayer) iterator1.next(); - - if (!SpellHelper.isFakePlayer(world, entity)) - { - entityCount++; - } - } - - if (currentEssence < this.getCostPerRefresh() * entityCount) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { - Iterator iterator2 = list.iterator(); - entityCount = 0; - - while (iterator2.hasNext()) + boolean hasMagicales = this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, false); + boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); + + EntityPlayer ownerPlayer = SpellHelper.getPlayerForUsername(owner); + for(EntityPlayer player : list) { - entity = (EntityPlayer) iterator2.next(); + hasSanctus = hasSanctus && this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); + double threshold = hasSanctus ? 0.7d : 0.3d; - //entity = (EntityPlayer)iterator1.next(); - if (!SpellHelper.isFakePlayer(world, entity)) - { - if (entity.getHealth()/entity.getMaxHealth() > 0.3d) + if((hasMagicales && player == ownerPlayer) || !hasMagicales) + { + if (!SpellHelper.isFakePlayer(world, player)) { - entity.setHealth(entity.getHealth() - 1); - entityCount++; - tileAltar.sacrificialDaggerCall(this.amount, false); + if (player.getHealth()/player.getMaxHealth() > threshold) + { + player.setHealth(player.getHealth() - 1); + entityCount++; + tileAltar.sacrificialDaggerCall(this.amount, false); + if(hasSanctus) + { + this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); + } + if(hasMagicales) + { + this.canDrainReagent(ritualStone, ReagentRegistry.magicalesReagent, magicalesDrain, true); + break; + } + } } - } - - //entity.setHealth(entity.getHealth()-1); -// if(entity.getHealth()<=0.2f) -// { -// entity.onDeath(DamageSource.inFire); -// } + } } - data.currentEssence = currentEssence - this.getCostPerRefresh() * entityCount; - data.markDirty(); + if(entityCount > 0) + { + if(hasReductus) + { + this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); + } + if(hasPotentia) + { + this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); + } + data.currentEssence = currentEssence - this.getCostPerRefresh() * entityCount; + data.markDirty(); + } } } @Override public int getCostPerRefresh() { - // TODO Auto-generated method stub return 20; } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java index 208d70ed..5e6bf605 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectFlight.java @@ -10,14 +10,19 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectFlight extends RitualEffect { + public static final int aetherDrain = 10; + public static final int reductusDrain = 5; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -37,12 +42,6 @@ public class RitualEffectFlight extends RitualEffect int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); - if (ritualStone.getCooldown() > 0) - { - //TODO Cool stuffs - ritualStone.setCooldown(0); - } - int range = 20; int verticalRange = 30; AxisAlignedBB axis = AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1).expand(range, verticalRange, range); @@ -50,6 +49,9 @@ public class RitualEffectFlight extends RitualEffect axis.minY = 0; List entities = world.getEntitiesWithinAABB(EntityPlayer.class, axis); int entityCount = 0; + + boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); + boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); for (EntityPlayer entity : entities) { @@ -58,16 +60,10 @@ public class RitualEffectFlight extends RitualEffect if (currentEssence < this.getCostPerRefresh() * entityCount) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { + for (EntityPlayer entity : entities) { entity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFlight.id, 20, 0)); diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java index 6749f15c..a03a3eeb 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectGrowth.java @@ -4,20 +4,25 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; +import net.minecraft.block.BlockFarmland; +import net.minecraft.init.Blocks; import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectGrowth extends RitualEffect { + private static final int aquasalusDrain = 10; + private static final int terraeDrain = 20; + private static final int orbisTerraeDrain = 20; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -39,20 +44,35 @@ public class RitualEffectGrowth extends RitualEffect if (currentEssence < this.getCostPerRefresh()*9) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { - if (world.getWorldTime() % 20 != 0) + boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); + boolean hasOrbisTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, false); + + int speed = this.getSpeedForReagents(hasTerrae, hasOrbisTerrae); + if (world.getWorldTime() % speed != 0) { return; } + + if(this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, false)) + { + int hydrationRange = 1; + for(int i=-hydrationRange; i<=hydrationRange; i++) + { + for(int j=-hydrationRange; j<=hydrationRange; j++) + { + if(this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, false)) + { + if(SpellHelper.hydrateSoil(world, x + i, y + 1, z + j)) + { + this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, true); + } + } + } + } + } int flag = 0; @@ -75,6 +95,9 @@ public class RitualEffectGrowth extends RitualEffect if (flag > 0) { + this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); + this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true); + data.currentEssence = currentEssence - this.getCostPerRefresh()*flag; data.markDirty(); } @@ -101,4 +124,27 @@ public class RitualEffectGrowth extends RitualEffect growthRitual.add(new RitualComponent(1, 0, -1, 3)); return growthRitual; } + + public int getSpeedForReagents(boolean hasTerrae, boolean hasOrbisTerrae) + { + if(hasOrbisTerrae) + { + if(hasTerrae) + { + return 10; + }else + { + return 15; + } + }else + { + if(hasTerrae) + { + return 20; + }else + { + return 30; + } + } + } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java index 98bcca3d..c3813fd6 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectHealing.java @@ -11,17 +11,20 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectHealing extends RitualEffect { - public final int timeDelay = 50; - //public final int amount = 10; - + public static final int reductusDrain = 10; + public static final int virtusDrain = 10; + public static final int praesidiumDrain = 2; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -41,30 +44,25 @@ public class RitualEffectHealing extends RitualEffect int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); - if (world.getWorldTime() % this.timeDelay != 0) + int timeDelay = 50; + + if (world.getWorldTime() % timeDelay != 0) { return; } + + boolean hasPraesidium = this.canDrainReagent(ritualStone, ReagentRegistry.praesidiumReagent, praesidiumDrain, false); + + int range = 15 * (hasPraesidium ? 3 : 1); + int vertRange = 15 * (hasPraesidium ? 3 : 1); -// if(!(world.getBlockTileEntity(x, y-1, z) instanceof TEAltar)) -// { -// return; -// } - //tileAltar = (TEAltar)world.getBlockTileEntity(x,y-1,z); - int d0 = 10; - int vertRange = 10; - AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y, (double) z, (double) (x + 1), (double) (y + 1), (double) (z + 1)).expand(d0, vertRange, d0); - List list = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator1 = list.iterator(); - EntityLivingBase entity; + List list = SpellHelper.getLivingEntitiesInRange(world, x+0.5, y+0.5, z+0.5, range, vertRange); int entityCount = 0; boolean flag = false; - while (iterator1.hasNext()) + for(EntityLivingBase livingEntity : list) { - entity = (EntityLivingBase) iterator1.next(); - - if (entity instanceof EntityPlayer) + if (livingEntity instanceof EntityPlayer) { entityCount += 10; } else @@ -72,52 +70,65 @@ public class RitualEffectHealing extends RitualEffect entityCount++; } } + + boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false); + + int cost = this.getCostPerRefresh() * (hasVirtus ? 3 : 1); + int potency = hasVirtus ? 1 : 0; - if (currentEssence < this.getCostPerRefresh() * entityCount) + if (currentEssence < cost * entityCount) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { - Iterator iterator2 = list.iterator(); - entityCount = 0; - - while (iterator2.hasNext()) + boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); + + for(EntityLivingBase livingEntity : list) { - entity = (EntityLivingBase) iterator2.next(); - - if (entity.getHealth() + 0.1f < entity.getMaxHealth()) + hasReductus = hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); + if(hasReductus && !(livingEntity instanceof EntityPlayer)) + { + continue; + } + + if (livingEntity.getHealth() + 0.1f < livingEntity.getMaxHealth()) { - entity.addPotionEffect(new PotionEffect(Potion.regeneration.id, timeDelay + 2, 0)); - - //entity.setHealth(entity.getHealth()-1); - - //entity.attackEntityFrom(DamageSource.outOfWorld, 1); - - if (entity instanceof EntityPlayer) - { - entityCount += 10; - } else - { - entityCount++; - } + PotionEffect effect = livingEntity.getActivePotionEffect(Potion.regeneration); + if(effect != null && effect.getAmplifier() <= potency && effect.getDuration() <= timeDelay) + { + if(!hasVirtus || (this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false))) + { + livingEntity.addPotionEffect(new PotionEffect(Potion.regeneration.id, timeDelay + 2, potency)); + if(hasReductus) + { + this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); + } + if(hasVirtus) + { + this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true); + } + + if (livingEntity instanceof EntityPlayer) + { + entityCount += 10; + } else + { + entityCount++; + } + } + } } - -// if(entity.getHealth()<=0.2f) -// { -// entity.onDeath(DamageSource.inFire); -// } - //tileAltar.sacrificialDaggerCall(this.amount, true); } - data.currentEssence = currentEssence - this.getCostPerRefresh() * entityCount; - data.markDirty(); + if(entityCount > 0) + { + if(hasPraesidium) + { + this.canDrainReagent(ritualStone, ReagentRegistry.praesidiumReagent, praesidiumDrain, true); + } + data.currentEssence = currentEssence - cost * entityCount; + data.markDirty(); + } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java index 381e42c3..c96341b8 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectJumping.java @@ -1,24 +1,27 @@ package WayofTime.alchemicalWizardry.common.rituals; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -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.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectJumping extends RitualEffect { + public static final int aetherDrain = 10; + public static final int terraeDrain = 10; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -37,55 +40,62 @@ public class RitualEffectJumping extends RitualEffect int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); + + int range = 0; + List livingList = SpellHelper.getLivingEntitiesInRange(world, x+0.5, y+0.5, z+0.5, range, range); - if (currentEssence < this.getCostPerRefresh()) + if (currentEssence < this.getCostPerRefresh() * livingList.size()) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { - int d0 = 0; - AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y + 1, (double) z, (double) (x + 1), (double) (y + 2), (double) (z + 1)).expand(d0, d0, d0); - List list = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - EntityLivingBase entityplayer; - boolean flag = false; - - while (iterator.hasNext()) + int flag = 0; + + boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); + boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); + + for(EntityLivingBase livingEntity : livingList) { - entityplayer = (EntityLivingBase) iterator.next(); - - if (entityplayer instanceof EntityPlayer) + if(livingEntity.isSneaking()) + { + continue; + } + + hasAether = hasAether && this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); + hasTerrae = hasTerrae && this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); + + double motionY = 1.5 * (hasAether ? 2 : 1); + + if (livingEntity instanceof EntityPlayer) { - //PacketDispatcher.sendPacketToPlayer(PacketHandler.getPlayerVelocitySettingPacket(entityplayer.motionX, 1.5, entityplayer.motionZ), (Player) entityplayer); - SpellHelper.setPlayerSpeedFromServer((EntityPlayer)entityplayer, entityplayer.motionX, 1.5, entityplayer.motionZ); - entityplayer.motionY = 1.5; - entityplayer.fallDistance = 0; - flag = true; + SpellHelper.setPlayerSpeedFromServer((EntityPlayer)livingEntity, livingEntity.motionX, motionY, livingEntity.motionZ); + livingEntity.motionY = motionY; + livingEntity.fallDistance = 0; + flag++; } else - //if (!(entityplayer.getEntityName().equals(owner))) { -// double xDif = entityplayer.posX - xCoord; -// double yDif = entityplayer.posY - (yCoord + 1); -// double zDif = entityplayer.posZ - zCoord; - //entityplayer.motionX=0.1*xDif; - entityplayer.motionY = 1.5; - //entityplayer.motionZ=0.1*zDif; - entityplayer.fallDistance = 0; - flag = true; - //entityplayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + livingEntity.motionY = motionY; + livingEntity.fallDistance = 0; + flag++; + } + + if(hasAether) + { + this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, true); + } + if(hasTerrae) + { + if(!livingEntity.isPotionActive(AlchemicalWizardry.customPotionFeatherFall)) + { + livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFeatherFall.id, 3 * 20, 0)); + this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); + } } } - if (flag) + if (flag > 0) { - data.currentEssence = currentEssence - this.getCostPerRefresh(); + data.currentEssence = currentEssence - this.getCostPerRefresh()*flag; data.markDirty(); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java index d23bb029..2015a179 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLava.java @@ -4,21 +4,35 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.block.BlockSpectralContainer; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectLava extends RitualEffect { + public static final int sanctusDrain = 20; + public static final int offensaDrain = 50; + public static final int reductusDrain = 5; + + public static final int fireFuseCost = 1000; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -44,14 +58,7 @@ public class RitualEffectLava extends RitualEffect { if (currentEssence < this.getCostPerRefresh()) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { for (int i = 0; i < 10; i++) @@ -63,7 +70,59 @@ public class RitualEffectLava extends RitualEffect data.currentEssence = currentEssence - this.getCostPerRefresh(); data.markDirty(); } + }else + { + boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); + TileEntity tile = world.getTileEntity(x, y + 1, z); + if(tile instanceof IFluidHandler) + { + int amount = ((IFluidHandler) tile).fill(ForgeDirection.DOWN, new FluidStack(FluidRegistry.LAVA, 1000), false); + if(amount >= 1000) + { + ((IFluidHandler) tile).fill(ForgeDirection.DOWN, new FluidStack(FluidRegistry.LAVA, 1000), true); + + this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); + + data.currentEssence = currentEssence - this.getCostPerRefresh(); + data.markDirty(); + } + } } + + + + if(this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false) && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, fireFuseCost)) + { + boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); + boolean drainReductus = world.getWorldTime() % 100 == 0; + + int range = 5; + List entityList = SpellHelper.getLivingEntitiesInRange(world, x + 0.5, y + 0.5, z + 0.5, range, range); + EntityPlayer player = SpellHelper.getPlayerForUsername(owner); + + for(EntityLivingBase entity : entityList) + { + if(entity != player && this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false) && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, fireFuseCost) && !entity.isPotionActive(AlchemicalWizardry.customPotionFireFuse)) + { + if(hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false)) + { + if(entity instanceof EntityPlayer) + { + if(drainReductus) + { + this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); + } + + continue; + } + } + entity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFireFuse.id,100,0)); + this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, true); + SoulNetworkHandler.syphonFromNetwork(owner, fireFuseCost); + } + } + } + } @Override diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java index 54685c0a..6412ee35 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectLeap.java @@ -1,24 +1,31 @@ package WayofTime.alchemicalWizardry.common.rituals; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; +import net.minecraft.entity.EntityAgeable; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -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.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectLeap extends RitualEffect { + public static final int aetherDrain = 10; + public static final int terraeDrain = 10; + public static final int reductusDrain = 10; + public static final int tenebraeDrain = 10; + public static final int sanctusDrain = 10; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -38,97 +45,135 @@ public class RitualEffectLeap extends RitualEffect int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); - if (currentEssence < this.getCostPerRefresh()) + double range = 2.0; + + List livingList = SpellHelper.getLivingEntitiesInRange(world, x+0.5, y+0.5, z+0.5, range, range); + + if(livingList == null){return;} + + if (currentEssence < this.getCostPerRefresh() * livingList.size()) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { - int direction = ritualStone.getDirection(); - int d0 = 2; - AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y - 1, (double) z, (double) (x + 1), (double) (y + 2), (double) (z + 1)).expand(d0, 0, d0); - List list = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator = list.iterator(); - EntityLivingBase entityplayer; - boolean flag = false; + boolean hasAether = this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); + boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); + boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); + boolean hasTenebrae = this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tenebraeDrain, false); + boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); + + int direction = ritualStone.getDirection(); - while (iterator.hasNext()) + int flag = 0; + + for(EntityLivingBase livingEntity : livingList) { - entityplayer = (EntityLivingBase) iterator.next(); - - if (entityplayer instanceof EntityPlayer) + if(livingEntity.isSneaking()) { - entityplayer.motionY = 1.2; - entityplayer.fallDistance = 0; + continue; + } + + hasAether = hasAether && this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, false); + hasTerrae = hasTerrae && this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); + hasReductus = hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); + hasTenebrae = hasTenebrae && this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tenebraeDrain, false); + hasSanctus = hasSanctus && this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); + + double motionY = hasTerrae ? 0.6 : 1.2; + double speed = hasAether ? 6.0 : 3.0; + + + + if (!(hasTenebrae || hasSanctus) && livingEntity instanceof EntityPlayer) + { + livingEntity.motionY = motionY; + livingEntity.fallDistance = 0; switch (direction) { case 1: - SpellHelper.setPlayerSpeedFromServer((EntityPlayer)entityplayer, 0, 1.2, -3.0); + SpellHelper.setPlayerSpeedFromServer((EntityPlayer)livingEntity, 0, motionY, -speed); break; case 2: - SpellHelper.setPlayerSpeedFromServer((EntityPlayer)entityplayer, 3.0, 1.2, 0); + SpellHelper.setPlayerSpeedFromServer((EntityPlayer)livingEntity, speed, motionY, 0); break; case 3: - SpellHelper.setPlayerSpeedFromServer((EntityPlayer)entityplayer, 0, 1.2, 3.0); + SpellHelper.setPlayerSpeedFromServer((EntityPlayer)livingEntity, 0, motionY, speed); break; case 4: - SpellHelper.setPlayerSpeedFromServer((EntityPlayer)entityplayer, -3.0, 1.2, 0); + SpellHelper.setPlayerSpeedFromServer((EntityPlayer)livingEntity, -speed, motionY, 0); break; } - flag = true; + flag++; } else - //if (!(entityplayer.getEntityName().equals(owner))) { -// double xDif = entityplayer.posX - xCoord; -// double yDif = entityplayer.posY - (yCoord + 1); -// double zDif = entityplayer.posZ - zCoord; - //entityplayer.motionX=0.1*xDif; - entityplayer.motionY = 1.2; + if((hasSanctus && !livingEntity.isChild()) || (hasTenebrae && livingEntity.isChild())) + { + continue; + } + + livingEntity.motionY = motionY; switch (direction) { case 1: - entityplayer.motionX = 0.0; - entityplayer.motionZ = -3.0; + livingEntity.motionX = 0.0; + livingEntity.motionZ = -speed; break; case 2: - entityplayer.motionX = 3.0; - entityplayer.motionZ = 0.0; + livingEntity.motionX = speed; + livingEntity.motionZ = 0.0; break; case 3: - entityplayer.motionX = 0.0; - entityplayer.motionZ = -3.0; + livingEntity.motionX = 0.0; + livingEntity.motionZ = -speed; break; case 4: - entityplayer.motionX = -3.0; - entityplayer.motionZ = 0.0; + livingEntity.motionX = -speed; + livingEntity.motionZ = 0.0; break; } - //entityplayer.motionZ=0.1*zDif; - entityplayer.fallDistance = 0; - flag = true; - //entityplayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + livingEntity.fallDistance = 0; + flag++; + } + + if(hasAether) + { + this.canDrainReagent(ritualStone, ReagentRegistry.aetherReagent, aetherDrain, true); + } + if(hasTerrae) + { + this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); + } + if(hasReductus) + { + if(!livingEntity.isPotionActive(AlchemicalWizardry.customPotionFeatherFall)) + { + livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionFeatherFall.id, 3*20, 0)); + this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); + } + } + if(hasTenebrae) + { + this.canDrainReagent(ritualStone, ReagentRegistry.tenebraeReagent, tenebraeDrain, true); + } + if(hasSanctus) + { + this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); } } - if (flag) + if (flag > 0) { - data.currentEssence = currentEssence - this.getCostPerRefresh(); + data.currentEssence = currentEssence - this.getCostPerRefresh() * flag; data.markDirty(); } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java index 4589086c..a9eeaf71 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java @@ -12,15 +12,21 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectMagnetic extends RitualEffect { + private static final int potentiaDrain = 10; + private static final int terraeDrain = 10; + private static final int orbisTerraeDrain = 10; + @Override public void performEffect(IMasterRitualStone ritualStone) { @@ -40,24 +46,21 @@ public class RitualEffectMagnetic extends RitualEffect int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); - if (world.getWorldTime() % 40 != 0) + boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false); + + if(world.getWorldTime() % (hasPotentia ? 10 : 40) != 0) { - return; + return; } - Block powerBlock = world.getBlock(x, y-1, z); - int radius = this.getRadiusForModifierBlock(powerBlock); + boolean hasTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, false); + boolean hasOrbisTerrae = this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, false); + + int radius = this.getRadiusForReagents(hasTerrae, hasOrbisTerrae); if (currentEssence < this.getCostPerRefresh()) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { int xRep = 0; @@ -113,6 +116,22 @@ public class RitualEffectMagnetic extends RitualEffect BlockTeleposer.swapBlocks(world, world, x + i, j, z + k, xRep, yRep, zRep); data.currentEssence = currentEssence - this.getCostPerRefresh(); data.markDirty(); + + if(hasPotentia) + { + this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, true); + } + + if(hasTerrae) + { + this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true); + } + + if(hasOrbisTerrae) + { + this.canDrainReagent(ritualStone, ReagentRegistry.orbisTerraeReagent, orbisTerraeDrain, true); + } + return; } } @@ -152,28 +171,26 @@ public class RitualEffectMagnetic extends RitualEffect return magneticRitual; } - public int getRadiusForModifierBlock(Block block) + public int getRadiusForReagents(boolean hasTerrae, boolean hasOrbisTerrae) { - if(block == null) - { - return 3; - } - - if(block == Blocks.diamond_block) - { - return 31; - } - - if(block == Blocks.gold_block) - { - return 15; - } - - if(block == Blocks.iron_block) - { - return 7; - } - - return 3; + if(hasTerrae) + { + if(hasOrbisTerrae) + { + return 31; + }else + { + return 7; + } + }else + { + if(hasOrbisTerrae) + { + return 12; + }else + { + return 3; + } + } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java new file mode 100644 index 00000000..d2173358 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectSpawnWard.java @@ -0,0 +1,128 @@ +package WayofTime.alchemicalWizardry.common.rituals; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; +import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; +import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; +import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.common.AlchemicalWizardryEventHooks; +import WayofTime.alchemicalWizardry.common.CoordAndRange; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; + +public class RitualEffectSpawnWard extends RitualEffect +{ + @Override + public void performEffect(IMasterRitualStone 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.getWorld(); + int x = ritualStone.getXCoord(); + int y = ritualStone.getYCoord(); + int z = ritualStone.getZCoord(); + +// if (world.getWorldTime() % 20 != 0) +// { +// return; +// } + + if (currentEssence < this.getCostPerRefresh()) + { + SoulNetworkHandler.causeNauseaToPlayer(owner); + } else + { + int horizRange = 32; + int vertRange = 32; + + int dimension = world.provider.dimensionId; + + if(AlchemicalWizardryEventHooks.respawnMap.containsKey(new Integer(dimension))) + { + List list = AlchemicalWizardryEventHooks.respawnMap.get(new Integer(dimension)); + if(list != null) + { + if(!list.contains(new CoordAndRange(x,y,z,horizRange,vertRange))) + { + boolean hasFoundAndRemoved = false; + for(CoordAndRange coords : list) + { + int xLocation = coords.xCoord; + int yLocation = coords.yCoord; + int zLocation = coords.zCoord; + + if(xLocation == x && yLocation == y && zLocation == z) + { + list.remove(coords); + hasFoundAndRemoved = true; + break; + } + } + list.add(new CoordAndRange(x,y,z,horizRange,vertRange)); + } + }else + { + list = new LinkedList(); + list.add(new CoordAndRange(x,y,z,horizRange,vertRange)); + AlchemicalWizardryEventHooks.respawnMap.put(new Integer(dimension), list); + } + }else + { + List list = new LinkedList(); + list.add(new CoordAndRange(x,y,z,horizRange,vertRange)); + AlchemicalWizardryEventHooks.respawnMap.put(new Integer(dimension), list); + } + + + data.currentEssence = currentEssence - this.getCostPerRefresh(); + data.markDirty(); + } + } + + @Override + public int getCostPerRefresh() + { + + return 20; + } + + @Override + public List getRitualComponentList() + { + ArrayList animalGrowthRitual = new ArrayList(); + animalGrowthRitual.add(new RitualComponent(0, 0, 2, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(2, 0, 0, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(0, 0, -2, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(0, 0, 1, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(1, 0, 0, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(0, 0, -1, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(1, 0, 2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(1, 0, -2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); + return animalGrowthRitual; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java new file mode 100644 index 00000000..36cb6d31 --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectVeilOfEvil.java @@ -0,0 +1,128 @@ +package WayofTime.alchemicalWizardry.common.rituals; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; +import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; +import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; +import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; +import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.common.AlchemicalWizardryEventHooks; +import WayofTime.alchemicalWizardry.common.CoordAndRange; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; + +public class RitualEffectVeilOfEvil extends RitualEffect +{ + @Override + public void performEffect(IMasterRitualStone 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.getWorld(); + int x = ritualStone.getXCoord(); + int y = ritualStone.getYCoord(); + int z = ritualStone.getZCoord(); + +// if (world.getWorldTime() % 20 != 0) +// { +// return; +// } + + if (currentEssence < this.getCostPerRefresh()) + { + SoulNetworkHandler.causeNauseaToPlayer(owner); + } else + { + int horizRange = 32; + int vertRange = 32; + + int dimension = world.provider.dimensionId; + + if(AlchemicalWizardryEventHooks.forceSpawnMap.containsKey(new Integer(dimension))) + { + List list = AlchemicalWizardryEventHooks.forceSpawnMap.get(new Integer(dimension)); + if(list != null) + { + if(!list.contains(new CoordAndRange(x,y,z,horizRange,vertRange))) + { + boolean hasFoundAndRemoved = false; + for(CoordAndRange coords : list) + { + int xLocation = coords.xCoord; + int yLocation = coords.yCoord; + int zLocation = coords.zCoord; + + if(xLocation == x && yLocation == y && zLocation == z) + { + list.remove(coords); + hasFoundAndRemoved = true; + break; + } + } + list.add(new CoordAndRange(x,y,z,horizRange,vertRange)); + } + }else + { + list = new LinkedList(); + list.add(new CoordAndRange(x,y,z,horizRange,vertRange)); + AlchemicalWizardryEventHooks.forceSpawnMap.put(new Integer(dimension), list); + } + }else + { + List list = new LinkedList(); + list.add(new CoordAndRange(x,y,z,horizRange,vertRange)); + AlchemicalWizardryEventHooks.forceSpawnMap.put(new Integer(dimension), list); + } + + + data.currentEssence = currentEssence - this.getCostPerRefresh(); + data.markDirty(); + } + } + + @Override + public int getCostPerRefresh() + { + + return 20; + } + + @Override + public List getRitualComponentList() + { + ArrayList animalGrowthRitual = new ArrayList(); + animalGrowthRitual.add(new RitualComponent(0, 0, 2, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(2, 0, 0, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(0, 0, -2, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(0, 0, 1, RitualComponent.DUSK)); + animalGrowthRitual.add(new RitualComponent(1, 0, 0, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(0, 0, -1, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.WATER)); + animalGrowthRitual.add(new RitualComponent(1, 0, 2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(1, 0, -2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.EARTH)); + animalGrowthRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR)); + animalGrowthRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR)); + return animalGrowthRitual; + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWater.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWater.java index 860d5fa0..3ec59e92 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWater.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWater.java @@ -4,21 +4,37 @@ import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; -import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; +import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.block.BlockSpectralContainer; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectWater extends RitualEffect { + public static final int aquasalusDrain = 5; + public static final int offensaDrain = 20; + public static final int sanctusDrain = 5; + public static final int reductusDrain = 2; + public static final int crystallosDrain = 10; + public void performEffect(IMasterRitualStone ritualStone) { String owner = ritualStone.getOwner(); @@ -37,20 +53,77 @@ public class RitualEffectWater extends RitualEffect int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); + boolean hasCrystallos = this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, false); + boolean hasAquasalus = this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, false); + boolean hasOffensa = this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, false); + + if(hasAquasalus) + { + int hydrationRange = 4; + int vertRange = 3; + + for(int i=-hydrationRange; i<=hydrationRange; i++) + { + for(int j=-vertRange; j<=vertRange; j++) + { + for(int k=-hydrationRange; k<=hydrationRange; k++) + { + if(SpellHelper.hydrateSoil(world, x+i, y+j, z+k)) + { + this.canDrainReagent(ritualStone, ReagentRegistry.aquasalusReagent, aquasalusDrain, true); + } + } + } + } + } + + if(hasOffensa) + { + boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false); + boolean drainReductus = world.getWorldTime() % 100 == 0; + + int range = 10; + List list = SpellHelper.getEntitiesInRange(world, x + 0.5, y + 0.5, z + 0.5, range, range); + for(Entity entity : list) + { + if(entity instanceof EntityLivingBase) + { + EntityLivingBase livingEntity = (EntityLivingBase) entity; + + if(livingEntity == SpellHelper.getPlayerForUsername(owner)) + { + continue; + } + + if(hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false)) + { + if(entity instanceof EntityPlayer) + { + if(drainReductus) + { + this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true); + } + + continue; + } + } + + if(!livingEntity.isPotionActive(AlchemicalWizardry.customPotionDrowning)) + { + livingEntity.addPotionEffect(new PotionEffect(AlchemicalWizardry.customPotionDrowning.id,100,0)); + this.canDrainReagent(ritualStone, ReagentRegistry.offensaReagent, offensaDrain, true); + } + } + } + } + Block block = world.getBlock(x, y + 1, z); if (world.isAirBlock(x, y + 1, z) && !(block instanceof BlockSpectralContainer)) { if (currentEssence < this.getCostPerRefresh()) { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { for (int i = 0; i < 10; i++) @@ -62,6 +135,58 @@ public class RitualEffectWater extends RitualEffect data.currentEssence = currentEssence - this.getCostPerRefresh(); data.markDirty(); } + }else + { + boolean hasSanctus = this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, false); + TileEntity tile = world.getTileEntity(x, y + 1, z); + if(tile instanceof IFluidHandler) + { + int amount = ((IFluidHandler) tile).fill(ForgeDirection.DOWN, new FluidStack(FluidRegistry.WATER, 1000), false); + if(amount >= 1000) + { + ((IFluidHandler) tile).fill(ForgeDirection.DOWN, new FluidStack(FluidRegistry.WATER, 1000), true); + + this.canDrainReagent(ritualStone, ReagentRegistry.sanctusReagent, sanctusDrain, true); + + data.currentEssence = currentEssence - this.getCostPerRefresh(); + data.markDirty(); + } + } + } + + if(hasCrystallos) + { + int range = 2; + for(int i=-range; i<=range; i++) + { + for(int j=-range; j<=range; j++) + { + for(int k=-range; k<=range; k++) + { + hasCrystallos = hasCrystallos && this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, false); + + if(hasCrystallos) + { + boolean success = false; + if(!world.isAirBlock(x+i, y+j, z+k) && SpellHelper.freezeWaterBlock(world, x+i, y+j, z+k)) + { + success = true; + }else + { + if(world.rand.nextInt(100) == 0 && world.isSideSolid(x+i, y+j-1, z+k, ForgeDirection.UP)) + { + success = true; + } + } + + if(success) + { + this.canDrainReagent(ritualStone, ReagentRegistry.crystallosReagent, crystallosDrain, true); + } + } + } + } + } } } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java index 993c102b..2f6bef8f 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectWellOfSuffering.java @@ -17,13 +17,14 @@ import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.LifeEssenceNetwork; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; import WayofTime.alchemicalWizardry.common.tileEntity.TEAltar; public class RitualEffectWellOfSuffering extends RitualEffect { - public final int timeDelay = 25; - public final int amount = 10; + public static final int timeDelay = 25; + public static final int amount = 10; @Override public void performEffect(IMasterRitualStone ritualStone) @@ -49,10 +50,6 @@ public class RitualEffectWellOfSuffering extends RitualEffect return; } -// if(!(world.getBlockTileEntity(x, y-1, z) instanceof TEAltar)) -// { -// return; -// } TEAltar tileAltar = null; boolean testFlag = false; @@ -76,54 +73,30 @@ public class RitualEffectWellOfSuffering extends RitualEffect return; } - //tileAltar = (TEAltar)world.getBlockTileEntity(x,y-1,z); int d0 = 10; int vertRange = 10; AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y, (double) z, (double) (x + 1), (double) (y + 1), (double) (z + 1)).expand(d0, vertRange, d0); - List list = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); - Iterator iterator1 = list.iterator(); - EntityLivingBase entity; + List list = world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); + int entityCount = 0; - boolean flag = false; - while (iterator1.hasNext()) + if (currentEssence < this.getCostPerRefresh() * list.size()) { - entity = (EntityLivingBase) iterator1.next(); - entityCount++; - } - - if (currentEssence < this.getCostPerRefresh() * entityCount) - { - EntityPlayer entityOwner = SpellHelper.getPlayerForUsername(owner); - - if (entityOwner == null) - { - return; - } - - entityOwner.addPotionEffect(new PotionEffect(Potion.confusion.id, 80)); + SoulNetworkHandler.causeNauseaToPlayer(owner); } else { - Iterator iterator2 = list.iterator(); - entityCount = 0; - - while (iterator2.hasNext()) + for(EntityLivingBase livingEntity : list) { - entity = (EntityLivingBase) iterator2.next(); - - if (entity instanceof EntityPlayer || AlchemicalWizardry.wellBlacklist.contains(entity.getClass())) + if (livingEntity instanceof EntityPlayer || AlchemicalWizardry.wellBlacklist.contains(livingEntity.getClass())) { continue; } - //entity.setHealth(entity.getHealth()-1); - entity.attackEntityFrom(DamageSource.outOfWorld, 1); - entityCount++; -// if(entity.getHealth()<=0.2f) -// { -// entity.onDeath(DamageSource.inFire); -// } - tileAltar.sacrificialDaggerCall(this.amount, true); + if(livingEntity.attackEntityFrom(DamageSource.outOfWorld, 1)) + { + entityCount++; + tileAltar.sacrificialDaggerCall(this.amount, true); + } } data.currentEssence = currentEssence - this.getCostPerRefresh() * entityCount; @@ -134,7 +107,6 @@ public class RitualEffectWellOfSuffering extends RitualEffect @Override public int getCostPerRefresh() { - // TODO Auto-generated method stub return 2; } diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java index eed5897a..630e2fbc 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/spell/complex/effect/SpellHelper.java @@ -7,15 +7,16 @@ import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.management.ServerConfigurationManager; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; @@ -25,6 +26,8 @@ import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.oredict.OreDictionary; import WayofTime.alchemicalWizardry.AlchemicalWizardry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IAlchemyGoggles; +import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator; import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.NewPacketHandler; @@ -52,11 +55,40 @@ public class SpellHelper } } + public static boolean canPlayerSeeAlchemy(EntityPlayer player) + { + if(player != null) + { + ItemStack stack = player.getCurrentArmor(3); + if(stack != null) + { + Item item = stack.getItem(); + if(item instanceof IAlchemyGoggles && ((IAlchemyGoggles)item).showIngameHUD(player.worldObj, stack, player)) + { + return true; + } + } + + ItemStack heldStack = player.getHeldItem(); + if(heldStack != null && heldStack.getItem() instanceof IReagentManipulator) + { + return true; + } + } + + return false; + } + public static List getEntitiesInRange(World world, double posX, double posY, double posZ, double horizontalRadius, double verticalRadius) { 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 getLivingEntitiesInRange(World world, double posX, double posY, double posZ, double horizontalRadius, double verticalRadius) + { + return world.getEntitiesWithinAABB(EntityLivingBase.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 getItemsInRange(World world, double posX, double posY, double posZ, double horizontalRadius, double verticalRadius) { return world.getEntitiesWithinAABB(EntityItem.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)); @@ -121,14 +153,17 @@ public class SpellHelper return ForgeDirection.EAST; } - public static void freezeWaterBlock(World world, int posX, int posY, int posZ) + public static boolean freezeWaterBlock(World world, int posX, int posY, int posZ) { Block block = world.getBlock(posX, posY, posZ); if(block == Blocks.water || block == Blocks.flowing_water) { world.setBlock(posX, posY, posZ, Blocks.ice); + return true; } + + return false; } public static String getUsername(EntityPlayer player) @@ -138,11 +173,7 @@ public class SpellHelper public static EntityPlayer getPlayerForUsername(String str) { - if(MinecraftServer.getServer() == null) - { - return null; - } - return MinecraftServer.getServer().getConfigurationManager().func_152612_a(str); + return SoulNetworkHandler.getPlayerForUsername(str); } public static void sendParticleToPlayer(EntityPlayer player, String str, double xCoord, double yCoord, double zCoord, double xVel, double yVel, double zVel) @@ -389,4 +420,99 @@ public class SpellHelper default: return ""; } } + + /** + * Used to determine if stack1 can be placed into stack2. If stack2 is null and stack1 isn't null, returns true. Ignores stack size + * @param stack1 Stack that is placed into a slot + * @param stack2 Slot content that stack1 is placed into + * @return True if they can be combined + */ + public static boolean canCombine(ItemStack stack1, ItemStack stack2) + { + if(stack1 == null) + { + return false; + } + + if(stack2 == null) + { + return true; + } + + if(stack1.isItemStackDamageable() ^ stack2.isItemStackDamageable()) + { + return false; + } + + boolean tagsEqual = ItemStack.areItemStackTagsEqual(stack1, stack2); + + return stack1.getItem() == stack2.getItem() && tagsEqual && stack1.getItemDamage() == stack2.getItemDamage() && Math.min(stack2.getMaxStackSize() - stack2.stackSize, stack1.stackSize) > 0; + } + + /** + * + * @param stack1 Stack that is placed into a slot + * @param stack2 Slot content that stack1 is placed into + * @return Stacks after stacking + */ + public static ItemStack[] combineStacks(ItemStack stack1, ItemStack stack2) + { + ItemStack[] returned = new ItemStack[2]; + + if(canCombine(stack1, stack2)) + { + int transferedAmount = stack2 == null ? stack1.stackSize : Math.min(stack2.getMaxStackSize() - stack2.stackSize, stack1.stackSize); + if(transferedAmount > 0) + { + ItemStack copyStack = stack1.splitStack(transferedAmount); + if(stack2 == null) + { + stack2 = copyStack; + }else + { + stack2.stackSize+=transferedAmount; + } + } + } + + returned[0] = stack1; + returned[1] = stack2; + + return returned; + } + + public static ItemStack insertStackIntoInventory(ItemStack stack, IInventory inventory) + { + if(stack == null) + { + return stack; + } + + for(int i=0; i 0) + { + ReagentStack drainedStack = this.bufferTank.drain(drainAmount, true); + this.fill(ForgeDirection.UNKNOWN, drainedStack, true); + } + } + + public void tickProgress() + { + ItemStack reagentItemStack = this.getStackInSlot(1); + if(reagentItemStack == null) + { + progress = 0; + return; + } + + ReagentStack possibleReagent = ReagentRegistry.getReagentStackForItem(reagentItemStack); + if(possibleReagent == null || !this.canReagentFitBuffer(possibleReagent)) + { + return; + } + + ItemStack orbStack = this.getStackInSlot(0); + if(orbStack == null || !(orbStack.getItem() instanceof IBloodOrb)) + { + return; + } + + if(!SoulNetworkHandler.canSyphonFromOnlyNetwork(orbStack, lpPerTick)) + { + SoulNetworkHandler.causeNauseaToPlayer(orbStack); + return; + } + + SoulNetworkHandler.syphonFromNetwork(orbStack, lpPerTick); + progress++; + + if (worldObj.getWorldTime() % 4 == 0) + { + SpellHelper.sendIndexedParticleToAllAround(worldObj, xCoord, yCoord, zCoord, 20, worldObj.provider.dimensionId, 1, xCoord, yCoord, zCoord); + } + + if(progress >= this.ticksPerReagent) + { + progress = 0; + this.bufferTank.fill(possibleReagent, true); + this.decrStackSize(1, 1); + } + } + + public boolean canReagentFitBuffer(ReagentStack stack) + { + int amount = this.bufferTank.fill(stack, false); + + return amount >= stack.amount; + } + + @Override + public void readClientNBT(NBTTagCompound tag) + { + super.readClientNBT(tag); + + NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); + + int size = tagList.tagCount(); + this.tanks = new ReagentContainer[size]; + + for(int i=0; i getInventoryStackLimit()) + { + stack.stackSize = getInventoryStackLimit(); + } + + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + @Override + public ItemStack decrStackSize(int slot, int amt) + { + ItemStack stack = getStackInSlot(slot); + + if (stack != null) + { + if (stack.stackSize <= amt) + { + setInventorySlotContents(slot, null); + } else + { + stack = stack.splitStack(amt); + + if (stack.stackSize == 0) + { + setInventorySlotContents(slot, null); + } + } + } + + return stack; + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) + { + ItemStack stack = getStackInSlot(slot); + + if (stack != null) + { + setInventorySlotContents(slot, null); + } + + return stack; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) + { + return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64; + } + + @Override + public void openInventory() + { + } + + @Override + public void closeInventory() + { + } + + @Override + public String getInventoryName() + { + return "AlchemicCalcinator"; + } + + @Override + public boolean hasCustomInventoryName() + { + return false; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack itemStack) + { + return true; + } + + @Override + public int fill(ForgeDirection from, ReagentStack resource, boolean doFill) + { + if(doFill && !worldObj.isRemote) + { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + return super.fill(from, resource, doFill); + } +} diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java index 7bb7c70c..d373af27 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEAltar.java @@ -568,8 +568,21 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui { this.lockdownDuration += 20; } - } - } + } + } + + if(AlchemicalWizardry.causeHungerWithRegen) + { + List list = SpellHelper.getPlayersInRange(worldObj, xCoord+0.5, yCoord+0.5, zCoord+0.5, 15, 15); + for(EntityPlayer player : list) + { + PotionEffect regenEffect = player.getActivePotionEffect(Potion.regeneration); + if(regenEffect != null && regenEffect.getAmplifier() > 0) + { + player.addPotionEffect(new PotionEffect(Potion.hunger.id, 40, regenEffect.getAmplifier()*2 - 2)); + } + } + } } if (worldObj.getWorldTime() % 100 == 0) diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEBellJar.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEBellJar.java new file mode 100644 index 00000000..8f72cfcd --- /dev/null +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEBellJar.java @@ -0,0 +1,92 @@ +package WayofTime.alchemicalWizardry.common.tileEntity; + +import net.minecraft.block.Block; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainer; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; + +public class TEBellJar extends TEReagentConduit +{ + public TEBellJar() + { + super(1, 16000); + this.maxConnextions = 1; + this.affectedByRedstone = false; + } + + public int getRSPowerOutput() + { + ReagentContainer thisTank = this.tanks[0]; + if(thisTank != null) + { + ReagentStack stack = thisTank.getReagent(); + if(stack != null) + { + return (15*stack.amount/thisTank.getCapacity()); + } + } + return 0; + } + +// @Override +// public void readClientNBT(NBTTagCompound tag) +// { +// super.readClientNBT(tag); +// +// NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); +// +// int size = tagList.tagCount(); +// this.tanks = new ReagentContainer[size]; +// +// for(int i=0; i attunedTankMap; public TEMasterStone() { + tanks = new ReagentContainer[]{new ReagentContainer(1000),new ReagentContainer(1000),new ReagentContainer(1000)}; + this.attunedTankMap = new HashMap(); + isActive = false; owner = ""; cooldown = 0; @@ -39,32 +59,117 @@ public class TEMasterStone extends TileEntity implements IMasterRitualStone runningTime = 0; } - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) + public void readClientNBT(NBTTagCompound tag) { - super.readFromNBT(par1NBTTagCompound); - isActive = par1NBTTagCompound.getBoolean("isActive"); - owner = par1NBTTagCompound.getString("owner"); - cooldown = par1NBTTagCompound.getInteger("cooldown"); - var1 = par1NBTTagCompound.getInteger("var1"); - direction = par1NBTTagCompound.getInteger("direction"); - currentRitualString = par1NBTTagCompound.getString("currentRitualString"); - isRunning = par1NBTTagCompound.getBoolean("isRunning"); - runningTime = par1NBTTagCompound.getInteger("runningTime"); + currentRitualString = tag.getString("currentRitualString"); + isRunning = tag.getBoolean("isRunning"); + runningTime = tag.getInteger("runningTime"); + + NBTTagList tagList = tag.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND); + + int size = tagList.tagCount(); + this.tanks = new ReagentContainer[size]; + + for(int i=0; i entry : this.attunedTankMap.entrySet()) + { + NBTTagCompound savedTag = new NBTTagCompound(); + savedTag.setString("reagent", ReagentRegistry.getKeyForReagent(entry.getKey())); + savedTag.setInteger("amount", entry.getValue()); + attunedTagList.appendTag(savedTag); + } + + tag.setTag("attunedTankMap", attunedTagList); } public void activateRitual(World world, int crystalLevel, EntityPlayer player) @@ -269,11 +374,26 @@ public class TEMasterStone extends TileEntity implements IMasterRitualStone this.currentRitualString = str; } - @Override - public Packet getDescriptionPacket() - { - return NewPacketHandler.getPacket(this); - } +// @Override +// public Packet getDescriptionPacket() +// { +// return NewPacketHandler.getPacket(this); +// } + + @Override + public Packet getDescriptionPacket() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeClientNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, -999, nbttagcompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) + { + super.onDataPacket(net, packet); + readClientNBT(packet.func_148857_g()); + } public AxisAlignedBB getRenderBoundingBox() { @@ -281,4 +401,191 @@ public class TEMasterStone extends TileEntity implements IMasterRitualStone AxisAlignedBB bb = AxisAlignedBB. getBoundingBox(xCoord-renderExtention, yCoord-renderExtention, zCoord-renderExtention, xCoord+1+renderExtention, yCoord+1+renderExtention, zCoord+1+renderExtention); return bb; } + + /* ISegmentedReagentHandler */ + @Override + public int fill(ForgeDirection from, ReagentStack resource, boolean doFill) + { + if(doFill) + { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + int totalFill = 0; + + boolean useTankLimit = !this.attunedTankMap.isEmpty(); + + if(resource != null) + { + int totalTanksFillable = useTankLimit ? this.getTanksTunedToReagent(resource.reagent) : this.tanks.length; + int tanksFilled = 0; + + int maxFill = resource.amount; + + for(int i=this.tanks.length-1; i>=0; i--) + { + ReagentStack remainingStack = resource.copy(); + remainingStack.amount = maxFill - totalFill; + + boolean doesReagentMatch = tanks[i].getReagent() == null ? false : tanks[i].getReagent().isReagentEqual(remainingStack); + + if(doesReagentMatch) + { + totalFill += tanks[i].fill(remainingStack, doFill); + tanksFilled++; + }else + { + continue; + } + + if(totalFill >= maxFill || tanksFilled >= totalTanksFillable) + { + return totalFill; + } + } + + if(tanksFilled >= totalTanksFillable) + { + return totalFill; + } + + for(int i=this.tanks.length-1; i>=0; i--) + { + ReagentStack remainingStack = resource.copy(); + remainingStack.amount = maxFill - totalFill; + + boolean isTankEmpty = tanks[i].getReagent() == null; + + if(isTankEmpty) + { + totalFill += tanks[i].fill(remainingStack, doFill); + tanksFilled++; + }else + { + continue; + } + + if(totalFill >= maxFill || tanksFilled >= totalTanksFillable) + { + return totalFill; + } + } + } + return totalFill; + } + + @Override + public ReagentStack drain(ForgeDirection from, ReagentStack resource, boolean doDrain) + { + if(resource == null) + { + return null; + } + + if(doDrain) + { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + int maxDrain = resource.amount; + Reagent reagent = resource.reagent; + int drained = 0; + + for(int i=0; i= maxDrain) + { + break; + } + + if (resource.isReagentEqual(tanks[i].getReagent())) + { + ReagentStack drainStack = tanks[i].drain(maxDrain-drained, doDrain); + if(drainStack != null) + { + drained += drainStack.amount; + } + } + } + + return new ReagentStack(reagent, drained); + } + + /* Only returns the amount from the first available tank */ + @Override + public ReagentStack drain(ForgeDirection from, int maxDrain, boolean doDrain) + { + for(int i=0; i getAttunedTankMap() + { + return this.attunedTankMap; + } } \ No newline at end of file diff --git a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEReagentConduit.java b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEReagentConduit.java index f8e52d79..63ea12f9 100644 --- a/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEReagentConduit.java +++ b/1.7.10/main/java/WayofTime/alchemicalWizardry/common/tileEntity/TEReagentConduit.java @@ -1,8 +1,530 @@ package WayofTime.alchemicalWizardry.common.tileEntity; -import net.minecraft.tileentity.TileEntity; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; -public class TEReagentConduit extends TileEntity +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import WayofTime.alchemicalWizardry.api.ColourAndCoords; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IAlchemyGoggles; +import WayofTime.alchemicalWizardry.api.alchemy.energy.IReagentHandler; +import WayofTime.alchemicalWizardry.api.alchemy.energy.Reagent; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentContainer; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentStack; +import WayofTime.alchemicalWizardry.api.alchemy.energy.TileSegmentedReagentHandler; +import WayofTime.alchemicalWizardry.common.Int3; +import WayofTime.alchemicalWizardry.common.entity.projectile.EntityParticleBeam; +import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; + +public class TEReagentConduit extends TileSegmentedReagentHandler { + public List destinationList; //These are offsets + public Map> reagentTargetList; + public Map reagentTankDesignationList; + public int tickRate = 20; //Rate that the reagents are sent -} + int hasChanged = 0; + public boolean affectedByRedstone = true; + + public int maxConnextions = 5; + + public int renderCount = 0; + + public TEReagentConduit() + { + this(2, 2000); + } + + public TEReagentConduit(int numberOfTanks, int size) + { + super(numberOfTanks, size); + + destinationList = new LinkedList(); + reagentTargetList = new HashMap(); + reagentTankDesignationList = new HashMap(); + } + + public Int3 getColour() + { + int[] redMap = new int[this.tanks.length]; + int[] greenMap = new int[this.tanks.length]; + int[] blueMap = new int[this.tanks.length]; + + for(int i=0; i> entry : reagentTargetList.entrySet()) + { + NBTTagCompound savedTag = new NBTTagCompound(); + savedTag.setString("reagent", ReagentRegistry.getKeyForReagent(entry.getKey())); + + NBTTagList coordinateTagList = new NBTTagList(); + + for(Int3 coord : entry.getValue()) + { + NBTTagCompound coordinateTag = new NBTTagCompound(); + + coord.writeToNBT(coordinateTag); + + coordinateTagList.appendTag(coordinateTag); + } + + savedTag.setTag("coordinateList", coordinateTagList); + + reagentTagList.appendTag(savedTag); + } + + tag.setTag("reagentTargetList", reagentTagList); + + NBTTagList tankDesignationList = new NBTTagList(); + + for(Entry entry : this.reagentTankDesignationList.entrySet()) + { + NBTTagCompound savedTag = new NBTTagCompound(); + + savedTag.setString("reagent", ReagentRegistry.getKeyForReagent(entry.getKey())); + savedTag.setInteger("integer", entry.getValue()); + + tankDesignationList.appendTag(savedTag); + } + + tag.setTag("tankDesignationList", tankDesignationList); + + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + super.readFromNBT(tag); + + hasChanged = tag.getInteger("hasChanged"); + + NBTTagList tagList = tag.getTagList("destinationList", Constants.NBT.TAG_COMPOUND); + + destinationList = new LinkedList(); + + for(int i=0; i coordList = new LinkedList(); + + NBTTagList coordinateList = savedTag.getTagList("coordinateList", Constants.NBT.TAG_COMPOUND); + + for(int j=0; j 1) + { + hasChanged = 1; + }else if(hasChanged == 1) + { + hasChanged = 0; + } + + if(worldObj.getWorldTime() % 100 == 99) + { + this.updateColourList(); + } + + if(affectedByRedstone && worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) + { + return; + } + + int totalTransfered = 0; + + for(Entry> entry : this.reagentTargetList.entrySet()) + { + for(Int3 coord : entry.getValue()) + { + if(totalTransfered >= this.tickRate) + { + break; + } + + ReagentStack maxDrainAmount = this.drain(ForgeDirection.UNKNOWN, new ReagentStack(entry.getKey(), this.tickRate - totalTransfered), false); + + if(maxDrainAmount == null) + { + continue; + } + + int amountLeft = maxDrainAmount.amount; + + if(amountLeft <= 0) + { + continue; + } + + int x = xCoord + coord.xCoord; + int y = yCoord + coord.yCoord; + int z = zCoord + coord.zCoord; + + TileEntity tile = worldObj.getTileEntity(x, y, z); + if(tile instanceof IReagentHandler) + { + int amount = Math.min(((IReagentHandler) tile).fill(ForgeDirection.UNKNOWN, maxDrainAmount, false), amountLeft); + if(amount > 0) + { + amountLeft -= amount; + totalTransfered += amount; + + ReagentStack stack = this.drain(ForgeDirection.UNKNOWN, new ReagentStack(entry.getKey(), amount), true); + ((IReagentHandler) tile).fill(ForgeDirection.UNKNOWN, stack, true); + } + } + } + } + }else + { + if(affectedByRedstone && worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) + { + return; + } + + renderCount++; + + if(worldObj.getWorldTime() % 100 != 0) + { + return; + } + + Minecraft mc = Minecraft.getMinecraft(); + EntityPlayer player = mc.thePlayer; + World world = mc.theWorld; + if(SpellHelper.canPlayerSeeAlchemy(player)) + { + for(ColourAndCoords colourSet : this.destinationList) + { + if(!(worldObj.getTileEntity(xCoord + colourSet.xCoord, yCoord + colourSet.yCoord, zCoord + colourSet.zCoord) instanceof IReagentHandler)) + { + continue; + } + EntityParticleBeam beam = new EntityParticleBeam(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); + double velocity = Math.sqrt(Math.pow(colourSet.xCoord, 2) + Math.pow(colourSet.yCoord, 2) + Math.pow(colourSet.zCoord, 2)); + double wantedVel = 0.3d; + beam.setVelocity(wantedVel*colourSet.xCoord/velocity, wantedVel*colourSet.yCoord/velocity, wantedVel*colourSet.zCoord/velocity); + beam.setColour(colourSet.colourRed / 255f, colourSet.colourGreen/255f, colourSet.colourBlue/255f); + beam.setDestination(xCoord + colourSet.xCoord, yCoord + colourSet.yCoord, zCoord + colourSet.zCoord); + worldObj.spawnEntityInWorld(beam); + } + } + } + } + + public void updateColourList() + { + if(worldObj.isRemote) + { + return; + } + + List newList = this.compileListForReagentTargets(this.reagentTargetList); + + if(newList != null && !newList.equals(destinationList)) + { + this.destinationList = newList; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + } + + public List compileListForReagentTargets(Map> map) + { + List list = new LinkedList(); + + for(Entry> entry : map.entrySet()) + { + if(entry.getValue() != null) + { + Reagent reagent = entry.getKey(); + List coords = entry.getValue(); + for(Int3 coord : coords) + { + list.add(new ColourAndCoords(reagent.getColourRed(), reagent.getColourGreen(), reagent.getColourBlue(), reagent.getColourIntensity(), coord.xCoord, coord.yCoord, coord.zCoord)); + } + } + } + + return list; + } + + public boolean addDestinationViaOffset(int red, int green, int blue, int intensity, int xOffset, int yOffset, int zOffset) + { + if(xOffset == 0 && yOffset == 0 && zOffset == 0) + { + return false; + } + + this.destinationList.add(new ColourAndCoords(red, green, blue, intensity, xOffset, yOffset, zOffset)); + + return true; + } + + public boolean addDestinationViaActual(int red, int green, int blue, int intensity, int x, int y, int z) + { + return this.addDestinationViaOffset(red, green, blue, intensity, x - this.xCoord, y - this.yCoord, z - this.zCoord); + } + + @Override + public Packet getDescriptionPacket() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeClientNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 90210, nbttagcompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) + { + super.onDataPacket(net, packet); + readClientNBT(packet.func_148857_g()); + } + + public boolean addReagentDestinationViaOffset(Reagent reagent, int xOffset, int yOffset, int zOffset) + { + int totalConnections = 0; + + for(Entry> entry : this.reagentTargetList.entrySet()) + { + if(entry.getValue() != null) + { + totalConnections += entry.getValue().size(); + } + } + + if(totalConnections >= this.maxConnextions) + { + //Send message that it cannot be done? Maybe add a Player instance + return false; + } + + if(xOffset == 0 && yOffset == 0 && zOffset == 0) + { + return false; + } + + Int3 newCoord = new Int3(xOffset, yOffset, zOffset); + + if(this.reagentTargetList.containsKey(reagent)) + { + List coordList = this.reagentTargetList.get(reagent); + if(coordList == null) + { + List newCoordList = new LinkedList(); + newCoordList.add(newCoord); + this.reagentTargetList.put(reagent, newCoordList); + }else + { + coordList.add(newCoord); + } + + return true; + }else + { + List newCoordList = new LinkedList(); + newCoordList.add(newCoord); + this.reagentTargetList.put(reagent, newCoordList); + + return true; + } + } + + public boolean addReagentDestinationViaActual(Reagent reagent, int x, int y, int z) + { + return (this.addReagentDestinationViaOffset(reagent, x-xCoord, y-yCoord, z-zCoord)); + } + + public boolean removeReagentDestinationViaOffset(Reagent reagent, int xOffset, int yOffset, int zOffset) + { + if(this.reagentTargetList.containsKey(reagent)) + { + List coords = this.reagentTargetList.get(reagent); + if(coords != null) + { + Int3 reference = new Int3(xOffset, yOffset, zOffset); + + return coords.remove(reference); + } + } + return false; + } + + public boolean removeReagentDestinationViaActual(Reagent reagent, int x, int y, int z) + { + return this.removeReagentDestinationViaOffset(reagent, x-xCoord, y-yCoord, z-zCoord); + } + + @Override + public int fill(ForgeDirection from, ReagentStack resource, boolean doFill) + { + if(doFill && !worldObj.isRemote) + { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + hasChanged = 2; + } + + return super.fill(from, resource, doFill); + } + + @Override + public ReagentStack drain(ForgeDirection from, ReagentStack resource, boolean doDrain) + { + if(doDrain && !worldObj.isRemote) + { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + hasChanged = 2; + } + + return super.drain(from, resource, doDrain); + } +} \ No newline at end of file diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/lang/en_US.lang b/1.7.10/main/resources/assets/alchemicalwizardry/lang/en_US.lang index a377343f..f8b7f85e 100644 --- a/1.7.10/main/resources/assets/alchemicalwizardry/lang/en_US.lang +++ b/1.7.10/main/resources/assets/alchemicalwizardry/lang/en_US.lang @@ -50,6 +50,9 @@ tile.blockSpellEffect.fire.name=Crucible of Fire tile.blockSpellEffect.ice.name=Ice Maker tile.blockSpellEffect.wind.name=Wind Generator tile.blockSpellEffect.earth.name=Earth Former +tile.alchemicCalcinator.name=Alchemic Calcinator +tile.crystalBelljar.name=Crystal Belljar +tile.blockReagentConduit.name=Alchemy Relay #Item Localization item.weakBloodOrb.name=Weak Blood Orb @@ -176,6 +179,9 @@ item.itemCombinationalCatalyst.name=Combinational Catalyst item.sanguineRobe.name=Sanguine Robes item.sanguinePants.name=Sanguine Leggings item.sanguineBoots.name=Sanguine Boots +item.itemAttunedCrystal.name=Alchemic Router +item.itemTankSegmenter.name=Alchemic Segmenter +item.destinationClearer.name=Alchemic Cleanser #Creative Tab itemGroup.tabBloodMagic=Blood Magic diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/blocks/SimpleTransCircle.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/blocks/SimpleTransCircle.png new file mode 100644 index 00000000..d178e55b Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/blocks/SimpleTransCircle.png differ diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal1.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal1.png new file mode 100644 index 00000000..5ae66ba2 Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal1.png differ diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal2.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal2.png new file mode 100644 index 00000000..788a5db0 Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/AttunedCrystal2.png differ diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankClearer.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankClearer.png new file mode 100644 index 00000000..3a077c2c Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankClearer.png differ diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter1.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter1.png new file mode 100644 index 00000000..18dd85b0 Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter1.png differ diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter2.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter2.png new file mode 100644 index 00000000..a9a3ba6d Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/items/TankSegmenter2.png differ diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/AlchemicalCalcinator.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/AlchemicalCalcinator.png new file mode 100644 index 00000000..1cd15356 Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/AlchemicalCalcinator.png differ diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/CrystalBelljar.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/CrystalBelljar.png new file mode 100644 index 00000000..253adf89 Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/CrystalBelljar.png differ diff --git a/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/Reagent.png b/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/Reagent.png new file mode 100644 index 00000000..c89dc730 Binary files /dev/null and b/1.7.10/main/resources/assets/alchemicalwizardry/textures/models/Reagent.png differ