From 15cfe6fc3320b6f732c4dd3a183a13f10e20632c Mon Sep 17 00:00:00 2001 From: SenseiKiwi Date: Sun, 19 Jan 2014 00:20:14 -0400 Subject: [PATCH] Resolved Merge Conflicts Resolved some merge conflicts. --- .../experimental/LiquidCorium.java | 13 +++ .../experimental/LiquidCoriumBlock.java | 106 +++++++++++++++++ .../mod_pocketDim/core/DDTeleporter.java | 7 +- .../mod_pocketDim/mod_pocketDim.java | 18 ++- .../mod_pocketDim/ticking/MobMonolith.java | 44 ++++++- .../ticking/MonolithSpawner.java | 4 +- .../mod_pocketDim/world/GatewayGenerator.java | 36 +++--- .../world/gateways/BaseGateway.java | 108 ++++++++++++------ .../world/gateways/GatewayBlockFilter.java | 20 +++- .../gateways/GatewaySandstonePillars.java | 42 +++++++ .../world/gateways/GatewayTwoPillars.java | 33 +++++- .../textures/blocks/tile.Corium_flowing.png | Bin 0 -> 9931 bytes .../blocks/tile.Corium_flowing.png.mcmeta | 27 +++++ .../textures/blocks/tile.Corium_still.png | Bin 0 -> 10420 bytes .../blocks/tile.Corium_still.png.mcmeta | 51 +++++++++ .../gateways/sandstonePillars.schematic | Bin 0 -> 365 bytes .../schematics/gateways/twoPillars.schematic | Bin 244 -> 268 bytes 17 files changed, 440 insertions(+), 69 deletions(-) create mode 100644 src/main/java/StevenDimDoors/experimental/LiquidCorium.java create mode 100644 src/main/java/StevenDimDoors/experimental/LiquidCoriumBlock.java create mode 100644 src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewaySandstonePillars.java create mode 100644 src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_flowing.png create mode 100644 src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_flowing.png.mcmeta create mode 100644 src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_still.png create mode 100644 src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_still.png.mcmeta create mode 100644 src/main/resources/schematics/gateways/sandstonePillars.schematic diff --git a/src/main/java/StevenDimDoors/experimental/LiquidCorium.java b/src/main/java/StevenDimDoors/experimental/LiquidCorium.java new file mode 100644 index 0000000..955765b --- /dev/null +++ b/src/main/java/StevenDimDoors/experimental/LiquidCorium.java @@ -0,0 +1,13 @@ +package StevenDimDoors.experimental; + +import net.minecraftforge.fluids.Fluid; + +public class LiquidCorium extends Fluid +{ + + public LiquidCorium(String fluidName) + { + super(fluidName); + } + +} diff --git a/src/main/java/StevenDimDoors/experimental/LiquidCoriumBlock.java b/src/main/java/StevenDimDoors/experimental/LiquidCoriumBlock.java new file mode 100644 index 0000000..4ea1c12 --- /dev/null +++ b/src/main/java/StevenDimDoors/experimental/LiquidCoriumBlock.java @@ -0,0 +1,106 @@ +package StevenDimDoors.experimental; + +import java.util.Random; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import StevenDimDoors.mod_pocketDim.Point3D; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Icon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.BlockFluidFinite; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +public class LiquidCoriumBlock extends BlockFluidFinite +{ + private Icon iconFlowing; + private Icon iconStill; + + public static Point3D[] spreadPoints= new Point3D[4]; + public LiquidCoriumBlock(int id, Fluid fluid, Material material) + { + super(id, fluid, material); + this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab); + } + + public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack) + { + par1World.setBlock(par2, par3, par4, this.blockID,15,2); + } + + @Override + public void updateTick(World world, int x, int y, int z, Random rand) + { + boolean didChange=false; + int fluid = this.getQuantaValue(world, x, y, z); + int blockBeneath = world.getBlockId(x, y-1,z); + + if(!(blockBeneath==0||blockBeneath==this.blockID)) + { + for(int xCount=-1;xCount<2;xCount++) + { + for(int yCount=-1;yCount<1;yCount++) + { + for(int zCount=-1;zCount<2;zCount++) + { + int id= world.getBlockId(x+xCount, y+yCount, z+zCount); + if(!(id ==0||id==this.blockID||id==Block.bedrock.blockID)&&!(Math.abs(zCount)+Math.abs(yCount)+Math.abs(xCount)>1)) + { + Block block =Block.blocksList[id]; + if(block.getUnlocalizedName().contains("ore")) + { + world.setBlock(x+xCount, y+yCount, z+zCount,this.blockID,6,2); + } + if(fluid>block.blockHardness*2&&yCount==0&&rand.nextInt(3)==0) + { + didChange=true;; + world.setBlock(x+xCount, y+yCount, z+zCount,0); + } + else if(fluid>block.blockHardness*2+1&&yCount==-1&&!didChange&&rand.nextBoolean()) + { + world.setBlock(x+xCount, y+yCount, z+zCount, 0); + } + + + } + } + } + } + } + + if((fluid==1)&&blockBeneath!=this.blockID&&blockBeneath!=Block.bedrock.blockID) + { + world.setBlockToAir(x, y, z); + world.setBlock(x, y-1, z,Block.bedrock.blockID); + } + super.updateTick(world, x, y, z, rand); + + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IconRegister ir) + { + + iconStill = ir.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName()+"_still"); + iconFlowing = ir.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName()+"_flowing"); + } + @Override + public Icon getIcon(int side, int meta) + { + return side <= 1 ? iconStill : iconFlowing; + } + + +} diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java b/src/main/java/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java index b522e9a..95e61ee 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java @@ -274,8 +274,6 @@ public class DDTeleporter { throw new IllegalArgumentException("destination cannot be null."); } - - //This beautiful teleport method is based off of xCompWiz's teleport function. WorldServer oldWorld = (WorldServer) entity.worldObj; @@ -372,6 +370,10 @@ public class DDTeleporter NBTTagCompound entityNBT = new NBTTagCompound(); entity.isDead = false; entity.writeMountToNBT(entityNBT); + if(entityNBT.hasNoTags()) + { + return entity; + } entity.isDead = true; entity = EntityList.createEntityFromNBT(entityNBT, newWorld); @@ -411,6 +413,7 @@ public class DDTeleporter // Let's try doing this down here in case this is what's killing NEI. GameRegistry.onPlayerChangedDimension((EntityPlayer)entity); + } DDTeleporter.placeInPortal(entity, newWorld, destination, properties, checkOrientation); return entity; diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java b/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java index 5f4fe93..f8770b5 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java @@ -1,5 +1,7 @@ package StevenDimDoors.mod_pocketDim; +import StevenDimDoors.experimental.LiquidCorium; +import StevenDimDoors.experimental.LiquidCoriumBlock; import StevenDimDoors.mod_pocketDim.blocks.BlockDimWall; import StevenDimDoors.mod_pocketDim.blocks.BlockDimWallPerm; import StevenDimDoors.mod_pocketDim.blocks.BlockDoorGold; @@ -76,6 +78,7 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityEggInfo; import net.minecraft.entity.EntityList; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -84,6 +87,8 @@ import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; @Mod(modid = mod_pocketDim.modid, name = "Dimensional Doors", version = mod_pocketDim.version) @@ -138,6 +143,9 @@ public class mod_pocketDim public static MonolithSpawner spawner; //Added this field temporarily. Will be refactored out later. public static GatewayGenerator riftGen; public static PlayerTracker tracker; + + public static Block coriumBlock; + public static Fluid coriumFluid; public static CreativeTabs dimDoorsCreativeTab = new CreativeTabs("dimDoorsCreativeTab") { @@ -232,7 +240,7 @@ public class mod_pocketDim DimensionManager.registerProviderType(properties.PocketProviderID, PocketProvider.class, false); DimensionManager.registerProviderType(properties.LimboProviderID, LimboProvider.class, false); DimensionManager.registerDimension(properties.LimboDimensionID, properties.LimboProviderID); - + LanguageRegistry.addName(goldDoor, "Golden Door"); LanguageRegistry.addName(goldDimDoor, "Golden Dimensional Door"); LanguageRegistry.addName(transientDoor , "transientDoor"); @@ -282,8 +290,16 @@ public class mod_pocketDim DungeonHelper.initialize(); this.riftGen.initGateways(); + coriumFluid = new LiquidCorium("Corium").setDensity(1000).setTemperature(3473).setDensity(9400).setLuminosity(6).setRarity(EnumRarity.rare); + coriumBlock = new LiquidCoriumBlock(900, coriumFluid, Material.lava).setQuantaPerBlock(16).setTickRate(20).setTickRandomly(true).setUnlocalizedName("Corium"); + FluidRegistry.registerFluid(coriumFluid); + GameRegistry.registerBlock(coriumBlock,"Corium"); + LanguageRegistry.addName(coriumBlock, "Corium"); + + + // Register loot chests DDLoot.registerInfo(properties); proxy.loadTextures(); diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MobMonolith.java b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MobMonolith.java index 1cbb356..74b3cc9 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MobMonolith.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MobMonolith.java @@ -2,6 +2,8 @@ package StevenDimDoors.mod_pocketDim.ticking; import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; import net.minecraft.entity.DataWatcher; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityFlying; @@ -29,7 +31,7 @@ public class MobMonolith extends EntityFlying implements IMob float soundTime = 0; int aggro = 0; byte textureState = 0; - + float entityCollisionReduction = 100; float scaleFactor = 0; int aggroMax; int destX = 0; // unused fields? @@ -99,6 +101,39 @@ public class MobMonolith extends EntityFlying implements IMob super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); } + + public boolean isClipping() + { + + int i = MathHelper.floor_double(this.boundingBox.minX); + int j = MathHelper.floor_double(this.boundingBox.maxX + 1.0D); + int k = MathHelper.floor_double(this.boundingBox.minY); + int l = MathHelper.floor_double(this.boundingBox.maxY + 1.0D); + int i1 = MathHelper.floor_double(this.boundingBox.minZ); + int j1 = MathHelper.floor_double(this.boundingBox.maxZ + 1.0D); + + for (int k1 = i; k1 < j; ++k1) + { + for (int l1 = k; l1 < l; ++l1) + { + for (int i2 = i1; i2 < j1; ++i2) + { + if(!this.worldObj.isAirBlock(k1, l1, i2)) + { + return true; + } + } + } + } + + + return false; + } + @Override + public boolean isEntityAlive() + { + return false; + } @Override public void onEntityUpdate() @@ -107,12 +142,11 @@ public class MobMonolith extends EntityFlying implements IMob { this.setDead(); } - + super.onEntityUpdate(); - - if (this.isEntityAlive() && this.isEntityInsideOpaqueBlock()) + if(this.isClipping()) { - this.setDead(); + this.moveEntity(0, .1, 0); } EntityPlayer entityPlayer = this.worldObj.getClosestPlayerToEntity(this, 30); diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MonolithSpawner.java b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MonolithSpawner.java index fac59e4..8b58f37 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MonolithSpawner.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MonolithSpawner.java @@ -129,8 +129,8 @@ public class MonolithSpawner implements IRegularTickReceiver { } while (!pocket.isAirBlock(x,jumpHeight+6 , z)&&jumpSanity<20); - Entity monolith = new MobMonolith(pocket); - monolith.setLocationAndAngles(x, jumpHeight, z, 1, 1); + MobMonolith monolith = new MobMonolith(pocket); + monolith.setLocationAndAngles(x, jumpHeight-(5-monolith.getRenderSizeModifier()*5), z, 1, 1); pocket.spawnEntityInWorld(monolith); didSpawn = true; } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/GatewayGenerator.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/GatewayGenerator.java index 75a65db..8d7f303 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/GatewayGenerator.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/GatewayGenerator.java @@ -16,6 +16,7 @@ import StevenDimDoors.mod_pocketDim.core.NewDimData; import StevenDimDoors.mod_pocketDim.core.PocketManager; import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor; import StevenDimDoors.mod_pocketDim.world.gateways.BaseGateway; +import StevenDimDoors.mod_pocketDim.world.gateways.GatewaySandstonePillars; import StevenDimDoors.mod_pocketDim.world.gateways.GatewayTwoPillars; import cpw.mods.fml.common.IWorldGenerator; @@ -36,6 +37,7 @@ public class GatewayGenerator implements IWorldGenerator private static final int END_DIMENSION_ID = 1; private static ArrayList gateways; + private static BaseGateway defaultGateway; private final DDProperties properties; @@ -48,7 +50,11 @@ public class GatewayGenerator implements IWorldGenerator public void initGateways() { gateways=new ArrayList(); - gateways.add(new GatewayTwoPillars(this.properties)); + this.defaultGateway=new GatewayTwoPillars(this.properties); + + //add gateways here + gateways.add(new GatewaySandstonePillars(this.properties)); + } @Override @@ -146,25 +152,23 @@ public class GatewayGenerator implements IWorldGenerator //Build the gateway if we found a valid location if (valid) { - this.gateways.get(random.nextInt(gateways.size())).generate(world, x, y, z); - /** - //Create a partial link to a dungeon. - dimension = PocketManager.getDimensionData(world); - link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, 0); - - //If the current dimension isn't Limbo, build a Rift Gateway out of Stone Bricks - if (dimension.id() != properties.LimboDimensionID) + //TODO I feel like this is slow and should be optimized. We are linear time with total # of generation restrictions + //Create an array and copy valid gateways into it + ArrayList validGateways = new ArrayList(); + for(BaseGateway gateway:gateways) { - createStoneGateway(world, x, y, z, random); + if(gateway.isLocationValid(world, x, y, z, world.getBiomeGenForCoords(x, z))) + { + validGateways.add(gateway); + } } - else + //Add default gateway if we where unable to find a suitable gateway + if(validGateways.isEmpty()) { - createLimboGateway(world, x, y, z, properties.LimboBlockID); + validGateways.add(this.defaultGateway); } - - //Place the shiny transient door into a dungeon - ItemDimensionalDoor.placeDoorBlock(world, x, y, z, 0, mod_pocketDim.transientDoor); - **/ + //randomly select a gateway from the pool of viable gateways + validGateways.get(random.nextInt(validGateways.size())).generate(world, x, y, z); } } } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java index 4830888..9f58bc8 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/BaseGateway.java @@ -21,18 +21,41 @@ import net.minecraft.world.biome.BiomeGenBase; public abstract class BaseGateway { + //This pack is what the dungeon initially generates into from this gateway. protected DungeonPack startingPack; + + /**Flag that determines if this gateway is tied to a specific biome. + *For compatabilities sake, we are just using string comparison to check. + **/ protected boolean isBiomeSpecific; - protected ArrayList allowedBiomeNames; + + /** + * List of biome names that we check against. Is by default a whitelist, but the isBiomeValid method + * can be overriden for specific gateways. For example, any biome containing 'forest' would be valid if we added 'forest', + * even from other mods. + */ + protected ArrayList biomeNames = new ArrayList(); + + /** + * List containing all the .schematics attached to this gateway. Selection is random by default, + * but can be overriden for specific gateways in getSchematicToBuild + */ + protected ArrayList schematicPaths= new ArrayList(); + + //TODO not yet implemented protected boolean surfaceGateway; + + //TODO not yet implemented protected int generationWeight; - protected String schematicPath; + + //Used to find the doorway for the .schematic protected GatewayBlockFilter filter; public BaseGateway(DDProperties properties) { - filter = new GatewayBlockFilter((short) properties.DimensionalDoorID, (short) properties.TransientDoorID); + filter = new GatewayBlockFilter((short) properties.DimensionalDoorID, (short) properties.TransientDoorID, + (short) properties.WarpDoorID); } /** @@ -44,40 +67,24 @@ public abstract class BaseGateway */ public boolean generate(World world, int x, int y, int z) { - /** - * We have two cases here. The gateway may or may not specify a schematic to load from. If it does, we need to line up the door in the schematic with the given rift. - * I tried doing this by taking the difference between the selected coords for the door, and the position of the door relative to the bounds of the .schematic, - * but it doesnt work. It seems like it should, though. Odd. - * - * Now we have a new issue- we get an index array out of bounds. One of the exported *blocks* is -69. - * - */ - Point3D doorLocation = new Point3D(0, 0, 0); int orientation = 0; - try + + if (this.hasSchematic()) { - if (this.schematicPath != null) - { - Schematic schematic = Schematic.readFromResource(schematicPath); - schematic.applyFilter(filter); - - doorLocation = filter.getEntranceDoorLocation(); - orientation = filter.getEntranceOrientation(); - - schematic.copyToWorld(world, x - doorLocation.getX(), y, z - doorLocation.getZ()); - - //TODO debug code to easily locate the rifts - for (int c = 5; c < 240; c++) - { - world.setBlock(x, y + c, z, Block.glowStone.blockID); - } - } - } - catch (Exception e) - { - e.printStackTrace(); - return false; + Schematic schematic = this.getSchematicToBuild(world, x, y, z); + + schematic.applyFilter(filter); + Point3D doorLocation = filter.getEntranceDoorLocation(); + orientation = filter.getEntranceOrientation(); + + // I suspect that the location used below is wrong. Gateways should be placed vertically based on + // the Y position of the surface where they belong. I'm pretty sure including doorLocation.getY() + // messes up the calculation. ~SenseiKiwi + + //schematic.copyToWorld(world, x - doorLocation.getX(), y, z - doorLocation.getZ()); + schematic.copyToWorld(world, x - doorLocation.getX(), y + 1 - doorLocation.getY(), z - doorLocation.getZ()); } + this.generateRandomBits(world, x, y, z); DimLink link = PocketManager.getDimensionData(world).createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation); @@ -86,6 +93,29 @@ public abstract class BaseGateway return true; } + /** + * Gets a .schematic to generate for this gateway + * @param world + * @param x + * @param y + * @param z + * @return + */ + public Schematic getSchematicToBuild(World world, int x, int y, int z) + { + //TODO- refine selection criteria here, this is the default case + try + { + return Schematic.readFromResource(schematicPaths.get(world.rand.nextInt(schematicPaths.size()))); + } + catch (Exception e) + { + e.printStackTrace(); + System.err.println("Could not load schematic for gateway"); + return null; + } + } + /** * Use this function to generate randomized bits of the structure. * @param world @@ -115,7 +145,8 @@ public abstract class BaseGateway */ public boolean isLocationValid(World world, int x, int y, int z, BiomeGenBase biome) { - return false; + //TODO- refine condition here as warranted + return this.isBiomeValid(biome); } public boolean shouldGenUnderground() @@ -125,6 +156,11 @@ public abstract class BaseGateway public boolean isBiomeValid(BiomeGenBase biome) { - return this.isBiomeSpecific || this.allowedBiomeNames.contains(biome.biomeName.toLowerCase()); + return !this.isBiomeSpecific || this.biomeNames.contains(biome.biomeName.toLowerCase()); + } + + public boolean hasSchematic() + { + return this.schematicPaths != null && !this.schematicPaths.isEmpty(); } } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java index ef04825..97e07e6 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayBlockFilter.java @@ -9,20 +9,22 @@ import StevenDimDoors.mod_pocketDim.schematic.SchematicFilter; public class GatewayBlockFilter extends SchematicFilter { private short dimensionalDoorID; + private int transientDoorID; + private int warpDoorID; private int entranceOrientation; private Schematic schematic; private Point3D entranceDoorLocation; - private int transientDoorID; - - public GatewayBlockFilter(short dimensionalDoorID, short transientDoorID) + + public GatewayBlockFilter(short dimensionalDoorID, short transientDoorID, short warpDoorID) { super("GatewayEntranceFinder"); - this.dimensionalDoorID = dimensionalDoorID; this.entranceDoorLocation = null; this.entranceOrientation = 0; this.schematic = null; + this.dimensionalDoorID = dimensionalDoorID; this.transientDoorID = transientDoorID; + this.warpDoorID = warpDoorID; } public int getEntranceOrientation() { @@ -65,6 +67,16 @@ public class GatewayBlockFilter extends SchematicFilter { return true; } } + if (blocks[index] == warpDoorID) + { + indexBelow = schematic.calculateIndexBelow(index); + if (indexBelow >= 0 && blocks[indexBelow] == warpDoorID) + { + entranceDoorLocation = schematic.calculatePoint(index); + entranceOrientation = (metadata[indexBelow] & 3); + return true; + } + } return false; } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewaySandstonePillars.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewaySandstonePillars.java new file mode 100644 index 0000000..e124908 --- /dev/null +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewaySandstonePillars.java @@ -0,0 +1,42 @@ +package StevenDimDoors.mod_pocketDim.world.gateways; + +import java.util.ArrayList; +import java.util.Random; + +import StevenDimDoors.mod_pocketDim.DDProperties; +import StevenDimDoors.mod_pocketDim.mod_pocketDim; +import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack; +import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; +import net.minecraft.block.Block; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; + +public class GatewaySandstonePillars extends BaseGateway +{ + + private static final int GATEWAY_RADIUS = 4; + + public GatewaySandstonePillars(DDProperties properties) + { + super(properties); + super.startingPack=DungeonHelper.instance().getDungeonPack("RUINS"); + super.isBiomeSpecific=true; + super.biomeNames.add("desert"); + surfaceGateway=true; + generationWeight = 0; + schematicPaths.add("/schematics/gateways/sandstonePillars.schematic"); + + } + @Override + public boolean generate(World world, int x, int y, int z) + { + //simple to transform the generation location here. + //Do you think this is the best way to do this? + return super.generate(world, x, y+2, z); + } + @Override + public void generateRandomBits(World world, int x, int y, int z) + { + } + +} diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayTwoPillars.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayTwoPillars.java index eda1b8e..6444898 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayTwoPillars.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayTwoPillars.java @@ -6,28 +6,55 @@ import StevenDimDoors.mod_pocketDim.DDProperties; import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack; import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper; +import net.minecraft.block.Block; import net.minecraft.world.World; public class GatewayTwoPillars extends BaseGateway { - private GatewayBlockFilter filter; + private static final int GATEWAY_RADIUS = 4; public GatewayTwoPillars(DDProperties properties) { super(properties); super.startingPack=DungeonHelper.instance().getDungeonPack("RUINS"); super.isBiomeSpecific=false; - super.allowedBiomeNames=null; + super.biomeNames=null; surfaceGateway=true; generationWeight = 0; - schematicPath="/schematics/gateways/twoPillars.schematic"; + schematicPaths.add("/schematics/gateways/twoPillars.schematic"); } @Override void generateRandomBits(World world, int x, int y, int z) { + final int blockID = Block.stoneBrick.blockID; + //Replace some of the ground around the gateway with bricks + for (int xc = -GATEWAY_RADIUS; xc <= GATEWAY_RADIUS; xc++) + { + for (int zc= -GATEWAY_RADIUS; zc <= GATEWAY_RADIUS; zc++) + { + //Check that the block is supported by an opaque block. + //This prevents us from building over a cliff, on the peak of a mountain, + //or the surface of the ocean or a frozen lake. + if (world.isBlockOpaqueCube(x + xc, y - 2, z + zc)) + { + //Randomly choose whether to place bricks or not. The math is designed so that the + //chances of placing a block decrease as we get farther from the gateway's center. + if (Math.abs(xc) + Math.abs(zc) < world.rand.nextInt(2) + 3) + { + //Place Stone Bricks + world.setBlock(x + xc, y - 1, z + zc, blockID, 0, 3); + } + else if (Math.abs(xc) + Math.abs(zc) < world.rand.nextInt(3) + 3) + { + //Place Cracked Stone Bricks + world.setBlock(x + xc, y - 1, z + zc, blockID, 2, 3); + } + } + } + } } } diff --git a/src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_flowing.png b/src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_flowing.png new file mode 100644 index 0000000000000000000000000000000000000000..af07f91d2c25b15584f13e9173988cc5d3017a4c GIT binary patch literal 9931 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 VzBT7zh!cl^j)virFR&LO{|D{T2crN0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_still.png.mcmeta b/src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_still.png.mcmeta new file mode 100644 index 0000000..2b28937 --- /dev/null +++ b/src/main/resources/assets/dimdoors/textures/blocks/tile.Corium_still.png.mcmeta @@ -0,0 +1,51 @@ +{ + "animation": + { + "frametime": 3, + "frames": + [ + +0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +18, +17, +16, +15, +14, +13, +12, +11, +10, +9, +8, +7, +6, +5, +4, +3, +2, +1 + + ] + } +} + + diff --git a/src/main/resources/schematics/gateways/sandstonePillars.schematic b/src/main/resources/schematics/gateways/sandstonePillars.schematic new file mode 100644 index 0000000000000000000000000000000000000000..30315b5a299f51d6ae0464ab1039a95e56e95199 GIT binary patch literal 365 zcmV-z0h0b7iwFP!000000KHSePQx$^brQO^8yw)&@8A!{I)Ts-NFZ^J)@ZfXB~u%u zjnjUHui)o!x^^mEDI5StcHHOp5+_lI5I)XRwUQR+KAgnTN&t2X0K9hYoHG|br$Pu; zmJi&PY!7hQ%P24*DwLF+vZm2DbG#1xJ6X^#W0kkc9*rYe7q?Z09!dzoR9m#DijopQ zcqgsOQDy~r<7}PE5Kf;kQ#EbqnhAho0_O*O8{;ZACTDP#%HmpSt&#_cIS3e;9F?~8 zf<{Amvp!L#8?@Ba1s3s(UMQm{sYE?Py(IM1td+jcCz&Z!LQAk$w(1$;gL6 zeT?#Fi)xQx=Zq4UQmE4kZEzbYmG(xY$gSeSu7P&Tn&uSmQ78U4vP&9$vM!5S^O1c3 LmTY9l&jbJfIB}xP literal 0 HcmV?d00001 diff --git a/src/main/resources/schematics/gateways/twoPillars.schematic b/src/main/resources/schematics/gateways/twoPillars.schematic index bef07047f9190e0c3f91866df73a3f0edd4435da..75f538db2f88cdd17c5cd760d08ea224b9e076d6 100644 GIT binary patch literal 268 zcmV+n0rUPJiwFP!000000KHMmPQx$|9H-5zlmmPKU(!oyDmWB@1QKUAUd5}Xc9a;Y z<=6N*HYyD*>X|+4%&vFGBYT4UwY0R=fy)%*LI(|ChKmuMm)Qv){pK9m(ghAoojQ!= zPdZS`y6zCq>&EIF(>Jc^I5z3EGem4~GxYZbZwv2Rg=?$32Xc!p96mGdIK3qlKEv#m@Vz-g*)Hmdw+ePg=G9sZq`$fUMpc35mh<`Mp{+Ngc z6A_XXxhh!1De}27_q8uKot)jBym)$m=InoxN8-u`j3dPFY(!#|A{q8)SYv$*;eAN{ S!VkY#4*473(Z%sB0ssJ=#DKK` literal 244 zcmVENDG9_hPd3xUc1WnU z!|1KS=8XsX#nwU