diff --git a/Experimental b/Experimental deleted file mode 100644 index 219b040..0000000 --- a/Experimental +++ /dev/null @@ -1 +0,0 @@ -Experiment here diff --git a/build.gradle b/build.gradle index 97a9338..487f821 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ apply plugin: 'forge' -version = "2.2.1RC1-" + System.getenv("BUILD_NUMBER") +version = "2.2.2RC1-" + System.getenv("BUILD_NUMBER") group= "com.stevenrs11.dimdoors" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "DimensionalDoors" diff --git a/src/main/java/StevenDimDoors/experimental/LiquidCorium.java b/src/main/java/StevenDimDoors/experimental/LiquidCorium.java deleted file mode 100644 index 955765b..0000000 --- a/src/main/java/StevenDimDoors/experimental/LiquidCorium.java +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index 4ea1c12..0000000 --- a/src/main/java/StevenDimDoors/experimental/LiquidCoriumBlock.java +++ /dev/null @@ -1,106 +0,0 @@ -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/DDLoot.java b/src/main/java/StevenDimDoors/mod_pocketDim/DDLoot.java index 2bf8000..74dc5e9 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/DDLoot.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/DDLoot.java @@ -3,11 +3,11 @@ package StevenDimDoors.mod_pocketDim; import java.util.ArrayList; import java.util.Random; -import net.minecraft.block.Block; import net.minecraft.enchantment.Enchantment; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import net.minecraft.util.WeightedRandom; import net.minecraft.util.WeightedRandomChestContent; @@ -19,10 +19,14 @@ import StevenDimDoors.mod_pocketDim.util.WeightedContainer; */ public class DDLoot { + private static final String[] SPECIAL_SKULL_OWNERS = new String[] { "stevenrs11", "kamikazekiwi3", "Jaitsu", "XCompWiz", "skyboy026", "Wylker" }; + private static final double MIN_ITEM_DAMAGE = 0.3; private static final double MAX_ITEM_DAMAGE = 0.9; private static final int ITEM_ENCHANTMENT_CHANCE = 50; private static final int MAX_ITEM_ENCHANTMENT_CHANCE = 100; + private static final int SPECIAL_SKULL_CHANCE = 20; + private static final int MAX_SPECIAL_SKULL_CHANCE = 100; public static final String DIMENSIONAL_DUNGEON_CHEST = "dimensionalDungeonChest"; public static ChestGenHooks DungeonChestInfo = null; @@ -49,11 +53,9 @@ public class DDLoot { addContent(true, items, Item.diamond.itemID, 40, 1, 2); addContent(true, items, Item.emerald.itemID, 20, 1, 2); addContent(true, items, Item.appleGold.itemID, 10); - addContent(true, items, Item.eyeOfEnder.itemID, 15); - addContent(true, items, Item.ghastTear.itemID, 15); - addContent(properties.FabricOfRealityLootEnabled, items, mod_pocketDim.blockDimWall.blockID, 80, 4, 16); - addContent(properties.WorldThreadLootEnabled, items, mod_pocketDim.itemWorldThread.itemID, 90, 2,10); + addContent(properties.FabricOfRealityLootEnabled, items, mod_pocketDim.blockDimWall.blockID, 20, 16, 64); + addContent(properties.WorldThreadLootEnabled, items, mod_pocketDim.itemWorldThread.itemID, 80, 2, 8); // Add all the items to our dungeon chest addItemsToContainer(DungeonChestInfo, items); @@ -194,20 +196,22 @@ public class DDLoot { // Insert other random stuff // 40% chance for a name tag, 35% chance for a glass bottle // 30% chance for an ender pearl, 5% chance for record 11 + // 30% chance for a ghast tear addItemWithChance(stacks, random, 40, Item.nameTag, 1); addItemWithChance(stacks, random, 35, Item.glassBottle, 1); addItemWithChance(stacks, random, 30, Item.enderPearl, 1); + addItemWithChance(stacks, random, 30, Item.ghastTear, 1); addItemWithChance(stacks, random, 5, Item.record11, 1); - // Finally, there is a 3% chance of adding a player head - if (random.nextInt(100) < 50) // FIXME: SET TO 50% FOR TESTING, CHANGE TO 3% + // Finally, there is a 5% chance of adding a player head + if (random.nextInt(100) < 5) { - stacks.add( new ItemStack(Block.skull) ); + addGraveSkull(stacks, random); } fillChest(stacks, inventory, random); } - + private static void addModifiedEquipment(Item item, ArrayList stacks, Random random) { if (item == null) @@ -270,4 +274,23 @@ public class DDLoot { int damage = (int) (item.getMaxDamage() * MathHelper.getRandomDoubleInRange(random, MIN_ITEM_DAMAGE, MAX_ITEM_DAMAGE)); return new ItemStack(item, 1, damage); } + + private static void addGraveSkull(ArrayList stacks, Random random) + { + final int PLAYER_SKULL_METADATA = 3; + DeathTracker deathTracker = mod_pocketDim.deathTracker; + String skullOwner; + if (deathTracker.isEmpty() || (random.nextInt(MAX_SPECIAL_SKULL_CHANCE) < SPECIAL_SKULL_CHANCE)) + { + skullOwner = SPECIAL_SKULL_OWNERS[ random.nextInt(SPECIAL_SKULL_OWNERS.length) ]; + } + else + { + skullOwner = deathTracker.getRandomUsername(random); + } + ItemStack skull = new ItemStack(Item.skull, 1, PLAYER_SKULL_METADATA); + skull.stackTagCompound = new NBTTagCompound(); + skull.stackTagCompound.setString("SkullOwner", skullOwner); + stacks.add(skull); + } } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/DDProperties.java b/src/main/java/StevenDimDoors/mod_pocketDim/DDProperties.java index 5c9e841..622d107 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/DDProperties.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/DDProperties.java @@ -4,7 +4,8 @@ import java.io.File; import net.minecraftforge.common.Configuration; import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator; -import StevenDimDoors.mod_pocketDim.world.GatewayGenerator; +import StevenDimDoors.mod_pocketDim.world.fortresses.DDStructureNetherBridgeStart; +import StevenDimDoors.mod_pocketDim.world.gateways.GatewayGenerator; public class DDProperties { @@ -21,7 +22,6 @@ public class DDProperties public final int TransientDoorID; public final int FabricBlockID; public final int RiftBlockID; - public final int CoriumBlockID; /** * World Generation Block IDs @@ -105,6 +105,7 @@ public class DDProperties public final int NonTntWeight; public final int ClusterGenerationChance; public final int GatewayGenerationChance; + public final int FortressGatewayGenerationChance; public final int MonolithSpawningChance; public final int LimboReturnRange; public final String CustomSchematicDirectory; @@ -182,8 +183,6 @@ public class DDProperties GoldenDoorID = config.getBlock("Gold Door Block ID", 1980).getInt(); GoldenDimensionalDoorID = config.getBlock("Gold Dim Door Block ID", 1981).getInt(); - CoriumBlockID = config.getBlock("Corium Block ID", 900).getInt(); - WarpDoorItemID = config.getItem("Warp Door Item ID", 5670).getInt(); RiftRemoverItemID = config.getItem("Rift Remover Item ID", 5671).getInt(); StableFabricItemID = config.getItem("Stable Fabric Item ID", 5672).getInt(); @@ -220,6 +219,10 @@ public class DDProperties "Sets the chance (out of " + GatewayGenerator.MAX_GATEWAY_GENERATION_CHANCE + ") that a Rift Gateway will " + "generate in a given chunk. The default chance is 15.").getInt(); + FortressGatewayGenerationChance = config.get(Configuration.CATEGORY_GENERAL, "Fortress Gateway Generation Chance", 33, + "Sets the chance (out of " + DDStructureNetherBridgeStart.MAX_GATEWAY_GENERATION_CHANCE + ") that a Rift Gateway will " + + "generate as part of a Nether Fortress. The default chance is 33.").getInt(); + LimboBiomeID = config.get(CATEGORY_BIOME, "Limbo Biome ID", 251).getInt(); PocketBiomeID = config.get(CATEGORY_BIOME, "Pocket Biome ID", 250).getInt(); diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/DeathTracker.java b/src/main/java/StevenDimDoors/mod_pocketDim/DeathTracker.java new file mode 100644 index 0000000..be0dfcf --- /dev/null +++ b/src/main/java/StevenDimDoors/mod_pocketDim/DeathTracker.java @@ -0,0 +1,102 @@ +package StevenDimDoors.mod_pocketDim; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Random; + +public class DeathTracker +{ + private ArrayList usernameList; + private HashSet usernameSet; + private String filePath; + private boolean modified; + + public DeathTracker(String filePath) + { + this.usernameList = new ArrayList(); + this.usernameSet = new HashSet(); + this.filePath = filePath; + this.modified = false; + + readFromFile(); + } + + private void readFromFile() + { + try + { + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath))); + for (String line = reader.readLine(); line != null; line = reader.readLine()) + { + line = line.trim(); + if (!line.isEmpty()) + { + usernameSet.add(line); + } + } + reader.close(); + } + catch (FileNotFoundException e) { } + catch (IOException e) + { + System.err.println("An unexpected exception occurred while trying to read DeathTracker data:"); + System.err.println(e.toString()); + } + usernameList.addAll(usernameSet); + } + + public void writeToFile() + { + try + { + PrintWriter writer = new PrintWriter(filePath); + for (String username : usernameList) + { + writer.println(username); + } + writer.close(); + modified = false; + } + catch (FileNotFoundException e) + { + System.err.println("An unexpected exception occurred while trying to read DeathTracker data:"); + System.err.println(e.toString()); + } + } + + public boolean isModified() + { + return modified; + } + + public boolean isEmpty() + { + return usernameList.isEmpty(); + } + + public String getRandomUsername(Random random) + { + if (usernameList.isEmpty()) + { + throw new IllegalStateException("Cannot retrieve a random username from an empty list."); + } + return usernameList.get(random.nextInt(usernameList.size())); + } + + public boolean addUsername(String username) + { + if (usernameSet.add(username)) + { + usernameList.add(username); + modified = true; + return true; + } + return false; + } +} diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/EventHookContainer.java b/src/main/java/StevenDimDoors/mod_pocketDim/EventHookContainer.java index afc1c35..8f6c4a3 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/EventHookContainer.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/EventHookContainer.java @@ -22,11 +22,9 @@ import net.minecraftforge.event.world.WorldEvent; import StevenDimDoors.mod_pocketDim.core.DDTeleporter; import StevenDimDoors.mod_pocketDim.core.PocketManager; import StevenDimDoors.mod_pocketDim.items.BaseItemDoor; -import StevenDimDoors.mod_pocketDim.ticking.RiftRegenerator; import StevenDimDoors.mod_pocketDim.util.Point4D; import StevenDimDoors.mod_pocketDim.world.LimboProvider; import StevenDimDoors.mod_pocketDim.world.PocketProvider; -import StevenDimDoors.mod_pocketDim.world.fortresses.DDNetherFortressGenerator; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -43,10 +41,15 @@ public class EventHookContainer @ForgeSubscribe(priority = EventPriority.LOW) public void onMapGen(InitMapGenEvent event) { - if (event.type == InitMapGenEvent.EventType.NETHER_BRIDGE) + // Replace the Nether fortress generator with our own only if any gateways would ever generate. + // This allows admins to disable our fortress overriding without disabling all gateways. + /* + if (properties.FortressGatewayGenerationChance > 0 && properties.WorldRiftGenerationEnabled && + event.type == InitMapGenEvent.EventType.NETHER_BRIDGE) { event.newGen = new DDNetherFortressGenerator(); } + */ } @SideOnly(Side.CLIENT) @@ -130,11 +133,6 @@ public class EventHookContainer PocketManager.load(); } - if (PocketManager.isLoaded()) - { - RiftRegenerator.regenerateRiftsInAllWorlds(); - } - if (event.world != null) { this.playMusicForDim(event.world); @@ -148,30 +146,60 @@ public class EventHookContainer } @ForgeSubscribe(priority = EventPriority.HIGHEST) - public boolean LivingDeathEvent(LivingDeathEvent event) + public boolean onDeathWithHighPriority(LivingDeathEvent event) { + // Teleport the entity to Limbo if it's a player in a pocket dimension and + // if Limbo preserves player inventories. We'll check again in a low-priority event handler + // to give other mods a chance to save the player if Limbo does _not_ preserve inventories. + Entity entity = event.entity; if (entity instanceof EntityPlayer && properties.LimboEnabled && - entity.worldObj.provider instanceof PocketProvider) + entity.worldObj.provider instanceof PocketProvider && properties.LimboReturnsInventoryEnabled) { EntityPlayer player = (EntityPlayer) entity; - if (!properties.LimboReturnsInventoryEnabled) - { - player.inventory.clearInventory(-1, -1); - } - player.extinguish(); - player.clearActivePotions(); - ChunkCoordinates coords = LimboProvider.getLimboSkySpawn(player.worldObj.rand); - Point4D destination = new Point4D((int) (coords.posX+entity.posX), coords.posY, (int) (coords.posZ+entity.posZ ), mod_pocketDim.properties.LimboDimensionID); - DDTeleporter.teleportEntity(player, destination, false); - player.setHealth(player.getMaxHealth()); + mod_pocketDim.deathTracker.addUsername(player.username); + revivePlayerInLimbo(player); event.setCanceled(true); - return false; } return true; } + + @ForgeSubscribe(priority = EventPriority.LOWEST) + public boolean onDeathWithLowPriority(LivingDeathEvent event) + { + // This low-priority handler gives mods a chance to save a player from death before we apply + // teleporting them to Limbo _without_ preserving their inventory. We also check if the player + // died in a pocket dimension and record it, regardless of whether the player will be sent to Limbo. + + Entity entity = event.entity; + + if (entity instanceof EntityPlayer && entity.worldObj.provider instanceof PocketProvider) + { + EntityPlayer player = (EntityPlayer) entity; + mod_pocketDim.deathTracker.addUsername(player.username); + + if (properties.LimboEnabled && !properties.LimboReturnsInventoryEnabled) + { + player.inventory.clearInventory(-1, -1); + revivePlayerInLimbo(player); + event.setCanceled(true); + } + return false; + } + return true; + } + + private void revivePlayerInLimbo(EntityPlayer player) + { + player.extinguish(); + player.clearActivePotions(); + player.setHealth(player.getMaxHealth()); + ChunkCoordinates coords = LimboProvider.getLimboSkySpawn(player.worldObj.rand); + Point4D destination = new Point4D((int) (coords.posX + player.posX), coords.posY, (int) (coords.posZ + player.posZ ), mod_pocketDim.properties.LimboDimensionID); + DDTeleporter.teleportEntity(player, destination, false); + } @ForgeSubscribe public void onWorldSave(WorldEvent.Save event) @@ -179,6 +207,11 @@ public class EventHookContainer if (event.world.provider.dimensionId == 0) { PocketManager.save(); + + if (mod_pocketDim.deathTracker != null && mod_pocketDim.deathTracker.isModified()) + { + mod_pocketDim.deathTracker.writeToFile(); + } } } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/PlayerTracker.java b/src/main/java/StevenDimDoors/mod_pocketDim/PlayerTracker.java deleted file mode 100644 index c7cb895..0000000 --- a/src/main/java/StevenDimDoors/mod_pocketDim/PlayerTracker.java +++ /dev/null @@ -1,39 +0,0 @@ -package StevenDimDoors.mod_pocketDim; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.packet.Packet250CustomPayload; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.network.ForgePacket; -import net.minecraftforge.common.network.packet.DimensionRegisterPacket; -import cpw.mods.fml.common.IPlayerTracker; - -public class PlayerTracker implements IPlayerTracker -{ - - @Override - public void onPlayerLogin(EntityPlayer player) - { - - } - - @Override - public void onPlayerLogout(EntityPlayer player) { - // TODO Auto-generated method stub - - } - - @Override - public void onPlayerChangedDimension(EntityPlayer player) { - // TODO Auto-generated method stub - - } - - @Override - public void onPlayerRespawn(EntityPlayer player) - { - - - } - -} diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java b/src/main/java/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java index 713e8bc..5f6f896 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java @@ -36,14 +36,15 @@ import cpw.mods.fml.relauncher.SideOnly; public class BlockRift extends Block implements ITileEntityProvider { - private static final float MIN_IMMUNE_HARDNESS = 200.0F; + private static final float MIN_IMMUNE_RESISTANCE = 5000.0F; private static final int BLOCK_DESTRUCTION_RANGE = 4; private static final int BLOCK_DESTRUCTION_VOLUME = (int) Math.pow(2 * BLOCK_DESTRUCTION_RANGE + 1, 3); private static final int MAX_BLOCK_SEARCH_CHANCE = 100; private static final int BLOCK_SEARCH_CHANCE = 50; private static final int MAX_BLOCK_DESTRUCTION_CHANCE = 100; private static final int BLOCK_DESTRUCTION_CHANCE = 50; - private static final int WORLD_THREAD_PROBABILITY = 10; + private static final int WORLD_THREAD_CHANCE = 5; + private static final int MAX_WORLD_THREAD_CHANCE = 100; private final DDProperties properties; private final ArrayList blocksImmuneToRift; @@ -65,11 +66,11 @@ public class BlockRift extends Block implements ITileEntityProvider this.blocksImmuneToRift.add(properties.GoldenDimensionalDoorID); this.blocksImmuneToRift.add(properties.GoldenDoorID); + this.blocksImmuneToRift.add(Block.blockLapis.blockID); this.blocksImmuneToRift.add(Block.blockIron.blockID); + this.blocksImmuneToRift.add(Block.blockGold.blockID); this.blocksImmuneToRift.add(Block.blockDiamond.blockID); this.blocksImmuneToRift.add(Block.blockEmerald.blockID); - this.blocksImmuneToRift.add(Block.blockGold.blockID); - this.blocksImmuneToRift.add(Block.blockLapis.blockID); } @Override @@ -191,30 +192,25 @@ public class BlockRift extends Block implements ITileEntityProvider if (!isBlockImmune(world, current.getX(), current.getY(), current.getZ()) && random.nextInt(MAX_BLOCK_DESTRUCTION_CHANCE) < BLOCK_DESTRUCTION_CHANCE) { - this.spawnWorldThread(world.getBlockId(current.getX(), current.getY(), current.getZ()), world, x, y, z); + this.spawnWorldThread(world.getBlockId(current.getX(), current.getY(), current.getZ()), world, x, y, z, random); world.destroyBlock(current.getX(), current.getY(), current.getZ(), false); } } } } - private void spawnWorldThread(int blockID,World worldObj,int x,int y,int z ) + + private void spawnWorldThread(int blockID, World world, int x, int y, int z, Random random) { - if(blockID == 0||!(worldObj.rand.nextInt(100) pointDistances, Queue points) { Point3D[] neighbors = new Point3D[] { @@ -234,6 +230,16 @@ public class BlockRift extends Block implements ITileEntityProvider } } } + + public void regenerateRift(World world, int x, int y, int z, Random random) + { + if (!this.isBlockImmune(world, x, y, z) && world.getChunkProvider().chunkExists(x >> 4, z >> 4)) + { + int blockID = world.getBlockId(x, y, z); + world.setBlock(x, y, z, properties.RiftBlockID); + this.spawnWorldThread(blockID, world, x, y, z, random); + } + } /** * Lets pistons push through rifts, destroying them @@ -362,8 +368,13 @@ public class BlockRift extends Block implements ITileEntityProvider Block block = Block.blocksList[world.getBlockId(x, y, z)]; if (block != null) { - float hardness = block.getBlockHardness(world, x, y, z); - return (hardness < 0 || hardness >= MIN_IMMUNE_HARDNESS || blocksImmuneToRift.contains(block.blockID)); + // SenseiKiwi: I've switched to using the block's blast resistance instead of its + // hardness since most defensive blocks are meant to defend against explosions and + // may have low hardness to make them easier to build with. However, block.getExplosionResistance() + // is designed to receive an entity, the source of the blast. We have no entity so + // I've set this to access blockResistance directly. Might need changing later. + + return (block.blockResistance >= MIN_IMMUNE_RESISTANCE || blocksImmuneToRift.contains(block.blockID)); } return false; } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/core/PocketManager.java b/src/main/java/StevenDimDoors/mod_pocketDim/core/PocketManager.java index 758a495..29fbf75 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/core/PocketManager.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/core/PocketManager.java @@ -35,10 +35,10 @@ import StevenDimDoors.mod_pocketDim.watcher.IUpdateWatcher; import StevenDimDoors.mod_pocketDim.watcher.UpdateWatcherProxy; /** - * This class regulates all the operations involving the storage and manipulation of dimensions. It handles saving dim data, teleporting the player, and - * creating/registering new dimensions as well as loading old dimensions on startup + * This class regulates all the operations involving the storage and manipulation of dimensions. + * It handles saving dim data, teleporting the player, and creating/registering new dimensions as + * well as loading old dimensions on startup */ -@SuppressWarnings("deprecation") public class PocketManager { private static class InnerDimData extends NewDimData implements IPackable diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftBlade.java b/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftBlade.java index 86b1602..ceee388 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftBlade.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftBlade.java @@ -201,7 +201,7 @@ public class ItemRiftBlade extends ItemSword @Override public void registerIcons(IconRegister par1IconRegister) { - this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName()); + this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", "")); } /** diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftSignature.java b/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftSignature.java index 9066fd2..6f5c5b8 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftSignature.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftSignature.java @@ -42,7 +42,7 @@ public class ItemRiftSignature extends Item public void registerIcons(IconRegister par1IconRegister) { - this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName()); + this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", "")); } @Override diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/items/itemRiftRemover.java b/src/main/java/StevenDimDoors/mod_pocketDim/items/itemRiftRemover.java index 119e578..c95b472 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/items/itemRiftRemover.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/items/itemRiftRemover.java @@ -32,7 +32,7 @@ public class itemRiftRemover extends Item @Override public void registerIcons(IconRegister par1IconRegister) { - this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName()); + this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", "")); } @Override diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java b/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java index 3c61aa1..389496b 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/mod_pocketDim.java @@ -1,7 +1,21 @@ package StevenDimDoors.mod_pocketDim; -import StevenDimDoors.experimental.LiquidCorium; -import StevenDimDoors.experimental.LiquidCoriumBlock; +import java.io.File; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +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.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatMessageComponent; +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 StevenDimDoors.mod_pocketDim.blocks.BlockDimWall; import StevenDimDoors.mod_pocketDim.blocks.BlockDimWallPerm; import StevenDimDoors.mod_pocketDim.blocks.BlockDoorGold; @@ -36,10 +50,10 @@ import StevenDimDoors.mod_pocketDim.items.ItemWarpDoor; import StevenDimDoors.mod_pocketDim.items.ItemWorldThread; import StevenDimDoors.mod_pocketDim.items.itemRiftRemover; import StevenDimDoors.mod_pocketDim.ticking.CommonTickHandler; +import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator; import StevenDimDoors.mod_pocketDim.ticking.FastRiftRegenerator; import StevenDimDoors.mod_pocketDim.ticking.LimboDecay; import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; -import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator; import StevenDimDoors.mod_pocketDim.ticking.RiftRegenerator; import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor; import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoorGold; @@ -47,13 +61,11 @@ import StevenDimDoors.mod_pocketDim.tileentities.TileEntityRift; import StevenDimDoors.mod_pocketDim.tileentities.TileEntityTransTrapdoor; import StevenDimDoors.mod_pocketDim.world.BiomeGenLimbo; import StevenDimDoors.mod_pocketDim.world.BiomeGenPocket; -import StevenDimDoors.mod_pocketDim.world.GatewayGenerator; import StevenDimDoors.mod_pocketDim.world.LimboProvider; import StevenDimDoors.mod_pocketDim.world.PocketProvider; +import StevenDimDoors.mod_pocketDim.world.gateways.GatewayGenerator; import StevenDimDoors.mod_pocketDimClient.ClientPacketHandler; import StevenDimDoors.mod_pocketDimClient.ClientTickHandler; - -import cpw.mods.fml.common.IPlayerTracker; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; @@ -71,26 +83,6 @@ import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.relauncher.Side; -import java.io.File; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -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; -import net.minecraft.util.ChatMessageComponent; -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) @NetworkMod(clientSideRequired = true, serverSideRequired = false, connectionHandler=ConnectionHandler.class, @@ -100,7 +92,7 @@ serverPacketHandlerSpec = @SidedPacketHandler(channels = {PacketConstants.CHANNEL_NAME}, packetHandler = ServerPacketHandler.class)) public class mod_pocketDim { - public static final String version = "1.6.4R2.1.2RC1"; + public static final String version = "1.6.4R2.2.2RC1"; public static final String modid = "dimdoors"; //need to clean up @@ -142,13 +134,10 @@ public class mod_pocketDim public static DDProperties properties; public static CustomLimboPopulator spawner; //Added this field temporarily. Will be refactored out later. - public FastRiftRegenerator fastRiftRegenerator; + public static FastRiftRegenerator fastRiftRegenerator; public static GatewayGenerator gatewayGenerator; - public static PlayerTracker tracker; + public static DeathTracker deathTracker; - public static Block coriumBlock; - public static Fluid coriumFluid; - public static CreativeTabs dimDoorsCreativeTab = new CreativeTabs("dimDoorsCreativeTab") { @Override @@ -177,7 +166,6 @@ public class mod_pocketDim EventHookContainer hooks = new EventHookContainer(properties); MinecraftForge.EVENT_BUS.register(hooks); MinecraftForge.TERRAIN_GEN_BUS.register(hooks); - gatewayGenerator = new GatewayGenerator(properties); } @EventHandler @@ -192,7 +180,7 @@ public class mod_pocketDim spawner = new CustomLimboPopulator(commonTickHandler, properties); new RiftRegenerator(commonTickHandler); //No need to store the reference LimboDecay decay = new LimboDecay(commonTickHandler, properties); - this.fastRiftRegenerator = new FastRiftRegenerator(commonTickHandler); + fastRiftRegenerator = new FastRiftRegenerator(commonTickHandler); transientDoor = new TransientDoor(properties.TransientDoorID, Material.iron, properties).setHardness(1.0F) .setUnlocalizedName("transientDoor"); goldenDimensionalDoor = new BlockGoldDimDoor(properties.GoldenDimensionalDoorID, Material.iron, properties).setHardness(1.0F) .setUnlocalizedName("dimDoorGold"); @@ -218,14 +206,11 @@ public class mod_pocketDim itemRiftBlade = (new ItemRiftBlade(properties.RiftBladeItemID, properties)).setUnlocalizedName("ItemRiftBlade"); itemStabilizedLinkSignature = (new ItemStabilizedRiftSignature(properties.StabilizedRiftSignatureItemID)).setUnlocalizedName("itemStabilizedRiftSig"); itemWorldThread = (new ItemWorldThread(properties.WorldThreadItemID)).setUnlocalizedName("itemWorldThread"); - mod_pocketDim.limboBiome = (new BiomeGenLimbo(properties.LimboBiomeID)); mod_pocketDim.pocketBiome = (new BiomeGenPocket(properties.PocketBiomeID)); GameRegistry.registerWorldGenerator(mod_pocketDim.gatewayGenerator); - tracker = new PlayerTracker(); - GameRegistry.registerPlayerTracker(tracker); GameRegistry.registerBlock(goldenDoor, "Golden Door"); GameRegistry.registerBlock(goldenDimensionalDoor, "Golden Dimensional Door"); @@ -288,18 +273,9 @@ public class mod_pocketDim EntityList.entityEggs.put(properties.MonolithEntityID, new EntityEggInfo(properties.MonolithEntityID, 0, 0xffffff)); LanguageRegistry.instance().addStringLocalization("entity.DimDoors.Obelisk.name", "Monolith"); - CraftingManager.registerRecipes(properties); DungeonHelper.initialize(); - this.gatewayGenerator.initGateways(); - - /** - coriumFluid = new LiquidCorium("Corium").setDensity(1000).setTemperature(3473).setDensity(9400).setLuminosity(6).setRarity(EnumRarity.rare); - coriumBlock = new LiquidCoriumBlock(properties.CoriumBlockID, coriumFluid, Material.lava).setQuantaPerBlock(16).setTickRate(20).setTickRandomly(true).setUnlocalizedName("Corium"); - FluidRegistry.registerFluid(coriumFluid); - GameRegistry.registerBlock(coriumBlock,"Corium"); - LanguageRegistry.addName(coriumBlock, "Corium"); - **/ + gatewayGenerator = new GatewayGenerator(properties); // Register loot chests DDLoot.registerInfo(properties); @@ -307,7 +283,6 @@ public class mod_pocketDim proxy.registerRenderers(); } - @EventHandler public void onPostInitialization(FMLPostInitializationEvent event) { @@ -320,6 +295,8 @@ public class mod_pocketDim try { PocketManager.unload(); + deathTracker.writeToFile(); + deathTracker = null; } catch (Exception e) { @@ -330,9 +307,9 @@ public class mod_pocketDim @EventHandler public void onServerStarting(FMLServerStartingEvent event) { - //TODO- load dims with forced chunks on server startup here + // Register commands with the server CommandResetDungeons.instance().register(event); CommandCreateDungeonRift.instance().register(event); CommandDeleteAllLinks.instance().register(event); @@ -343,7 +320,11 @@ public class mod_pocketDim //CommandPruneDimensions.instance().register(event); CommandCreatePocket.instance().register(event); CommandTeleportPlayer.instance().register(event); - + + // Initialize a new DeathTracker + String deathTrackerFile = DimensionManager.getCurrentSaveRootDirectory() + "/DimensionalDoors/data/deaths.txt"; + deathTracker = new DeathTracker(deathTrackerFile); + try { ChunkLoaderHelper.loadChunkForcedWorlds(event); diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/FastRiftRegenerator.java b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/FastRiftRegenerator.java index 95af20c..b0f203f 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/FastRiftRegenerator.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/FastRiftRegenerator.java @@ -3,6 +3,7 @@ package StevenDimDoors.mod_pocketDim.ticking; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Random; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; @@ -12,7 +13,9 @@ import StevenDimDoors.mod_pocketDim.util.Point4D; public class FastRiftRegenerator implements IRegularTickReceiver { - private static final int RIFT_REGENERATION_INTERVAL = 10; //Regenerate random rifts every 10 ticks + private static final int RIFT_REGENERATION_INTERVAL = 10; //Regenerate scheduled rifts every 10 ticks + private static Random random = new Random(); + private ArrayList locationsToRegen = new ArrayList(); public FastRiftRegenerator(IRegularTickSender sender) @@ -23,31 +26,24 @@ public class FastRiftRegenerator implements IRegularTickReceiver { @Override public void notifyTick() { - regenerateRiftsInAllWorlds(); + regenerateScheduledRifts(); } - public void regenerateRiftsInAllWorlds() + public void regenerateScheduledRifts() { - if (this.locationsToRegen.isEmpty()) + if (!locationsToRegen.isEmpty()) { - return; - } - List loadedWorlds = (List) Arrays.asList(DimensionManager.getIDs()); - - for (Point4D point: this.locationsToRegen) - { - if (loadedWorlds.contains(point.getDimension()) && PocketManager.getLink(point) != null) + List loadedWorlds = (List) Arrays.asList(DimensionManager.getIDs()); + for (Point4D point: locationsToRegen) { - World world = DimensionManager.getWorld(point.getDimension()); - - if (!mod_pocketDim.blockRift.isBlockImmune(world, point.getX(), point.getY(), point.getZ()) - && world.getChunkProvider().chunkExists(point.getX() >> 4, point.getZ() >> 4)) + if (loadedWorlds.contains(point.getDimension()) && PocketManager.getLink(point) != null) { - world.setBlock(point.getX(), point.getY(), point.getZ(), mod_pocketDim.blockRift.blockID); + World world = DimensionManager.getWorld(point.getDimension()); + mod_pocketDim.blockRift.regenerateRift(world, point.getX(), point.getY(), point.getZ(), random); } } + locationsToRegen.clear(); } - this.locationsToRegen.clear(); } public void registerRiftForRegen(int x, int y, int z, int dimID) diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/RiftRegenerator.java b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/RiftRegenerator.java index 7187c9d..a50907b 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/RiftRegenerator.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/RiftRegenerator.java @@ -1,8 +1,11 @@ package StevenDimDoors.mod_pocketDim.ticking; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; -import StevenDimDoors.mod_pocketDim.DDProperties; import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.core.DimLink; import StevenDimDoors.mod_pocketDim.core.NewDimData; @@ -13,6 +16,7 @@ public class RiftRegenerator implements IRegularTickReceiver { private static final int RIFT_REGENERATION_INTERVAL = 200; //Regenerate random rifts every 200 ticks private static final int RIFTS_REGENERATED_PER_DIMENSION = 5; + private static Random random = new Random(); public RiftRegenerator(IRegularTickSender sender) { @@ -22,16 +26,17 @@ public class RiftRegenerator implements IRegularTickReceiver { @Override public void notifyTick() { - regenerateRiftsInAllWorlds(); + regenerateRiftsInLoadedWorlds(); } - public static void regenerateRiftsInAllWorlds() + private static void regenerateRiftsInLoadedWorlds() { - //Regenerate rifts that have been replaced (not permanently removed) by players - DDProperties properties = DDProperties.instance(); - - for (NewDimData dimension : PocketManager.getDimensions()) + // Regenerate rifts that have been replaced (not permanently removed) by players + // Only do this in dimensions that are currently loaded + List loadedWorlds = (List) Arrays.asList(DimensionManager.getIDs()); + for (Integer dimensionID : loadedWorlds) { + NewDimData dimension = PocketManager.getDimensionData(dimensionID); if (dimension.linkCount() > 0) { World world = DimensionManager.getWorld(dimension.id()); @@ -42,10 +47,7 @@ public class RiftRegenerator implements IRegularTickReceiver { { DimLink link = dimension.getRandomLink(); Point4D source = link.source(); - if (!mod_pocketDim.blockRift.isBlockImmune(world, source.getX(), source.getY(), source.getZ())&& world.getChunkProvider().chunkExists(source.getX() >> 4, source.getZ() >> 4)) - { - world.setBlock(source.getX(), source.getY(), source.getZ(), properties.RiftBlockID); - } + mod_pocketDim.blockRift.regenerateRift(world, source.getX(), source.getY(), source.getZ(), random); } } } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/fortresses/DDNetherFortressGenerator.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/fortresses/DDNetherFortressGenerator.java index 4c2ca7b..c34c5fe 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/fortresses/DDNetherFortressGenerator.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/fortresses/DDNetherFortressGenerator.java @@ -1,5 +1,6 @@ package StevenDimDoors.mod_pocketDim.world.fortresses; +import StevenDimDoors.mod_pocketDim.DDProperties; import net.minecraft.world.gen.structure.MapGenNetherBridge; import net.minecraft.world.gen.structure.MapGenStructureIO; import net.minecraft.world.gen.structure.StructureStart; @@ -19,6 +20,6 @@ public class DDNetherFortressGenerator extends MapGenNetherBridge protected StructureStart getStructureStart(int chunkX, int chunkZ) { - return new DDStructureNetherBridgeStart(this.worldObj, this.rand, chunkX, chunkZ); + return new DDStructureNetherBridgeStart(this.worldObj, this.rand, chunkX, chunkZ, DDProperties.instance()); } } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/fortresses/DDStructureNetherBridgeStart.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/fortresses/DDStructureNetherBridgeStart.java index abf23db..5736e36 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/fortresses/DDStructureNetherBridgeStart.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/fortresses/DDStructureNetherBridgeStart.java @@ -6,16 +6,15 @@ import java.util.Random; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -import net.minecraft.world.gen.structure.ComponentNetherBridgeCrossing; import net.minecraft.world.gen.structure.ComponentNetherBridgeThrone; import net.minecraft.world.gen.structure.StructureBoundingBox; import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureNetherBridgeStart; +import StevenDimDoors.mod_pocketDim.DDProperties; public class DDStructureNetherBridgeStart extends StructureNetherBridgeStart { - private static int GATEWAY_GENERATION_CHANCE = 1; - private static int MAX_GATEWAY_GENERATION_CHANCE = 3; + public static final int MAX_GATEWAY_GENERATION_CHANCE = 100; private boolean hasGateway; private int minX; @@ -24,7 +23,7 @@ public class DDStructureNetherBridgeStart extends StructureNetherBridgeStart public DDStructureNetherBridgeStart() { } - public DDStructureNetherBridgeStart(World world, Random random, int chunkX, int chunkZ) + public DDStructureNetherBridgeStart(World world, Random random, int chunkX, int chunkZ, DDProperties properties) { // StructureNetherBridgeStart handles designing the fortress for us super(world, random, chunkX, chunkZ); @@ -36,7 +35,7 @@ public class DDStructureNetherBridgeStart extends StructureNetherBridgeStart hasGateway = false; // Randomly decide whether to build a gateway in this fortress - if (random.nextInt(MAX_GATEWAY_GENERATION_CHANCE) < GATEWAY_GENERATION_CHANCE) + if (random.nextInt(MAX_GATEWAY_GENERATION_CHANCE) < properties.FortressGatewayGenerationChance) { // Search for all the blaze spawners in a fortress spawnerRooms = new ArrayList(); diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/world/GatewayGenerator.java b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayGenerator.java similarity index 83% rename from src/main/java/StevenDimDoors/mod_pocketDim/world/GatewayGenerator.java rename to src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayGenerator.java index c5bb477..0257be3 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/world/GatewayGenerator.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/world/gateways/GatewayGenerator.java @@ -1,4 +1,4 @@ -package StevenDimDoors.mod_pocketDim.world; +package StevenDimDoors.mod_pocketDim.world.gateways; import java.util.ArrayList; import java.util.Random; @@ -15,10 +15,7 @@ import StevenDimDoors.mod_pocketDim.core.LinkTypes; 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.GatewayLimbo; -import StevenDimDoors.mod_pocketDim.world.gateways.GatewaySandstonePillars; -import StevenDimDoors.mod_pocketDim.world.gateways.GatewayTwoPillars; +import StevenDimDoors.mod_pocketDim.world.PocketProvider; import cpw.mods.fml.common.IWorldGenerator; public class GatewayGenerator implements IWorldGenerator @@ -32,32 +29,30 @@ public class GatewayGenerator implements IWorldGenerator private static final int CHUNK_LENGTH = 16; private static final int GATEWAY_RADIUS = 4; private static final int MAX_GATEWAY_GENERATION_ATTEMPTS = 10; - private static final int NETHER_CHANCE_CORRECTION = 4; private static final int OVERWORLD_DIMENSION_ID = 0; private static final int NETHER_DIMENSION_ID = -1; private static final int END_DIMENSION_ID = 1; - private static ArrayList gateways; - private static BaseGateway defaultGateway; + private ArrayList gateways; + private BaseGateway defaultGateway; private final DDProperties properties; public GatewayGenerator(DDProperties properties) { this.properties = properties; - + this.initialize(); } - public void initGateways() + private void initialize() { - gateways=new ArrayList(); - this.defaultGateway=new GatewayTwoPillars(this.properties); + gateways = new ArrayList(); + defaultGateway = new GatewayTwoPillars(properties); - //add gateways here - gateways.add(new GatewaySandstonePillars(this.properties)); + // Add gateways here gateways.add(defaultGateway); - gateways.add(new GatewayLimbo(this.properties)); - + gateways.add(new GatewaySandstonePillars(properties)); + gateways.add(new GatewayLimbo(properties)); } @Override @@ -79,25 +74,9 @@ public class GatewayGenerator implements IWorldGenerator int x, y, z; int attempts; - int correction; boolean valid; - @SuppressWarnings("deprecation") DimLink link; NewDimData dimension; - - //Check if we're generating things in the Nether - if (world.provider.dimensionId == NETHER_DIMENSION_ID) - { - //The terrain in the Nether makes it much harder for our gateway spawning algorithm to find a spot to place a gateway. - //Tests show that only about 15% of attempts succeed. Compensate for this by multiplying the chance of generation - //by a correction factor. - correction = NETHER_CHANCE_CORRECTION; - } - else - { - //No correction - correction = 1; - } //Randomly decide whether to place a cluster of rifts here if (random.nextInt(MAX_CLUSTER_GENERATION_CHANCE) < properties.ClusterGenerationChance) @@ -136,7 +115,7 @@ public class GatewayGenerator implements IWorldGenerator //Check if generating structures is enabled and randomly decide whether to place a Rift Gateway here. //This only happens if a rift cluster was NOT generated. - else if (random.nextInt(MAX_GATEWAY_GENERATION_CHANCE) < properties.GatewayGenerationChance * correction && + else if (random.nextInt(MAX_GATEWAY_GENERATION_CHANCE) < properties.GatewayGenerationChance && isStructureGenerationAllowed()) { valid = false; diff --git a/src/main/resources/assets/dimdoors/textures/items/dimDoorexit.png b/src/main/resources/assets/dimdoors/textures/items/dimDoorexit.png deleted file mode 100644 index 225327c..0000000 Binary files a/src/main/resources/assets/dimdoors/textures/items/dimDoorexit.png and /dev/null differ diff --git a/src/main/resources/assets/dimdoors/textures/items/item.ItemRiftBlade.png b/src/main/resources/assets/dimdoors/textures/items/item.ItemRiftBlade.png deleted file mode 100644 index dd7c984..0000000 Binary files a/src/main/resources/assets/dimdoors/textures/items/item.ItemRiftBlade.png and /dev/null differ diff --git a/src/main/resources/assets/dimdoors/textures/items/item.dimDoorexit.png b/src/main/resources/assets/dimdoors/textures/items/item.dimDoorexit.png deleted file mode 100644 index 225327c..0000000 Binary files a/src/main/resources/assets/dimdoors/textures/items/item.dimDoorexit.png and /dev/null differ diff --git a/src/main/resources/assets/dimdoors/textures/items/item.itemChaosDoor.png b/src/main/resources/assets/dimdoors/textures/items/item.itemChaosDoor.png deleted file mode 100644 index 142ed36..0000000 Binary files a/src/main/resources/assets/dimdoors/textures/items/item.itemChaosDoor.png and /dev/null differ diff --git a/src/main/resources/assets/dimdoors/textures/items/item.itemDimDoor.png b/src/main/resources/assets/dimdoors/textures/items/item.itemDimDoor.png deleted file mode 100644 index cff615c..0000000 Binary files a/src/main/resources/assets/dimdoors/textures/items/item.itemDimDoor.png and /dev/null differ diff --git a/src/main/resources/assets/dimdoors/textures/items/item.itemLinkSignature.png b/src/main/resources/assets/dimdoors/textures/items/item.itemLinkSignature.png deleted file mode 100644 index 879d096..0000000 Binary files a/src/main/resources/assets/dimdoors/textures/items/item.itemLinkSignature.png and /dev/null differ diff --git a/src/main/resources/assets/dimdoors/textures/items/item.itemRiftRemover.png b/src/main/resources/assets/dimdoors/textures/items/item.itemRiftRemover.png deleted file mode 100644 index 7088d27..0000000 Binary files a/src/main/resources/assets/dimdoors/textures/items/item.itemRiftRemover.png and /dev/null differ diff --git a/src/main/resources/assets/dimdoors/textures/items/item.itemStableFabric.png b/src/main/resources/assets/dimdoors/textures/items/item.itemStableFabric.png deleted file mode 100644 index f56592c..0000000 Binary files a/src/main/resources/assets/dimdoors/textures/items/item.itemStableFabric.png and /dev/null differ diff --git a/src/main/resources/assets/dimdoors/textures/items/itemWorldThread.png b/src/main/resources/assets/dimdoors/textures/items/itemWorldThread.png index 8af4bf8..f0fef4a 100644 Binary files a/src/main/resources/assets/dimdoors/textures/items/itemWorldThread.png and b/src/main/resources/assets/dimdoors/textures/items/itemWorldThread.png differ diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 544bd0e..edad775 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -6,7 +6,7 @@ "modid": "dimdoors", "name": "Dimensional Doors", "description": "Bend and twist reality itself, creating pocket dimensions, rifts, and much more", -"version": "1.6.4R2.1.2RC1", +"version": "1.6.4R2.2.2RC1", "credits": "Created by StevenRS11, Coded by StevenRS11 and SenseiKiwi, Logo and Testing by Jaitsu", "logoFile": "/dimdoors_logo.png", "mcversion": "",