diff --git a/MODSRC/vazkii/botania/client/lib/LibResources.java b/MODSRC/vazkii/botania/client/lib/LibResources.java index a11562b76..30f1ac494 100644 --- a/MODSRC/vazkii/botania/client/lib/LibResources.java +++ b/MODSRC/vazkii/botania/client/lib/LibResources.java @@ -52,6 +52,7 @@ public final class LibResources { public static final String ENTRY_PORTAL3 = PREFIX_ENTRIES + "portal3.png"; public static final String ENTRY_PORTAL4 = PREFIX_ENTRIES + "portal4.png"; public static final String ENTRY_ELVEN_GARDE = PREFIX_ENTRIES + "elvenGarde.png"; + public static final String ENTRY_GAIA_RITUAL = PREFIX_ENTRIES + "gaiaRitual.png"; public static final String MODEL_ALTAR = PREFIX_MODEL + "altar.png"; public static final String MODEL_ALTAR_MOSSY = PREFIX_MODEL + "altarMossy.png"; diff --git a/MODSRC/vazkii/botania/client/render/entity/RenderDoppleganger.java b/MODSRC/vazkii/botania/client/render/entity/RenderDoppleganger.java index 0768c5b5b..de9613e22 100644 --- a/MODSRC/vazkii/botania/client/render/entity/RenderDoppleganger.java +++ b/MODSRC/vazkii/botania/client/render/entity/RenderDoppleganger.java @@ -61,7 +61,6 @@ public class RenderDoppleganger extends RenderBiped { disfiguration = (0.025F + dopple.hurtTime * ((1F - 0.15F) / 20F)) / 2F; grainIntensity = 0.05F + dopple.hurtTime * ((1F - 0.15F) / 10F); } - ShaderHelper.useShader(ShaderHelper.doppleganger, callback); super.doRender(par1Entity, par2, par4, par6, par8, par9); diff --git a/MODSRC/vazkii/botania/common/crafting/ModCrafingRecipes.java b/MODSRC/vazkii/botania/common/crafting/ModCrafingRecipes.java index 8a1e545cc..e1e27fe88 100644 --- a/MODSRC/vazkii/botania/common/crafting/ModCrafingRecipes.java +++ b/MODSRC/vazkii/botania/common/crafting/ModCrafingRecipes.java @@ -159,6 +159,7 @@ public final class ModCrafingRecipes { public static IRecipe recipeLensWeight; public static IRecipe recipeLensPaint; public static List recipesMiniIsland; + public static IRecipe recipeGaiaPylon; public static void init() { // Lexicon Recipe @@ -963,7 +964,15 @@ public final class ModCrafingRecipes { 'S', new ItemStack(ModItems.grassSeeds), 'D', new ItemStack(Blocks.dirt)); recipesMiniIsland = BotaniaAPI.getLatestAddedRecipes(16); - + + // Gaia Pylon Recipe + addOreDictRecipe(new ItemStack(ModBlocks.pylon, 1, 2), + " D ", "EPE", " D ", + 'D', LibOreDict.PIXIE_DUST, + 'E', LibOreDict.ELEMENTIUM, + 'P', new ItemStack(ModBlocks.pylon)); + recipeGaiaPylon = BotaniaAPI.getLatestAddedRecipe(); + // Mana and Terrasteel Block Recipes addOreDictRecipe(new ItemStack(ModBlocks.storage, 1, 0), "III", "III", "III", diff --git a/MODSRC/vazkii/botania/common/entity/EntityDoppleganger.java b/MODSRC/vazkii/botania/common/entity/EntityDoppleganger.java index fe3e23f87..c6fcd295f 100644 --- a/MODSRC/vazkii/botania/common/entity/EntityDoppleganger.java +++ b/MODSRC/vazkii/botania/common/entity/EntityDoppleganger.java @@ -15,12 +15,10 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import cpw.mods.fml.relauncher.ReflectionHelper; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.boss.IBossDisplayData; @@ -35,14 +33,17 @@ import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; import net.minecraft.world.World; +import vazkii.botania.common.block.ModBlocks; import vazkii.botania.common.core.helper.Vector3; +import vazkii.botania.common.item.ModItems; import vazkii.botania.common.lib.LibObfuscation; +import cpw.mods.fml.relauncher.ReflectionHelper; public class EntityDoppleganger extends EntityCreature implements IBossDisplayData { public static final int SPAWN_TICKS = 100; - private static final float MAX_HP = 200F; // TODO + private static final float MAX_HP = 200F; private static final String TAG_SOURCE_X = "sourceX"; private static final String TAG_SOURCE_Y = "sourceY"; @@ -52,6 +53,13 @@ public class EntityDoppleganger extends EntityCreature implements IBossDisplayDa private static final String TAG_AGGRO = "aggro"; private static final String TAG_TP_DELAY = "tpDelay"; + private static final int[][] PYLON_LOCATIONS = new int[][] { + { 4, 1, 4 }, + { 4, 1, -4 }, + { -4, 1, 4 }, + { -4, 1, -4 } + }; + boolean spawnLandmines = false; boolean spawnPixies = false; @@ -68,6 +76,17 @@ public class EntityDoppleganger extends EntityCreature implements IBossDisplayDa public static boolean spawn(ItemStack par1ItemStack, World par3World, int par4, int par5, int par6) { Block block = par3World.getBlock(par4, par5, par6); if(block == Blocks.beacon && !par3World.isRemote) { + for(int[] coords : PYLON_LOCATIONS) { + int x = par4 + coords[0]; + int y = par5 + coords[1]; + int z = par6 + coords[2]; + + Block blockat = par3World.getBlock(x, y, z); + int meta = par3World.getBlockMetadata(x, y, z); + if(blockat != ModBlocks.pylon || meta != 2) + return false; + } + par1ItemStack.stackSize--; EntityDoppleganger e = new EntityDoppleganger(par3World); e.setPosition(par4 + 0.5, par5 + 3, par6 + 0.5); @@ -189,7 +208,13 @@ public class EntityDoppleganger extends EntityCreature implements IBossDisplayDa protected boolean canDespawn() { return false; } - + + @Override + protected void dropFewItems(boolean par1, int par2) { + if(par1) + entityDropItem(new ItemStack(ModItems.manaResource, 12, 5), 1F); + } + @Override public void onLivingUpdate() { super.onLivingUpdate(); @@ -275,7 +300,8 @@ public class EntityDoppleganger extends EntityCreature implements IBossDisplayDa } } - // Enderman code + // EntityEnderman code below ============================================================================ + protected boolean teleportRandomly() { double d0 = this.posX + (this.rand.nextDouble() - 0.5D) * 64.0D; double d1 = this.posY + (double)(this.rand.nextInt(64) - 32); @@ -315,6 +341,7 @@ public class EntityDoppleganger extends EntityCreature implements IBossDisplayDa if(this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox)) flag = true; + // Prevent out of bounds teleporting ChunkCoordinates source = getSource(); if(vazkii.botania.common.core.helper.MathHelper.pointDistanceSpace(posX, posY, posZ, source.posX, source.posY, source.posZ) > 15) flag = false; diff --git a/MODSRC/vazkii/botania/common/lexicon/LexiconData.java b/MODSRC/vazkii/botania/common/lexicon/LexiconData.java index 33ce9f07d..b286d28f3 100644 --- a/MODSRC/vazkii/botania/common/lexicon/LexiconData.java +++ b/MODSRC/vazkii/botania/common/lexicon/LexiconData.java @@ -26,6 +26,7 @@ import vazkii.botania.common.crafting.ModManaConjurationRecipes; import vazkii.botania.common.crafting.ModManaInfusionRecipes; import vazkii.botania.common.crafting.ModPetalRecipes; import vazkii.botania.common.crafting.ModRuneRecipes; +import vazkii.botania.common.item.ModItems; import vazkii.botania.common.lexicon.page.PageCraftingRecipe; import vazkii.botania.common.lexicon.page.PageElvenRecipe; import vazkii.botania.common.lexicon.page.PageImage; @@ -151,6 +152,7 @@ public final class LexiconData { public static LexiconEntry alfhomancyIntro; public static LexiconEntry elvenMessage; public static LexiconEntry elvenResources; + public static LexiconEntry gaiaRitual; public static LexiconEntry unstableBlocks; public static LexiconEntry decorativeBlocks; @@ -501,6 +503,10 @@ public final class LexiconData { elvenResources = new ALexiconEntry(LibLexicon.ALF_RESOURCES, categoryAlfhomancy); elvenResources.setPriority().setLexiconPages(new PageText("0"), new PageElvenRecipe("1", ModElvenTradeRecipes.dreamwoodRecipe), new PageText("2"), new PageElvenRecipe("3", ModElvenTradeRecipes.elementiumRecipes), new PageElvenRecipe("4", ModElvenTradeRecipes.pixieDustRecipe), new PageElvenRecipe("5", ModElvenTradeRecipes.dragonstoneRecipe), new PageText("6"), new PageElvenRecipe("7", ModElvenTradeRecipes.elvenQuartzRecipe)); + gaiaRitual = new ALexiconEntry(LibLexicon.ALF_GAIA_RITUAL, categoryAlfhomancy); + gaiaRitual.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCrafingRecipes.recipeGaiaPylon), new PageImage("2", LibResources.ENTRY_GAIA_RITUAL), new PageText("3"), new PageText("4")); + LexiconRecipeMappings.map(new ItemStack(ModItems.manaResource, 1, 5), gaiaRitual, 0); + // MISCLENAEOUS ENTRIES unstableBlocks = new BLexiconEntry(LibLexicon.MISC_UNSTABLE_BLOCKS, categoryMisc); unstableBlocks.setLexiconPages(new PageText("0"), new PageImage("1", LibResources.ENTRY_UNSTABLE_BLOCK), new PageCraftingRecipe("2", ModCrafingRecipes.recipesUnstableBlocks), new PageText("3"), new PageImage("4", LibResources.ENTRY_UNSTABLE_BEACON), new PageCraftingRecipe("5", ModCrafingRecipes.recipesManaBeacons), new PageText("6"), new PageCraftingRecipe("7", ModCrafingRecipes.recipesSignalFlares)); diff --git a/MODSRC/vazkii/botania/common/lib/LibLexicon.java b/MODSRC/vazkii/botania/common/lib/LibLexicon.java index ccda3bdcb..f2e9ed729 100644 --- a/MODSRC/vazkii/botania/common/lib/LibLexicon.java +++ b/MODSRC/vazkii/botania/common/lib/LibLexicon.java @@ -129,6 +129,7 @@ public final class LibLexicon { public static final String ALF_INTRO = "aIntro"; public static final String ALF_MESSAGE = "elfMessage"; public static final String ALF_RESOURCES = "elfResources"; + public static final String ALF_GAIA_RITUAL = "gaiaRitual"; public static final String MISC_UNSTABLE_BLOCKS = "unstableBlocks"; public static final String MISC_DECORATIVE_BLOCKS = "decorativeBlocks"; diff --git a/resources/assets/botania/lang/en_US.lang b/resources/assets/botania/lang/en_US.lang index a0a89568a..ec9cc6650 100644 --- a/resources/assets/botania/lang/en_US.lang +++ b/resources/assets/botania/lang/en_US.lang @@ -165,7 +165,7 @@ entity.Botania.botania:signalFlare.name=Signal Flare entity.Botania.botania:pixie.name=Pixie entity.Botania.botania:flameRing.name=Flame Ring entity.Botania.botania:vineBall.name=Vine Ball -entity.Botania.botania:doppleganger.name=Gaia Guardian +entity.Botania.botania:doppleganger.name=Guardian of Gaia entity.Botania.botania:magicLandmine.name=Gaia Trap # BLOCK NAMES @@ -555,7 +555,7 @@ item.botania:travelBelt.name=Soujourner's Sash item.botania:knockbackBelt.name=Tectonic Girdle item.botania:icePendant.name=Snowflake Pendant item.botania:lavaPendant.name=Pyroclast Pendant -item.botania:lifeEssence.name=Gaia Sprit +item.botania:lifeEssence.name=Gaia Spirit item.botania:goldenLaurel.name=Golden Laurel Crown item.botania:redstoneRoot.name=Redstone Root item.botania:magnetRing.name=Ring of Magnetization @@ -1219,7 +1219,7 @@ botania.page.lavaPendant1=Hanako could have used one of these # -- GOLDEN LAUREL CROWN botania.entry.goldenLaurel=Golden Laurel Crown -botania.page.goldenLaurel0=One of the uses for &1Gaia Spritis&0 is to, grant a layer of immortality to one that uses them, while wearing a &1Golden Laurel Crown&0, if the wearer were to die, the crown will shatter, regenerating all of their health and giving them a short period of invincibility. +botania.page.goldenLaurel0=One of the uses for &1Gaia Spririts&0 is to, grant a layer of immortality to one that uses them, while wearing a &1Golden Laurel Crown&0, if the wearer were to die, the crown will shatter, regenerating all of their health and giving them a short period of invincibility. botania.page.goldenLaurel1=Given the theme, probably Viridi # -- RING OF CHORDATA @@ -1295,6 +1295,14 @@ botania.page.elfResources5=Trading for &1Dragonstone&0 botania.page.elfResources6=The &1Elves&0 are also quite keen on the white posh block from the &4Nether&0, &1Nether Quartz&0, the ones they have on their world are tinted green. This quartz works just like any other quartz, be it normal &1Nether Quartz&0 or any of the decorative variants you can find on the &4Decorative Blocks&0 entry under &4Miscelaneous&0. botania.page.elfResources7=Trading for &1Elven Quartz&0 +# -- RITUAL OF GAIA +botania.entry.gaiaRitual=Ritual of Gaia +botania.page.gaiaRitual0=The &4Ritual of Gaia&0 is a procedure often enacted by the elves, which is the only way to acquire &1Gaia Spirits&0, which are essences of the power of the Goddess of Gaia herself.
This ritual required an &4Active&0 &1Beacon&0 with some &1Gaia Pylons&0 (read on) one level above the beacon as the altar, as well as a single &1Terrasteel Ingot&0 as a sacrifice. +botania.page.gaiaRitual1=Creating &1Gaia Pylons&0 +botania.page.gaiaRitual2=Place the pylons (1 block above the beacon) +botania.page.gaiaRitual3=To start the ritual, simply shift-right click the &1Beacon&0 block with a &1Terrasteel Ingot&0, take a step back and prepare to fight for your life. Good preparation is required, as the fight with the &4Guardian of Gaia&0 can be even harder than that of the &4Wither&0. Upon defeating the &4Guardian&0, one can collect their prize, a handful of &1Spirits of Gaia&0. +botania.page.gaiaRitual4=A few pointers to take in mind are as follows. Enchanted &1Elementium Armor&0 is highly recomended, even more so than conventional &1Diamond Armor&0 due to the &1Pixies&0 it can spawn.
The effect on the &1Beacon&0 is nullified during the battle, that should be taken in mind when preparing.
Lastly, stay away from the purple. + # - MISCLANEOUS # -- UNSTABLE CUBE botania.entry.unstableBlocks=Unstable Cubes diff --git a/resources/assets/botania/textures/gui/entries/gaiaRitual.png b/resources/assets/botania/textures/gui/entries/gaiaRitual.png new file mode 100644 index 000000000..3a75342a2 Binary files /dev/null and b/resources/assets/botania/textures/gui/entries/gaiaRitual.png differ