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.tileentity.TileEntityDispenser;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDLoot;
|
import StevenDimDoors.mod_pocketDim.DDLoot;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.schematic.WorldOperation;
|
import StevenDimDoors.mod_pocketDim.schematic.WorldOperation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package StevenDimDoors.mod_pocketDim;
|
package StevenDimDoors.mod_pocketDim;
|
||||||
|
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -8,89 +9,82 @@ import static StevenDimDoors.mod_pocketDim.mod_pocketDim.*;
|
||||||
|
|
||||||
public class CraftingManager
|
public class CraftingManager
|
||||||
{
|
{
|
||||||
|
private CraftingManager() { }
|
||||||
|
|
||||||
public static void registerRecipes(DDProperties properties)
|
public static void registerRecipes(DDProperties properties)
|
||||||
{
|
{
|
||||||
if (properties.CraftingDimensionalDoorAllowed)
|
|
||||||
{
|
|
||||||
GameRegistry.addRecipe(new ItemStack(itemDimensionalDoor, 1), new Object[]
|
|
||||||
{
|
|
||||||
" ", "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
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if(properties.CraftingWarpDoorAllowed)
|
|
||||||
{
|
|
||||||
GameRegistry.addRecipe(new ItemStack(itemWarpDoor, 1), new Object[]
|
|
||||||
{
|
|
||||||
" ", "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
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if(properties.CraftingRiftSignatureAllowed)
|
|
||||||
{
|
|
||||||
GameRegistry.addRecipe(new ItemStack(itemRiftSignature, 1), new Object[]
|
|
||||||
{
|
|
||||||
" 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
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (properties.CraftingRiftBladeAllowed)
|
|
||||||
{
|
|
||||||
GameRegistry.addRecipe(new ItemStack(itemRiftBlade, 1), new Object[]
|
|
||||||
{
|
|
||||||
" x ", " x ", " y ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.blazeRod
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (properties.CraftingStableFabricAllowed)
|
if (properties.CraftingStableFabricAllowed)
|
||||||
{
|
{
|
||||||
GameRegistry.addRecipe(new ItemStack(itemStableFabric, 1), new Object[]
|
switch (properties.WorldThreadRequirementLevel)
|
||||||
{
|
{
|
||||||
"yyy", "yxy", "yyy", 'x', Item.enderPearl, 'y', mod_pocketDim.itemWorldThread
|
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),
|
||||||
|
"yxy", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorIron);
|
||||||
|
}
|
||||||
|
if (properties.CraftingUnstableDoorAllowed)
|
||||||
|
{
|
||||||
|
GameRegistry.addRecipe(new ItemStack(itemUnstableDoor, 1),
|
||||||
|
"yxy", 'x', Item.eyeOfEnder, 'y', mod_pocketDim.itemDimensionalDoor);
|
||||||
|
}
|
||||||
|
if (properties.CraftingWarpDoorAllowed)
|
||||||
|
{
|
||||||
|
GameRegistry.addRecipe(new ItemStack(itemWarpDoor, 1),
|
||||||
|
"yxy", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorWood);
|
||||||
|
}
|
||||||
|
if (properties.CraftingTransTrapdoorAllowed)
|
||||||
|
{
|
||||||
|
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),
|
||||||
|
" y ", "yxy", " y ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.ingotIron);
|
||||||
|
}
|
||||||
|
if (properties.CraftingRiftRemoverAllowed)
|
||||||
|
{
|
||||||
|
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),
|
||||||
|
"x", "x", "y", 'x', mod_pocketDim.itemStableFabric, 'y', Item.blazeRod);
|
||||||
|
}
|
||||||
if (properties.CraftingStabilizedRiftSignatureAllowed)
|
if (properties.CraftingStabilizedRiftSignatureAllowed)
|
||||||
{
|
{
|
||||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemStabilizedLinkSignature,1), new Object[]
|
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemStabilizedLinkSignature,1),
|
||||||
{
|
" y ", "yxy", " y ", 'x', mod_pocketDim.itemRiftSignature, 'y', mod_pocketDim.itemStableFabric);
|
||||||
" y ", "yxy", " y ", 'x', mod_pocketDim.itemRiftSignature, 'y', mod_pocketDim.itemStableFabric
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (properties.CraftingGoldenDimensionalDoorAllowed)
|
if (properties.CraftingGoldenDimensionalDoorAllowed)
|
||||||
{
|
{
|
||||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldenDimensionalDoor,1), new Object[]
|
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldenDimensionalDoor,1),
|
||||||
{
|
"yxy", 'x', mod_pocketDim.itemGoldenDoor, 'y', mod_pocketDim.itemStableFabric);
|
||||||
" ", "xyx", " ", 'x', mod_pocketDim.itemGoldenDoor, 'y', Item.eyeOfEnder
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (properties.CraftingGoldenDoorAllowed)
|
if (properties.CraftingGoldenDoorAllowed)
|
||||||
{
|
{
|
||||||
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldenDoor, 1), new Object[]
|
GameRegistry.addRecipe(new ItemStack(mod_pocketDim.itemGoldenDoor, 1),
|
||||||
{
|
"yy", "yy", "yy", 'y', Item.ingotGold);
|
||||||
"yy ", "yy ", "yy ", 'y', Item.ingotGold
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.util.WeightedRandom;
|
import net.minecraft.util.WeightedRandom;
|
||||||
import net.minecraft.util.WeightedRandomChestContent;
|
import net.minecraft.util.WeightedRandomChestContent;
|
||||||
import net.minecraftforge.common.ChestGenHooks;
|
import net.minecraftforge.common.ChestGenHooks;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.util.WeightedContainer;
|
import StevenDimDoors.mod_pocketDim.util.WeightedContainer;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -19,7 +20,7 @@ import StevenDimDoors.mod_pocketDim.util.WeightedContainer;
|
||||||
*/
|
*/
|
||||||
public class DDLoot {
|
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 MIN_ITEM_DAMAGE = 0.3;
|
||||||
private static final double MAX_ITEM_DAMAGE = 0.9;
|
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 final String DIMENSIONAL_DUNGEON_CHEST = "dimensionalDungeonChest";
|
||||||
public static ChestGenHooks DungeonChestInfo = null;
|
public static ChestGenHooks DungeonChestInfo = null;
|
||||||
private static final int CHEST_SIZE = 5;
|
private static final int CHEST_SIZE = 6;
|
||||||
|
|
||||||
private DDLoot() { }
|
private DDLoot() { }
|
||||||
|
|
||||||
|
@ -55,7 +56,7 @@ public class DDLoot {
|
||||||
addContent(true, items, Item.appleGold.itemID, 10);
|
addContent(true, items, Item.appleGold.itemID, 10);
|
||||||
|
|
||||||
addContent(properties.FabricOfRealityLootEnabled, items, mod_pocketDim.blockDimWall.blockID, 20, 16, 64);
|
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
|
// Add all the items to our dungeon chest
|
||||||
addItemsToContainer(DungeonChestInfo, items);
|
addItemsToContainer(DungeonChestInfo, items);
|
||||||
|
|
|
@ -8,6 +8,8 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
|
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
|
|
@ -19,6 +19,7 @@ import net.minecraftforge.event.entity.living.LivingFallEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||||
import net.minecraftforge.event.terraingen.InitMapGenEvent;
|
import net.minecraftforge.event.terraingen.InitMapGenEvent;
|
||||||
import net.minecraftforge.event.world.WorldEvent;
|
import net.minecraftforge.event.world.WorldEvent;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
||||||
|
|
|
@ -17,8 +17,8 @@ import net.minecraft.util.Icon;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.world.IBlockAccess;
|
import net.minecraft.world.IBlockAccess;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
|
|
|
@ -11,8 +11,8 @@ import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||||
|
@ -51,7 +51,8 @@ public class BlockDimWallPerm extends Block
|
||||||
@Override
|
@Override
|
||||||
public void onEntityWalking(World world, int x, int y, int z, Entity entity)
|
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);
|
World overworld = DimensionManager.getWorld(0);
|
||||||
if (overworld != null && entity instanceof EntityPlayerMP)
|
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.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import net.minecraft.block.BlockDoor;
|
import net.minecraft.block.BlockDoor;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.client.renderer.IconFlipped;
|
import net.minecraft.client.renderer.IconFlipped;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package StevenDimDoors.mod_pocketDim.blocks;
|
package StevenDimDoors.mod_pocketDim.blocks;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
|
|
|
@ -7,7 +7,6 @@ import java.util.Queue;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockContainer;
|
|
||||||
import net.minecraft.block.BlockFlowing;
|
import net.minecraft.block.BlockFlowing;
|
||||||
import net.minecraft.block.BlockFluid;
|
import net.minecraft.block.BlockFluid;
|
||||||
import net.minecraft.block.ITileEntityProvider;
|
import net.minecraft.block.ITileEntityProvider;
|
||||||
|
@ -20,13 +19,14 @@ import net.minecraft.util.AxisAlignedBB;
|
||||||
import net.minecraft.world.IBlockAccess;
|
import net.minecraft.world.IBlockAccess;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fluids.IFluidBlock;
|
import net.minecraftforge.fluids.IFluidBlock;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityRift;
|
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityRift;
|
||||||
|
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||||
import StevenDimDoors.mod_pocketDimClient.ClosingRiftFX;
|
import StevenDimDoors.mod_pocketDimClient.ClosingRiftFX;
|
||||||
import StevenDimDoors.mod_pocketDimClient.GoggleRiftFX;
|
import StevenDimDoors.mod_pocketDimClient.GoggleRiftFX;
|
||||||
import StevenDimDoors.mod_pocketDimClient.RiftFX;
|
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 float MIN_IMMUNE_RESISTANCE = 5000.0F;
|
||||||
private static final int BLOCK_DESTRUCTION_RANGE = 4;
|
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 MAX_BLOCK_SEARCH_CHANCE = 100;
|
||||||
private static final int BLOCK_SEARCH_CHANCE = 50;
|
private static final int BLOCK_SEARCH_CHANCE = 50;
|
||||||
private static final int MAX_BLOCK_DESTRUCTION_CHANCE = 100;
|
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)
|
private void destroyNearbyBlocks(World world, int x, int y, int z, Random random)
|
||||||
{
|
{
|
||||||
HashMap<Point3D, Integer> pointDistances = new HashMap<Point3D, Integer>(BLOCK_DESTRUCTION_VOLUME);
|
// Find reachable blocks that are vulnerable to rift damage (ignoring air, of course)
|
||||||
Queue<Point3D> points = new LinkedList<Point3D>();
|
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
|
// For each block, randomly decide whether to destroy it.
|
||||||
//of the points we visit to stop the search at its maximum range.
|
// 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);
|
pointDistances.put(new Point3D(x, y, z), 0);
|
||||||
addAdjacentBlocks(x, y, z, 0, pointDistances, points);
|
addAdjacentBlocks(x, y, z, 0, pointDistances, points);
|
||||||
while (!points.isEmpty())
|
while (!points.isEmpty())
|
||||||
|
@ -176,10 +195,14 @@ public class BlockRift extends Block implements ITileEntityProvider
|
||||||
Point3D current = points.remove();
|
Point3D current = points.remove();
|
||||||
int distance = pointDistances.get(current);
|
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 (world.isAirBlock(current.getX(), current.getY(), current.getZ()))
|
||||||
{
|
{
|
||||||
//Make sure we stay within the search range
|
if (includeAir)
|
||||||
|
{
|
||||||
|
targets.add(current);
|
||||||
|
}
|
||||||
|
// Make sure we stay within the search range
|
||||||
if (distance < BLOCK_DESTRUCTION_RANGE)
|
if (distance < BLOCK_DESTRUCTION_RANGE)
|
||||||
{
|
{
|
||||||
addAdjacentBlocks(current.getX(), current.getY(), current.getZ(), distance, pointDistances, points);
|
addAdjacentBlocks(current.getX(), current.getY(), current.getZ(), distance, pointDistances, points);
|
||||||
|
@ -187,18 +210,16 @@ public class BlockRift extends Block implements ITileEntityProvider
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Check if the current block is immune to destruction by rifts. If not, randomly decide whether to destroy it.
|
// Check if the current block is immune to destruction by rifts. If not, add it to our list.
|
||||||
//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()))
|
||||||
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, random);
|
targets.add(current);
|
||||||
world.destroyBlock(current.getX(), current.getY(), current.getZ(), false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return targets;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void spawnWorldThread(int blockID, World world, int x, int y, int z, Random random)
|
private void spawnWorldThread(int blockID, World world, int x, int y, int z, Random random)
|
||||||
{
|
{
|
||||||
if (blockID != 0 && (random.nextInt(MAX_WORLD_THREAD_CHANCE) < WORLD_THREAD_CHANCE)
|
if (blockID != 0 && (random.nextInt(MAX_WORLD_THREAD_CHANCE) < WORLD_THREAD_CHANCE)
|
||||||
|
@ -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))
|
if (!this.isBlockImmune(world, x, y, z) && world.getChunkProvider().chunkExists(x >> 4, z >> 4))
|
||||||
{
|
{
|
||||||
int blockID = world.getBlockId(x, y, z);
|
int blockID = world.getBlockId(x, y, z);
|
||||||
world.setBlock(x, y, z, properties.RiftBlockID);
|
if (world.setBlock(x, y, z, properties.RiftBlockID))
|
||||||
this.spawnWorldThread(blockID, world, x, y, z, random);
|
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
|
* 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.block.material.Material;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.world.World;
|
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.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
|
|
|
@ -6,7 +6,7 @@ import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.util.AxisAlignedBB;
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
import net.minecraft.world.World;
|
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.DDTeleporter;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
|
|
|
@ -3,7 +3,7 @@ package StevenDimDoors.mod_pocketDim.blocks;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.world.World;
|
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.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
|
|
|
@ -3,7 +3,7 @@ package StevenDimDoors.mod_pocketDim.blocks;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.world.World;
|
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.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
|
|
|
@ -21,7 +21,7 @@ public class CommandCreateDungeonRift extends DDCommandBase
|
||||||
|
|
||||||
private CommandCreateDungeonRift()
|
private CommandCreateDungeonRift()
|
||||||
{
|
{
|
||||||
super("dd-rift", "<dungeon name | 'list' | 'random'>");
|
super("dd-rift", "<dungeon name>");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CommandCreateDungeonRift instance()
|
public static CommandCreateDungeonRift instance()
|
||||||
|
@ -41,7 +41,7 @@ public class CommandCreateDungeonRift extends DDCommandBase
|
||||||
if (sender.worldObj.isRemote)
|
if (sender.worldObj.isRemote)
|
||||||
{
|
{
|
||||||
return DDCommandResult.SUCCESS;
|
return DDCommandResult.SUCCESS;
|
||||||
}
|
}
|
||||||
if (command.length == 0)
|
if (command.length == 0)
|
||||||
{
|
{
|
||||||
return DDCommandResult.TOO_FEW_ARGUMENTS;
|
return DDCommandResult.TOO_FEW_ARGUMENTS;
|
||||||
|
@ -50,61 +50,38 @@ public class CommandCreateDungeonRift extends DDCommandBase
|
||||||
{
|
{
|
||||||
return DDCommandResult.TOO_MANY_ARGUMENTS;
|
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[0].equals("list"))
|
result = findDungeonByPartialName(command[0], dungeonHelper.getRegisteredDungeons());
|
||||||
|
if (result == null)
|
||||||
{
|
{
|
||||||
Collection<String> dungeonNames = dungeonHelper.getDungeonNames();
|
result = findDungeonByPartialName(command[0], dungeonHelper.getUntaggedDungeons());
|
||||||
for (String name : dungeonNames)
|
}
|
||||||
{
|
//Check if we found any matches
|
||||||
sendChat(sender, name);
|
if (result != null)
|
||||||
}
|
{
|
||||||
sendChat(sender, "");
|
//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
|
else
|
||||||
{
|
{
|
||||||
DimLink link;
|
//No matches!
|
||||||
DungeonData result;
|
return new DDCommandResult("Error: The specified dungeon was not found. Use 'dd-list' to see a list of the available dungeons.");
|
||||||
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[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)
|
|
||||||
{
|
|
||||||
result = findDungeonByPartialName(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;
|
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.
|
//Search for the shortest dungeon name that contains the lowercase query string.
|
||||||
String dungeonName;
|
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.command.ICommandSender;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||||
|
|
||||||
public class CommandExportDungeon extends DDCommandBase
|
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;
|
import java.io.File;
|
||||||
|
|
||||||
|
@ -87,7 +87,6 @@ public class DDProperties
|
||||||
* Other Flags
|
* Other Flags
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final boolean WorldRiftGenerationEnabled;
|
|
||||||
public final boolean RiftSpreadEnabled;
|
public final boolean RiftSpreadEnabled;
|
||||||
public final boolean RiftGriefingEnabled;
|
public final boolean RiftGriefingEnabled;
|
||||||
public final boolean RiftsSpawnEndermenEnabled;
|
public final boolean RiftsSpawnEndermenEnabled;
|
||||||
|
@ -109,6 +108,7 @@ public class DDProperties
|
||||||
public final int FortressGatewayGenerationChance;
|
public final int FortressGatewayGenerationChance;
|
||||||
public final int MonolithSpawningChance;
|
public final int MonolithSpawningChance;
|
||||||
public final int LimboReturnRange;
|
public final int LimboReturnRange;
|
||||||
|
public final int WorldThreadRequirementLevel;
|
||||||
public final String CustomSchematicDirectory;
|
public final String CustomSchematicDirectory;
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,6 +145,10 @@ public class DDProperties
|
||||||
CraftingGoldenDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Golden Door", true).getBoolean(true);
|
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);
|
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);
|
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);
|
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);
|
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);
|
"Sets whether groups of connected rifts will spawn Endermen").getBoolean(true);
|
||||||
|
|
||||||
LimboEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Limbo", 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,
|
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);
|
"Sets whether players keep their inventories upon dying and respawning in Limbo").getBoolean(true);
|
||||||
HardcoreLimboEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Hardcore Limbo", false,
|
HardcoreLimboEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Hardcore Limbo", false,
|
||||||
|
@ -204,9 +208,6 @@ public class DDProperties
|
||||||
LimboDimensionID = config.get(CATEGORY_DIMENSION, "Limbo Dimension ID", -23).getInt();
|
LimboDimensionID = config.get(CATEGORY_DIMENSION, "Limbo Dimension ID", -23).getInt();
|
||||||
PocketProviderID = config.get(CATEGORY_PROVIDER, "Pocket Provider ID", 24).getInt();
|
PocketProviderID = config.get(CATEGORY_PROVIDER, "Pocket Provider ID", 24).getInt();
|
||||||
LimboProviderID = config.get(CATEGORY_PROVIDER, "Limbo Provider ID", 13).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,
|
MonolithTeleportationEnabled = config.get(Configuration.CATEGORY_GENERAL, "Enable Monolith Teleportation", true,
|
||||||
"Sets whether Monoliths can teleport players").getBoolean(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.DimensionManager;
|
||||||
import net.minecraftforge.common.network.ForgePacket;
|
import net.minecraftforge.common.network.ForgePacket;
|
||||||
import net.minecraftforge.common.network.packet.DimensionRegisterPacket;
|
import net.minecraftforge.common.network.packet.DimensionRegisterPacket;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.BaseDimDoor;
|
import StevenDimDoors.mod_pocketDim.blocks.BaseDimDoor;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor;
|
import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor;
|
||||||
|
@ -40,9 +40,12 @@ public class DDTeleporter
|
||||||
{
|
{
|
||||||
private static final Random random = new Random();
|
private static final Random random = new Random();
|
||||||
private static final int NETHER_DIMENSION_ID = -1;
|
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 END_DIMENSION_ID = 1;
|
||||||
private static final int MAX_NETHER_EXIT_CHANCE = 100;
|
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 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 MAX_ROOT_SHIFT_CHANCE = 100;
|
||||||
private static final int START_ROOT_SHIFT_CHANCE = 0;
|
private static final int START_ROOT_SHIFT_CHANCE = 0;
|
||||||
private static final int ROOT_SHIFT_CHANCE_PER_LEVEL = 5;
|
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_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);
|
return generateSafeExit(PocketManager.getDimensionData(NETHER_DIMENSION_ID), link, properties);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,14 +8,13 @@ import java.util.TreeMap;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData;
|
import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.dungeon.DungeonData;
|
import StevenDimDoors.mod_pocketDim.dungeon.DungeonData;
|
||||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||||
import StevenDimDoors.mod_pocketDim.watcher.IUpdateWatcher;
|
import StevenDimDoors.mod_pocketDim.watcher.IUpdateWatcher;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public abstract class NewDimData
|
public abstract class NewDimData
|
||||||
{
|
{
|
||||||
private static class InnerDimLink extends DimLink
|
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.World;
|
||||||
import net.minecraft.world.WorldServer;
|
import net.minecraft.world.WorldServer;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.Compactor;
|
import StevenDimDoors.mod_pocketDim.helpers.Compactor;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.DeleteFolder;
|
import StevenDimDoors.mod_pocketDim.helpers.DeleteFolder;
|
||||||
import StevenDimDoors.mod_pocketDim.saving.DDSaveHandler;
|
import StevenDimDoors.mod_pocketDim.saving.DDSaveHandler;
|
||||||
|
|
|
@ -16,9 +16,9 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.tileentity.TileEntitySign;
|
import net.minecraft.tileentity.TileEntitySign;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
|
|
|
@ -12,7 +12,7 @@ import net.minecraft.tileentity.TileEntityChest;
|
||||||
import net.minecraft.tileentity.TileEntityDispenser;
|
import net.minecraft.tileentity.TileEntityDispenser;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDLoot;
|
import StevenDimDoors.mod_pocketDim.DDLoot;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.schematic.WorldOperation;
|
import StevenDimDoors.mod_pocketDim.schematic.WorldOperation;
|
||||||
|
|
||||||
public class FillContainersOperation extends WorldOperation
|
public class FillContainersOperation extends WorldOperation
|
||||||
|
@ -20,8 +20,8 @@ public class FillContainersOperation extends WorldOperation
|
||||||
private Random random;
|
private Random random;
|
||||||
private DDProperties properties;
|
private DDProperties properties;
|
||||||
|
|
||||||
private static final int GRAVE_CHEST_CHANCE = 100;
|
private static final int GRAVE_CHEST_CHANCE = 1;
|
||||||
private static final int MAX_GRAVE_CHEST_CHANCE = 700;
|
private static final int MAX_GRAVE_CHEST_CHANCE = 6;
|
||||||
|
|
||||||
public FillContainersOperation(Random random, DDProperties properties)
|
public FillContainersOperation(Random random, DDProperties properties)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,8 +19,8 @@ import java.util.regex.Pattern;
|
||||||
|
|
||||||
import net.minecraft.util.WeightedRandom;
|
import net.minecraft.util.WeightedRandom;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
|
@ -577,11 +577,11 @@ public class DungeonHelper
|
||||||
return selection;
|
return selection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<String> getDungeonNames() {
|
public ArrayList<String> getDungeonNames()
|
||||||
|
{
|
||||||
//Use a HashSet to guarantee that all dungeon names will be distinct.
|
// Use a HashSet to guarantee that all dungeon names will be distinct.
|
||||||
//This shouldn't be necessary if we keep proper lists without repetitions,
|
// This shouldn't be necessary if we keep proper lists without repetitions,
|
||||||
//but it's a fool-proof workaround.
|
// but it's a fool-proof workaround.
|
||||||
HashSet<String> dungeonNames = new HashSet<String>();
|
HashSet<String> dungeonNames = new HashSet<String>();
|
||||||
dungeonNames.addAll( parseDungeonNames(registeredDungeons) );
|
dungeonNames.addAll( parseDungeonNames(registeredDungeons) );
|
||||||
dungeonNames.addAll( parseDungeonNames(untaggedDungeons) );
|
dungeonNames.addAll( parseDungeonNames(untaggedDungeons) );
|
||||||
|
|
|
@ -11,8 +11,8 @@ import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor;
|
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor;
|
||||||
|
|
|
@ -20,8 +20,8 @@ import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraft.util.Vec3;
|
import net.minecraft.util.Vec3;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
@ -36,41 +36,9 @@ public class ItemRiftBlade extends ItemSword
|
||||||
super(itemID, EnumToolMaterial.EMERALD);
|
super(itemID, EnumToolMaterial.EMERALD);
|
||||||
|
|
||||||
this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab);
|
this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab);
|
||||||
this.setMaxStackSize(1);
|
|
||||||
this.setMaxDamage(500);
|
|
||||||
this.hasSubtypes = false;
|
|
||||||
this.properties = properties;
|
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
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public boolean hasEffect(ItemStack par1ItemStack)
|
public boolean hasEffect(ItemStack par1ItemStack)
|
||||||
|
@ -78,13 +46,6 @@ public class ItemRiftBlade extends ItemSword
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLiving, EntityLivingBase par3EntityLiving)
|
|
||||||
{
|
|
||||||
par1ItemStack.damageItem(1, par3EntityLiving);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3)
|
public MovingObjectPosition getMovingObjectPositionFromPlayer(World par1World, EntityPlayer par2EntityPlayer, boolean par3)
|
||||||
{
|
{
|
||||||
|
@ -147,7 +108,7 @@ public class ItemRiftBlade extends ItemSword
|
||||||
if (!world.isRemote)
|
if (!world.isRemote)
|
||||||
{
|
{
|
||||||
@SuppressWarnings("unchecked")
|
@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);
|
list.remove(player);
|
||||||
|
|
||||||
for (EntityLiving ent : list)
|
for (EntityLiving ent : list)
|
||||||
|
@ -223,8 +184,7 @@ public class ItemRiftBlade extends ItemSword
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
|
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
|
||||||
{
|
{
|
||||||
par3List.add("Creates temporary doors");
|
par3List.add("Opens temporary doors on rifts");
|
||||||
par3List.add("on rifts, rotates doors,");
|
|
||||||
par3List.add("and has a teleport attack.");
|
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.DimensionManager;
|
||||||
import net.minecraftforge.common.ForgeChunkManager;
|
import net.minecraftforge.common.ForgeChunkManager;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.BlockDimWall;
|
import StevenDimDoors.mod_pocketDim.blocks.BlockDimWall;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.BlockDimWallPerm;
|
import StevenDimDoors.mod_pocketDim.blocks.BlockDimWallPerm;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.BlockDoorGold;
|
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.blocks.WarpDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandCreateDungeonRift;
|
import StevenDimDoors.mod_pocketDim.commands.CommandCreateDungeonRift;
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandCreatePocket;
|
import StevenDimDoors.mod_pocketDim.commands.CommandCreatePocket;
|
||||||
|
import StevenDimDoors.mod_pocketDim.commands.CommandCreateRandomRift;
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteAllLinks;
|
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteAllLinks;
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteRifts;
|
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteRifts;
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandExportDungeon;
|
import StevenDimDoors.mod_pocketDim.commands.CommandExportDungeon;
|
||||||
|
import StevenDimDoors.mod_pocketDim.commands.CommandListDungeons;
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandResetDungeons;
|
import StevenDimDoors.mod_pocketDim.commands.CommandResetDungeons;
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandTeleportPlayer;
|
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.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.ChunkLoaderHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.ChunkLoaderHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
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.FMLInitializationEvent;
|
||||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
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.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;
|
||||||
import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
|
import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
|
||||||
import cpw.mods.fml.common.registry.EntityRegistry;
|
import cpw.mods.fml.common.registry.EntityRegistry;
|
||||||
|
@ -134,6 +138,7 @@ public class mod_pocketDim
|
||||||
public static boolean isPlayerWearingGoogles = false;
|
public static boolean isPlayerWearingGoogles = false;
|
||||||
|
|
||||||
public static DDProperties properties;
|
public static DDProperties properties;
|
||||||
|
public static DDWorldProperties worldProperties;
|
||||||
public static CustomLimboPopulator spawner; //Added this field temporarily. Will be refactored out later.
|
public static CustomLimboPopulator spawner; //Added this field temporarily. Will be refactored out later.
|
||||||
public static FastRiftRegenerator fastRiftRegenerator;
|
public static FastRiftRegenerator fastRiftRegenerator;
|
||||||
public static GatewayGenerator gatewayGenerator;
|
public static GatewayGenerator gatewayGenerator;
|
||||||
|
@ -229,8 +234,11 @@ public class mod_pocketDim
|
||||||
|
|
||||||
GameRegistry.registerBlock(blockDimWall, ItemBlockDimWall.class, "Fabric of Reality");
|
GameRegistry.registerBlock(blockDimWall, ItemBlockDimWall.class, "Fabric of Reality");
|
||||||
|
|
||||||
DimensionManager.registerProviderType(properties.PocketProviderID, PocketProvider.class, false);
|
if (!DimensionManager.registerProviderType(properties.PocketProviderID, PocketProvider.class, false))
|
||||||
DimensionManager.registerProviderType(properties.LimboProviderID, LimboProvider.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);
|
DimensionManager.registerDimension(properties.LimboDimensionID, properties.LimboProviderID);
|
||||||
|
|
||||||
LanguageRegistry.addName(goldenDoor, "Golden Door");
|
LanguageRegistry.addName(goldenDoor, "Golden Door");
|
||||||
|
@ -296,28 +304,41 @@ public class mod_pocketDim
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onServerStopping(FMLServerStoppingEvent event)
|
public void onServerStopped(FMLServerStoppedEvent event)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
PocketManager.unload();
|
PocketManager.unload();
|
||||||
deathTracker.writeToFile();
|
deathTracker.writeToFile();
|
||||||
deathTracker = null;
|
deathTracker = null;
|
||||||
|
worldProperties = null;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@EventHandler
|
||||||
public void onServerStarting(FMLServerStartingEvent event)
|
public void onServerStarting(FMLServerStartingEvent event)
|
||||||
{
|
{
|
||||||
//TODO- load dims with forced chunks on server startup here
|
|
||||||
|
|
||||||
// Register commands with the server
|
// Register commands with the server
|
||||||
event.registerServerCommand( CommandResetDungeons.instance() );
|
event.registerServerCommand( CommandResetDungeons.instance() );
|
||||||
event.registerServerCommand( CommandCreateDungeonRift.instance() );
|
event.registerServerCommand( CommandCreateDungeonRift.instance() );
|
||||||
|
event.registerServerCommand( CommandListDungeons.instance() );
|
||||||
|
event.registerServerCommand( CommandCreateRandomRift.instance() );
|
||||||
event.registerServerCommand( CommandDeleteAllLinks.instance() );
|
event.registerServerCommand( CommandDeleteAllLinks.instance() );
|
||||||
//CommandDeleteDimensionData.instance().register(event);
|
//CommandDeleteDimensionData.instance().register(event);
|
||||||
event.registerServerCommand( CommandDeleteRifts.instance() );
|
event.registerServerCommand( CommandDeleteRifts.instance() );
|
||||||
|
@ -327,9 +348,6 @@ public class mod_pocketDim
|
||||||
event.registerServerCommand( CommandCreatePocket.instance() );
|
event.registerServerCommand( CommandCreatePocket.instance() );
|
||||||
event.registerServerCommand( CommandTeleportPlayer.instance() );
|
event.registerServerCommand( CommandTeleportPlayer.instance() );
|
||||||
|
|
||||||
// Initialize a new DeathTracker
|
|
||||||
String deathTrackerFile = DimensionManager.getCurrentSaveRootDirectory() + "/DimensionalDoors/data/deaths.txt";
|
|
||||||
deathTracker = new DeathTracker(deathTrackerFile);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -337,7 +355,8 @@ public class mod_pocketDim
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
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.GameRules;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper;
|
||||||
|
|
|
@ -7,7 +7,7 @@ import net.minecraft.block.BlockContainer;
|
||||||
import net.minecraft.world.ChunkCoordIntPair;
|
import net.minecraft.world.ChunkCoordIntPair;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
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
|
* 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.util.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.ForgeHooks;
|
import net.minecraftforge.common.ForgeHooks;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||||
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
||||||
|
|
|
@ -25,9 +25,9 @@ import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraft.util.Vec3;
|
import net.minecraft.util.Vec3;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.ServerPacketHandler;
|
import StevenDimDoors.mod_pocketDim.ServerPacketHandler;
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
|
@ -35,13 +35,15 @@ import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||||
|
|
||||||
public class TileEntityRift extends TileEntity
|
public class TileEntityRift extends TileEntity
|
||||||
{
|
{
|
||||||
private static final int MAX_SPREAD_ATTEMPTS = 3;
|
private static final int RIFT_INTERACTION_RANGE = 5;
|
||||||
private static final int MAX_SEARCH_ATTEMPTS = 50;
|
private static final int MAX_ANCESTOR_LINKS = 2;
|
||||||
private static final int MAX_ANCESTOR_LINKS = 3;
|
private static final int MAX_CHILD_LINKS = 1;
|
||||||
private static final int ENDERMAN_SPAWNING_CHANCE = 1;
|
private static final int ENDERMAN_SPAWNING_CHANCE = 1;
|
||||||
private static final int MAX_ENDERMAN_SPAWNING_CHANCE = 32;
|
private static final int MAX_ENDERMAN_SPAWNING_CHANCE = 32;
|
||||||
private static final int RIFT_SPREAD_CHANCE = 1;
|
private static final int RIFT_SPREAD_CHANCE = 1;
|
||||||
private static final int MAX_RIFT_SPREAD_CHANCE = 256;
|
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();
|
private static Random random = new Random();
|
||||||
|
|
||||||
|
@ -53,7 +55,6 @@ public class TileEntityRift extends TileEntity
|
||||||
public int zOffset = 0;
|
public int zOffset = 0;
|
||||||
public boolean shouldClose = false;
|
public boolean shouldClose = false;
|
||||||
private boolean hasUpdated = false;
|
private boolean hasUpdated = false;
|
||||||
private boolean hasGrownRifts = false;
|
|
||||||
|
|
||||||
public DimLink nearestRiftData;
|
public DimLink nearestRiftData;
|
||||||
public int spawnedEndermenID = 0;
|
public int spawnedEndermenID = 0;
|
||||||
|
@ -109,8 +110,6 @@ public class TileEntityRift extends TileEntity
|
||||||
this.calculateOldParticleOffset(); //this also calculates the distance for the particle stuff.
|
this.calculateOldParticleOffset(); //this also calculates the distance for the particle stuff.
|
||||||
}
|
}
|
||||||
updateTimer++;
|
updateTimer++;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -171,10 +170,10 @@ public class TileEntityRift extends TileEntity
|
||||||
enderman.setLocationAndAngles(xCoord + 0.5, yCoord - 1, zCoord + 0.5, 5, 6);
|
enderman.setLocationAndAngles(xCoord + 0.5, yCoord - 1, zCoord + 0.5, 5, 6);
|
||||||
worldObj.spawnEntityInWorld(enderman);
|
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);
|
EntityPlayer player = this.worldObj.getClosestPlayerToEntity(enderman, 50);
|
||||||
if(player!=null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
enderman.setTarget(player);
|
enderman.setTarget(player);
|
||||||
}
|
}
|
||||||
|
@ -320,7 +319,7 @@ public class TileEntityRift extends TileEntity
|
||||||
|
|
||||||
public void grow(DDProperties properties)
|
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)
|
|| random.nextInt(MAX_RIFT_SPREAD_CHANCE) < RIFT_SPREAD_CHANCE || this.shouldClose)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -329,58 +328,20 @@ public class TileEntityRift extends TileEntity
|
||||||
NewDimData dimension = PocketManager.getDimensionData(worldObj);
|
NewDimData dimension = PocketManager.getDimensionData(worldObj);
|
||||||
DimLink link = dimension.getLink(xCoord, yCoord, zCoord);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The probability of rifts trying to spread increases if more rifts are nearby
|
// 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
|
// Players should see rifts spread faster within clusters than at the edges of clusters.
|
||||||
// Also, single rifts CANNOT spread.
|
// 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)
|
if (nearRifts == 0 || random.nextInt(nearRifts) == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
mod_pocketDim.blockRift.spreadRift(dimension, link, worldObj, random);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -393,7 +354,6 @@ public class TileEntityRift extends TileEntity
|
||||||
this.xOffset = nbt.getInteger("xOffset");
|
this.xOffset = nbt.getInteger("xOffset");
|
||||||
this.yOffset = nbt.getInteger("yOffset");
|
this.yOffset = nbt.getInteger("yOffset");
|
||||||
this.zOffset = nbt.getInteger("zOffset");
|
this.zOffset = nbt.getInteger("zOffset");
|
||||||
this.hasGrownRifts = nbt.getBoolean("grownRifts");
|
|
||||||
this.age = nbt.getInteger("age");
|
this.age = nbt.getInteger("age");
|
||||||
this.shouldClose = nbt.getBoolean("shouldClose");
|
this.shouldClose = nbt.getBoolean("shouldClose");
|
||||||
this.spawnedEndermenID = nbt.getInteger("spawnedEndermenID");
|
this.spawnedEndermenID = nbt.getInteger("spawnedEndermenID");
|
||||||
|
@ -406,7 +366,6 @@ public class TileEntityRift extends TileEntity
|
||||||
nbt.setInteger("age", this.age);
|
nbt.setInteger("age", this.age);
|
||||||
nbt.setInteger("count", this.updateTimer);
|
nbt.setInteger("count", this.updateTimer);
|
||||||
nbt.setInteger("count2", this.riftCloseTimer);
|
nbt.setInteger("count2", this.riftCloseTimer);
|
||||||
nbt.setBoolean("grownRifts",this.hasGrownRifts);
|
|
||||||
nbt.setInteger("xOffset", this.xOffset);
|
nbt.setInteger("xOffset", this.xOffset);
|
||||||
nbt.setInteger("yOffset", this.yOffset);
|
nbt.setInteger("yOffset", this.yOffset);
|
||||||
nbt.setInteger("zOffset", this.zOffset);
|
nbt.setInteger("zOffset", this.zOffset);
|
||||||
|
|
|
@ -6,7 +6,7 @@ import net.minecraft.block.Block;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.gen.MapGenBase;
|
import net.minecraft.world.gen.MapGenBase;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
|
|
||||||
public class CustomCaveGen extends MapGenBase
|
public class CustomCaveGen extends MapGenBase
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,7 +17,7 @@ import net.minecraft.world.gen.feature.MapGenScatteredFeature;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.Event.Result;
|
import net.minecraftforge.event.Event.Result;
|
||||||
import net.minecraftforge.event.terraingen.ChunkProviderEvent;
|
import net.minecraftforge.event.terraingen.ChunkProviderEvent;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
||||||
|
|
||||||
public class LimboGenerator extends ChunkProviderGenerate
|
public class LimboGenerator extends ChunkProviderGenerate
|
||||||
|
|
|
@ -12,8 +12,8 @@ import net.minecraft.world.biome.WorldChunkManagerHell;
|
||||||
import net.minecraft.world.chunk.IChunkProvider;
|
import net.minecraft.world.chunk.IChunkProvider;
|
||||||
import net.minecraftforge.client.IRenderHandler;
|
import net.minecraftforge.client.IRenderHandler;
|
||||||
import StevenDimDoors.mod_pocketDim.CloudRenderBlank;
|
import StevenDimDoors.mod_pocketDim.CloudRenderBlank;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
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.minecraft.world.chunk.storage.ExtendedBlockStorage;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
import StevenDimDoors.experimental.MazeBuilder;
|
import StevenDimDoors.experimental.MazeBuilder;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
|
|
|
@ -9,8 +9,8 @@ import net.minecraft.world.chunk.IChunkProvider;
|
||||||
import net.minecraftforge.client.IRenderHandler;
|
import net.minecraftforge.client.IRenderHandler;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
import StevenDimDoors.mod_pocketDim.CloudRenderBlank;
|
import StevenDimDoors.mod_pocketDim.CloudRenderBlank;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
import StevenDimDoors.mod_pocketDim.ticking.CustomLimboPopulator;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package StevenDimDoors.mod_pocketDim.world.fortresses;
|
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.MapGenNetherBridge;
|
||||||
import net.minecraft.world.gen.structure.MapGenStructureIO;
|
import net.minecraft.world.gen.structure.MapGenStructureIO;
|
||||||
import net.minecraft.world.gen.structure.StructureStart;
|
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.StructureBoundingBox;
|
||||||
import net.minecraft.world.gen.structure.StructureComponent;
|
import net.minecraft.world.gen.structure.StructureComponent;
|
||||||
import net.minecraft.world.gen.structure.StructureNetherBridgeStart;
|
import net.minecraft.world.gen.structure.StructureNetherBridgeStart;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
|
|
||||||
public class DDStructureNetherBridgeStart extends StructureNetherBridgeStart
|
public class DDStructureNetherBridgeStart extends StructureNetherBridgeStart
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,9 +6,9 @@ import java.util.Random;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.Point3D;
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
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.World;
|
||||||
import net.minecraft.world.chunk.IChunkProvider;
|
import net.minecraft.world.chunk.IChunkProvider;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
import StevenDimDoors.mod_pocketDim.core.LinkTypes;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
|
@ -58,15 +58,17 @@ public class GatewayGenerator implements IWorldGenerator
|
||||||
@Override
|
@Override
|
||||||
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
|
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,
|
// Don't generate rifts or gateways if the current world is a pocket dimension or the world is remote.
|
||||||
//the current world is a pocket dimension, or the world is remote.
|
// Also don't generate anything in the Nether or The End.
|
||||||
//Also don't generate anything in The End.
|
int dimensionID = world.provider.dimensionId;
|
||||||
if (world.isRemote || (!properties.WorldRiftGenerationEnabled) ||
|
if (world.isRemote
|
||||||
(world.provider instanceof PocketProvider) || (world.provider.dimensionId == END_DIMENSION_ID)||(world.provider.dimensionId == NETHER_DIMENSION_ID))
|
|| (world.provider instanceof PocketProvider)
|
||||||
|
|| (dimensionID == END_DIMENSION_ID)
|
||||||
|
|| (dimensionID == NETHER_DIMENSION_ID))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//This check prevents a crash related to superflat worlds not loading World 0
|
// This check prevents a crash related to superflat worlds not loading World 0
|
||||||
if (DimensionManager.getWorld(OVERWORLD_DIMENSION_ID) == null)
|
if (DimensionManager.getWorld(OVERWORLD_DIMENSION_ID) == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -78,8 +80,10 @@ public class GatewayGenerator implements IWorldGenerator
|
||||||
DimLink link;
|
DimLink link;
|
||||||
NewDimData dimension;
|
NewDimData dimension;
|
||||||
|
|
||||||
//Randomly decide whether to place a cluster of rifts here
|
// Check if we're allowed to generate rift clusters in this dimension.
|
||||||
if (random.nextInt(MAX_CLUSTER_GENERATION_CHANCE) < properties.ClusterGenerationChance)
|
// If so, randomly decide whether to one.
|
||||||
|
if (mod_pocketDim.worldProperties.RiftClusterDimensions.isAccepted(dimensionID)
|
||||||
|
&& random.nextInt(MAX_CLUSTER_GENERATION_CHANCE) < properties.ClusterGenerationChance)
|
||||||
{
|
{
|
||||||
link = null;
|
link = null;
|
||||||
dimension = null;
|
dimension = null;
|
||||||
|
@ -113,9 +117,10 @@ public class GatewayGenerator implements IWorldGenerator
|
||||||
while (random.nextInt(MAX_CLUSTER_GROWTH_CHANCE) < CLUSTER_GROWTH_CHANCE);
|
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.
|
// 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;
|
valid = false;
|
||||||
x = y = z = 0; //Stop the compiler from freaking out
|
x = y = z = 0; //Stop the compiler from freaking out
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package StevenDimDoors.mod_pocketDim.world.gateways;
|
package StevenDimDoors.mod_pocketDim.world.gateways;
|
||||||
|
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
import StevenDimDoors.mod_pocketDim.items.BaseItemDoor;
|
||||||
|
|
|
@ -3,8 +3,8 @@ package StevenDimDoors.mod_pocketDim.world.gateways;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
|
|
@ -2,8 +2,8 @@ package StevenDimDoors.mod_pocketDim.world.gateways;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
import StevenDimDoors.mod_pocketDim.world.LimboProvider;
|
||||||
|
|
|
@ -11,8 +11,8 @@ import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
|
|
|
@ -11,9 +11,9 @@ import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.TransTrapdoor;
|
import StevenDimDoors.mod_pocketDim.blocks.TransTrapdoor;
|
||||||
|
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||||
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityTransTrapdoor;
|
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityTransTrapdoor;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/schematics/ruins/complexHall_buggyTopEntry1_open_100.schematic
|
/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_exitRuinsWithHiddenDoor_open_100.schematic
|
||||||
/schematics/ruins/complexHall_hallwayHiddenTreasure_closed_100.schematic
|
/schematics/ruins/complexHall_hallwayHiddenTreasure_closed_100.schematic
|
||||||
/schematics/ruins/complexHall_largeBrokenHall_closed_100.schematic
|
/schematics/ruins/complexHall_largeBrokenHall_closed_100.schematic
|
||||||
|
@ -15,6 +16,7 @@
|
||||||
/schematics/ruins/complexHall_tntPuzzleTrap_closed_50.schematic
|
/schematics/ruins/complexHall_tntPuzzleTrap_closed_50.schematic
|
||||||
/schematics/ruins/deadEnd_azersDungeonO_closed_100.schematic
|
/schematics/ruins/deadEnd_azersDungeonO_closed_100.schematic
|
||||||
/schematics/ruins/deadEnd_brokenPillarsO_open_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_diamondTowerTemple1_open_100.schematic
|
||||||
/schematics/ruins/deadEnd_fallingTrapO_open_100.schematic
|
/schematics/ruins/deadEnd_fallingTrapO_open_100.schematic
|
||||||
/schematics/ruins/deadEnd_hiddenStaircaseO_open_100.schematic
|
/schematics/ruins/deadEnd_hiddenStaircaseO_open_100.schematic
|
||||||
|
@ -72,6 +74,7 @@
|
||||||
/schematics/ruins/trap_pistonSmasherHall_closed_100.schematic
|
/schematics/ruins/trap_pistonSmasherHall_closed_100.schematic
|
||||||
/schematics/ruins/Trap_SK-FakeTNTTrap-B_Closed_50.schematic
|
/schematics/ruins/Trap_SK-FakeTNTTrap-B_Closed_50.schematic
|
||||||
/schematics/ruins/Trap_SK-NicolesTower_Open_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-RestlessCorridor_Open_40.schematic
|
||||||
/schematics/ruins/Trap_SK-SimpleLeftTrap_Closed_50.schematic
|
/schematics/ruins/Trap_SK-SimpleLeftTrap_Closed_50.schematic
|
||||||
/schematics/ruins/Trap_SK-SimpleRightTrap_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-TrappedStairsUp_Closed_50.schematic
|
||||||
/schematics/ruins/Trap_SK-UTrapRight_Open_50.schematic
|
/schematics/ruins/Trap_SK-UTrapRight_Open_50.schematic
|
||||||
/schematics/ruins/trap_wallFallcomboPistonHall_closed_200.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