Added orientation to linkdata and door regen
This commit is contained in:
@@ -30,7 +30,7 @@ public class BlockGoldDimDoor extends BaseDimDoor implements IDimDoor
|
|||||||
DimLink link = dimension.getLink(x, y, z);
|
DimLink link = dimension.getLink(x, y, z);
|
||||||
if (link == null)
|
if (link == null)
|
||||||
{
|
{
|
||||||
dimension.createLink(x, y, z, LinkTypes.POCKET);
|
dimension.createLink(x, y, z, LinkTypes.POCKET,world.getBlockMetadata(x, y - 1, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class DimensionalDoor extends BaseDimDoor
|
|||||||
DimLink link = dimension.getLink(x, y, z);
|
DimLink link = dimension.getLink(x, y, z);
|
||||||
if (link == null)
|
if (link == null)
|
||||||
{
|
{
|
||||||
dimension.createLink(x, y, z, LinkTypes.POCKET);
|
dimension.createLink(x, y, z, LinkTypes.POCKET,world.getBlockMetadata(x, y - 1, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public class TransientDoor extends BaseDimDoor
|
|||||||
DimLink link = dimension.getLink(x, y, z);
|
DimLink link = dimension.getLink(x, y, z);
|
||||||
if (link == null && dimension.isPocketDimension())
|
if (link == null && dimension.isPocketDimension())
|
||||||
{
|
{
|
||||||
dimension.createLink(x, y, z, LinkTypes.SAFE_EXIT);
|
dimension.createLink(x, y, z, LinkTypes.SAFE_EXIT,world.getBlockMetadata(x, y - 1, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public class UnstableDoor extends BaseDimDoor
|
|||||||
if (!world.isRemote && world.getBlockId(x, y - 1, z) == this.blockID)
|
if (!world.isRemote && world.getBlockId(x, y - 1, z) == this.blockID)
|
||||||
{
|
{
|
||||||
NewDimData dimension = PocketManager.getDimensionData(world);
|
NewDimData dimension = PocketManager.getDimensionData(world);
|
||||||
dimension.createLink(x, y, z, LinkTypes.RANDOM);
|
dimension.createLink(x, y, z, LinkTypes.RANDOM,world.getBlockMetadata(x, y - 1, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public class WarpDoor extends BaseDimDoor
|
|||||||
DimLink link = dimension.getLink(x, y, z);
|
DimLink link = dimension.getLink(x, y, z);
|
||||||
if (link == null && dimension.isPocketDimension())
|
if (link == null && dimension.isPocketDimension())
|
||||||
{
|
{
|
||||||
dimension.createLink(x, y, z, LinkTypes.SAFE_EXIT);
|
dimension.createLink(x, y, z, LinkTypes.SAFE_EXIT,world.getBlockMetadata(x, y - 1, z));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import net.minecraft.network.packet.Packet41EntityEffect;
|
|||||||
import net.minecraft.network.packet.Packet43Experience;
|
import net.minecraft.network.packet.Packet43Experience;
|
||||||
import net.minecraft.network.packet.Packet9Respawn;
|
import net.minecraft.network.packet.Packet9Respawn;
|
||||||
import net.minecraft.potion.PotionEffect;
|
import net.minecraft.potion.PotionEffect;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.WorldServer;
|
import net.minecraft.world.WorldServer;
|
||||||
@@ -22,11 +23,13 @@ import net.minecraftforge.common.DimensionManager;
|
|||||||
import StevenDimDoors.mod_pocketDim.DDProperties;
|
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.BlockRift;
|
||||||
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
||||||
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;
|
||||||
import StevenDimDoors.mod_pocketDim.schematic.BlockRotator;
|
import StevenDimDoors.mod_pocketDim.schematic.BlockRotator;
|
||||||
|
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor;
|
||||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||||
import StevenDimDoors.mod_pocketDim.world.PocketBuilder;
|
import StevenDimDoors.mod_pocketDim.world.PocketBuilder;
|
||||||
import cpw.mods.fml.common.registry.GameRegistry;
|
import cpw.mods.fml.common.registry.GameRegistry;
|
||||||
@@ -447,7 +450,6 @@ public class DDTeleporter
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (link.linkType() == LinkTypes.RANDOM)
|
if (link.linkType() == LinkTypes.RANDOM)
|
||||||
{
|
{
|
||||||
Point4D randomDestination = getRandomDestination();
|
Point4D randomDestination = getRandomDestination();
|
||||||
@@ -459,6 +461,7 @@ public class DDTeleporter
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
buildExitDoor(door, link, DDProperties.instance());
|
||||||
entity = teleportEntity(entity, link.destination(), link.linkType() != LinkTypes.UNSAFE_EXIT);
|
entity = teleportEntity(entity, link.destination(), link.linkType() != LinkTypes.UNSAFE_EXIT);
|
||||||
entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F);
|
entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F);
|
||||||
}
|
}
|
||||||
@@ -563,6 +566,38 @@ public class DDTeleporter
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void buildExitDoor(Block door,DimLink link, DDProperties prop)
|
||||||
|
{
|
||||||
|
World startWorld = PocketManager.loadDimension(link.source().getDimension());
|
||||||
|
World destWorld = PocketManager.loadDimension(link.destination().getDimension());
|
||||||
|
TileEntity doorTE = startWorld.getBlockTileEntity(link.source().getX(), link.source().getY(), link.source.getZ());
|
||||||
|
if(doorTE instanceof TileEntityDimDoor)
|
||||||
|
{
|
||||||
|
if((TileEntityDimDoor.class.cast(doorTE).hasGennedPair))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
TileEntityDimDoor.class.cast(doorTE).hasGennedPair=true;
|
||||||
|
Block blockToReplace = Block.blocksList[destWorld.getBlockId(link.destination().getX(), link.destination().getY(), link.destination().getZ())];
|
||||||
|
|
||||||
|
if(!destWorld.isAirBlock(link.destination().getX(), link.destination().getY(), link.destination().getZ()))
|
||||||
|
{
|
||||||
|
if(!blockToReplace.isBlockReplaceable(destWorld, link.destination().getX(), link.destination().getY(), link.destination().getZ()))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseItemDoor.placeDoorBlock(destWorld, link.destination().getX(), link.destination().getY()-1, link.destination().getZ(),link.getDestinationOrientation(), door);
|
||||||
|
TileEntity doorDestTE = startWorld.getBlockTileEntity(link.destination().getX(), link.destination().getY(), link.destination().getZ());
|
||||||
|
|
||||||
|
if(doorDestTE instanceof TileEntityDimDoor)
|
||||||
|
{
|
||||||
|
TileEntityDimDoor.class.cast(doorDestTE).hasGennedPair=true;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
private static boolean generateSafeExit(DimLink link, DDProperties properties)
|
private static boolean generateSafeExit(DimLink link, DDProperties properties)
|
||||||
{
|
{
|
||||||
NewDimData current = PocketManager.getDimensionData(link.source.getDimension());
|
NewDimData current = PocketManager.getDimensionData(link.source.getDimension());
|
||||||
@@ -647,12 +682,12 @@ public class DDTeleporter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create a reverse link for returning
|
// Create a reverse link for returning
|
||||||
|
int orientation = getDestinationOrientation(source, properties);
|
||||||
NewDimData sourceDim = PocketManager.getDimensionData(link.source().getDimension());
|
NewDimData sourceDim = PocketManager.getDimensionData(link.source().getDimension());
|
||||||
DimLink reverse = destinationDim.createLink(x, y + 2, z, LinkTypes.REVERSE);
|
DimLink reverse = destinationDim.createLink(x, y + 2, z, LinkTypes.REVERSE,orientation);
|
||||||
sourceDim.setDestination(reverse, source.getX(), source.getY(), source.getZ());
|
sourceDim.setDestination(reverse, source.getX(), source.getY(), source.getZ());
|
||||||
|
|
||||||
// Set up the warp door at the destination
|
// Set up the warp door at the destination
|
||||||
int orientation = getDestinationOrientation(source, properties);
|
|
||||||
orientation = BlockRotator.transformMetadata(orientation, 2, properties.WarpDoorID);
|
orientation = BlockRotator.transformMetadata(orientation, 2, properties.WarpDoorID);
|
||||||
ItemDimensionalDoor.placeDoorBlock(world, x, y + 1, z, orientation, mod_pocketDim.warpDoor);
|
ItemDimensionalDoor.placeDoorBlock(world, x, y + 1, z, orientation, mod_pocketDim.warpDoor);
|
||||||
|
|
||||||
|
|||||||
@@ -10,10 +10,12 @@ public abstract class DimLink
|
|||||||
protected Point4D source;
|
protected Point4D source;
|
||||||
protected DimLink parent;
|
protected DimLink parent;
|
||||||
protected LinkTail tail;
|
protected LinkTail tail;
|
||||||
|
protected int orientation;
|
||||||
protected List<DimLink> children;
|
protected List<DimLink> children;
|
||||||
|
|
||||||
protected DimLink(Point4D source, DimLink parent)
|
protected DimLink(Point4D source, DimLink parent, int orientation)
|
||||||
{
|
{
|
||||||
|
this.orientation=orientation;
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.source = source;
|
this.source = source;
|
||||||
this.tail = parent.tail;
|
this.tail = parent.tail;
|
||||||
@@ -21,13 +23,13 @@ public abstract class DimLink
|
|||||||
parent.children.add(this);
|
parent.children.add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DimLink(Point4D source, int linkType)
|
protected DimLink(Point4D source, int linkType, int orientation)
|
||||||
{
|
{
|
||||||
if (linkType < LinkTypes.ENUM_MIN || linkType > LinkTypes.ENUM_MAX && linkType != LinkTypes.CLIENT_SIDE)
|
if (linkType < LinkTypes.ENUM_MIN || linkType > LinkTypes.ENUM_MAX && linkType != LinkTypes.CLIENT_SIDE)
|
||||||
{
|
{
|
||||||
throw new IllegalArgumentException("The specified link type is invalid.");
|
throw new IllegalArgumentException("The specified link type is invalid.");
|
||||||
}
|
}
|
||||||
|
this.orientation = orientation;
|
||||||
this.parent = null;
|
this.parent = null;
|
||||||
this.source = source;
|
this.source = source;
|
||||||
this.tail = new LinkTail(linkType, null);
|
this.tail = new LinkTail(linkType, null);
|
||||||
@@ -43,7 +45,10 @@ public abstract class DimLink
|
|||||||
{
|
{
|
||||||
return tail.getDestination();
|
return tail.getDestination();
|
||||||
}
|
}
|
||||||
|
public int getDestinationOrientation()
|
||||||
|
{
|
||||||
|
return PocketManager.getLink(source.getX(), source.getY(), source.getZ(), source.getDimension()).orientation();
|
||||||
|
}
|
||||||
public boolean hasDestination()
|
public boolean hasDestination()
|
||||||
{
|
{
|
||||||
return (tail.getDestination() != null);
|
return (tail.getDestination() != null);
|
||||||
@@ -68,6 +73,10 @@ public abstract class DimLink
|
|||||||
{
|
{
|
||||||
return tail.getLinkType();
|
return tail.getLinkType();
|
||||||
}
|
}
|
||||||
|
public int orientation()
|
||||||
|
{
|
||||||
|
return orientation;
|
||||||
|
}
|
||||||
|
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,4 +28,5 @@ class LinkTail
|
|||||||
public void setLinkType(int linkType) {
|
public void setLinkType(int linkType) {
|
||||||
this.linkType = linkType;
|
this.linkType = linkType;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,14 @@ public abstract class NewDimData
|
|||||||
{
|
{
|
||||||
private static class InnerDimLink extends DimLink
|
private static class InnerDimLink extends DimLink
|
||||||
{
|
{
|
||||||
public InnerDimLink(Point4D source, DimLink parent)
|
public InnerDimLink(Point4D source, DimLink parent,int orientation)
|
||||||
{
|
{
|
||||||
super(source, parent);
|
super(source, parent,orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InnerDimLink(Point4D source, int linkType)
|
public InnerDimLink(Point4D source, int linkType, int orientation)
|
||||||
{
|
{
|
||||||
super(source, linkType);
|
super(source, linkType,orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDestination(int x, int y, int z, NewDimData dimension)
|
public void setDestination(int x, int y, int z, NewDimData dimension)
|
||||||
@@ -236,19 +236,22 @@ public abstract class NewDimData
|
|||||||
{
|
{
|
||||||
return Math.abs(i) + Math.abs(j) + Math.abs(k);
|
return Math.abs(i) + Math.abs(j) + Math.abs(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DimLink createLink(int x, int y, int z, int linkType)
|
public DimLink createLink(int x, int y, int z, int linkType)
|
||||||
{
|
{
|
||||||
return createLink(new Point4D(x, y, z, id), linkType);
|
return createLink(new Point4D(x, y, z, id), linkType,-1);
|
||||||
|
}
|
||||||
|
public DimLink createLink(int x, int y, int z, int linkType,int orientation)
|
||||||
|
{
|
||||||
|
return createLink(new Point4D(x, y, z, id), linkType,orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private DimLink createLink(Point4D source, int linkType)
|
private DimLink createLink(Point4D source, int linkType,int orientation)
|
||||||
{
|
{
|
||||||
//Return an existing link if there is one to avoid creating multiple links starting at the same point.
|
//Return an existing link if there is one to avoid creating multiple links starting at the same point.
|
||||||
InnerDimLink link = linkMapping.get(source);
|
InnerDimLink link = linkMapping.get(source);
|
||||||
if (link == null)
|
if (link == null)
|
||||||
{
|
{
|
||||||
link = new InnerDimLink(source, linkType);
|
link = new InnerDimLink(source, linkType,orientation);
|
||||||
linkMapping.put(source, link);
|
linkMapping.put(source, link);
|
||||||
linkList.add(link);
|
linkList.add(link);
|
||||||
}
|
}
|
||||||
@@ -279,7 +282,7 @@ public abstract class NewDimData
|
|||||||
InnerDimLink link = linkMapping.get(source);
|
InnerDimLink link = linkMapping.get(source);
|
||||||
if (link == null)
|
if (link == null)
|
||||||
{
|
{
|
||||||
link = new InnerDimLink(source, parent);
|
link = new InnerDimLink(source, parent, parent.orientation);
|
||||||
linkMapping.put(source, link);
|
linkMapping.put(source, link);
|
||||||
linkList.add(link);
|
linkList.add(link);
|
||||||
|
|
||||||
|
|||||||
@@ -238,12 +238,12 @@ public class DungeonSchematic extends Schematic {
|
|||||||
filler.apply(world, minCorner, maxCorner);
|
filler.apply(world, minCorner, maxCorner);
|
||||||
|
|
||||||
//Set up entrance door rift
|
//Set up entrance door rift
|
||||||
createEntranceReverseLink(dimension, pocketCenter, entryLink);
|
createEntranceReverseLink(dimension, pocketCenter, entryLink, world);
|
||||||
|
|
||||||
//Set up link data for dimensional doors
|
//Set up link data for dimensional doors
|
||||||
for (Point3D location : dimensionalDoorLocations)
|
for (Point3D location : dimensionalDoorLocations)
|
||||||
{
|
{
|
||||||
createDimensionalDoorLink(dimension, location, entranceDoorLocation, turnAngle, pocketCenter);
|
createDimensionalDoorLink(dimension, location, entranceDoorLocation, turnAngle, pocketCenter,world);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set up link data for exit door
|
//Set up link data for exit door
|
||||||
@@ -285,9 +285,10 @@ public class DungeonSchematic extends Schematic {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createEntranceReverseLink(NewDimData dimension, Point3D pocketCenter, DimLink entryLink)
|
private static void createEntranceReverseLink(NewDimData dimension, Point3D pocketCenter, DimLink entryLink,World world)
|
||||||
{
|
{
|
||||||
DimLink reverseLink = dimension.createLink(pocketCenter.getX(), pocketCenter.getY(), pocketCenter.getZ(), LinkTypes.REVERSE);
|
int orientation = world.getBlockMetadata(pocketCenter.getX(), pocketCenter.getY()-1, pocketCenter.getZ());
|
||||||
|
DimLink reverseLink = dimension.createLink(pocketCenter.getX(), pocketCenter.getY(), pocketCenter.getZ(), LinkTypes.REVERSE,orientation);
|
||||||
Point4D destination = entryLink.source();
|
Point4D destination = entryLink.source();
|
||||||
NewDimData prevDim = PocketManager.getDimensionData(destination.getDimension());
|
NewDimData prevDim = PocketManager.getDimensionData(destination.getDimension());
|
||||||
prevDim.setDestination(reverseLink, destination.getX(), destination.getY(), destination.getZ());
|
prevDim.setDestination(reverseLink, destination.getX(), destination.getY(), destination.getZ());
|
||||||
@@ -295,10 +296,12 @@ public class DungeonSchematic extends Schematic {
|
|||||||
|
|
||||||
private static void createExitDoorLink(World world, NewDimData dimension, Point3D point, Point3D entrance, int rotation, Point3D pocketCenter)
|
private static void createExitDoorLink(World world, NewDimData dimension, Point3D point, Point3D entrance, int rotation, Point3D pocketCenter)
|
||||||
{
|
{
|
||||||
|
|
||||||
//Transform the door's location to the pocket coordinate system
|
//Transform the door's location to the pocket coordinate system
|
||||||
Point3D location = point.clone();
|
Point3D location = point.clone();
|
||||||
BlockRotator.transformPoint(location, entrance, rotation, pocketCenter);
|
BlockRotator.transformPoint(location, entrance, rotation, pocketCenter);
|
||||||
dimension.createLink(location.getX(), location.getY(), location.getZ(), LinkTypes.DUNGEON_EXIT);
|
int orientation = world.getBlockMetadata(location.getX(), location.getY()-1, location.getZ());
|
||||||
|
dimension.createLink(location.getX(), location.getY(), location.getZ(), LinkTypes.DUNGEON_EXIT,orientation);
|
||||||
//Replace the sandstone block under the exit door with the same block as the one underneath it
|
//Replace the sandstone block under the exit door with the same block as the one underneath it
|
||||||
int x = location.getX();
|
int x = location.getX();
|
||||||
int y = location.getY() - 3;
|
int y = location.getY() - 3;
|
||||||
@@ -311,12 +314,14 @@ public class DungeonSchematic extends Schematic {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createDimensionalDoorLink(NewDimData dimension, Point3D point, Point3D entrance, int rotation, Point3D pocketCenter)
|
private static void createDimensionalDoorLink(NewDimData dimension, Point3D point, Point3D entrance, int rotation, Point3D pocketCenter,World world)
|
||||||
{
|
{
|
||||||
//Transform the door's location to the pocket coordinate system
|
//Transform the door's location to the pocket coordinate system
|
||||||
Point3D location = point.clone();
|
Point3D location = point.clone();
|
||||||
BlockRotator.transformPoint(location, entrance, rotation, pocketCenter);
|
BlockRotator.transformPoint(location, entrance, rotation, pocketCenter);
|
||||||
dimension.createLink(location.getX(), location.getY(), location.getZ(), LinkTypes.DUNGEON);
|
int orientation = world.getBlockMetadata(location.getX(), location.getY()-1, location.getZ());
|
||||||
|
|
||||||
|
dimension.createLink(location.getX(), location.getY(), location.getZ(), LinkTypes.DUNGEON,orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void spawnMonolith(World world, Point3D point, Point3D entrance, int rotation, Point3D pocketCenter, boolean canSpawn)
|
private static void spawnMonolith(World world, Point3D point, Point3D entrance, int rotation, Point3D pocketCenter, boolean canSpawn)
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ public class DungeonHelper
|
|||||||
{
|
{
|
||||||
//Create a link above the specified position. Link to a new pocket dimension.
|
//Create a link above the specified position. Link to a new pocket dimension.
|
||||||
NewDimData dimension = PocketManager.getDimensionData(world);
|
NewDimData dimension = PocketManager.getDimensionData(world);
|
||||||
DimLink link = dimension.createLink(x, y + 1, z, LinkTypes.POCKET);
|
DimLink link = dimension.createLink(x, y + 1, z, LinkTypes.POCKET,3);
|
||||||
|
|
||||||
//Place a Warp Door linked to that pocket
|
//Place a Warp Door linked to that pocket
|
||||||
ItemDimensionalDoor.placeDoorBlock(world, x, y, z, 3, mod_pocketDim.warpDoor);
|
ItemDimensionalDoor.placeDoorBlock(world, x, y, z, 3, mod_pocketDim.warpDoor);
|
||||||
|
|||||||
@@ -114,10 +114,9 @@ public class ItemRiftBlade extends ItemSword
|
|||||||
var2.zCoord*=cooef;
|
var2.zCoord*=cooef;
|
||||||
double var5 = holder.posX - var2.xCoord;
|
double var5 = holder.posX - var2.xCoord;
|
||||||
double var9 = holder.posZ - var2.zCoord;
|
double var9 = holder.posZ - var2.zCoord;
|
||||||
double var7 =holder.worldObj.getHeightValue(MathHelper.floor_double(var5), MathHelper.floor_double(var9));
|
|
||||||
if((Math.abs((holder.posY - var2.yCoord)-var7)>2))
|
|
||||||
{
|
double var7 = MathHelper.floor_double(holder.posY - var2.yCoord) ;
|
||||||
var7 = MathHelper.floor_double(holder.posY - var2.yCoord) ;
|
|
||||||
|
|
||||||
int var14 = MathHelper.floor_double(var5);
|
int var14 = MathHelper.floor_double(var5);
|
||||||
int var15 = MathHelper.floor_double(var7);
|
int var15 = MathHelper.floor_double(var7);
|
||||||
@@ -127,7 +126,7 @@ public class ItemRiftBlade extends ItemSword
|
|||||||
var15++;
|
var15++;
|
||||||
}
|
}
|
||||||
var7=var15;
|
var7=var15;
|
||||||
}
|
|
||||||
|
|
||||||
holder.setPositionAndUpdate(var5, var7, var9);
|
holder.setPositionAndUpdate(var5, var7, var9);
|
||||||
holder.playSound("mob.endermen.portal", 1.0F, 1.0F);
|
holder.playSound("mob.endermen.portal", 1.0F, 1.0F);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
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.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
@@ -66,14 +67,15 @@ public class ItemRiftSignature extends Item
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Point4D source = getSource(stack);
|
Point4DOrientation source = getSource(stack);
|
||||||
|
int orientation = MathHelper.floor_double((double) ((player.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
|
||||||
if (source != null)
|
if (source != null)
|
||||||
{
|
{
|
||||||
//The link was used before and already has an endpoint stored. Create links connecting the two endpoints.
|
//The link was used before and already has an endpoint stored. Create links connecting the two endpoints.
|
||||||
NewDimData sourceDimension = PocketManager.getDimensionData(source.getDimension());
|
NewDimData sourceDimension = PocketManager.getDimensionData(source.getDimension());
|
||||||
NewDimData destinationDimension = PocketManager.getDimensionData(world);
|
NewDimData destinationDimension = PocketManager.getDimensionData(world);
|
||||||
DimLink link = sourceDimension.createLink(source.getX(), source.getY(), source.getZ(), LinkTypes.NORMAL);
|
DimLink link = sourceDimension.createLink(source.getX(), source.getY(), source.getZ(), LinkTypes.NORMAL,source.getOrientation());
|
||||||
DimLink reverse = destinationDimension.createLink(x, y, z, LinkTypes.NORMAL);
|
DimLink reverse = destinationDimension.createLink(x, y, z, LinkTypes.NORMAL,orientation);
|
||||||
destinationDimension.setDestination(link, x, y, z);
|
destinationDimension.setDestination(link, x, y, z);
|
||||||
sourceDimension.setDestination(reverse, source.getX(), source.getY(), source.getZ());
|
sourceDimension.setDestination(reverse, source.getX(), source.getY(), source.getZ());
|
||||||
|
|
||||||
@@ -102,7 +104,7 @@ public class ItemRiftSignature extends Item
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//The link signature has not been used. Store its current target as the first location.
|
//The link signature has not been used. Store its current target as the first location.
|
||||||
setSource(stack, x, y, z, PocketManager.getDimensionData(world));
|
setSource(stack, x, y, z,orientation, PocketManager.getDimensionData(world));
|
||||||
player.sendChatToPlayer("Location Stored in Rift Signature");
|
player.sendChatToPlayer("Location Stored in Rift Signature");
|
||||||
world.playSoundAtEntity(player,"mods.DimDoors.sfx.riftStart", 0.6f, 1);
|
world.playSoundAtEntity(player,"mods.DimDoors.sfx.riftStart", 0.6f, 1);
|
||||||
}
|
}
|
||||||
@@ -116,7 +118,7 @@ public class ItemRiftSignature extends Item
|
|||||||
@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)
|
||||||
{
|
{
|
||||||
Point4D source = getSource(par1ItemStack);
|
Point4DOrientation source = getSource(par1ItemStack);
|
||||||
if (source != null)
|
if (source != null)
|
||||||
{
|
{
|
||||||
par3List.add("Leads to (" + source.getX() + ", " + source.getY() + ", " + source.getZ() + ") at dimension #" + source.getDimension());
|
par3List.add("Leads to (" + source.getX() + ", " + source.getY() + ", " + source.getZ() + ") at dimension #" + source.getDimension());
|
||||||
@@ -129,13 +131,14 @@ public class ItemRiftSignature extends Item
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setSource(ItemStack itemStack, int x, int y, int z, NewDimData dimension)
|
public static void setSource(ItemStack itemStack, int x, int y, int z, int orientation, NewDimData dimension)
|
||||||
{
|
{
|
||||||
NBTTagCompound tag = new NBTTagCompound();
|
NBTTagCompound tag = new NBTTagCompound();
|
||||||
|
|
||||||
tag.setInteger("linkX", x);
|
tag.setInteger("linkX", x);
|
||||||
tag.setInteger("linkY", y);
|
tag.setInteger("linkY", y);
|
||||||
tag.setInteger("linkZ", z);
|
tag.setInteger("linkZ", z);
|
||||||
|
tag.setInteger("orientation", orientation);
|
||||||
tag.setInteger("linkDimID", dimension.id());
|
tag.setInteger("linkDimID", dimension.id());
|
||||||
|
|
||||||
itemStack.setTagCompound(tag);
|
itemStack.setTagCompound(tag);
|
||||||
@@ -149,11 +152,12 @@ public class ItemRiftSignature extends Item
|
|||||||
tag.removeTag("linkX");
|
tag.removeTag("linkX");
|
||||||
tag.removeTag("linkY");
|
tag.removeTag("linkY");
|
||||||
tag.removeTag("linkZ");
|
tag.removeTag("linkZ");
|
||||||
|
tag.removeTag("orientation");
|
||||||
tag.removeTag("linkDimID");
|
tag.removeTag("linkDimID");
|
||||||
itemStack.setItemDamage(0);
|
itemStack.setItemDamage(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Point4D getSource(ItemStack itemStack)
|
public static Point4DOrientation getSource(ItemStack itemStack)
|
||||||
{
|
{
|
||||||
if (itemStack.getItemDamage() != 0)
|
if (itemStack.getItemDamage() != 0)
|
||||||
{
|
{
|
||||||
@@ -164,15 +168,52 @@ public class ItemRiftSignature extends Item
|
|||||||
Integer x = tag.getInteger("linkX");
|
Integer x = tag.getInteger("linkX");
|
||||||
Integer y = tag.getInteger("linkY");
|
Integer y = tag.getInteger("linkY");
|
||||||
Integer z = tag.getInteger("linkZ");
|
Integer z = tag.getInteger("linkZ");
|
||||||
|
Integer orientation = tag.getInteger("orientation");
|
||||||
Integer dimID = tag.getInteger("linkDimID");
|
Integer dimID = tag.getInteger("linkDimID");
|
||||||
|
|
||||||
if (x != null && y != null && z != null && dimID != null)
|
if (x != null && y != null && z != null && dimID != null)
|
||||||
{
|
{
|
||||||
return new Point4D(x, y, z, dimID);
|
return new Point4DOrientation(x, y, z,orientation, dimID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
itemStack.setItemDamage(0);
|
itemStack.setItemDamage(0);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class Point4DOrientation
|
||||||
|
{
|
||||||
|
private Point4D point;
|
||||||
|
private int orientation;
|
||||||
|
Point4DOrientation(int x, int y, int z, int orientation, int dimID)
|
||||||
|
{
|
||||||
|
this.point= new Point4D(x,y,z,dimID);
|
||||||
|
this.orientation=orientation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getX()
|
||||||
|
{
|
||||||
|
return point.getX();
|
||||||
|
}
|
||||||
|
|
||||||
|
int getY()
|
||||||
|
{
|
||||||
|
return point.getY();
|
||||||
|
}
|
||||||
|
|
||||||
|
int getZ()
|
||||||
|
{
|
||||||
|
return point.getZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
int getDimension()
|
||||||
|
{
|
||||||
|
return point.getDimension();
|
||||||
|
}
|
||||||
|
int getOrientation()
|
||||||
|
{
|
||||||
|
return orientation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import net.minecraft.client.renderer.texture.IconRegister;
|
|||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
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.mod_pocketDim;
|
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||||
@@ -46,7 +47,8 @@ public class ItemStabilizedRiftSignature extends ItemRiftSignature
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if the Stabilized Rift Signature has been initialized
|
// Check if the Stabilized Rift Signature has been initialized
|
||||||
Point4D source = getSource(stack);
|
Point4DOrientation source = getSource(stack);
|
||||||
|
int orientation = MathHelper.floor_double((double) ((player.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
|
||||||
if (source != null)
|
if (source != null)
|
||||||
{
|
{
|
||||||
// Yes, it's initialized. Check if the player is in creative
|
// Yes, it's initialized. Check if the player is in creative
|
||||||
@@ -60,8 +62,8 @@ public class ItemStabilizedRiftSignature extends ItemRiftSignature
|
|||||||
//The link was used before and already has an endpoint stored. Create links connecting the two endpoints.
|
//The link was used before and already has an endpoint stored. Create links connecting the two endpoints.
|
||||||
NewDimData sourceDimension = PocketManager.getDimensionData(source.getDimension());
|
NewDimData sourceDimension = PocketManager.getDimensionData(source.getDimension());
|
||||||
NewDimData destinationDimension = PocketManager.getDimensionData(world);
|
NewDimData destinationDimension = PocketManager.getDimensionData(world);
|
||||||
DimLink link = sourceDimension.createLink(source.getX(), source.getY(), source.getZ(), LinkTypes.NORMAL);
|
DimLink link = sourceDimension.createLink(source.getX(), source.getY(), source.getZ(), LinkTypes.NORMAL,source.getOrientation());
|
||||||
DimLink reverse = destinationDimension.createLink(x, y, z, LinkTypes.NORMAL);
|
DimLink reverse = destinationDimension.createLink(x, y, z, LinkTypes.NORMAL,orientation);
|
||||||
destinationDimension.setDestination(link, x, y, z);
|
destinationDimension.setDestination(link, x, y, z);
|
||||||
sourceDimension.setDestination(reverse, source.getX(), source.getY(), source.getZ());
|
sourceDimension.setDestination(reverse, source.getX(), source.getY(), source.getZ());
|
||||||
|
|
||||||
@@ -89,7 +91,7 @@ public class ItemStabilizedRiftSignature extends ItemRiftSignature
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//The link signature has not been used. Store its current target as the first location.
|
//The link signature has not been used. Store its current target as the first location.
|
||||||
setSource(stack, x, y, z, PocketManager.getDimensionData(world));
|
setSource(stack, x, y, z, orientation, PocketManager.getDimensionData(world));
|
||||||
player.sendChatToPlayer("Location Stored in Rift Signature");
|
player.sendChatToPlayer("Location Stored in Rift Signature");
|
||||||
world.playSoundAtEntity(player,"mods.DimDoors.sfx.riftStart", 0.6f, 1);
|
world.playSoundAtEntity(player,"mods.DimDoors.sfx.riftStart", 0.6f, 1);
|
||||||
}
|
}
|
||||||
@@ -104,7 +106,7 @@ public class ItemStabilizedRiftSignature extends ItemRiftSignature
|
|||||||
@Override
|
@Override
|
||||||
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
|
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
|
||||||
{
|
{
|
||||||
Point4D source = getSource(par1ItemStack);
|
Point4DOrientation source = getSource(par1ItemStack);
|
||||||
if (source != null)
|
if (source != null)
|
||||||
{
|
{
|
||||||
par3List.add("Leads to (" + source.getX() + ", " + source.getY() + ", " + source.getZ() + ") at dimension #" + source.getDimension());
|
par3List.add("Leads to (" + source.getX() + ", " + source.getY() + ", " + source.getZ() + ") at dimension #" + source.getDimension());
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ public class mod_pocketDim
|
|||||||
transientDoor = new TransientDoor(properties.TransientDoorID, Material.iron, properties).setHardness(1.0F) .setUnlocalizedName("transientDoor");
|
transientDoor = new TransientDoor(properties.TransientDoorID, Material.iron, properties).setHardness(1.0F) .setUnlocalizedName("transientDoor");
|
||||||
goldDimDoor = new BlockGoldDimDoor(properties.GoldDimDoorID, Material.iron, properties).setHardness(1.0F) .setUnlocalizedName("dimDoorGold");
|
goldDimDoor = new BlockGoldDimDoor(properties.GoldDimDoorID, Material.iron, properties).setHardness(1.0F) .setUnlocalizedName("dimDoorGold");
|
||||||
|
|
||||||
goldDoor = new BlockDoorGold(properties.GoldDoorID, Material.iron, properties).setLightValue(1.0F).setHardness(0.1F).setUnlocalizedName("doorGold");
|
goldDoor = new BlockDoorGold(properties.GoldDoorID, Material.iron, properties).setHardness(0.1F).setUnlocalizedName("doorGold");
|
||||||
blockDimWall = new BlockDimWall(properties.FabricBlockID, 0, Material.iron).setLightValue(1.0F).setHardness(0.1F).setUnlocalizedName("blockDimWall");
|
blockDimWall = new BlockDimWall(properties.FabricBlockID, 0, Material.iron).setLightValue(1.0F).setHardness(0.1F).setUnlocalizedName("blockDimWall");
|
||||||
blockDimWallPerm = (new BlockDimWallPerm(properties.PermaFabricBlockID, 0, Material.iron)).setLightValue(1.0F).setBlockUnbreakable().setResistance(6000000.0F).setUnlocalizedName("blockDimWallPerm");
|
blockDimWallPerm = (new BlockDimWallPerm(properties.PermaFabricBlockID, 0, Material.iron)).setLightValue(1.0F).setBlockUnbreakable().setResistance(6000000.0F).setUnlocalizedName("blockDimWallPerm");
|
||||||
warpDoor = new WarpDoor(properties.WarpDoorID, Material.wood, properties).setHardness(1.0F) .setUnlocalizedName("dimDoorWarp");
|
warpDoor = new WarpDoor(properties.WarpDoorID, Material.wood, properties).setHardness(1.0F) .setUnlocalizedName("dimDoorWarp");
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ public class TileEntityDimDoor extends TileEntity
|
|||||||
public int orientation;
|
public int orientation;
|
||||||
public boolean hasExit;
|
public boolean hasExit;
|
||||||
public boolean isDungeonChainLink;
|
public boolean isDungeonChainLink;
|
||||||
|
public boolean hasGennedPair=false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -45,6 +46,8 @@ public class TileEntityDimDoor extends TileEntity
|
|||||||
|
|
||||||
this.isDungeonChainLink = nbt.getBoolean("isDungeonChainLink");
|
this.isDungeonChainLink = nbt.getBoolean("isDungeonChainLink");
|
||||||
|
|
||||||
|
this.hasGennedPair = nbt.getBoolean("hasGennedPair");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -69,6 +72,7 @@ public class TileEntityDimDoor extends TileEntity
|
|||||||
|
|
||||||
nbt.setBoolean("isDungeonChainLink", isDungeonChainLink);
|
nbt.setBoolean("isDungeonChainLink", isDungeonChainLink);
|
||||||
|
|
||||||
|
nbt.setBoolean("hasGennedPair", hasGennedPair);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
BIN
resources/mods/DimDoors/sfx/monkLarge.ogg
Normal file
BIN
resources/mods/DimDoors/sfx/monkLarge.ogg
Normal file
Binary file not shown.
Reference in New Issue
Block a user