Rewrite #79
@@ -56,7 +56,7 @@ public class DDProperties
|
|||||||
* Crafting Flags
|
* Crafting Flags
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public final boolean CraftingDimensionaDoorAllowed;
|
public final boolean CraftingDimensionalDoorAllowed;
|
||||||
public final boolean CraftingWarpDoorAllowed;
|
public final boolean CraftingWarpDoorAllowed;
|
||||||
public final boolean CraftingRiftSignatureAllowed;
|
public final boolean CraftingRiftSignatureAllowed;
|
||||||
public final boolean CraftingRiftRemoverAllowed;
|
public final boolean CraftingRiftRemoverAllowed;
|
||||||
@@ -129,7 +129,7 @@ public class DDProperties
|
|||||||
Configuration config = new Configuration(configFile);
|
Configuration config = new Configuration(configFile);
|
||||||
config.load();
|
config.load();
|
||||||
|
|
||||||
CraftingDimensionaDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Dimensional Door", true).getBoolean(true);
|
CraftingDimensionalDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Dimensional Door", true).getBoolean(true);
|
||||||
CraftingWarpDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Warp Door", true).getBoolean(true);
|
CraftingWarpDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Warp Door", true).getBoolean(true);
|
||||||
CraftingUnstableDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Unstable Door", true).getBoolean(true);
|
CraftingUnstableDoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Unstable Door", true).getBoolean(true);
|
||||||
CraftingTransTrapdoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Transdimensional Trapdoor", true).getBoolean(true);
|
CraftingTransTrapdoorAllowed = config.get(CATEGORY_CRAFTING, "Allow Crafting Transdimensional Trapdoor", true).getBoolean(true);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package StevenDimDoors.mod_pocketDim;
|
package StevenDimDoors.mod_pocketDim;
|
||||||
|
|
||||||
import cpw.mods.fml.common.registry.GameRegistry;
|
import java.util.Random;
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityList;
|
import net.minecraft.entity.EntityList;
|
||||||
import net.minecraft.entity.item.EntityMinecart;
|
import net.minecraft.entity.item.EntityMinecart;
|
||||||
@@ -19,36 +19,27 @@ import net.minecraftforge.common.DimensionManager;
|
|||||||
import StevenDimDoors.mod_pocketDim.core.IDimLink;
|
import StevenDimDoors.mod_pocketDim.core.IDimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||||
|
import StevenDimDoors.mod_pocketDim.world.PocketBuilder;
|
||||||
|
import cpw.mods.fml.common.registry.GameRegistry;
|
||||||
|
|
||||||
public class DDTeleporter
|
public class DDTeleporter
|
||||||
{
|
{
|
||||||
|
private static final Random random = new Random();
|
||||||
|
public static int cooldown = 0;
|
||||||
|
|
||||||
private DDTeleporter() { }
|
private DDTeleporter() { }
|
||||||
|
|
||||||
/**
|
private static void placeInPortal(Entity entity, WorldServer world, Point4D destination, DDProperties properties)
|
||||||
* Create a new portal near an entity.
|
|
||||||
*/
|
|
||||||
public static void placeInPortal(Entity par1Entity, WorldServer world, IDimLink link)
|
|
||||||
{
|
{
|
||||||
Point4D destination = link.destination();
|
|
||||||
int x = destination.getX();
|
int x = destination.getX();
|
||||||
int y = destination.getY();
|
int y = destination.getY();
|
||||||
int z = destination.getZ();
|
int z = destination.getZ();
|
||||||
|
|
||||||
//TODO Temporary workaround for mismatched door/rift metadata cases. Gives priority to the door.
|
int orientation = getDestinationOrientation(destination, properties);
|
||||||
int orientation = PocketManager.getDestinationOrientation(link);
|
|
||||||
int receivingDoorMeta = world.getBlockMetadata(x, y - 1, z);
|
|
||||||
int receivingDoorID = world.getBlockId(x, y, z);
|
|
||||||
if (receivingDoorMeta != orientation)
|
|
||||||
{
|
|
||||||
if (receivingDoorID == mod_pocketDim.dimDoor.blockID || receivingDoorID == mod_pocketDim.ExitDoor.blockID)
|
|
||||||
{
|
|
||||||
orientation = receivingDoorMeta;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (par1Entity instanceof EntityPlayer)
|
if (entity instanceof EntityPlayer)
|
||||||
{
|
{
|
||||||
EntityPlayer player = (EntityPlayer) par1Entity;
|
EntityPlayer player = (EntityPlayer) entity;
|
||||||
player.rotationYaw=(orientation*90)+90;
|
player.rotationYaw=(orientation*90)+90;
|
||||||
if(orientation==2||orientation==6)
|
if(orientation==2||orientation==6)
|
||||||
{
|
{
|
||||||
@@ -71,65 +62,65 @@ public class DDTeleporter
|
|||||||
player.setPositionAndUpdate(x, y-1, z);
|
player.setPositionAndUpdate(x, y-1, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (par1Entity instanceof EntityMinecart)
|
else if (entity instanceof EntityMinecart)
|
||||||
{
|
{
|
||||||
par1Entity.motionX=0;
|
entity.motionX=0;
|
||||||
par1Entity.motionZ=0;
|
entity.motionZ=0;
|
||||||
par1Entity.motionY=0;
|
entity.motionY=0;
|
||||||
par1Entity.rotationYaw=(orientation*90)+90;
|
entity.rotationYaw=(orientation*90)+90;
|
||||||
|
|
||||||
if(orientation==2||orientation==6)
|
if(orientation==2||orientation==6)
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity, x+1.5, y, z+.5 );
|
DDTeleporter.setEntityPosition(entity, x+1.5, y, z+.5 );
|
||||||
par1Entity.motionX =.39;
|
entity.motionX =.39;
|
||||||
par1Entity.worldObj.updateEntityWithOptionalForce(par1Entity, false);
|
entity.worldObj.updateEntityWithOptionalForce(entity, false);
|
||||||
}
|
}
|
||||||
else if(orientation==3||orientation==7)
|
else if(orientation==3||orientation==7)
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity, x+.5, y, z+1.5 );
|
DDTeleporter.setEntityPosition(entity, x+.5, y, z+1.5 );
|
||||||
par1Entity.motionZ =.39;
|
entity.motionZ =.39;
|
||||||
par1Entity.worldObj.updateEntityWithOptionalForce(par1Entity, false);
|
entity.worldObj.updateEntityWithOptionalForce(entity, false);
|
||||||
}
|
}
|
||||||
else if(orientation==0||orientation==4)
|
else if(orientation==0||orientation==4)
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity,x-.5, y, z+.5);
|
DDTeleporter.setEntityPosition(entity,x-.5, y, z+.5);
|
||||||
par1Entity.motionX =-.39;
|
entity.motionX =-.39;
|
||||||
par1Entity.worldObj.updateEntityWithOptionalForce(par1Entity, false);
|
entity.worldObj.updateEntityWithOptionalForce(entity, false);
|
||||||
}
|
}
|
||||||
else if(orientation==1||orientation==5)
|
else if(orientation==1||orientation==5)
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity,x+.5, y, z-.5);
|
DDTeleporter.setEntityPosition(entity,x+.5, y, z-.5);
|
||||||
par1Entity.motionZ =-.39;
|
entity.motionZ =-.39;
|
||||||
par1Entity.worldObj.updateEntityWithOptionalForce(par1Entity, false);
|
entity.worldObj.updateEntityWithOptionalForce(entity, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity,x, y, z);
|
DDTeleporter.setEntityPosition(entity,x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (par1Entity instanceof Entity)
|
else if (entity instanceof Entity)
|
||||||
{
|
{
|
||||||
par1Entity.rotationYaw=(orientation*90)+90;
|
entity.rotationYaw=(orientation*90)+90;
|
||||||
if(orientation==2||orientation==6)
|
if(orientation==2||orientation==6)
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity, x+1.5, y, z+.5 );
|
DDTeleporter.setEntityPosition(entity, x+1.5, y, z+.5 );
|
||||||
}
|
}
|
||||||
else if(orientation==3||orientation==7)
|
else if(orientation==3||orientation==7)
|
||||||
{
|
{
|
||||||
|
|
||||||
DDTeleporter.setEntityPosition(par1Entity, x+.5, y, z+1.5 );
|
DDTeleporter.setEntityPosition(entity, x+.5, y, z+1.5 );
|
||||||
}
|
}
|
||||||
else if(orientation==0||orientation==4)
|
else if(orientation==0||orientation==4)
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity,x-.5, y, z+.5);
|
DDTeleporter.setEntityPosition(entity,x-.5, y, z+.5);
|
||||||
}
|
}
|
||||||
else if(orientation==1||orientation==5)
|
else if(orientation==1||orientation==5)
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity,x+.5, y, z-.5);
|
DDTeleporter.setEntityPosition(entity,x+.5, y, z-.5);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DDTeleporter.setEntityPosition(par1Entity,x, y, z);
|
DDTeleporter.setEntityPosition(entity,x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,18 +133,49 @@ public class DDTeleporter
|
|||||||
entity.setPosition(x, y, z);
|
entity.setPosition(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Entity teleportEntity(World world, Entity entity, IDimLink link)
|
private static int getDestinationOrientation(Point4D door, DDProperties properties)
|
||||||
{
|
{
|
||||||
|
World world = DimensionManager.getWorld(door.getDimension());
|
||||||
|
if (world == null)
|
||||||
|
{
|
||||||
|
throw new IllegalStateException("The destination world should be loaded!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check if the block at that point is actually a door
|
||||||
|
int blockID = world.getBlockId(door.getX(), door.getY(), door.getZ());
|
||||||
|
if (blockID != properties.DimensionalDoorID && blockID != properties.WarpDoorID &&
|
||||||
|
blockID != properties.TransientDoorID && blockID != properties.UnstableDoorID)
|
||||||
|
{
|
||||||
|
//Return the pocket's orientation instead
|
||||||
|
return PocketManager.getDimensionData(door.getDimension()).orientation();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Return the orientation portion of its metadata
|
||||||
|
return world.getBlockMetadata(door.getX(), door.getY(), door.getZ()) & 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Entity teleportEntity(Entity entity, Point4D destination)
|
||||||
|
{
|
||||||
|
if (entity == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("entity cannot be null.");
|
||||||
|
}
|
||||||
|
if (destination == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("destination cannot be null.");
|
||||||
|
}
|
||||||
|
|
||||||
//This beautiful teleport method is based off of xCompWiz's teleport function.
|
//This beautiful teleport method is based off of xCompWiz's teleport function.
|
||||||
|
|
||||||
WorldServer oldWorld = (WorldServer)world;
|
WorldServer oldWorld = (WorldServer) entity.worldObj;
|
||||||
WorldServer newWorld;
|
WorldServer newWorld;
|
||||||
EntityPlayerMP player = (entity instanceof EntityPlayerMP) ? (EntityPlayerMP) entity : null;
|
EntityPlayerMP player = (entity instanceof EntityPlayerMP) ? (EntityPlayerMP) entity : null;
|
||||||
|
DDProperties properties = DDProperties.instance();
|
||||||
|
|
||||||
// Is something riding? Handle it first.
|
// Is something riding? Handle it first.
|
||||||
if (entity.riddenByEntity != null)
|
if (entity.riddenByEntity != null)
|
||||||
{
|
{
|
||||||
return teleportEntity(oldWorld, entity.riddenByEntity, link);
|
return teleportEntity(entity.riddenByEntity, destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Are we riding something? Dismount and tell the mount to go first.
|
// Are we riding something? Dismount and tell the mount to go first.
|
||||||
@@ -161,22 +183,21 @@ public class DDTeleporter
|
|||||||
if (cart != null)
|
if (cart != null)
|
||||||
{
|
{
|
||||||
entity.mountEntity(null);
|
entity.mountEntity(null);
|
||||||
cart = teleportEntity(oldWorld, cart, link);
|
cart = teleportEntity(cart, destination);
|
||||||
// We keep track of both so we can remount them on the other side.
|
// We keep track of both so we can remount them on the other side.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destination doesn't exist? We need to make it.
|
// Determine if our destination is in another realm.
|
||||||
if (DimensionManager.getWorld(link.destination().getDimension()) == null)
|
boolean difDest = entity.dimension == destination.getDimension();
|
||||||
{
|
|
||||||
//FIXME: I think this is where I need to add initialization code for pockets!!! REALLY IMPORTANT!!!
|
|
||||||
DimensionManager.initDimension(link.destination().getDimension());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine if our destination's in another realm.
|
|
||||||
boolean difDest = link.source().getDimension() != link.destination().getDimension();
|
|
||||||
if (difDest)
|
if (difDest)
|
||||||
{
|
{
|
||||||
newWorld = DimensionManager.getWorld(link.destination().getDimension());
|
// Destination isn't loaded? Then we need to load it.
|
||||||
|
newWorld = DimensionManager.getWorld(destination.getDimension());
|
||||||
|
if (newWorld == null)
|
||||||
|
{
|
||||||
|
DimensionManager.initDimension(destination.getDimension());
|
||||||
|
}
|
||||||
|
newWorld = DimensionManager.getWorld(destination.getDimension());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -185,7 +206,7 @@ public class DDTeleporter
|
|||||||
|
|
||||||
// GreyMaria: What is this even accomplishing? We're doing the exact same thing at the end of this all.
|
// GreyMaria: What is this even accomplishing? We're doing the exact same thing at the end of this all.
|
||||||
// TODO Check to see if this is actually vital.
|
// TODO Check to see if this is actually vital.
|
||||||
DDTeleporter.placeInPortal(entity, newWorld, link);
|
DDTeleporter.placeInPortal(entity, newWorld, destination, properties);
|
||||||
|
|
||||||
if (difDest) // Are we moving our target to a new dimension?
|
if (difDest) // Are we moving our target to a new dimension?
|
||||||
{
|
{
|
||||||
@@ -194,7 +215,7 @@ public class DDTeleporter
|
|||||||
// We need to do all this special stuff to move a player between dimensions.
|
// We need to do all this special stuff to move a player between dimensions.
|
||||||
|
|
||||||
// Set the new dimension and inform the client that it's moving to a new world.
|
// Set the new dimension and inform the client that it's moving to a new world.
|
||||||
player.dimension = link.destination().getDimension();
|
player.dimension = destination.getDimension();
|
||||||
player.playerNetServerHandler.sendPacketToPlayer(new Packet9Respawn(player.dimension, (byte)player.worldObj.difficultySetting, newWorld.getWorldInfo().getTerrainType(), newWorld.getHeight(), player.theItemInWorldManager.getGameType()));
|
player.playerNetServerHandler.sendPacketToPlayer(new Packet9Respawn(player.dimension, (byte)player.worldObj.difficultySetting, newWorld.getWorldInfo().getTerrainType(), newWorld.getHeight(), player.theItemInWorldManager.getGameType()));
|
||||||
|
|
||||||
// GreyMaria: Used the safe player entity remover before.
|
// GreyMaria: Used the safe player entity remover before.
|
||||||
@@ -243,7 +264,8 @@ public class DDTeleporter
|
|||||||
entity = EntityList.createEntityFromNBT(entityNBT, newWorld);
|
entity = EntityList.createEntityFromNBT(entityNBT, newWorld);
|
||||||
|
|
||||||
if (entity == null)
|
if (entity == null)
|
||||||
{ // TODO FIXME IMPLEMENT NULL CHECKS THAT ACTUALLY DO SOMETHING.
|
{
|
||||||
|
// TODO FIXME IMPLEMENT NULL CHECKS THAT ACTUALLY DO SOMETHING.
|
||||||
/*
|
/*
|
||||||
* shit ourselves in an organized fashion, preferably
|
* shit ourselves in an organized fashion, preferably
|
||||||
* in a neat pile instead of all over our users' games
|
* in a neat pile instead of all over our users' games
|
||||||
@@ -272,105 +294,82 @@ public class DDTeleporter
|
|||||||
// Did we teleport a player? Load the chunk for them.
|
// Did we teleport a player? Load the chunk for them.
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
WorldServer.class.cast(newWorld).getChunkProvider().loadChunk(MathHelper.floor_double(entity.posX) >> 4, MathHelper.floor_double(entity.posZ) >> 4);
|
newWorld.getChunkProvider().loadChunk(MathHelper.floor_double(entity.posX) >> 4, MathHelper.floor_double(entity.posZ) >> 4);
|
||||||
|
|
||||||
// Tell Forge we're moving its players so everyone else knows.
|
// Tell Forge we're moving its players so everyone else knows.
|
||||||
// Let's try doing this down here in case this is what's killing NEI.
|
// Let's try doing this down here in case this is what's killing NEI.
|
||||||
GameRegistry.onPlayerChangedDimension((EntityPlayer)entity);
|
GameRegistry.onPlayerChangedDimension((EntityPlayer)entity);
|
||||||
|
|
||||||
}
|
}
|
||||||
DDTeleporter.placeInPortal(entity, newWorld, link);
|
DDTeleporter.placeInPortal(entity, newWorld, destination, properties);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Primary function used to teleport the player using doors. Performs numerous null checks, and also generates the destination door/pocket if it has not done so already.
|
* Primary function used to teleport the player using doors. Performs numerous null checks, and also generates the destination door/pocket if it has not done so already.
|
||||||
* Also ensures correct orientation relative to the door using DDTeleporter.
|
* Also ensures correct orientation relative to the door.
|
||||||
* @param world - world the player is currently in
|
* @param world - world the player is currently in
|
||||||
* @param linkData- the link the player is using to teleport, sends the player to its dest information.
|
* @param link - the link the player is using to teleport; sends the player to its destination
|
||||||
* @param player - the instance of the player to be teleported
|
* @param player - the instance of the player to be teleported
|
||||||
* @param orientation- the orientation of the door used to teleport, determines player orientation and door placement on arrival
|
|
||||||
* @Return
|
|
||||||
*/
|
*/
|
||||||
public static void traverseDimDoor(World world, IDimLink linkData, Entity entity)
|
public static void traverseDimDoor(World world, IDimLink link, Entity entity)
|
||||||
{
|
{
|
||||||
DDProperties properties = DDProperties.instance();
|
if (world == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("world cannot be null.");
|
||||||
|
}
|
||||||
|
if (link == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("link cannot be null.");
|
||||||
|
}
|
||||||
|
if (entity == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("entity cannot be null.");
|
||||||
|
}
|
||||||
if (world.isRemote)
|
if (world.isRemote)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (linkData != null)
|
|
||||||
{
|
|
||||||
int destinationID = link.destination().getDimension();
|
|
||||||
|
|
||||||
if(PocketManager.dimList.containsKey(destinationID) && PocketManager.dimList.containsKey(world.provider.dimensionId))
|
if (cooldown == 0 || entity instanceof EntityPlayer)
|
||||||
{
|
{
|
||||||
this.generatePocket(linkData);
|
cooldown = 2 + random.nextInt(2);
|
||||||
|
|
||||||
if(mod_pocketDim.teleTimer==0||entity instanceof EntityPlayer)
|
|
||||||
{
|
|
||||||
mod_pocketDim.teleTimer=2+rand.nextInt(2);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!world.isRemote)
|
|
||||||
{
|
|
||||||
entity = this.teleportEntity(world, entity, linkData);
|
|
||||||
}
|
|
||||||
entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F);
|
|
||||||
|
|
||||||
int playerXCoord=MathHelper.floor_double(entity.posX);
|
if (!initializeDestination(link, DDProperties.instance()))
|
||||||
int playerYCoord=MathHelper.floor_double(entity.posY);
|
|
||||||
int playerZCoord=MathHelper.floor_double(entity.posZ);
|
|
||||||
|
|
||||||
if(!entity.worldObj.isBlockOpaqueCube(playerXCoord, playerYCoord-1,playerZCoord )&&PocketManager.instance.getDimData(linkData.locDimID).isDimRandomRift&&!linkData.hasGennedDoor)
|
|
||||||
{
|
{
|
||||||
for(int count=0;count<20;count++)
|
|
||||||
{
|
|
||||||
if(!entity.worldObj.isAirBlock(playerXCoord, playerYCoord-2-count,playerZCoord))
|
|
||||||
{
|
|
||||||
if(Block.blocksList[entity.worldObj.getBlockId(playerXCoord, playerYCoord-2-count,playerZCoord)].blockMaterial.isLiquid())
|
|
||||||
{
|
|
||||||
entity.worldObj.setBlock(playerXCoord, playerYCoord-1, playerZCoord, properties.FabricBlockID);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(entity.worldObj.isBlockOpaqueCube(playerXCoord, playerYCoord-1-count,playerZCoord))
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(count==19)
|
|
||||||
{
|
|
||||||
entity.worldObj.setBlock(playerXCoord, playerYCoord-1, playerZCoord, properties.FabricBlockID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.generateDoor(world,linkData);
|
|
||||||
|
|
||||||
|
|
||||||
if(!entity.worldObj.isAirBlock(playerXCoord,playerYCoord+1,playerZCoord))
|
|
||||||
{
|
|
||||||
if(Block.blocksList[entity.worldObj.getBlockId(playerXCoord,playerYCoord+1,playerZCoord)].isOpaqueCube() &&
|
|
||||||
!mod_pocketDim.blockRift.isBlockImmune(entity.worldObj, playerXCoord+1,playerYCoord,playerZCoord))
|
|
||||||
{
|
|
||||||
entity.worldObj.setBlock(playerXCoord,playerYCoord+1,playerZCoord,0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!entity.worldObj.isAirBlock(playerXCoord,playerYCoord,playerZCoord))
|
|
||||||
{
|
|
||||||
if(Block.blocksList[entity.worldObj.getBlockId(playerXCoord,playerYCoord,playerZCoord)].isOpaqueCube() &&
|
|
||||||
!mod_pocketDim.blockRift.isBlockImmune(entity.worldObj, playerXCoord,playerYCoord,playerZCoord))
|
|
||||||
{
|
|
||||||
entity.worldObj.setBlock(playerXCoord,playerYCoord,playerZCoord,0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entity = teleportEntity(entity, link.destination());
|
||||||
|
entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean initializeDestination(IDimLink link, DDProperties properties)
|
||||||
|
{
|
||||||
|
//FIXME: Change this later to support rooms that have been wiped and must be regenerated.
|
||||||
|
if (link.hasDestination())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check the destination type and respond accordingly
|
||||||
|
//FIXME: Add missing link types.
|
||||||
|
//FIXME: Add code for restoring the destination-side door.
|
||||||
|
switch (link.linkType())
|
||||||
|
{
|
||||||
|
case IDimLink.TYPE_DUNGEON:
|
||||||
|
return PocketBuilder.generateNewDungeonPocket(link, properties);
|
||||||
|
case IDimLink.TYPE_POCKET:
|
||||||
|
return PocketBuilder.generateNewPocket(link, properties);
|
||||||
|
case IDimLink.TYPE_NORMAL:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("link has an unrecognized link type.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,11 @@ import cpw.mods.fml.relauncher.SideOnly;
|
|||||||
|
|
||||||
public class EventHookContainer
|
public class EventHookContainer
|
||||||
{
|
{
|
||||||
private static DDProperties properties = null;
|
private final DDProperties properties;
|
||||||
|
|
||||||
public EventHookContainer()
|
public EventHookContainer(DDProperties properties)
|
||||||
{
|
{
|
||||||
if (properties == null)
|
this.properties = properties;
|
||||||
properties = DDProperties.instance();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
@@ -56,7 +55,7 @@ public class EventHookContainer
|
|||||||
@ForgeSubscribe
|
@ForgeSubscribe
|
||||||
public void onWorldsave(WorldEvent.Save event)
|
public void onWorldsave(WorldEvent.Save event)
|
||||||
{
|
{
|
||||||
if (PocketManager.isInitialized() && event.world.provider.dimensionId == 0)
|
if (event.world.provider.dimensionId == 0)
|
||||||
{
|
{
|
||||||
PocketManager.save();
|
PocketManager.save();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import java.util.HashSet;
|
|||||||
|
|
||||||
import net.minecraft.network.INetworkManager;
|
import net.minecraft.network.INetworkManager;
|
||||||
import net.minecraft.network.packet.Packet250CustomPayload;
|
import net.minecraft.network.packet.Packet250CustomPayload;
|
||||||
|
import StevenDimDoors.mod_pocketDim.core.IDimLink;
|
||||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
|
|
||||||
@@ -23,11 +24,9 @@ import cpw.mods.fml.common.network.Player;
|
|||||||
public class PacketHandler implements IPacketHandler
|
public class PacketHandler implements IPacketHandler
|
||||||
{
|
{
|
||||||
public static byte DIM_UPDATE_PACKET_ID = 1;
|
public static byte DIM_UPDATE_PACKET_ID = 1;
|
||||||
public static byte REGISTER_DIM_PACKET_ID = 3;
|
public static byte REGISTER_DIM_PACKET_ID = 2;
|
||||||
public static byte REGISTER_LINK_PACKET_ID = 4;
|
public static byte REGISTER_LINK_PACKET_ID = 3;
|
||||||
public static byte REMOVE_LINK_PACKET_ID = 5;
|
public static byte REMOVE_LINK_PACKET_ID = 4;
|
||||||
public static byte DIM_PACKET_ID = 6;
|
|
||||||
public static byte LINK_KEY_PACKET_ID = 7;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player)
|
public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player)
|
||||||
@@ -71,7 +70,7 @@ public class PacketHandler implements IPacketHandler
|
|||||||
{
|
{
|
||||||
NewDimData dimDataToAddLink= PocketManager.instance.getDimData(dimId);
|
NewDimData dimDataToAddLink= PocketManager.instance.getDimData(dimId);
|
||||||
|
|
||||||
ILinkData linkToAdd = new ILinkData(dimId, data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readBoolean(),data.readInt());
|
IDimLink linkToAdd = new IDimLink(dimId, data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readBoolean(),data.readInt());
|
||||||
linkToAdd.hasGennedDoor=data.readBoolean();
|
linkToAdd.hasGennedDoor=data.readBoolean();
|
||||||
|
|
||||||
PocketManager.instance.createLink(linkToAdd);
|
PocketManager.instance.createLink(linkToAdd);
|
||||||
@@ -90,7 +89,7 @@ public class PacketHandler implements IPacketHandler
|
|||||||
{
|
{
|
||||||
NewDimData dimDataToRemoveFrom= PocketManager.instance.getDimData(dimId);
|
NewDimData dimDataToRemoveFrom= PocketManager.instance.getDimData(dimId);
|
||||||
|
|
||||||
ILinkData linkToAdd = new ILinkData(dimId, data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readBoolean(),data.readInt());
|
IDimLink linkToAdd = new IDimLink(dimId, data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readInt(), data.readBoolean(),data.readInt());
|
||||||
dimDataToRemoveFrom.removeLinkAtCoords(linkToAdd.locDimID, linkToAdd.locXCoord,linkToAdd.locYCoord, linkToAdd.locZCoord);
|
dimDataToRemoveFrom.removeLinkAtCoords(linkToAdd.locDimID, linkToAdd.locXCoord,linkToAdd.locYCoord, linkToAdd.locZCoord);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -99,11 +98,6 @@ public class PacketHandler implements IPacketHandler
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (id == LINK_KEY_PACKET_ID)
|
|
||||||
{
|
|
||||||
ILinkData link = new ILinkData(data.readInt(), data.readInt(), data.readInt(), data.readInt());
|
|
||||||
dimHelper.PocketManager.interDimLinkList.put(data.readInt(), link);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void processRegisterDimPacket()
|
private static void processRegisterDimPacket()
|
||||||
@@ -136,16 +130,16 @@ public class PacketHandler implements IPacketHandler
|
|||||||
{
|
{
|
||||||
manager.addToSendQueue(PacketHandler.onDimCreatedPacket(data));
|
manager.addToSendQueue(PacketHandler.onDimCreatedPacket(data));
|
||||||
|
|
||||||
Collection <HashMap<Integer, HashMap<Integer, ILinkData>>> linkList = data.linksInThisDim.values();
|
Collection <HashMap<Integer, HashMap<Integer, IDimLink>>> linkList = data.linksInThisDim.values();
|
||||||
|
|
||||||
for(HashMap map : linkList )
|
for(HashMap map : linkList )
|
||||||
{
|
{
|
||||||
Collection <HashMap<Integer, ILinkData>> linkList2 = map.values();
|
Collection <HashMap<Integer, IDimLink>> linkList2 = map.values();
|
||||||
for(HashMap map2 : linkList2)
|
for(HashMap map2 : linkList2)
|
||||||
{
|
{
|
||||||
Collection <ILinkData> linkList3 = map2.values();
|
Collection <IDimLink> linkList3 = map2.values();
|
||||||
|
|
||||||
for(ILinkData link : linkList3)
|
for(IDimLink link : linkList3)
|
||||||
{
|
{
|
||||||
packetsToSend.add(( PacketHandler.onLinkCreatedPacket(link)));
|
packetsToSend.add(( PacketHandler.onLinkCreatedPacket(link)));
|
||||||
}
|
}
|
||||||
@@ -159,7 +153,7 @@ public class PacketHandler implements IPacketHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendLinkCreatedPacket(ILinkData link)
|
public static void sendLinkCreatedPacket(IDimLink link)
|
||||||
{
|
{
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
DataOutputStream dataOut = new DataOutputStream(bos);
|
DataOutputStream dataOut = new DataOutputStream(bos);
|
||||||
@@ -193,36 +187,7 @@ public class PacketHandler implements IPacketHandler
|
|||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void sendLinkRemovedPacket(IDimLink link)
|
||||||
public static void sendlinkKeyPacket(ILinkData link, int key)
|
|
||||||
{
|
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
||||||
DataOutputStream dataOut = new DataOutputStream(bos);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
dataOut.writeByte(PacketHandler.linkKeyPacketID);
|
|
||||||
|
|
||||||
dataOut.writeInt(link.destDimID);
|
|
||||||
dataOut.writeInt(link.destXCoord);
|
|
||||||
dataOut.writeInt(link.destYCoord);
|
|
||||||
dataOut.writeInt(link.destZCoord);
|
|
||||||
dataOut.writeInt(key);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
Packet250CustomPayload packet = new Packet250CustomPayload();
|
|
||||||
packet.channel="DimDoorPackets";
|
|
||||||
packet.data = bos.toByteArray();
|
|
||||||
packet.length = bos.size();;
|
|
||||||
PacketDispatcher.sendPacketToAllPlayers(packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static void sendLinkRemovedPacket(ILinkData link)
|
|
||||||
{
|
{
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
DataOutputStream dataOut = new DataOutputStream(bos);
|
DataOutputStream dataOut = new DataOutputStream(bos);
|
||||||
|
|||||||
@@ -12,13 +12,12 @@ import cpw.mods.fml.common.IPlayerTracker;
|
|||||||
|
|
||||||
public class PlayerRespawnTracker implements IPlayerTracker
|
public class PlayerRespawnTracker implements IPlayerTracker
|
||||||
{
|
{
|
||||||
public PlayerRespawnTracker()
|
private final DDProperties properties;
|
||||||
{
|
|
||||||
if (properties == null)
|
|
||||||
properties = DDProperties.instance();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static DDProperties properties = null;
|
public PlayerRespawnTracker(DDProperties properties)
|
||||||
|
{
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerLogin(EntityPlayer player) {
|
public void onPlayerLogin(EntityPlayer player) {
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class BlockDimWallPerm extends Block
|
|||||||
//FIXME: Shouldn't we make the player's destination safe BEFORE teleporting him?!
|
//FIXME: Shouldn't we make the player's destination safe BEFORE teleporting him?!
|
||||||
//player.setPositionAndUpdate( x, y, z );
|
//player.setPositionAndUpdate( x, y, z );
|
||||||
Point4D destination = new Point4D(destinationX, destinationY, destinationZ, 0);
|
Point4D destination = new Point4D(destinationX, destinationY, destinationZ, 0);
|
||||||
DDTeleporter.teleport(player, destination);
|
DDTeleporter.teleportEntity(player, destination);
|
||||||
|
|
||||||
//player.setPositionAndUpdate( x, y, z );
|
//player.setPositionAndUpdate( x, y, z );
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class CommandCreatePocket extends DDCommandBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Place a door leading to a pocket dimension where the player is standing.
|
//Place a door leading to a pocket dimension where the player is standing.
|
||||||
//The pocket dimension will be serve as a room for the player to build a dungeon.
|
//The pocket dimension will serve as a room for the player to build a dungeon.
|
||||||
int x = (int) sender.posX;
|
int x = (int) sender.posX;
|
||||||
int y = (int) sender.posY;
|
int y = (int) sender.posY;
|
||||||
int z = (int) sender.posZ;
|
int z = (int) sender.posZ;
|
||||||
|
|||||||
@@ -41,47 +41,37 @@ public class PocketManager
|
|||||||
|
|
||||||
private static int OVERWORLD_DIMENSION_ID = 0;
|
private static int OVERWORLD_DIMENSION_ID = 0;
|
||||||
|
|
||||||
private static boolean isInitialized = false;
|
private static boolean isLoaded = false;
|
||||||
private static boolean isSaving = false;
|
private static boolean isSaving = false;
|
||||||
|
|
||||||
//HashMap containing all the dims registered with DimDoors, sorted by dim ID. loaded on startup
|
//HashMap that maps all the dimension IDs registered with DimDoors to their DD data.
|
||||||
private static HashMap<Integer, NewDimData> dimensionData = new HashMap<Integer, NewDimData>();
|
private static HashMap<Integer, NewDimData> dimensionData = new HashMap<Integer, NewDimData>();
|
||||||
|
|
||||||
public static boolean isInitialized()
|
public static boolean isLoaded()
|
||||||
{
|
{
|
||||||
return isInitialized;
|
return isLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* simple method called on startup to register all dims saved in the dim list. Only tries to register pocket dims, though. Also calls load()
|
* simple method called on startup to register all dims saved in the dim list. Only tries to register pocket dims, though. Also calls load()
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static void initPockets()
|
public static void load()
|
||||||
{
|
{
|
||||||
if (isInitialized)
|
if (isLoaded)
|
||||||
{
|
{
|
||||||
throw new IllegalStateException("Pocket dimensions have already been initialized!");
|
throw new IllegalStateException("Pocket dimensions have already been loaded!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isLoaded = true;
|
||||||
|
loadInternal();
|
||||||
|
|
||||||
|
//Register Limbo
|
||||||
DDProperties properties = DDProperties.instance();
|
DDProperties properties = DDProperties.instance();
|
||||||
|
registerDimension(properties.LimboDimensionID, null, false, false);
|
||||||
|
|
||||||
isInitialized = true;
|
//Register pocket dimensions
|
||||||
load();
|
registerPockets(properties);
|
||||||
for (NewDimData dimension : dimensionData.values())
|
|
||||||
{
|
|
||||||
if (dimension.isPocketDimension())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DimensionManager.registerDimension(dimension.id(), properties.PocketProviderID);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
System.err.println("Could not register pocket dimension #" + dimension.id() + ". Probably caused by a version update/save data corruption/other mods.");
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean clearPocket(NewDimData dimension)
|
public boolean clearPocket(NewDimData dimension)
|
||||||
@@ -121,7 +111,26 @@ public class PocketManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void unregisterDimensions()
|
private static void registerPockets(DDProperties properties)
|
||||||
|
{
|
||||||
|
for (NewDimData dimension : dimensionData.values())
|
||||||
|
{
|
||||||
|
if (dimension.isPocketDimension())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DimensionManager.registerDimension(dimension.id(), properties.PocketProviderID);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
System.err.println("Could not register pocket dimension #" + dimension.id() + ". Probably caused by a version update/save data corruption/other mods.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void unregisterPockets()
|
||||||
{
|
{
|
||||||
for (NewDimData dimension : dimensionData.values())
|
for (NewDimData dimension : dimensionData.values())
|
||||||
{
|
{
|
||||||
@@ -149,6 +158,10 @@ public class PocketManager
|
|||||||
//TODO change from saving serialized objects to just saving data for compatabilies sake.
|
//TODO change from saving serialized objects to just saving data for compatabilies sake.
|
||||||
//TODO If saving is multithreaded as the concurrent modification exception implies, you should be synchronizing access. ~SenseiKiwi
|
//TODO If saving is multithreaded as the concurrent modification exception implies, you should be synchronizing access. ~SenseiKiwi
|
||||||
|
|
||||||
|
if (!isLoaded)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (isSaving)
|
if (isSaving)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -188,16 +201,19 @@ public class PocketManager
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
System.err.println("Could not save data-- SEVERE");
|
System.err.println("Could not save data-- SEVERE");
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
isSaving = false;
|
isSaving = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* loads the dim data from the saved hashMap. Also handles compatibility with old saves, see OldSaveHandler
|
* loads the dim data from the saved hashMap. Also handles compatibility with old saves, see OldSaveHandler
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static void load()
|
private static void loadInternal()
|
||||||
{
|
{
|
||||||
//FIXME: There are a lot of things to fix here... First, we shouldn't be created so many File instances
|
//FIXME: There are a lot of things to fix here... First, we shouldn't be created so many File instances
|
||||||
//when we could just hold references and reuse them. Second, duplicate code is BAD. Loading stuff should
|
//when we could just hold references and reuse them. Second, duplicate code is BAD. Loading stuff should
|
||||||
@@ -353,7 +369,7 @@ public class PocketManager
|
|||||||
public static void unload()
|
public static void unload()
|
||||||
{
|
{
|
||||||
save();
|
save();
|
||||||
unregisterDimensions();
|
unregisterPockets();
|
||||||
dimensionData.clear();
|
dimensionData.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,26 +25,16 @@ import StevenDimDoors.mod_pocketDim.blocks.TransientDoor;
|
|||||||
import StevenDimDoors.mod_pocketDim.blocks.UnstableDoor;
|
import StevenDimDoors.mod_pocketDim.blocks.UnstableDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.WarpDoor;
|
import StevenDimDoors.mod_pocketDim.blocks.WarpDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.dimHatch;
|
import StevenDimDoors.mod_pocketDim.blocks.dimHatch;
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandCreateDungeonRift;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandCreatePocket;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteAllLinks;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteDimensionData;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandDeleteRifts;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandExportDungeon;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandPrintDimensionData;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandPruneDimensions;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandResetDungeons;
|
|
||||||
import StevenDimDoors.mod_pocketDim.commands.CommandTeleportPlayer;
|
|
||||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemBlockDimWall;
|
import StevenDimDoors.mod_pocketDim.items.ItemBlockDimWall;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor;
|
import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemRiftBlade;
|
import StevenDimDoors.mod_pocketDim.items.ItemRiftBlade;
|
||||||
|
import StevenDimDoors.mod_pocketDim.items.ItemRiftSignature;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemStabilizedRiftSignature;
|
import StevenDimDoors.mod_pocketDim.items.ItemStabilizedRiftSignature;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemStableFabric;
|
import StevenDimDoors.mod_pocketDim.items.ItemStableFabric;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemUnstableDoor;
|
import StevenDimDoors.mod_pocketDim.items.ItemUnstableDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemWarpDoor;
|
import StevenDimDoors.mod_pocketDim.items.ItemWarpDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.items.ItemRiftSignature;
|
|
||||||
import StevenDimDoors.mod_pocketDim.items.itemRiftRemover;
|
import StevenDimDoors.mod_pocketDim.items.itemRiftRemover;
|
||||||
import StevenDimDoors.mod_pocketDim.ticking.CommonTickHandler;
|
import StevenDimDoors.mod_pocketDim.ticking.CommonTickHandler;
|
||||||
import StevenDimDoors.mod_pocketDim.ticking.LimboDecay;
|
import StevenDimDoors.mod_pocketDim.ticking.LimboDecay;
|
||||||
@@ -136,9 +126,6 @@ public class mod_pocketDim
|
|||||||
public static MonolithSpawner spawner; //Added this field temporarily. Will be refactored out later.
|
public static MonolithSpawner spawner; //Added this field temporarily. Will be refactored out later.
|
||||||
public static GatewayGenerator riftGen;
|
public static GatewayGenerator riftGen;
|
||||||
|
|
||||||
public static long genTime;
|
|
||||||
public static int teleTimer = 0;
|
|
||||||
|
|
||||||
public static CreativeTabs dimDoorsCreativeTab = new CreativeTabs("dimDoorsCreativeTab")
|
public static CreativeTabs dimDoorsCreativeTab = new CreativeTabs("dimDoorsCreativeTab")
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -157,22 +144,20 @@ public class mod_pocketDim
|
|||||||
|
|
||||||
|
|
||||||
@PreInit
|
@PreInit
|
||||||
public void PreInit(FMLPreInitializationEvent event)
|
public void onPreInitialization(FMLPreInitializationEvent event)
|
||||||
{
|
{
|
||||||
//This should be the FIRST thing that gets done.
|
//This should be the FIRST thing that gets done.
|
||||||
properties = DDProperties.initialize(event.getSuggestedConfigurationFile());
|
properties = DDProperties.initialize(event.getSuggestedConfigurationFile());
|
||||||
|
|
||||||
//Now do other stuff
|
//Now do other stuff
|
||||||
MinecraftForge.EVENT_BUS.register(new EventHookContainer());
|
MinecraftForge.EVENT_BUS.register(new EventHookContainer(properties));
|
||||||
|
|
||||||
//These fields MUST be initialized after properties are loaded to prevent
|
tracker = new PlayerRespawnTracker(properties);
|
||||||
//instances from holding onto null references to the properties.
|
riftGen = new GatewayGenerator(properties);
|
||||||
tracker = new PlayerRespawnTracker();
|
|
||||||
riftGen = new GatewayGenerator();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Init
|
@Init
|
||||||
public void Init(FMLInitializationEvent event)
|
public void onInitialization(FMLInitializationEvent event)
|
||||||
{
|
{
|
||||||
CommonTickHandler commonTickHandler = new CommonTickHandler();
|
CommonTickHandler commonTickHandler = new CommonTickHandler();
|
||||||
TickRegistry.registerTickHandler(new ClientTickHandler(), Side.CLIENT);
|
TickRegistry.registerTickHandler(new ClientTickHandler(), Side.CLIENT);
|
||||||
@@ -255,8 +240,6 @@ public class mod_pocketDim
|
|||||||
|
|
||||||
LanguageRegistry.instance().addStringLocalization("itemGroup.dimDoorsCustomTab", "en_US", "Dimensional Doors Items");
|
LanguageRegistry.instance().addStringLocalization("itemGroup.dimDoorsCustomTab", "en_US", "Dimensional Doors Items");
|
||||||
|
|
||||||
//GameRegistry.registerTileEntity(TileEntityDimDoor.class, "TileEntityDimRail");
|
|
||||||
|
|
||||||
GameRegistry.registerTileEntity(TileEntityDimDoor.class, "TileEntityDimDoor");
|
GameRegistry.registerTileEntity(TileEntityDimDoor.class, "TileEntityDimDoor");
|
||||||
GameRegistry.registerTileEntity(TileEntityRift.class, "TileEntityRift");
|
GameRegistry.registerTileEntity(TileEntityRift.class, "TileEntityRift");
|
||||||
|
|
||||||
@@ -268,7 +251,7 @@ public class mod_pocketDim
|
|||||||
//GameRegistry.addBiome(this.limboBiome);
|
//GameRegistry.addBiome(this.limboBiome);
|
||||||
//GameRegistry.addBiome(this.pocketBiome);
|
//GameRegistry.addBiome(this.pocketBiome);
|
||||||
|
|
||||||
if (properties.CraftingDimensionaDoorAllowed)
|
if (properties.CraftingDimensionalDoorAllowed)
|
||||||
{
|
{
|
||||||
GameRegistry.addRecipe(new ItemStack(itemDimDoor, 1), new Object[]
|
GameRegistry.addRecipe(new ItemStack(itemDimDoor, 1), new Object[]
|
||||||
{
|
{
|
||||||
@@ -280,22 +263,6 @@ public class mod_pocketDim
|
|||||||
" ", "yxy", " ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorIron
|
" ", "yxy", " ", 'x', mod_pocketDim.itemStableFabric, 'y', Item.doorIron
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
if(this.enableDimRail)
|
|
||||||
{
|
|
||||||
GameRegistry.addRecipe(new ItemStack(dimRail, 1), new Object[]
|
|
||||||
{
|
|
||||||
" ", "yxy", " ", 'x', this.itemDimDoor, 'y', Block.rail
|
|
||||||
});
|
|
||||||
|
|
||||||
GameRegistry.addRecipe(new ItemStack(dimRail, 1), new Object[]
|
|
||||||
{
|
|
||||||
" ", "yxy", " ", 'x', this.itemExitDoor, 'y', Block.rail
|
|
||||||
});
|
|
||||||
}
|
|
||||||
**/
|
|
||||||
|
|
||||||
if(properties.CraftingUnstableDoorAllowed)
|
if(properties.CraftingUnstableDoorAllowed)
|
||||||
{
|
{
|
||||||
GameRegistry.addRecipe(new ItemStack(itemChaosDoor, 1), new Object[]
|
GameRegistry.addRecipe(new ItemStack(itemChaosDoor, 1), new Object[]
|
||||||
@@ -385,14 +352,14 @@ public class mod_pocketDim
|
|||||||
|
|
||||||
|
|
||||||
@PostInit
|
@PostInit
|
||||||
public void PostInit(FMLPostInitializationEvent event)
|
public void onPostInitialization(FMLPostInitializationEvent event)
|
||||||
{
|
{
|
||||||
//Register loot chests
|
//Register loot chests
|
||||||
DDLoot.registerInfo();
|
DDLoot.registerInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ServerStopping
|
@ServerStopping
|
||||||
public void serverStopping(FMLServerStoppingEvent event)
|
public void onServerStopping(FMLServerStoppingEvent event)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -405,8 +372,9 @@ public class mod_pocketDim
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ServerStarting
|
@ServerStarting
|
||||||
public void serverStarting(FMLServerStartingEvent event)
|
public void onServerStarting(FMLServerStartingEvent event)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
CommandResetDungeons.instance().register(event);
|
CommandResetDungeons.instance().register(event);
|
||||||
CommandCreateDungeonRift.instance().register(event);
|
CommandCreateDungeonRift.instance().register(event);
|
||||||
CommandDeleteAllLinks.instance().register(event);
|
CommandDeleteAllLinks.instance().register(event);
|
||||||
@@ -417,6 +385,7 @@ public class mod_pocketDim
|
|||||||
CommandPruneDimensions.instance().register(event);
|
CommandPruneDimensions.instance().register(event);
|
||||||
CommandCreatePocket.instance().register(event);
|
CommandCreatePocket.instance().register(event);
|
||||||
CommandTeleportPlayer.instance().register(event);
|
CommandTeleportPlayer.instance().register(event);
|
||||||
|
*/
|
||||||
PocketManager.load();
|
PocketManager.load();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package StevenDimDoors.mod_pocketDim.ticking;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
|
||||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.DDTeleporter;
|
||||||
import cpw.mods.fml.common.ITickHandler;
|
import cpw.mods.fml.common.ITickHandler;
|
||||||
import cpw.mods.fml.common.TickType;
|
import cpw.mods.fml.common.TickType;
|
||||||
|
|
||||||
@@ -43,9 +43,9 @@ public class CommonTickHandler implements ITickHandler, IRegularTickSender
|
|||||||
|
|
||||||
//TODO: Stuck this in here because it's already rather hackish.
|
//TODO: Stuck this in here because it's already rather hackish.
|
||||||
//We should standardize this as an IRegularTickReceiver in the future. ~SenseiKiwi
|
//We should standardize this as an IRegularTickReceiver in the future. ~SenseiKiwi
|
||||||
if (mod_pocketDim.teleTimer > 0)
|
if (DDTeleporter.cooldown > 0)
|
||||||
{
|
{
|
||||||
mod_pocketDim.teleTimer--;
|
DDTeleporter.cooldown--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ public class MobMonolith extends EntityFlying implements IMob
|
|||||||
(int) this.posY + 500,
|
(int) this.posY + 500,
|
||||||
(int) this.posZ + MathHelper.getRandomIntegerInRange(rand, -250, 250),
|
(int) this.posZ + MathHelper.getRandomIntegerInRange(rand, -250, 250),
|
||||||
properties.LimboDimensionID);
|
properties.LimboDimensionID);
|
||||||
DDTeleporter.teleport(entityPlayer, destination);
|
DDTeleporter.teleportEntity(entityPlayer, destination);
|
||||||
this.aggro = 0;
|
this.aggro = 0;
|
||||||
|
|
||||||
entityPlayer.worldObj.playSoundAtEntity(entityPlayer,"mods.DimDoors.sfx.crack",13, 1);
|
entityPlayer.worldObj.playSoundAtEntity(entityPlayer,"mods.DimDoors.sfx.crack",13, 1);
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ public class GatewayGenerator implements IWorldGenerator
|
|||||||
private static final int NETHER_CHANCE_CORRECTION = 4;
|
private static final int NETHER_CHANCE_CORRECTION = 4;
|
||||||
private static final int OVERWORLD_DIMENSION_ID = 0;
|
private static final int OVERWORLD_DIMENSION_ID = 0;
|
||||||
private static final int NETHER_DIMENSION_ID = -1;
|
private static final int NETHER_DIMENSION_ID = -1;
|
||||||
private static DDProperties properties = null;
|
|
||||||
|
|
||||||
public GatewayGenerator()
|
private final DDProperties properties;
|
||||||
|
|
||||||
|
public GatewayGenerator(DDProperties properties)
|
||||||
{
|
{
|
||||||
if (properties == null)
|
this.properties = properties;
|
||||||
properties = DDProperties.instance();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -141,7 +141,7 @@ public class GatewayGenerator implements IWorldGenerator
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
createLimboGateway(world, x, y, z);
|
createLimboGateway(world, x, y, z, properties.LimboBlockID);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Place the shiny transient door into a dungeon
|
//Place the shiny transient door into a dungeon
|
||||||
@@ -190,11 +190,10 @@ public class GatewayGenerator implements IWorldGenerator
|
|||||||
world.setBlock(x, y, z + 1, blockID, 0, 3);
|
world.setBlock(x, y, z + 1, blockID, 0, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createLimboGateway(World world, int x, int y, int z)
|
private static void createLimboGateway(World world, int x, int y, int z, int blockID)
|
||||||
{
|
{
|
||||||
//Build the gateway out of Unraveled Fabric. Since nearly all the blocks in Limbo are of
|
//Build the gateway out of Unraveled Fabric. Since nearly all the blocks in Limbo are of
|
||||||
//that type, there is no point replacing the ground.
|
//that type, there is no point replacing the ground.
|
||||||
final int blockID = properties.LimboBlockID;
|
|
||||||
world.setBlock(x, y + 2, z + 1, blockID, 0, 3);
|
world.setBlock(x, y + 2, z + 1, blockID, 0, 3);
|
||||||
world.setBlock(x, y + 2, z - 1, blockID, 0, 3);
|
world.setBlock(x, y + 2, z - 1, blockID, 0, 3);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user