#loader contenttweaker import mods.contenttweaker.VanillaFactory; import mods.contenttweaker.Item; import mods.contenttweaker.IItemRightClick; import mods.contenttweaker.Commands; import mods.contenttweaker.ItemFood; import mods.contenttweaker.IItemFoodEaten; import mods.contenttweaker.MutableItemStack; import mods.contenttweaker.Hand; import mods.contenttweaker.World; import mods.contenttweaker.IItemUpdate; import mods.contenttweaker.Player; import crafttweaker.player.IPlayer; import crafttweaker.block.IBlock; import crafttweaker.data.IData; import crafttweaker.util.Position3f; import crafttweaker.block.IBlockState; function getBlockMatchAtPosition(blockTargetID as string, playerPos as crafttweaker.util.Position3f, blockLocation as int [], world as crafttweaker.world.IWorld) as int{ // 1 if block matches, 0 if not var match = 0 as int; // get block position from relative to world coordinates var checkPos as crafttweaker.util.Position3f; checkPos = crafttweaker.util.Position3f.create(playerPos.x + blockLocation[0], playerPos.y + blockLocation[1], playerPos.z + blockLocation[2]); // get block id at coordinates val state = world.getBlock(checkPos); val blockID = state.definition.id as string; val blockMeta = state.meta; val fullBlockID = blockMeta == 0 ? blockID : blockID + ":" + blockMeta; // check if block id matches if (fullBlockID == blockTargetID){ match = 1; } return match; } var stoneofdimensionalascension = VanillaFactory.createItem("stone_of_dimensional_ascension"); stoneofdimensionalascension.maxStackSize = 1; stoneofdimensionalascension.itemRightClick = function(stack, world, player, hand) { if(world.remote) { return "FAIL"; } player.sendChat("This item will require to build a large 'structure'"); player.sendChat("If your render distance is low, it is possible you may have to chunkload your surrounding area to make it work"); player.sendChat("===================================================="); player.sendChat("You will have to place a series of blocks around you"); player.sendChat("The initial few are going to be quite explicit, but the rest of the pattern is for you to figure out"); player.sendChat("When in doubt, the questbook may help you, just make sure it has updated to the latest pack version"); player.sendChat("Run < /bq_admin default load > to make sure your questbook is up to date"); player.sendChat("===================================================="); player.sendChat("Perform this in a large empty space in the void world, leave at least 200 blocks between your closest build"); player.sendChat("To keep track of block positions and distances, it may be helpful to bring two differently colored blocks, and build a platform with a checkerboard pattern"); player.sendChat("Place down one required block at a time, and use this item to check; even if you figure out the whole pattern early, it is good to do this to avoid mistakes"); player.sendChat("===================================================="); player.sendChat("Scanning blocks around you"); player.sendChat(" "); if(player.getDimension() != 43) { player.sendChat("Perform this in a large empty space in the void world, leave at least 200 blocks between your closest build"); return "FAIL"; } // counter for fails or successes var matchGen = 0 as int; // player position var playerPos = player.position.asPosition3f(); playerPos.x = playerPos.x; playerPos.y = playerPos.y - 1; playerPos.z = playerPos.z; // go through all blocks in the momument if (getBlockMatchAtPosition("minecraft:grass", playerPos, [0,0,0], world) == 0) { player.sendChat("Place a Grass Block and stand on top of it"); return "FAIL"; } if (getBlockMatchAtPosition("tardis:telos_sand", playerPos, [0,0,-2], world) == 0) { player.sendChat("Place a block of Telos Sand to the north, one block away from the Grass [0,0,-2]"); return "FAIL"; } if (getBlockMatchAtPosition("dimdoors:fabric:15", playerPos, [0,0,2], world) == 0) { player.sendChat("Place a block of Fabric of Reality to the south, one block away from the Grass [0,0,2]"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:netherrack", playerPos, [2,0,0], world) == 0) { player.sendChat("Place a block of Netherrack to the east, one block away from the Grass [2,0,0]"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:end_stone", playerPos, [4,0,2], world) == 0) { player.sendChat("Place a block of End Stone diagonally south-east relative to the Netherrack, one block away [4,0,2]"); return "FAIL"; } if (getBlockMatchAtPosition("aether_legacy:skyroot_plank", playerPos, [4,0,4], world) == 0) { player.sendChat("Place a block of Skyroot Planks south relative to the End Stone, one block away [4,0,4]"); return "FAIL"; } if (getBlockMatchAtPosition("erebus:umberstone", playerPos, [4,0,6], world) == 0) { player.sendChat("Place a block of Umberstone south relative to the Skyroot Planks, one block away [4,0,6]"); return "FAIL"; } if (getBlockMatchAtPosition("extrautils2:compressedcobblestone:7", playerPos, [4,0,8], world) == 0) { player.sendChat("Place a block of Octuple Compressed Cobblestone south relative to the Umberstone, one block away [4,0,8]"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:frozen_grass", playerPos, [4,0,10], world) == 0) { player.sendChat("Place a block of Frozen Grass south relative to the Octuple Compressed Cobblestone, one block away [4,0,10]"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:arcanium_block", playerPos, [4,0,12], world) == 0) { player.sendChat("Place a block of Arcanium Block south relative to the Frozen Grass, one block away [4,0,12]"); return "FAIL"; } if (getBlockMatchAtPosition("thebetweenlands:pitstone", playerPos, [4,0,14], world) == 0) { player.sendChat("Place a block of Pitstone south relative to the Arcanium Block, one block away [4,0,14]"); return "FAIL"; } if (getBlockMatchAtPosition("twilightforest:aurora_block", playerPos, [4,0,16], world) == 0) { player.sendChat("Place a block of Aurora Block south relative to the Pitstone, one block away [4,0,16]"); return "FAIL"; } if (getBlockMatchAtPosition("thaumicaugmentation:stone:2", playerPos, [4,0,18], world) == 0) { player.sendChat("Place a block of Tainted Void Stone Soil south relative to the Aurora Block, one block away [4,0,18]"); return "FAIL"; } if (getBlockMatchAtPosition("thaumictinkerer:ichor_block", playerPos, [4,0,20], world) == 0) { player.sendChat("Place a block of Kami Essence Block south relative to the Tainted Void Stone Soil, one block away [4,0,20]"); return "FAIL"; } if (getBlockMatchAtPosition("abyssalcraft:fusedabyssalsand", playerPos, [4,0,22], world) == 0) { player.sendChat("Place a block of Fused Abyssal Sand south relative to the Kami Essence Block, one block away [4,0,22]"); return "FAIL"; } if (getBlockMatchAtPosition("abyssalcraft:dreadgrass", playerPos, [6,0,22], world) == 0) { player.sendChat("Place a block of Dreadlands Grass east relative to the Fused Abyssal Sand, one block away [6,0,22]"); return "FAIL"; } if (getBlockMatchAtPosition("abyssalcraft:stone:6", playerPos, [8,0,22], world) == 0) { player.sendChat("I think you are starting to get this, the next block is to the east of the Dreadlands Grass [8,0,22], Omothol does not have grass, but it has stone"); return "FAIL"; } if (getBlockMatchAtPosition("abyssalcraft:darkstone_brick", playerPos, [10,0,22], world) == 0) { player.sendChat("Good job, Abyssalcraft has another dimension, covered with a certain dark block. It can be made into bricks. I think you can figure out where to place it!"); return "FAIL"; } if (getBlockMatchAtPosition("enderio:block_reinforced_obsidian", playerPos, [4,0,-2], world) == 0) { player.sendChat("Ok I will give you this one, Place a block of Reinforced Obsidian diagonally north-east relative to the Netherrack, one block away [4,0,-2]"); return "FAIL"; } if (getBlockMatchAtPosition("biomesoplenty:grass:4", playerPos, [4,0,-4], world) == 0) { player.sendChat("Remember the Withers on Taerrapiatta? Those were a surprise, I hope you had fun using your cool weapons"); player.sendChat("The next Warper you completed was Diamerisma, place the grassy block that covers its surface to the north of the Reinforced Obsidian, one block away [4,0,-4]"); return "FAIL"; } if (getBlockMatchAtPosition("appliedenergistics2:fluix_block", playerPos, [4,0,-6], world) == 0) { player.sendChat("Yeah, the warpers were quite chaotic back then, but they have their charm, and the laser chickens even have a sense of humor"); player.sendChat("The next block is a Fluix Block, which is important to Furatto, placed in the same direction as the other two blocks related to Warpers, I think you can figure this one out"); return "FAIL"; } if (getBlockMatchAtPosition("advancedrocketry:moonturf", playerPos, [6,0,0], world) == 0) { player.sendChat("No more warpers for chapter 3, it's time to go to space!"); player.sendChat("I will give you this one, place a block of Moon Turf to the east of the Netherrack, three blocks away [6,0,0]"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:mycelium", playerPos, [8,0,2], world) == 0) { player.sendChat("If you figured out the pattern by now, I know it may be hard to figure out some distances"); player.sendChat("Don't worry, I will try to give distances explicitly for those"); player.sendChat("Place a block of Mycelium to the south-east of the Moon Turf, one block away [8,0,2]"); return "FAIL"; } if (getBlockMatchAtPosition("advancedrocketry:hotturf", playerPos, [8,0,4], world) == 0) { player.sendChat("The space station sure was buggy, but it looks soo cool!"); player.sendChat("If you are a Bee Stargate user, I still suggest to play with the warp core at least once"); player.sendChat("The next block is to the south of the Mycelium, one block away [8,0,4], it's orange and it covers parts of the surface of Osiris"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:obsidian", playerPos, [8,0,6], world) == 0) { player.sendChat("And what about the bee puzzles? Maybe the random worldgen wasn't as nice to you, but I hope you enjoyed the goodies hidden all around!"); player.sendChat("The next block is to the south of the Oxidized Ferric Sand, one block away [8,0,6], and yes, it has to do with Ptah."); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:sand:1", playerPos, [8,0,8], world) == 0) { player.sendChat("Did you know that, for the longest time, beacon beams were not working? Thankfully, we (I definitely, definitely contributed) managed to get that fixed."); player.sendChat("By now, I really think you should see the pattern. The next block is to the south of the Obsidian, one block away [8,0,8]."); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:packed_ice", playerPos, [8,0,10], world) == 0) { player.sendChat("For most of alpha, the chapter 3 planets were quite empty. I am happy they have more life now!"); player.sendChat("The next block is to the south of the Red Sand, one block away [8,0,10]."); return "FAIL"; } if (getBlockMatchAtPosition("nuclearcraft:dry_earth", playerPos, [8,0,12], world) == 0) { player.sendChat("I know a monochrome dimension with hard visibility is hardly quirky and unique, but hey I think it's neat!"); player.sendChat("The next block is to the south of the Packed Ice, one block away [8,0,12]."); return "FAIL"; } if (getBlockMatchAtPosition("chisel:emerald:8", playerPos, [8,0,14], world) == 0) { player.sendChat("Radiation was an interesting one, to be honest. It's definitely not everybody's cup of tea, but I like that it forces some sort of base building logic"); player.sendChat("With regards to the next block, I'm not even going to say anything, I think you can do the next couple of steps by yourself."); return "FAIL"; } if (getBlockMatchAtPosition("tconstruct:slime_congealed:3", playerPos, [8,0,16], world) == 0) { player.sendChat("Bees run the universe, isn't that neat!"); player.sendChat("See! I knew you were getting this! This column has one more block, then I'll get back to my hints!"); return "FAIL"; } if (getBlockMatchAtPosition("advancedrocketry:crystal:1", playerPos, [10,0,0], world) == 0) { player.sendChat("Fun fact, the pack was never meant to have chapters, but too many people were getting confused when asking for help and giving tips on Discord."); player.sendChat("Yes, the next block is the one about Sedna, located to the east of the Moon Turf, three blocks away [10,0,0]"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:eden_grass", playerPos, [12,0,-2], world) == 0) { player.sendChat("Oh yes! Getting that first Sedanite must have felt great! Chapter 4 was when things started getting a bit more real, wasn't it?"); player.sendChat("Now we're going to Eden, the next block is located to the north-east of the Crystal, one block away [12,0,-2]"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:precasia_grass", playerPos, [12,0,2], world) == 0) { player.sendChat("DivineRPG was the first mod I played with hard mobs. All the way back in minecraft 1.4.6!"); player.sendChat("Time to jump in the first Mythic Shell, specifically Precasia, the next block is located to the south-east of the Crystal, one block away [12,0,2]"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:baron_ground", playerPos, [12,0,4], world) == 0) { player.sendChat("When I first played with Advent of Ascension, I thought it was really cool, but I didn't like that nobody put it in their tech modpacks..."); player.sendChat("Perfect, now we are going down the first mythic shell, I think you can continue this on your own till the Abyss"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:lelyetia_grass", playerPos, [12,0,6], world) == 0) { player.sendChat("I have to say, modded minecraft needs more puzzles, you know. All these RPG mod and modpack makers just care about dungeons and bosses, but dungeons without problem solving feel a bit lackluster in my opinion"); player.sendChat("I think you can continue this on your own till the Abyss"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:creeponia_grass", playerPos, [12,0,8], world) == 0) { player.sendChat("Man, Lelyetia was cool, wasn't it? To my knowledge no other mod has done gravity like that!"); player.sendChat("I think you can continue this on your own till the Abyss"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:deeplands_stone", playerPos, [12,0,10], world) == 0) { player.sendChat("I think it's neat that the invasion special events from Advent of Ascension give a sneak peek to the mobs you will be fighting in later dimensions. Too bad that they were incredibly laggy, so I had to disable them. Recursive papers are meant to be their erplacement."); player.sendChat("I think you can continue this on your own till the Abyss, but as a heads up, not all dimensions use their respective grass"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:abyss_grass", playerPos, [12,0,12], world) == 0) { player.sendChat("I will say, worldgen RNG sometimes can be quite annoying. I really like exploration gameplay as a means to learn about a world and its story, but it sucks when the last building you need to complete a puzzle just does not show up."); player.sendChat("Nice you are almost done with the first mythic shell!"); return "FAIL"; } if (getBlockMatchAtPosition("thaumadditions:taintwood_planks", playerPos, [10,0,-4], world) == 0) { player.sendChat("Why does the pack have so much RPG content? Well, I like to sit in my base and build contraptions, but after a while it gets a bit monotonous, so I like to go around and explore. That's why tech and RPG content alternate in the way they do!"); player.sendChat("Back to warpers we go! The block for Vibe is located to the north-west relative to the Eden Grass, one block away [10,0,-4]"); return "FAIL"; } if (getBlockMatchAtPosition("contenttweaker:ender_dolomite", playerPos, [14,0,-4], world) == 0) { player.sendChat("Vibe was hands down one of my favorite dimensions to make. I really like that I was able to come up with a way to progress that actually uses Thaumcraft Taint!"); player.sendChat("Finem comes right after Vibe, and its block is located to the north-east relative to the Eden Grass, one block away [14,0,-4]"); return "FAIL"; } if (getBlockMatchAtPosition("projectred-exploration:stone", playerPos, [14,0,0], world) == 0) { player.sendChat("Finem is *a bit* laggy, but I could not resist filling a whole dimensions with laser chickens!"); player.sendChat("Onto Rhenia, its block is located to the east relative to the Blue Crystal Block, three blocks away [14,0,0]"); return "FAIL"; } if (getBlockMatchAtPosition("advancedrocketry:alienwood", playerPos, [16,0,0], world) == 0) { player.sendChat("Balancing all the overpowered stuff from modded minecraft sometimes gets a bit weird, but I think it worked out in the end"); player.sendChat("And right after Rhenia comes Myrmex! Still east!"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:wildwood_grass", playerPos, [18,0,-2], world) == 0) { player.sendChat("Myrmex mobs from Ice and Fire are quite cool, but they are unfortunately laggy. The compromise for integrating them in progression was to give them their own dimension, sort of."); player.sendChat("Now we're going to Wildwood, the next block is located to the north-east of the Lightwood, one block away [18,0,-2]"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:candyland_grass", playerPos, [18,0,2], world) == 0 ) { player.sendChat("I get it that DivineRPG dimensions kind of look all the same, but I hope that the custom structures helped at bring in a bit more variety."); player.sendChat("Second mythic shell! We start to the south-east of the Lightwood, one block away [18,0,2]"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:gardencia_grass", playerPos, [18,0,4], world) == 0) { player.sendChat("No matter what anyone tells you, Cotton Candor is the most unfair boss in modded minecraft, and it's not even close!"); player.sendChat("Yup, keep going down the second mythic shell! All the way to the Vox Ponds!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:celeve_grass", playerPos, [18,0,6], world) == 0) { player.sendChat("The puzzle in Gardencia may have gotten a bit tedious, but with some things, I decided to make it a bit diffrenet, and searching through a bunch of chests felt like an interesting mechanic"); player.sendChat("Yup, keep going down the second mythic shell! All the way to the Vox Ponds!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:crystevia_stone", playerPos, [18,0,8], world) == 0) { player.sendChat("We can definitely argue about the execution, but the crazy clown dimension is a cool concept!"); player.sendChat("Yup, keep going down the second mythic shell! All the way to the Vox Ponds!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:haven_grass", playerPos, [18,0,10], world) == 0) { player.sendChat("Crystevia probably has a bit of an RNG problem, I really wish 1.12 minecraft had a pillar-compatible structure seach tool."); player.sendChat("Yup, keep going down the second mythic shell! All the way to the Vox Ponds!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:iromine_stone", playerPos, [18,0,12], world) == 0) { player.sendChat("Did you know that the author of Advent of Ascension made DivineRPG as well, that's why the Haven dimension looks like that. What a throwback!"); player.sendChat("Yup, keep going down the second mythic shell! All the way to the Vox Ponds!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:mysterium_grass", playerPos, [18,0,14], world) == 0) { player.sendChat("I really like the esthetics of Iromine, that's why the mobs there are so strong! I want it to stick in your memory!"); player.sendChat("Yup, keep going down the second mythic shell! All the way to the Vox Ponds!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:toxic_grass", playerPos, [18,0,16], world) == 0) { player.sendChat("The design of King Shroomus is very cool in my opinion..."); player.sendChat("Almost done with the second mythic shell, one more block!"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:red_sandstone", playerPos, [18,0,-4], world) == 0) { player.sendChat("In retrospective, doing the mythic shells the way I did was not the best. The second shell ended up being a bit tedious, while the third was a bit lackluster. The reason why they were organized like this is because of the tier system in vanilla Advent of Ascension; dimensions from the same tier made it to the same mythic shell."); player.sendChat("Now we're going to Apichisi, its block is located north relative to the Wildwood Grass, one block away [18,0,-4]"); return "FAIL"; } if (getBlockMatchAtPosition("bewitchment:scorned_bricks", playerPos, [20,0,0], world) == 0) { player.sendChat("Apichisi is right around the point when I realized that many of the things you see in custom vanilla adventure maps, which are done through command blocks, can be done in modded minecraft as well! From this point, I went back and added command blocks in lots and lots of structures!"); player.sendChat("Our next destination is Pixonia, its block is located east relative to the Lightwood, three blocks away [20,0,0]"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:apalachia_grass", playerPos, [22,0,-2], world) == 0) { player.sendChat("Pixonia was another very fun dimension to make. This is when I started thinking about making big strong mobs that are still tough against overpowered weapons."); player.sendChat("Now we're going to Apalachia, the next block is located to the north-east of the Scorned Bricks, one block away [22,0,-2]"); return "FAIL"; } if (getBlockMatchAtPosition("advancedrocketry:charcoallog", playerPos, [22,0,-4], world) == 0) { player.sendChat("I really like starfield glass as a building block, unfortunately it is a bit too laggy for being used extensively."); player.sendChat("Lyndenwrym has some neat fog effects and lots of things that want to kill you, one block north [22,0,-4]"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:borean_grass", playerPos, [22,0,2], world) == 0) { player.sendChat("Fun fact! Lyndenwyrm has been in the pack ever since very early alpha, but it was inaccessible due to a crash related to the Stormlands biome. Thankfully, the mod was forked and the issue fixed!"); player.sendChat("Third mythic shell time! It starts to the south-east of the Scorned Bricks, one block away [22,0,2]"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:runic_grass", playerPos, [22,0,4], world) == 0) { player.sendChat("L'Borean is a very cool dimension, it reminds me of Cthulhu, that's the esthetics I tried to replicate with the custom structures."); player.sendChat("Going south for Runandor!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:lunasole_grass", playerPos, [22,0,6], world) == 0) { player.sendChat("I really like the knight models from Advent of AScension. Unfortunately, they are very basic, and are not capable of holding items or armor, so I could not use them as much in custom boss fight."); player.sendChat("At Lunalus already! The third mythic shell is a quick one!"); return "FAIL"; } if (getBlockMatchAtPosition("appliedenergistics2:spatial_pylon", playerPos, [22,0,0], world) == 0) { player.sendChat("I wish there were more inmate mobs in Lunalus, I really liked the space jail esthetics"); player.sendChat("The Spatial Storage is next, right between the Apalachia Grass and the Borean Grass"); return "FAIL"; } if (getBlockMatchAtPosition("contenttweaker:unidentified_body", playerPos, [24,0,0], world) == 0) { player.sendChat("I still think it could have been cool to integrate Spatial Storage as an automation tool, but I ended up using it as a tool for puzzles"); player.sendChat("The next dimension is Proxima, its block is located to the east of the Spatial Pylon, one block away [24,0,0]"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:skythern_grass", playerPos, [26,0,-2], world) == 0) { player.sendChat("It sucks that Proxima is kinda buggy, I really like the asteroid worldtype, and it would have been cool to use it in other worlds."); player.sendChat("Now we're going to Skythern, the next block is located to the north-east of the Unidentified Body, one block away [26,0,-2]"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:ancient_rock", playerPos, [26,0,2], world) == 0) { player.sendChat("The custom structures in Skythern are among the earlier ones I added to the pack, I knew DivineRPG dimensions would get a bit monotonous, and thought using your brain a bit may help out."); player.sendChat("And just like every other mythic shell, for the fourth we go down south!"); return "FAIL"; } if (getBlockMatchAtPosition("chisel:gold:5", playerPos, [26,0,4], world) == 0) { player.sendChat("Part of me wishes that the tribute system in Advent of Ascension was more customizable..."); player.sendChat("Yup, keep going down the fourth mythic shell! All the way to Dustopia!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:greckon_grass", playerPos, [26,0,6], world) == 0) { player.sendChat("Immortallis mob tuning took way longer that it had to..."); player.sendChat("Yup, keep going down the fourth mythic shell! All the way to Dustopia!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:dustopia_grass", playerPos, [26,0,8], world) == 0) { player.sendChat("Greckon looks so incredibly cool, I had to make it feel a bit special with some laser chickens :)"); player.sendChat("One more! Dustopia!"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:dream_grass", playerPos, [28,0,0], world) == 0) { player.sendChat("I started thinking about the endgame of the pack very early on, during alpha, right around the time the fourth mythic shell was in development, but it took a very long time to get there."); player.sendChat("The block for Vethea is located east relative to the Unidentified Body, three blocks away [28,0,0]"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:mossy_cobblestone", playerPos, [30,0,-2], world) == 0) { player.sendChat("Progression for Vethea has been redone so many times, I wanted the custom content to add to the dimension, but it always felt like it just made things more tedious no matter what I did. That's why it's skippable if you are willing to grind a bit."); player.sendChat("Dynatos time! The block for Nero is located to the north-east of the Dream Grass, one block away [30,0,-2]"); return "FAIL"; } if (getBlockMatchAtPosition("biomesoplenty:mud", playerPos, [30,0,-4], world) == 0) { player.sendChat("The design for Nero comes from Interstellar, I just wish there was a way to make big waves."); player.sendChat("Dynatos time! The block for Zoi is located to the north of the Moss Stone, one block away [30,0,-4]"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:dirt", playerPos, [30,0,2], world) == 0) { player.sendChat("Zoi was a bit of a strange one, I switched between different esthetics for the dimensions as the pack developed, so it's not as distinct as the others."); player.sendChat("Dynatos time! The block for Akathartos is located to the south-east of the Dream Grass, one block away [30,0,2]"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:pumpkin", playerPos, [30,0,4], world) == 0) { player.sendChat("Akathartos was very fun to make, I really dig the esthetics of the Crmson Cult, and I thought they deserved their own dimension!"); player.sendChat("Dynatos time! The block for Pauram, facing south, is located to the south of the Dirt, one block away [30,0,4]"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:mortum_grass", playerPos, [32,0,2], world) == 0) { player.sendChat("Pauram was interesting too, I really wanted Twilight Forest mobs as natural spawns to feel dangeous, but unfortunately customized mob spawn rules ended up being laggy"); player.sendChat("Mortum, to the east of Akathartos!"); return "FAIL"; } if (getBlockMatchAtPosition("aoa3:shyrelands_grass", playerPos, [32,0,-2], world) == 0) { player.sendChat("The idea for the mythic shells comes from DivineRPG. Since all dimensions look similar, it made sense that they would be connected in some way."); player.sendChat("Shyrelands, to the east of Nero!"); return "FAIL"; } if (getBlockMatchAtPosition("contenttweaker:white_fuel", playerPos, [34,0,0], world) == 0) { player.sendChat("The Shyrelands are an interesting concept, again, I wish knights from Advent of Ascension were more customizable"); player.sendChat("From Alkemia to Trinitas, all the way east!"); return "FAIL"; } if (getBlockMatchAtPosition("tardis:gallifreyan_grass", playerPos, [36,0,0], world) == 0) { player.sendChat("For a bit, I thought of finishing the pack in Alkemia, with the Energy Bee being the final reward. Then the plans for Defined and Halite came to be."); player.sendChat("From Alkemia to Trinitas, all the way east!"); return "FAIL"; } if (getBlockMatchAtPosition("minecraft:grass", playerPos, [38,0,0], world) == 0) { player.sendChat("Gallifrey was a lot of fun! It's very cool to know that mobs and bosses can be as strong as you want, because players are so powerful by this point."); player.sendChat("From Alkemia to Trinitas, all the way east!"); return "FAIL"; } if (getBlockMatchAtPosition("rftoolsdim:dimensional_blank_block", playerPos, [40,0,0], world) == 0) { player.sendChat("The idea for the Meatball Man as this type of character kind of happened organically, and I am very happy how it turned out!"); player.sendChat("From Alkemia to Trinitas, all the way east!"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:arcanite_grass", playerPos, [42,0,0], world) == 0) { player.sendChat("Being able to make custom dimensions feels like such a good way to end a dimension-driven modpack, thanks RFTools Dimensions for existing :)"); player.sendChat("From Alkemia to Trinitas, all the way east!"); return "FAIL"; } if (getBlockMatchAtPosition("thaumicaugmentation:stone", playerPos, [40,0,-2], world) == 0) { player.sendChat("Everyone deserves forgiveness, that's my story"); player.sendChat("Fuhai and Travixte, from Kashan"); return "FAIL"; } if (getBlockMatchAtPosition("abyssalcraft:ethaxiumbrick", playerPos, [40,0,2], world) == 0) { player.sendChat("Yeah I couldn't wrap up the pack without some extra bosses"); player.sendChat("Fuhai and Travixte, from Kasha"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:frozen_dirt", playerPos, [4,-1,10], world) == 0) { player.sendChat("Wow, look at what you made me do, you got me monologuing!"); player.sendChat("Damn, I even broke the fouth wall..."); player.sendChat("You got me good, didn't you?"); player.sendChat("You know the really cold surface block from that one icy dimension, place its corresponding soil block underneath"); return "FAIL"; } if (getBlockMatchAtPosition("tardis:gallifreyan_dirt", playerPos, [36,-1,0], world) == 0) { player.sendChat("You know, I like to play games knowing that, deep down, I likely will not finish them..."); player.sendChat("That is why you are here, chatting with me and placing down blocks..."); player.sendChat("You really should stop..."); player.sendChat("Same thing as Iceika Frozen Grass and Frozen Dirt, but for the place with a black hole that's not like the other black holes..."); return "FAIL"; } if (getBlockMatchAtPosition("contenttweaker:seal_of_freedom", playerPos, [0,-1,0], world) == 0) { player.sendChat("You at least had fun right?"); player.sendChat("You didn't just get here to feed your ego, right?"); player.sendChat("Because oh boy if you did I will really really enjoy breaking it..."); player.sendChat("To reach the canon ending of the pack, you had to craft a handful of a certain block, place one under the block where it all started"); return "FAIL"; } if (getBlockMatchAtPosition("contenttweaker:halite_bejewelled_ichorium_catalyst", playerPos, [40,-1,0], world) == 0) { player.sendChat("Well if you are here, there is a good chance that you actually enjoy me trying to break you."); player.sendChat("Oh well..."); player.sendChat("The dimension of infinite dimensions, both Halite and Ichorium, in the same place, belong underneath"); return "FAIL"; } if (getBlockMatchAtPosition("contenttweaker:recursive_stone", playerPos, [4,-1,2], world) == 0) { player.sendChat("Well anyway, I took the time to write this, so I guess part of me actually wants you to succeed."); player.sendChat("Have fun, I guess..."); player.sendChat("Remember where you placed your Recursion prison key? Well, if you were a Master of Spellcraft you may want to try and break a certain block that's located there, and place it under the corresponding dimension"); return "FAIL"; } if (getBlockMatchAtPosition("contenttweaker:hypercapacitor_discharger_x1024", playerPos, [34,-1,0], world) == 0) { player.sendChat("You probably cheated many of the boss fights, didn't you?"); player.sendChat("Mobs trapped in boxes, sneaky mob crushers..."); player.sendChat("Bob Imprisonment Tools, sigils of Phantom Chains..."); player.sendChat("Powerful powerful swords in mechanical users..."); player.sendChat("Well, to defeat me, this time, you really may want to cheat..."); player.sendChat("The place where the Energy Queen is obtained, that is where a certain hypercapacitor discharger will need to go under (I think you know which one)"); return "FAIL"; } if (getBlockMatchAtPosition("divinerpg:dream_dirt", playerPos, [28,-1,0], world) == 0) { player.sendChat("I think we spoke for long enough. I was never good with these villain speeches where I reveal all you need to stop me..."); player.sendChat("Oh actually, there's one thing missing! The location of this next block, that is where you may want to spring your trap..."); player.sendChat("Dirt, grass, I think you know this one. Too easy what a Dream!"); return "FAIL"; } player.sendChat("Well, since you really wanted to go through with this, here I am..."); player.sendChat("Hope you came prepared, that's a lot of shields..."); Commands.call("summon abyssalcraft:antiplayer ~28 ~2 ~0 {CustomName:\"Sainagh, the Disgruntled Modpack Maker\",HandItems:[{Count:1,id:\"contenttweaker:gem_of_dimensional_ascension\"},{}],HandDropChances:[1.0f,0.0f],Attributes:[{Name:generic.maxHealth, Base:1000000.0},{Name:generic.attackDamage, Base:1000000.0}],Health:1000000f,ForgeCaps:{\"twilightforest:cap_shield\":{tempshields:5000,permshields:5000}},ArmorItems:[{Count:1,id:\"contenttweaker:fractallite_halite_feet\"},{Count:1,id:\"contenttweaker:fractallite_halite_legs\"},{Count:1,id:\"contenttweaker:fractallite_halite_chest\"},{Count:1,id:\"contenttweaker:fractallite_halite_head\"}]}", player, world, true, true); return "PASS"; }; stoneofdimensionalascension.register();