commit
befef486c6
52 changed files with 651 additions and 312 deletions
|
@ -12,8 +12,8 @@ import net.minecraft.tileentity.TileEntityChest;
|
|||
import net.minecraft.tileentity.TileEntityDispenser;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDLoot;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.schematic.WorldOperation;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package StevenDimDoors.mod_pocketDim;
|
||||
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -8,89 +9,82 @@ import static StevenDimDoors.mod_pocketDim.mod_pocketDim.*;
|
|||
|
||||
public class CraftingManager
|
||||
{
|
||||
private CraftingManager() { }
|
||||
|
||||
public static void registerRecipes(DDProperties properties)
|
||||
{
|
||||
if (properties.CraftingStableFabricAllowed)
|
||||
{
|
||||
switch (properties.WorldThreadRequirementLevel)
|
||||
{
|
||||
case 1:
|
||||
GameRegistry.addShapelessRecipe(new ItemStack(itemStableFabric, 1),
|
||||
Item.enderPearl, mod_pocketDim.itemWorldThread);
|
||||
break;
|
||||
case 2:
|
||||
GameRegistry.addRecipe(new ItemStack(itemStableFabric, 1),
|
||||
"yxy", 'x', Item.enderPearl, 'y', mod_pocketDim.itemWorldThread);
|
||||
break;
|
||||
case 3:
|
||||
GameRegistry.addRecipe(new ItemStack(itemStableFabric, 1),
|
||||
" y ", "yxy", " y ", 'x', Item.enderPearl, 'y', mod_pocketDim.itemWorldThread);
|
||||
break;
|
||||
default:
|
||||
GameRegistry.addRecipe(new ItemStack(itemStableFabric, 1),
|
||||
"yyy", "yxy", "yyy", 'x', Item.enderPearl, 'y', mod_pocketDim.itemWorldThread);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (properties.CraftingDimensionalDoorAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(itemDimensionalDoor, 1), new Object[]
|
||||
{
|
||||
" ", "yxy", " ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorIron
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(itemDimensionalDoor, 1),
|
||||
"yxy", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorIron);
|
||||
}
|
||||
if (properties.CraftingUnstableDoorAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(itemUnstableDoor, 1), new Object[]
|
||||
{
|
||||
" ", "yxy", " ", 'x', Item.eyeOfEnder, 'y', mod_pocketDim.itemDimensionalDoor
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(itemUnstableDoor, 1),
|
||||
"yxy", 'x', Item.eyeOfEnder, 'y', mod_pocketDim.itemDimensionalDoor);
|
||||
}
|
||||
if (properties.CraftingWarpDoorAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(itemWarpDoor, 1), new Object[]
|
||||
{
|
||||
" ", "yxy", " ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorWood
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(itemWarpDoor, 1),
|
||||
"yxy", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorWood);
|
||||
}
|
||||
if (properties.CraftingTransTrapdoorAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(transTrapdoor, 1), new Object[]
|
||||
{
|
||||
" y ", " x ", " y ", 'x', mod_pocketDim.itemStableFabric, 'y', Block.trapdoor
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(transTrapdoor, 1),
|
||||
"y", "x", "y", 'x', mod_pocketDim.itemStableFabric, 'y', Block.trapdoor);
|
||||
}
|
||||
if (properties.CraftingRiftSignatureAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(itemRiftSignature, 1), new Object[]
|
||||
{
|
||||
" y ", "yxy", " y ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.ingotIron
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(itemRiftSignature, 1),
|
||||
" y ", "yxy", " y ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.ingotIron);
|
||||
}
|
||||
|
||||
if (properties.CraftingRiftRemoverAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(itemRiftRemover, 1), new Object[]
|
||||
{
|
||||
"yyy", "yxy", "yyy", 'x', mod_pocketDim.itemStableFabric, 'y', Item.ingotGold
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(itemRiftRemover, 1),
|
||||
"yyy", "yxy", "yyy", 'x', mod_pocketDim.itemStableFabric, 'y', Item.ingotGold);
|
||||
}
|
||||
|
||||
if (properties.CraftingRiftBladeAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(itemRiftBlade, 1), new Object[]
|
||||
{
|
||||
" x ", " x ", " y ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.blazeRod
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(itemRiftBlade, 1),
|
||||
"x", "x", "y", 'x', mod_pocketDim.itemStableFabric, 'y', Item.blazeRod);
|
||||
}
|
||||
|
||||
if (properties.CraftingStableFabricAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(itemStableFabric, 1), new Object[]
|
||||
{
|
||||
"yyy", "yxy", "yyy", 'x', Item.enderPearl, 'y', mod_pocketDim.itemWorldThread
|
||||
});
|
||||
}
|
||||
|
||||
if (properties.CraftingStabilizedRiftSignatureAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemStabilizedLinkSignature,1), new Object[]
|
||||
{
|
||||
" y ", "yxy", " y ", 'x', mod_pocketDim.itemRiftSignature, 'y', mod_pocketDim.itemStableFabric
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemStabilizedLinkSignature,1),
|
||||
" y ", "yxy", " y ", 'x', mod_pocketDim.itemRiftSignature, 'y', mod_pocketDim.itemStableFabric);
|
||||
}
|
||||
if (properties.CraftingGoldenDimensionalDoorAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldenDimensionalDoor,1), new Object[]
|
||||
{
|
||||
" ", "xyx", " ", 'x', mod_pocketDim.itemGoldenDoor, 'y', Item.eyeOfEnder
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldenDimensionalDoor,1),
|
||||
"yxy", 'x', mod_pocketDim.itemGoldenDoor, 'y', mod_pocketDim.itemStableFabric);
|
||||
}
|
||||
if (properties.CraftingGoldenDoorAllowed)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldenDoor, 1), new Object[]
|
||||
{
|
||||
"yy ", "yy ", "yy ", 'y', Item.ingotGold
|
||||
});
|
||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldenDoor, 1),
|
||||
"yy", "yy", "yy", 'y', Item.ingotGold);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import net.minecraft.util.MathHelper;
|
|||
import net.minecraft.util.WeightedRandom;
|
||||
import net.minecraft.util.WeightedRandomChestContent;
|
||||
import net.minecraftforge.common.ChestGenHooks;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.util.WeightedContainer;
|
||||
|
||||
/*
|
||||
|
@ -19,7 +20,7 @@ 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 String[] SPECIAL_SKULL_OWNERS = new String[] { "stevenrs11", "kamikazekiwi3", "fbt", "Jaitsu", "XCompWiz", "skyboy026", "Wylker" };
|
||||
|
||||
private static final double MIN_ITEM_DAMAGE = 0.3;
|
||||
private static final double MAX_ITEM_DAMAGE = 0.9;
|
||||
|
@ -30,7 +31,7 @@ public class DDLoot {
|
|||
|
||||
public static final String DIMENSIONAL_DUNGEON_CHEST = "dimensionalDungeonChest";
|
||||
public static ChestGenHooks DungeonChestInfo = null;
|
||||
private static final int CHEST_SIZE = 5;
|
||||
private static final int CHEST_SIZE = 6;
|
||||
|
||||
private DDLoot() { }
|
||||
|
||||
|
@ -55,7 +56,7 @@ public class DDLoot {
|
|||
addContent(true, items, Item.appleGold.itemID, 10);
|
||||
|
||||
addContent(properties.FabricOfRealityLootEnabled, items, mod_pocketDim.blockDimWall.blockID, 20, 16, 64);
|
||||
addContent(properties.WorldThreadLootEnabled, items, mod_pocketDim.itemWorldThread.itemID, 80, 2, 8);
|
||||
addContent(properties.WorldThreadLootEnabled, items, mod_pocketDim.itemWorldThread.itemID, 80, 2, 12);
|
||||
|
||||
// Add all the items to our dungeon chest
|
||||
addItemsToContainer(DungeonChestInfo, items);
|
||||
|
|
|
@ -8,6 +8,8 @@ import java.util.ArrayList;
|
|||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
@Deprecated
|
||||
|
|
|
@ -19,6 +19,7 @@ import net.minecraftforge.event.entity.living.LivingFallEvent;
|
|||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||
import net.minecraftforge.event.terraingen.InitMapGenEvent;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
||||
|
|
|
@ -17,8 +17,8 @@ import net.minecraft.util.Icon;
|
|||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
|
|
|
@ -11,8 +11,8 @@ import net.minecraft.entity.player.EntityPlayerMP;
|
|||
import net.minecraft.util.MathHelper;
|
||||
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.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||
|
@ -51,7 +51,8 @@ public class BlockDimWallPerm extends Block
|
|||
@Override
|
||||
public void onEntityWalking(World world, int x, int y, int z, Entity entity)
|
||||
{
|
||||
if (!world.isRemote && world.provider.dimensionId == properties.LimboDimensionID)
|
||||
if (!world.isRemote && world.provider.dimensionId == properties.LimboDimensionID
|
||||
&& mod_pocketDim.worldProperties.LimboEscapeEnabled)
|
||||
{
|
||||
World overworld = DimensionManager.getWorld(0);
|
||||
if (overworld != null && entity instanceof EntityPlayerMP)
|
||||
|
|
|
@ -4,8 +4,8 @@ import java.util.Random;
|
|||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import net.minecraft.block.BlockDoor;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.IconFlipped;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package StevenDimDoors.mod_pocketDim.blocks;
|
||||
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
|
|
|
@ -7,7 +7,6 @@ import java.util.Queue;
|
|||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.BlockFlowing;
|
||||
import net.minecraft.block.BlockFluid;
|
||||
import net.minecraft.block.ITileEntityProvider;
|
||||
|
@ -20,13 +19,14 @@ import net.minecraft.util.AxisAlignedBB;
|
|||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fluids.IFluidBlock;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityRift;
|
||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||
import StevenDimDoors.mod_pocketDimClient.ClosingRiftFX;
|
||||
import StevenDimDoors.mod_pocketDimClient.GoggleRiftFX;
|
||||
import StevenDimDoors.mod_pocketDimClient.RiftFX;
|
||||
|
@ -38,7 +38,7 @@ public class BlockRift extends Block implements ITileEntityProvider
|
|||
{
|
||||
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 RIFT_SPREAD_RANGE = 5;
|
||||
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;
|
||||
|
@ -164,11 +164,30 @@ public class BlockRift extends Block implements ITileEntityProvider
|
|||
|
||||
private void destroyNearbyBlocks(World world, int x, int y, int z, Random random)
|
||||
{
|
||||
HashMap<Point3D, Integer> pointDistances = new HashMap<Point3D, Integer>(BLOCK_DESTRUCTION_VOLUME);
|
||||
Queue<Point3D> points = new LinkedList<Point3D>();
|
||||
// Find reachable blocks that are vulnerable to rift damage (ignoring air, of course)
|
||||
ArrayList<Point3D> targets = findReachableBlocks(world, x, y, z, BLOCK_DESTRUCTION_RANGE, false);
|
||||
|
||||
//Perform a breadth-first search outwards from the point at which the rift is located. Record the distances
|
||||
//of the points we visit to stop the search at its maximum range.
|
||||
// For each block, randomly decide whether to destroy it.
|
||||
// The randomness makes it so the destroyed area appears "noisy" if the rift is exposed to a large surface.
|
||||
for (Point3D target : targets)
|
||||
{
|
||||
if (random.nextInt(MAX_BLOCK_DESTRUCTION_CHANCE) < BLOCK_DESTRUCTION_CHANCE)
|
||||
{
|
||||
spawnWorldThread(world.getBlockId(target.getX(), target.getY(), target.getZ()), world, x, y, z, random);
|
||||
world.destroyBlock(target.getX(), target.getY(), target.getZ(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<Point3D> findReachableBlocks(World world, int x, int y, int z, int range, boolean includeAir)
|
||||
{
|
||||
int searchVolume = (int) Math.pow(2 * range + 1, 3);
|
||||
HashMap<Point3D, Integer> pointDistances = new HashMap<Point3D, Integer>(searchVolume);
|
||||
Queue<Point3D> points = new LinkedList<Point3D>();
|
||||
ArrayList<Point3D> targets = new ArrayList<Point3D>();
|
||||
|
||||
// Perform a breadth-first search outwards from the point at which the rift is located.
|
||||
// Record the distances of the points we visit to stop the search at its maximum range.
|
||||
pointDistances.put(new Point3D(x, y, z), 0);
|
||||
addAdjacentBlocks(x, y, z, 0, pointDistances, points);
|
||||
while (!points.isEmpty())
|
||||
|
@ -176,9 +195,13 @@ public class BlockRift extends Block implements ITileEntityProvider
|
|||
Point3D current = points.remove();
|
||||
int distance = pointDistances.get(current);
|
||||
|
||||
//If the current block is air, continue searching. Otherwise, try destroying the block.
|
||||
// If the current block is air, continue searching. Otherwise, add the block to our list.
|
||||
if (world.isAirBlock(current.getX(), current.getY(), current.getZ()))
|
||||
{
|
||||
if (includeAir)
|
||||
{
|
||||
targets.add(current);
|
||||
}
|
||||
// Make sure we stay within the search range
|
||||
if (distance < BLOCK_DESTRUCTION_RANGE)
|
||||
{
|
||||
|
@ -187,16 +210,14 @@ public class BlockRift extends Block implements ITileEntityProvider
|
|||
}
|
||||
else
|
||||
{
|
||||
//Check if the current block is immune to destruction by rifts. If not, randomly decide whether to destroy it.
|
||||
//The randomness makes it so the destroyed area appears "noisy" if the rift is exposed to a large surface.
|
||||
if (!isBlockImmune(world, current.getX(), current.getY(), current.getZ()) &&
|
||||
random.nextInt(MAX_BLOCK_DESTRUCTION_CHANCE) < BLOCK_DESTRUCTION_CHANCE)
|
||||
// Check if the current block is immune to destruction by rifts. If not, add it to our list.
|
||||
if (!isBlockImmune(world, current.getX(), current.getY(), current.getZ()))
|
||||
{
|
||||
this.spawnWorldThread(world.getBlockId(current.getX(), current.getY(), current.getZ()), world, x, y, z, random);
|
||||
world.destroyBlock(current.getX(), current.getY(), current.getZ(), false);
|
||||
targets.add(current);
|
||||
}
|
||||
}
|
||||
}
|
||||
return targets;
|
||||
}
|
||||
|
||||
private void spawnWorldThread(int blockID, World world, int x, int y, int z, Random random)
|
||||
|
@ -236,11 +257,40 @@ public class BlockRift extends Block implements ITileEntityProvider
|
|||
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);
|
||||
if (world.setBlock(x, y, z, properties.RiftBlockID))
|
||||
spawnWorldThread(blockID, world, x, y, z, random);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean spreadRift(NewDimData dimension, DimLink parent, World world, Random random)
|
||||
{
|
||||
int x, y, z, blockID;
|
||||
Point4D source = parent.source();
|
||||
|
||||
// Find reachable blocks that are vulnerable to rift damage and include air
|
||||
ArrayList<Point3D> targets = findReachableBlocks(world, source.getX(), source.getY(), source.getZ(),
|
||||
RIFT_SPREAD_RANGE, true);
|
||||
|
||||
if (!targets.isEmpty())
|
||||
{
|
||||
// Choose randomly from among the possible locations where we can spawn a new rift
|
||||
Point3D target = targets.get( random.nextInt(targets.size()) );
|
||||
x = target.getX();
|
||||
y = target.getY();
|
||||
z = target.getZ();
|
||||
|
||||
// Create a child, replace the block with a rift, and consider dropping World Thread
|
||||
blockID = world.getBlockId(x, y, z);
|
||||
if (world.setBlock(x, y, z, properties.RiftBlockID))
|
||||
{
|
||||
dimension.createChildLink(x, y, z, parent);
|
||||
spawnWorldThread(blockID, world, x, y, z, random);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lets pistons push through rifts, destroying them
|
||||
*/
|
||||
|
|
|
@ -3,7 +3,7 @@ package StevenDimDoors.mod_pocketDim.blocks;
|
|||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
|
|
|
@ -6,7 +6,7 @@ import net.minecraft.entity.EntityLivingBase;
|
|||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
|
|
|
@ -3,7 +3,7 @@ package StevenDimDoors.mod_pocketDim.blocks;
|
|||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
|
|
|
@ -3,7 +3,7 @@ package StevenDimDoors.mod_pocketDim.blocks;
|
|||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
|
|
|
@ -21,7 +21,7 @@ public class CommandCreateDungeonRift extends DDCommandBase
|
|||
|
||||
private CommandCreateDungeonRift()
|
||||
{
|
||||
super("dd-rift", "<dungeon name | 'list' | 'random'>");
|
||||
super("dd-rift", "<dungeon name>");
|
||||
}
|
||||
|
||||
public static CommandCreateDungeonRift instance()
|
||||
|
@ -51,17 +51,6 @@ public class CommandCreateDungeonRift extends DDCommandBase
|
|||
return DDCommandResult.TOO_MANY_ARGUMENTS;
|
||||
}
|
||||
|
||||
if (command[0].equals("list"))
|
||||
{
|
||||
Collection<String> dungeonNames = dungeonHelper.getDungeonNames();
|
||||
for (String name : dungeonNames)
|
||||
{
|
||||
sendChat(sender, name);
|
||||
}
|
||||
sendChat(sender, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
DimLink link;
|
||||
DungeonData result;
|
||||
int x = MathHelper.floor_double(sender.posX);
|
||||
|
@ -69,16 +58,6 @@ public class CommandCreateDungeonRift extends DDCommandBase
|
|||
int z = MathHelper.floor_double (sender.posZ);
|
||||
int orientation = MathHelper.floor_double((sender.rotationYaw + 180.0F) * 4.0F / 360.0F - 0.5D) & 3;
|
||||
|
||||
if (command[0].equals("random"))
|
||||
{
|
||||
|
||||
dimension = PocketManager.getDimensionData(sender.worldObj);
|
||||
link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation);
|
||||
sender.worldObj.setBlock(x, y + 1, z,mod_pocketDim.blockRift.blockID, 0, 3);
|
||||
sendChat(sender, "Created a rift to a random dungeon.");
|
||||
}
|
||||
else
|
||||
{
|
||||
result = findDungeonByPartialName(command[0], dungeonHelper.getRegisteredDungeons());
|
||||
if (result == null)
|
||||
{
|
||||
|
@ -97,14 +76,12 @@ public class CommandCreateDungeonRift extends DDCommandBase
|
|||
else
|
||||
{
|
||||
//No matches!
|
||||
return new DDCommandResult("Error: The specified dungeon was not found. Use 'list' to see a list of the available dungeons.");
|
||||
}
|
||||
}
|
||||
return new DDCommandResult("Error: The specified dungeon was not found. Use 'dd-list' to see a list of the available dungeons.");
|
||||
}
|
||||
return DDCommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
private DungeonData findDungeonByPartialName(String query, Collection<DungeonData> dungeons)
|
||||
private static DungeonData findDungeonByPartialName(String query, Collection<DungeonData> dungeons)
|
||||
{
|
||||
//Search for the shortest dungeon name that contains the lowercase query string.
|
||||
String dungeonName;
|
||||
|
|
|
@ -0,0 +1,117 @@
|
|||
package StevenDimDoors.mod_pocketDim.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.dungeon.DungeonData;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||
import StevenDimDoors.mod_pocketDim.world.PocketBuilder;
|
||||
|
||||
public class CommandCreateRandomRift extends DDCommandBase
|
||||
{
|
||||
private static CommandCreateRandomRift instance = null;
|
||||
private static Random random = new Random();
|
||||
|
||||
private CommandCreateRandomRift()
|
||||
{
|
||||
super("dd-random", "<dungeon name>");
|
||||
}
|
||||
|
||||
public static CommandCreateRandomRift instance()
|
||||
{
|
||||
if (instance == null)
|
||||
instance = new CommandCreateRandomRift();
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DDCommandResult processCommand(EntityPlayer sender, String[] command)
|
||||
{
|
||||
NewDimData dimension;
|
||||
DungeonHelper dungeonHelper = DungeonHelper.instance();
|
||||
|
||||
if (sender.worldObj.isRemote)
|
||||
{
|
||||
return DDCommandResult.SUCCESS;
|
||||
}
|
||||
if (command.length > 1)
|
||||
{
|
||||
return DDCommandResult.TOO_MANY_ARGUMENTS;
|
||||
}
|
||||
|
||||
DimLink link;
|
||||
DungeonData result;
|
||||
int x = MathHelper.floor_double(sender.posX);
|
||||
int y = MathHelper.floor_double(sender.posY);
|
||||
int z = MathHelper.floor_double (sender.posZ);
|
||||
int orientation = MathHelper.floor_double((sender.rotationYaw + 180.0F) * 4.0F / 360.0F - 0.5D) & 3;
|
||||
|
||||
if (command.length == 0)
|
||||
{
|
||||
dimension = PocketManager.getDimensionData(sender.worldObj);
|
||||
link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation);
|
||||
sender.worldObj.setBlock(x, y + 1, z,mod_pocketDim.blockRift.blockID, 0, 3);
|
||||
sendChat(sender, "Created a rift to a random dungeon.");
|
||||
}
|
||||
else
|
||||
{
|
||||
result = getRandomDungeonByPartialName(command[0], dungeonHelper.getRegisteredDungeons());
|
||||
if (result == null)
|
||||
{
|
||||
result = getRandomDungeonByPartialName(command[0], dungeonHelper.getUntaggedDungeons());
|
||||
}
|
||||
//Check if we found any matches
|
||||
if (result != null)
|
||||
{
|
||||
//Create a rift to our selected dungeon and notify the player
|
||||
dimension = PocketManager.getDimensionData(sender.worldObj);
|
||||
link = dimension.createLink(x, y + 1, z, LinkTypes.DUNGEON, orientation);
|
||||
PocketBuilder.generateSelectedDungeonPocket(link, mod_pocketDim.properties, result);
|
||||
sender.worldObj.setBlock(x, y + 1, z, mod_pocketDim.blockRift.blockID, 0, 3);
|
||||
sendChat(sender, "Created a rift to \"" + result.schematicName() + "\" dungeon (Dimension ID = " + link.destination().getDimension() + ").");
|
||||
}
|
||||
else
|
||||
{
|
||||
//No matches!
|
||||
return new DDCommandResult("Error: The specified dungeon was not found. Use 'list' to see a list of the available dungeons.");
|
||||
}
|
||||
}
|
||||
return DDCommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
private static DungeonData getRandomDungeonByPartialName(String query, Collection<DungeonData> dungeons)
|
||||
{
|
||||
// Search for all dungeons that contain the lowercase query string.
|
||||
String dungeonName;
|
||||
String normalQuery = query.toLowerCase();
|
||||
ArrayList<DungeonData> matches = new ArrayList<DungeonData>();
|
||||
|
||||
for (DungeonData dungeon : dungeons)
|
||||
{
|
||||
// We need to extract the file's name. Comparing against schematicPath could
|
||||
// yield false matches if the query string is contained within the path.
|
||||
dungeonName = dungeon.schematicName().toLowerCase();
|
||||
if (dungeonName.contains(normalQuery))
|
||||
{
|
||||
matches.add(dungeon);
|
||||
}
|
||||
}
|
||||
if (matches.isEmpty())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return matches.get( random.nextInt(matches.size()) );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@ import java.io.File;
|
|||
|
||||
import net.minecraft.command.ICommandSender;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||
|
||||
public class CommandExportDungeon extends DDCommandBase
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
package StevenDimDoors.mod_pocketDim.commands;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||
|
||||
public class CommandListDungeons extends DDCommandBase
|
||||
{
|
||||
private static CommandListDungeons instance = null;
|
||||
|
||||
private CommandListDungeons()
|
||||
{
|
||||
super("dd-list", "<page>");
|
||||
}
|
||||
|
||||
public static CommandListDungeons instance()
|
||||
{
|
||||
if (instance == null)
|
||||
instance = new CommandListDungeons();
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DDCommandResult processCommand(EntityPlayer sender, String[] command)
|
||||
{
|
||||
int page;
|
||||
int index;
|
||||
int limit;
|
||||
int pageCount;
|
||||
ArrayList<String> dungeonNames;
|
||||
|
||||
if (sender.worldObj.isRemote)
|
||||
{
|
||||
return DDCommandResult.SUCCESS;
|
||||
}
|
||||
if (command.length > 1)
|
||||
{
|
||||
return DDCommandResult.TOO_MANY_ARGUMENTS;
|
||||
}
|
||||
if (command.length == 0)
|
||||
{
|
||||
page = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
page = Integer.parseInt(command[0]);
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
return DDCommandResult.INVALID_ARGUMENTS;
|
||||
}
|
||||
}
|
||||
dungeonNames = DungeonHelper.instance().getDungeonNames();
|
||||
pageCount = (dungeonNames.size() - 1) / 10 + 1;
|
||||
if (page < 1 || page > pageCount)
|
||||
{
|
||||
return DDCommandResult.INVALID_ARGUMENTS;
|
||||
}
|
||||
sendChat(sender, "List of dungeons (page " + page + " of " + pageCount + "):");
|
||||
index = (page - 1) * 10;
|
||||
limit = Math.min(index + 10, dungeonNames.size());
|
||||
for (; index < limit; index++)
|
||||
{
|
||||
sendChat(sender, dungeonNames.get(index));
|
||||
}
|
||||
sendChat(sender, "");
|
||||
|
||||
return DDCommandResult.SUCCESS;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package StevenDimDoors.mod_pocketDim;
|
||||
package StevenDimDoors.mod_pocketDim.config;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
@ -87,7 +87,6 @@ public class DDProperties
|
|||
* Other Flags
|
||||
*/
|
||||
|
||||
public final boolean WorldRiftGenerationEnabled;
|
||||
public final boolean RiftSpreadEnabled;
|
||||
public final boolean RiftGriefingEnabled;
|
||||
public final boolean RiftsSpawnEndermenEnabled;
|
||||
|
@ -109,6 +108,7 @@ public class DDProperties
|
|||
public final int FortressGatewayGenerationChance;
|
||||
public final int MonolithSpawningChance;
|
||||
public final int LimboReturnRange;
|
||||
public final int WorldThreadRequirementLevel;
|
||||
public final String CustomSchematicDirectory;
|
||||
|
||||
|
||||
|
@ -145,6 +145,10 @@ public class DDProperties
|
|||
CraftingGoldenDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Golden Door", true).getBoolean(true);
|
||||
CraftingGoldenDimensionalDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Golden Dimensional Door", true).getBoolean(true);
|
||||
|
||||
WorldThreadRequirementLevel = config.get(CATEGORY_CRAFTING, "World Thread Requirement Level", 4,
|
||||
"Controls the amount of World Thread needed to craft Stable Fabric. The number must be an " +
|
||||
"integer from 1 to 4. The levels change the recipe to use 1, 2, 4, or 8 threads, respectively. The default level is 4.").getInt();
|
||||
|
||||
RiftBladeLootEnabled = config.get(CATEGORY_LOOT, "Enable Rift Blade Loot", true).getBoolean(true);
|
||||
FabricOfRealityLootEnabled = config.get(CATEGORY_LOOT, "Enable Fabric of Reality Loot", true).getBoolean(true);
|
||||
WorldThreadLootEnabled = config.get(CATEGORY_LOOT, "Enable World Thread Loot", true).getBoolean(true);
|
||||
|
@ -157,7 +161,7 @@ public class DDProperties
|
|||
"Sets whether groups of connected rifts will spawn Endermen").getBoolean(true);
|
||||
|
||||
LimboEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Limbo", true,
|
||||
"Sets whether the Limbo dimension is activated").getBoolean(true);
|
||||
"Sets whether players are teleported to Limbo when they die in any pocket dimension").getBoolean(true);
|
||||
LimboReturnsInventoryEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Limbo Returns Inventory", true,
|
||||
"Sets whether players keep their inventories upon dying and respawning in Limbo").getBoolean(true);
|
||||
HardcoreLimboEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Hardcore Limbo", false,
|
||||
|
@ -205,9 +209,6 @@ public class DDProperties
|
|||
PocketProviderID = config.get(CATEGORY_PROVIDER, "Pocket Provider ID", 24).getInt();
|
||||
LimboProviderID = config.get(CATEGORY_PROVIDER, "Limbo Provider ID", 13).getInt();
|
||||
|
||||
WorldRiftGenerationEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Rift World Generation", true,
|
||||
"Sets whether dungeon rifts generate in dimensions other than Limbo").getBoolean(true);
|
||||
|
||||
MonolithTeleportationEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Monolith Teleportation", true,
|
||||
"Sets whether Monoliths can teleport players").getBoolean(true);
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
package StevenDimDoors.mod_pocketDim.config;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import net.minecraftforge.common.Configuration;
|
||||
|
||||
public class DDWorldProperties
|
||||
{
|
||||
/**
|
||||
* World Generation Settings
|
||||
*/
|
||||
|
||||
public final DimensionFilter RiftClusterDimensions;
|
||||
public final DimensionFilter RiftGatewayDimensions;
|
||||
|
||||
/**
|
||||
* General Flags
|
||||
*/
|
||||
public final boolean LimboEscapeEnabled;
|
||||
|
||||
|
||||
//Names of categories
|
||||
private static final String CATEGORY_WORLD_GENERATION = "world generation";
|
||||
|
||||
public DDWorldProperties(File configFile)
|
||||
{
|
||||
// TODO: For the next major update (e.g. to MC 1.7), please move all world-specific settings
|
||||
// into this config file instead of using the global ID file.
|
||||
|
||||
Configuration config = new Configuration(configFile);
|
||||
config.load();
|
||||
|
||||
config.addCustomCategoryComment(CATEGORY_WORLD_GENERATION,
|
||||
"The following settings require lists of dimensions in a specific format. " +
|
||||
"A list must consist of ranges separated by commas. A range may be a single number to indicate " +
|
||||
"just one dimension or two numbers in the form \"X - Y\". Spaces are permitted " +
|
||||
"but not required. Example: -100, -10 - -1, 20 - 30");
|
||||
|
||||
RiftClusterDimensions = loadFilter(config, "Rift Cluster", "Rift Clusters");
|
||||
RiftGatewayDimensions = loadFilter(config, "Rift Gateway", "Rift Gateways");
|
||||
|
||||
LimboEscapeEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Limbo Escape", true,
|
||||
"Sets whether players are teleported out of Limbo when walking over the Eternal Fabric that " +
|
||||
"generates near the bottom of the dimension. If disabled, players could still leave through " +
|
||||
"dungeons in Limbo or by dying (if Hardcore Limbo is disabled). The default value is true.").getBoolean(true);
|
||||
|
||||
config.save();
|
||||
}
|
||||
|
||||
private static DimensionFilter loadFilter(Configuration config, String prefix, String description)
|
||||
{
|
||||
boolean enableBlacklist = config.get(CATEGORY_WORLD_GENERATION, "Enable " + prefix + " Blacklist", true,
|
||||
"Sets whether " + description + " will not generate in certain blacklisted dimensions. " +
|
||||
"If set to false, then " + description + " will follow a whitelist instead.").getBoolean(true);
|
||||
|
||||
String whitelist = config.get(CATEGORY_WORLD_GENERATION, prefix + " Whitelist", "",
|
||||
"A list of the only dimensions in which " + description + " may generate.").getString();
|
||||
|
||||
String blacklist = config.get(CATEGORY_WORLD_GENERATION, prefix + " Blacklist", "",
|
||||
"A list of dimensions in which " + description + " may not generate.").getString();
|
||||
|
||||
try
|
||||
{
|
||||
if (enableBlacklist)
|
||||
{
|
||||
return DimensionFilter.parseBlacklist(blacklist);
|
||||
}
|
||||
else
|
||||
{
|
||||
return DimensionFilter.parseWhitelist(whitelist);
|
||||
}
|
||||
}
|
||||
catch (Exception inner)
|
||||
{
|
||||
throw new RuntimeException("An error occurred while loading a whitelist or blacklist setting for " +
|
||||
description + ". Please make sure that your configuration file is set up correctly.", inner);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
package StevenDimDoors.mod_pocketDim.config;
|
||||
|
||||
import com.google.common.collect.Range;
|
||||
import com.google.common.collect.RangeSet;
|
||||
import com.google.common.collect.TreeRangeSet;
|
||||
|
||||
public class DimensionFilter
|
||||
{
|
||||
private RangeSet<Integer> blacklist;
|
||||
|
||||
private DimensionFilter(RangeSet<Integer> blacklist)
|
||||
{
|
||||
this.blacklist = blacklist;
|
||||
}
|
||||
|
||||
public boolean isAccepted(int dimensionID)
|
||||
{
|
||||
return !blacklist.contains(dimensionID);
|
||||
}
|
||||
|
||||
public boolean isRejected(int dimensionID)
|
||||
{
|
||||
return blacklist.contains(dimensionID);
|
||||
}
|
||||
|
||||
private static RangeSet<Integer> parseRangeSet(String list)
|
||||
{
|
||||
int index;
|
||||
int start;
|
||||
int end;
|
||||
String startPart;
|
||||
String endPart;
|
||||
String[] intervals;
|
||||
RangeSet<Integer> ranges = TreeRangeSet.create();
|
||||
|
||||
// Strip out all whitespace characters
|
||||
list = list.replaceAll("\\s", "");
|
||||
if (list.isEmpty())
|
||||
{
|
||||
return ranges;
|
||||
}
|
||||
intervals = list.split(",");
|
||||
|
||||
// Iterate over all the interval strings
|
||||
for (String interval : intervals)
|
||||
{
|
||||
// Check if the interval contains a minus sign after the first character
|
||||
// That indicates that we're dealing with an interval and not a single number
|
||||
if (interval.length() > 1)
|
||||
{
|
||||
index = interval.indexOf("-", 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
index = -1;
|
||||
}
|
||||
try
|
||||
{
|
||||
if (index >= 0)
|
||||
{
|
||||
// Parse this as a range with two values as endpoints
|
||||
startPart = interval.substring(0, index);
|
||||
endPart = interval.substring(index + 1);
|
||||
start = Integer.parseInt(startPart);
|
||||
end = Integer.parseInt(endPart);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Parse this as a single value
|
||||
start = Integer.parseInt(interval);
|
||||
end = start;
|
||||
}
|
||||
// Add the interval to the set of intervals
|
||||
ranges.add( Range.closed(start, end) );
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new IllegalArgumentException("\"" + interval + "\" is not a valid value or range for dimension IDs");
|
||||
}
|
||||
}
|
||||
return ranges;
|
||||
}
|
||||
|
||||
public static DimensionFilter parseWhitelist(String list)
|
||||
{
|
||||
return new DimensionFilter(parseRangeSet(list).complement());
|
||||
}
|
||||
|
||||
public static DimensionFilter parseBlacklist(String list)
|
||||
{
|
||||
return new DimensionFilter(parseRangeSet(list));
|
||||
}
|
||||
}
|
|
@ -22,10 +22,10 @@ import net.minecraft.world.WorldServer;
|
|||
import net.minecraftforge.common.DimensionManager;
|
||||
import net.minecraftforge.common.network.ForgePacket;
|
||||
import net.minecraftforge.common.network.packet.DimensionRegisterPacket;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.blocks.BaseDimDoor;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
||||
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor;
|
||||
|
@ -40,9 +40,12 @@ public class DDTeleporter
|
|||
{
|
||||
private static final Random random = new Random();
|
||||
private static final int NETHER_DIMENSION_ID = -1;
|
||||
private static final int OVERWORLD_DIMENSION_ID = 0;
|
||||
private static final int END_DIMENSION_ID = 1;
|
||||
private static final int MAX_NETHER_EXIT_CHANCE = 100;
|
||||
private static final int NETHER_EXIT_CHANCE = 20; //20% chance to compensate for frequent exit failures - the Nether often doesn't have enough space for an exit
|
||||
private static final int MAX_OVERWORLD_EXIT_CHANCE = 100;
|
||||
private static final int OVERWORLD_EXIT_CHANCE = 15;
|
||||
private static final int MAX_ROOT_SHIFT_CHANCE = 100;
|
||||
private static final int START_ROOT_SHIFT_CHANCE = 0;
|
||||
private static final int ROOT_SHIFT_CHANCE_PER_LEVEL = 5;
|
||||
|
@ -633,7 +636,11 @@ public class DDTeleporter
|
|||
|
||||
if (random.nextInt(MAX_ROOT_SHIFT_CHANCE) < shiftChance)
|
||||
{
|
||||
if (random.nextInt(MAX_NETHER_EXIT_CHANCE) < NETHER_EXIT_CHANCE)
|
||||
if (current.root().id() != OVERWORLD_DIMENSION_ID && random.nextInt(MAX_OVERWORLD_EXIT_CHANCE) < OVERWORLD_EXIT_CHANCE)
|
||||
{
|
||||
return generateSafeExit(PocketManager.getDimensionData(OVERWORLD_DIMENSION_ID), link, properties);
|
||||
}
|
||||
if (current.root().id() != NETHER_DIMENSION_ID && random.nextInt(MAX_NETHER_EXIT_CHANCE) < NETHER_EXIT_CHANCE)
|
||||
{
|
||||
return generateSafeExit(PocketManager.getDimensionData(NETHER_DIMENSION_ID), link, properties);
|
||||
}
|
||||
|
|
|
@ -8,14 +8,13 @@ import java.util.TreeMap;
|
|||
|
||||
import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.dungeon.DungeonData;
|
||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||
import StevenDimDoors.mod_pocketDim.watcher.IUpdateWatcher;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public abstract class NewDimData
|
||||
{
|
||||
private static class InnerDimLink extends DimLink
|
||||
|
|
|
@ -15,9 +15,9 @@ import cpw.mods.fml.relauncher.SideOnly;
|
|||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.Compactor;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DeleteFolder;
|
||||
import StevenDimDoors.mod_pocketDim.saving.DDSaveHandler;
|
||||
|
|
|
@ -16,9 +16,9 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntitySign;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
|
|
|
@ -12,7 +12,7 @@ import net.minecraft.tileentity.TileEntityChest;
|
|||
import net.minecraft.tileentity.TileEntityDispenser;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDLoot;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.schematic.WorldOperation;
|
||||
|
||||
public class FillContainersOperation extends WorldOperation
|
||||
|
@ -20,8 +20,8 @@ public class FillContainersOperation extends WorldOperation
|
|||
private Random random;
|
||||
private DDProperties properties;
|
||||
|
||||
private static final int GRAVE_CHEST_CHANCE = 100;
|
||||
private static final int MAX_GRAVE_CHEST_CHANCE = 700;
|
||||
private static final int GRAVE_CHEST_CHANCE = 1;
|
||||
private static final int MAX_GRAVE_CHEST_CHANCE = 6;
|
||||
|
||||
public FillContainersOperation(Random random, DDProperties properties)
|
||||
{
|
||||
|
|
|
@ -19,8 +19,8 @@ import java.util.regex.Pattern;
|
|||
|
||||
import net.minecraft.util.WeightedRandom;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
|
@ -577,8 +577,8 @@ public class DungeonHelper
|
|||
return selection;
|
||||
}
|
||||
|
||||
public Collection<String> getDungeonNames() {
|
||||
|
||||
public ArrayList<String> getDungeonNames()
|
||||
{
|
||||
// Use a HashSet to guarantee that all dungeon names will be distinct.
|
||||
// This shouldn't be necessary if we keep proper lists without repetitions,
|
||||
// but it's a fool-proof workaround.
|
||||
|
|
|
@ -11,8 +11,8 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor;
|
||||
|
|
|
@ -20,8 +20,8 @@ import net.minecraft.util.MathHelper;
|
|||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import com.google.common.collect.Multimap;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
|
@ -36,41 +36,9 @@ public class ItemRiftBlade extends ItemSword
|
|||
super(itemID, EnumToolMaterial.EMERALD);
|
||||
|
||||
this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab);
|
||||
this.setMaxStackSize(1);
|
||||
this.setMaxDamage(500);
|
||||
this.hasSubtypes = false;
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean isFull3D()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
|
||||
{
|
||||
if (par2Block.blockID == Block.web.blockID)
|
||||
{
|
||||
return 15.0F;
|
||||
}
|
||||
else
|
||||
{
|
||||
Material material = par2Block.blockMaterial;
|
||||
return material != Material.plants && material != Material.vine && material != Material.coral && material != Material.leaves && material != Material.pumpkin ? 1.0F : 1.5F;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Multimap getItemAttributeModifiers()
|
||||
{
|
||||
Multimap multimap = super.getItemAttributeModifiers();
|
||||
multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", (double)7, 0));
|
||||
return multimap;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean hasEffect(ItemStack par1ItemStack)
|
||||
|
@ -78,13 +46,6 @@ public class ItemRiftBlade extends ItemSword
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLiving, EntityLivingBase par3EntityLiving)
|
||||
{
|
||||
par1ItemStack.damageItem(1, par3EntityLiving);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3)
|
||||
{
|
||||
|
@ -147,7 +108,7 @@ public class ItemRiftBlade extends ItemSword
|
|||
if (!world.isRemote)
|
||||
{
|
||||
@SuppressWarnings("unchecked")
|
||||
List<EntityLiving> list = world.getEntitiesWithinAABB(EntityLiving.class, AxisAlignedBB.getBoundingBox(player.posX-8,player.posY-8, player.posZ-8, player.posX+8,player.posY+8, player.posZ+8));
|
||||
List<EntityLiving> list = world.getEntitiesWithinAABB(EntityLiving.class, AxisAlignedBB.getBoundingBox(player.posX-10,player.posY-10, player.posZ-10, player.posX+10,player.posY+10, player.posZ+10));
|
||||
list.remove(player);
|
||||
|
||||
for (EntityLiving ent : list)
|
||||
|
@ -223,8 +184,7 @@ public class ItemRiftBlade extends ItemSword
|
|||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
|
||||
{
|
||||
par3List.add("Creates temporary doors");
|
||||
par3List.add("on rifts, rotates doors,");
|
||||
par3List.add("Opens temporary doors on rifts");
|
||||
par3List.add("and has a teleport attack.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@ 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;
|
||||
|
@ -29,11 +28,15 @@ import StevenDimDoors.mod_pocketDim.blocks.UnstableDoor;
|
|||
import StevenDimDoors.mod_pocketDim.blocks.WarpDoor;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandCreateDungeonRift;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandCreatePocket;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandCreateRandomRift;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteAllLinks;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteRifts;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandExportDungeon;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandListDungeons;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandResetDungeons;
|
||||
import StevenDimDoors.mod_pocketDim.commands.CommandTeleportPlayer;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDWorldProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.ChunkLoaderHelper;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||
|
@ -74,8 +77,9 @@ import cpw.mods.fml.common.SidedProxy;
|
|||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLServerAboutToStartEvent;
|
||||
import cpw.mods.fml.common.event.FMLServerStartingEvent;
|
||||
import cpw.mods.fml.common.event.FMLServerStoppingEvent;
|
||||
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
|
||||
import cpw.mods.fml.common.network.NetworkMod;
|
||||
import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
|
||||
import cpw.mods.fml.common.registry.EntityRegistry;
|
||||
|
@ -134,6 +138,7 @@ public class mod_pocketDim
|
|||
public static boolean isPlayerWearingGoogles = false;
|
||||
|
||||
public static DDProperties properties;
|
||||
public static DDWorldProperties worldProperties;
|
||||
public static CustomLimboPopulator spawner; //Added this field temporarily. Will be refactored out later.
|
||||
public static FastRiftRegenerator fastRiftRegenerator;
|
||||
public static GatewayGenerator gatewayGenerator;
|
||||
|
@ -229,8 +234,11 @@ public class mod_pocketDim
|
|||
|
||||
GameRegistry.registerBlock(blockDimWall, ItemBlockDimWall.class, "Fabric of Reality");
|
||||
|
||||
DimensionManager.registerProviderType(properties.PocketProviderID, PocketProvider.class, false);
|
||||
DimensionManager.registerProviderType(properties.LimboProviderID, LimboProvider.class, false);
|
||||
if (!DimensionManager.registerProviderType(properties.PocketProviderID, PocketProvider.class, false))
|
||||
throw new IllegalStateException("There is a provider ID conflict between PocketProvider from Dimensional Doors and another provider type. Fix your configuration!");
|
||||
if (!DimensionManager.registerProviderType(properties.LimboProviderID, LimboProvider.class, false))
|
||||
throw new IllegalStateException("There is a provider ID conflict between LimboProvider from Dimensional Doors and another provider type. Fix your configuration!");
|
||||
|
||||
DimensionManager.registerDimension(properties.LimboDimensionID, properties.LimboProviderID);
|
||||
|
||||
LanguageRegistry.addName(goldenDoor, "Golden Door");
|
||||
|
@ -296,13 +304,14 @@ public class mod_pocketDim
|
|||
}
|
||||
|
||||
@EventHandler
|
||||
public void onServerStopping(FMLServerStoppingEvent event)
|
||||
public void onServerStopped(FMLServerStoppedEvent event)
|
||||
{
|
||||
try
|
||||
{
|
||||
PocketManager.unload();
|
||||
deathTracker.writeToFile();
|
||||
deathTracker = null;
|
||||
worldProperties = null;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -310,14 +319,26 @@ public class mod_pocketDim
|
|||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onServerAboutToStart(FMLServerAboutToStartEvent event)
|
||||
{
|
||||
final String saveRootDirectory = DimensionManager.getCurrentSaveRootDirectory().getAbsolutePath();
|
||||
|
||||
// Load the config file that's specific to this world
|
||||
worldProperties = new DDWorldProperties(new File(saveRootDirectory + "/DimensionalDoors/DimDoorsWorld.cfg"));
|
||||
|
||||
// Initialize a new DeathTracker
|
||||
deathTracker = new DeathTracker(saveRootDirectory + "/DimensionalDoors/data/deaths.txt");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onServerStarting(FMLServerStartingEvent event)
|
||||
{
|
||||
//TODO- load dims with forced chunks on server startup here
|
||||
|
||||
// Register commands with the server
|
||||
event.registerServerCommand( CommandResetDungeons.instance() );
|
||||
event.registerServerCommand( CommandCreateDungeonRift.instance() );
|
||||
event.registerServerCommand( CommandListDungeons.instance() );
|
||||
event.registerServerCommand( CommandCreateRandomRift.instance() );
|
||||
event.registerServerCommand( CommandDeleteAllLinks.instance() );
|
||||
//CommandDeleteDimensionData.instance().register(event);
|
||||
event.registerServerCommand( CommandDeleteRifts.instance() );
|
||||
|
@ -327,9 +348,6 @@ public class mod_pocketDim
|
|||
event.registerServerCommand( CommandCreatePocket.instance() );
|
||||
event.registerServerCommand( CommandTeleportPlayer.instance() );
|
||||
|
||||
// Initialize a new DeathTracker
|
||||
String deathTrackerFile = DimensionManager.getCurrentSaveRootDirectory() + "/DimensionalDoors/data/deaths.txt";
|
||||
deathTracker = new DeathTracker(deathTrackerFile);
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -337,7 +355,8 @@ public class mod_pocketDim
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println("Loading chunkloaders failed");
|
||||
System.err.println("Failed to load chunk loaders for Dimensional Doors. The following error occurred:");
|
||||
System.err.println(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ import net.minecraft.server.MinecraftServer;
|
|||
import net.minecraft.world.GameRules;
|
||||
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.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
||||
|
|
|
@ -7,7 +7,7 @@ import net.minecraft.block.BlockContainer;
|
|||
import net.minecraft.world.ChunkCoordIntPair;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
|
||||
/**
|
||||
* Provides methods for applying Limbo decay. Limbo decay refers to the effect that most blocks placed in Limbo
|
||||
|
|
|
@ -18,8 +18,8 @@ import net.minecraft.util.DamageSource;
|
|||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.ForgeHooks;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
||||
|
|
|
@ -25,9 +25,9 @@ import net.minecraft.util.MathHelper;
|
|||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.ServerPacketHandler;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
|
@ -35,13 +35,15 @@ import StevenDimDoors.mod_pocketDim.util.Point4D;
|
|||
|
||||
public class TileEntityRift extends TileEntity
|
||||
{
|
||||
private static final int MAX_SPREAD_ATTEMPTS = 3;
|
||||
private static final int MAX_SEARCH_ATTEMPTS = 50;
|
||||
private static final int MAX_ANCESTOR_LINKS = 3;
|
||||
private static final int RIFT_INTERACTION_RANGE = 5;
|
||||
private static final int MAX_ANCESTOR_LINKS = 2;
|
||||
private static final int MAX_CHILD_LINKS = 1;
|
||||
private static final int ENDERMAN_SPAWNING_CHANCE = 1;
|
||||
private static final int MAX_ENDERMAN_SPAWNING_CHANCE = 32;
|
||||
private static final int RIFT_SPREAD_CHANCE = 1;
|
||||
private static final int MAX_RIFT_SPREAD_CHANCE = 256;
|
||||
private static final int HOSTILE_ENDERMAN_CHANCE = 1;
|
||||
private static final int MAX_HOSTILE_ENDERMAN_CHANCE = 3;
|
||||
|
||||
private static Random random = new Random();
|
||||
|
||||
|
@ -53,7 +55,6 @@ public class TileEntityRift extends TileEntity
|
|||
public int zOffset = 0;
|
||||
public boolean shouldClose = false;
|
||||
private boolean hasUpdated = false;
|
||||
private boolean hasGrownRifts = false;
|
||||
|
||||
public DimLink nearestRiftData;
|
||||
public int spawnedEndermenID = 0;
|
||||
|
@ -109,8 +110,6 @@ public class TileEntityRift extends TileEntity
|
|||
this.calculateOldParticleOffset(); //this also calculates the distance for the particle stuff.
|
||||
}
|
||||
updateTimer++;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -171,7 +170,7 @@ public class TileEntityRift extends TileEntity
|
|||
enderman.setLocationAndAngles(xCoord + 0.5, yCoord - 1, zCoord + 0.5, 5, 6);
|
||||
worldObj.spawnEntityInWorld(enderman);
|
||||
|
||||
if(this.worldObj.rand.nextInt(3)==0)
|
||||
if (random.nextInt(MAX_HOSTILE_ENDERMAN_CHANCE) < HOSTILE_ENDERMAN_CHANCE)
|
||||
{
|
||||
EntityPlayer player = this.worldObj.getClosestPlayerToEntity(enderman, 50);
|
||||
if (player != null)
|
||||
|
@ -320,7 +319,7 @@ public class TileEntityRift extends TileEntity
|
|||
|
||||
public void grow(DDProperties properties)
|
||||
{
|
||||
if (worldObj.isRemote || hasGrownRifts || !properties.RiftSpreadEnabled
|
||||
if (worldObj.isRemote || !properties.RiftSpreadEnabled
|
||||
|| random.nextInt(MAX_RIFT_SPREAD_CHANCE) < RIFT_SPREAD_CHANCE || this.shouldClose)
|
||||
{
|
||||
return;
|
||||
|
@ -329,58 +328,20 @@ public class TileEntityRift extends TileEntity
|
|||
NewDimData dimension = PocketManager.getDimensionData(worldObj);
|
||||
DimLink link = dimension.getLink(xCoord, yCoord, zCoord);
|
||||
|
||||
if (countAncestorLinks(link) > MAX_ANCESTOR_LINKS)
|
||||
if (link.childCount() >= MAX_CHILD_LINKS || countAncestorLinks(link) >= MAX_ANCESTOR_LINKS)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// The probability of rifts trying to spread increases if more rifts are nearby
|
||||
// Players should see rifts spread faster within clusters than at the edges of clusters
|
||||
// The probability of rifts trying to spread increases if more rifts are nearby.
|
||||
// Players should see rifts spread faster within clusters than at the edges of clusters.
|
||||
// Also, single rifts CANNOT spread.
|
||||
int nearRifts = dimension.findRiftsInRange(this.worldObj, 5, xCoord, yCoord, zCoord).size();
|
||||
int nearRifts = dimension.findRiftsInRange(worldObj, RIFT_INTERACTION_RANGE, xCoord, yCoord, zCoord).size();
|
||||
if (nearRifts == 0 || random.nextInt(nearRifts) == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int x, y, z;
|
||||
int spreadAttempts = 0;
|
||||
for (int searchAttempts = 0; searchAttempts < MAX_SEARCH_ATTEMPTS; searchAttempts++)
|
||||
{
|
||||
x = xCoord + MathHelper.getRandomIntegerInRange(random, -6, 6);
|
||||
y = yCoord + MathHelper.getRandomIntegerInRange(random, -4, 4);
|
||||
z = zCoord + MathHelper.getRandomIntegerInRange(random, -6, 6);
|
||||
|
||||
if (y >= 0 && y < worldObj.getActualHeight() && worldObj.isAirBlock(x, y, z))
|
||||
{
|
||||
Vec3 position = worldObj.getWorldVec3Pool().getVecFromPool(xCoord, yCoord, zCoord);
|
||||
Vec3 spreadTarget = worldObj.getWorldVec3Pool().getVecFromPool(x, y, z);
|
||||
MovingObjectPosition hit = worldObj.clip(position, spreadTarget, false);
|
||||
if (hit == null || !mod_pocketDim.blockRift.isBlockImmune(worldObj, hit.blockX, hit.blockY, hit.blockZ))
|
||||
{
|
||||
if(hit!=null)
|
||||
{
|
||||
dimension.createChildLink(hit.blockX, hit.blockY, hit.blockZ, link);
|
||||
this.worldObj.setBlock(hit.blockX, hit.blockY, hit.blockZ, mod_pocketDim.blockRift.blockID);
|
||||
}
|
||||
else
|
||||
{
|
||||
dimension.createChildLink(x,y,z,link);
|
||||
this.worldObj.setBlock(x,y,z, mod_pocketDim.blockRift.blockID);
|
||||
}
|
||||
hasGrownRifts = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
spreadAttempts++;
|
||||
if (spreadAttempts >= MAX_SPREAD_ATTEMPTS)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mod_pocketDim.blockRift.spreadRift(dimension, link, worldObj, random);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -393,7 +354,6 @@ public class TileEntityRift extends TileEntity
|
|||
this.xOffset = nbt.getInteger("xOffset");
|
||||
this.yOffset = nbt.getInteger("yOffset");
|
||||
this.zOffset = nbt.getInteger("zOffset");
|
||||
this.hasGrownRifts = nbt.getBoolean("grownRifts");
|
||||
this.age = nbt.getInteger("age");
|
||||
this.shouldClose = nbt.getBoolean("shouldClose");
|
||||
this.spawnedEndermenID = nbt.getInteger("spawnedEndermenID");
|
||||
|
@ -406,7 +366,6 @@ public class TileEntityRift extends TileEntity
|
|||
nbt.setInteger("age", this.age);
|
||||
nbt.setInteger("count", this.updateTimer);
|
||||
nbt.setInteger("count2", this.riftCloseTimer);
|
||||
nbt.setBoolean("grownRifts",this.hasGrownRifts);
|
||||
nbt.setInteger("xOffset", this.xOffset);
|
||||
nbt.setInteger("yOffset", this.yOffset);
|
||||
nbt.setInteger("zOffset", this.zOffset);
|
||||
|
|
|
@ -6,7 +6,7 @@ import net.minecraft.block.Block;
|
|||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.gen.MapGenBase;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
|
||||
public class CustomCaveGen extends MapGenBase
|
||||
{
|
||||
|
|
|
@ -17,7 +17,7 @@ import net.minecraft.world.gen.feature.MapGenScatteredFeature;
|
|||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.Event.Result;
|
||||
import net.minecraftforge.event.terraingen.ChunkProviderEvent;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
||||
|
||||
public class LimboGenerator extends ChunkProviderGenerate
|
||||
|
|
|
@ -12,8 +12,8 @@ import net.minecraft.world.biome.WorldChunkManagerHell;
|
|||
import net.minecraft.world.chunk.IChunkProvider;
|
||||
import net.minecraftforge.client.IRenderHandler;
|
||||
import StevenDimDoors.mod_pocketDim.CloudRenderBlank;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
|
|
@ -9,9 +9,9 @@ import net.minecraft.world.chunk.Chunk;
|
|||
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
import StevenDimDoors.experimental.MazeBuilder;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
|
|
|
@ -9,8 +9,8 @@ import net.minecraft.world.chunk.IChunkProvider;
|
|||
import net.minecraftforge.client.IRenderHandler;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
import StevenDimDoors.mod_pocketDim.CloudRenderBlank;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package StevenDimDoors.mod_pocketDim.world.fortresses;
|
||||
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import net.minecraft.world.gen.structure.MapGenNetherBridge;
|
||||
import net.minecraft.world.gen.structure.MapGenStructureIO;
|
||||
import net.minecraft.world.gen.structure.StructureStart;
|
||||
|
|
|
@ -10,7 +10,7 @@ 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;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
|
||||
public class DDStructureNetherBridgeStart extends StructureNetherBridgeStart
|
||||
{
|
||||
|
|
|
@ -6,9 +6,9 @@ import java.util.Random;
|
|||
import java.util.TreeMap;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
|
|
|
@ -8,8 +8,8 @@ import net.minecraft.block.material.Material;
|
|||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.IChunkProvider;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
|
@ -58,11 +58,13 @@ public class GatewayGenerator implements IWorldGenerator
|
|||
@Override
|
||||
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
|
||||
{
|
||||
//Don't generate rifts or gateways if the rift generation flag is disabled,
|
||||
//the current world is a pocket dimension, or the world is remote.
|
||||
//Also don't generate anything in The End.
|
||||
if (world.isRemote || (!properties.WorldRiftGenerationEnabled) ||
|
||||
(world.provider instanceof PocketProvider) || (world.provider.dimensionId == END_DIMENSION_ID)||(world.provider.dimensionId == NETHER_DIMENSION_ID))
|
||||
// Don't generate rifts or gateways if the current world is a pocket dimension or the world is remote.
|
||||
// Also don't generate anything in the Nether or The End.
|
||||
int dimensionID = world.provider.dimensionId;
|
||||
if (world.isRemote
|
||||
|| (world.provider instanceof PocketProvider)
|
||||
|| (dimensionID == END_DIMENSION_ID)
|
||||
|| (dimensionID == NETHER_DIMENSION_ID))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -78,8 +80,10 @@ public class GatewayGenerator implements IWorldGenerator
|
|||
DimLink link;
|
||||
NewDimData dimension;
|
||||
|
||||
//Randomly decide whether to place a cluster of rifts here
|
||||
if (random.nextInt(MAX_CLUSTER_GENERATION_CHANCE) < properties.ClusterGenerationChance)
|
||||
// Check if we're allowed to generate rift clusters in this dimension.
|
||||
// If so, randomly decide whether to one.
|
||||
if (mod_pocketDim.worldProperties.RiftClusterDimensions.isAccepted(dimensionID)
|
||||
&& random.nextInt(MAX_CLUSTER_GENERATION_CHANCE) < properties.ClusterGenerationChance)
|
||||
{
|
||||
link = null;
|
||||
dimension = null;
|
||||
|
@ -113,9 +117,10 @@ public class GatewayGenerator implements IWorldGenerator
|
|||
while (random.nextInt(MAX_CLUSTER_GROWTH_CHANCE) < CLUSTER_GROWTH_CHANCE);
|
||||
}
|
||||
|
||||
// Randomly decide whether to place a Rift Gateway here.
|
||||
// Check if we can place a Rift Gateway in this dimension, then randomly decide whether to place one.
|
||||
// This only happens if a rift cluster was NOT generated.
|
||||
else if (random.nextInt(MAX_GATEWAY_GENERATION_CHANCE) < properties.GatewayGenerationChance)
|
||||
else if (mod_pocketDim.worldProperties.RiftGatewayDimensions.isAccepted(dimensionID) &&
|
||||
random.nextInt(MAX_GATEWAY_GENERATION_CHANCE) < properties.GatewayGenerationChance)
|
||||
{
|
||||
valid = false;
|
||||
x = y = z = 0; //Stop the compiler from freaking out
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package StevenDimDoors.mod_pocketDim.world.gateways;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
||||
|
|
|
@ -3,8 +3,8 @@ 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.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||
import net.minecraft.block.Block;
|
||||
|
|
|
@ -2,8 +2,8 @@ package StevenDimDoors.mod_pocketDim.world.gateways;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
||||
|
|
|
@ -11,8 +11,8 @@ import net.minecraft.util.ResourceLocation;
|
|||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
|
|
|
@ -11,9 +11,9 @@ import net.minecraft.util.ResourceLocation;
|
|||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.blocks.TransTrapdoor;
|
||||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityTransTrapdoor;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/schematics/ruins/complexHall_buggyTopEntry1_open_100.schematic
|
||||
/schematics/ruins/ComplexHall_Cere-PuzzleWall_Open_75.schematic
|
||||
/schematics/ruins/complexHall_exitRuinsWithHiddenDoor_open_100.schematic
|
||||
/schematics/ruins/complexHall_hallwayHiddenTreasure_closed_100.schematic
|
||||
/schematics/ruins/complexHall_largeBrokenHall_closed_100.schematic
|
||||
|
@ -15,6 +16,7 @@
|
|||
/schematics/ruins/complexHall_tntPuzzleTrap_closed_50.schematic
|
||||
/schematics/ruins/deadEnd_azersDungeonO_closed_100.schematic
|
||||
/schematics/ruins/deadEnd_brokenPillarsO_open_100.schematic
|
||||
/schematics/ruins/DeadEnd_Cere-FloatingAltar_Open_75.schematic
|
||||
/schematics/ruins/deadEnd_diamondTowerTemple1_open_100.schematic
|
||||
/schematics/ruins/deadEnd_fallingTrapO_open_100.schematic
|
||||
/schematics/ruins/deadEnd_hiddenStaircaseO_open_100.schematic
|
||||
|
@ -72,6 +74,7 @@
|
|||
/schematics/ruins/trap_pistonSmasherHall_closed_100.schematic
|
||||
/schematics/ruins/Trap_SK-FakeTNTTrap-B_Closed_50.schematic
|
||||
/schematics/ruins/Trap_SK-NicolesTower_Open_50.schematic
|
||||
/schematics/ruins/Trap_SK-RaceTheLight_Closed_50.schematic
|
||||
/schematics/ruins/Trap_SK-RestlessCorridor_Open_40.schematic
|
||||
/schematics/ruins/Trap_SK-SimpleLeftTrap_Closed_50.schematic
|
||||
/schematics/ruins/Trap_SK-SimpleRightTrap_Closed_50.schematic
|
||||
|
@ -79,6 +82,3 @@
|
|||
/schematics/ruins/Trap_SK-TrappedStairsUp_Closed_50.schematic
|
||||
/schematics/ruins/Trap_SK-UTrapRight_Open_50.schematic
|
||||
/schematics/ruins/trap_wallFallcomboPistonHall_closed_200.schematic
|
||||
/schematics/ruins/DeadEnd_Floating-Altar_Open_100.schematic
|
||||
/schematics/ruins/complexHall_exitRuinsWithHiddenDoor_open_100
|
||||
.schematic
|
||||
|
|
Binary file not shown.
Loading…
Reference in a new issue