added locking doors and cleaned up
This commit is contained in:
parent
ac9b3d73e8
commit
8f9dfea947
23 changed files with 507 additions and 277 deletions
|
@ -1,7 +1,6 @@
|
|||
package StevenDimDoors.mod_pocketDim.blocks;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockDoor;
|
||||
import net.minecraft.block.ITileEntityProvider;
|
||||
|
@ -11,7 +10,7 @@ import net.minecraft.client.renderer.texture.IconRegister;
|
|||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Icon;
|
||||
import net.minecraft.util.MathHelper;
|
||||
|
@ -22,7 +21,8 @@ import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
|||
import StevenDimDoors.mod_pocketDim.core.DDTeleporter;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.schematic.BlockRotator;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemDDKey;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemDDLockCreator;
|
||||
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityDimDoor;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
@ -74,6 +74,12 @@ public abstract class BaseDimDoor extends BlockDoor implements IDimDoor, ITileEn
|
|||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
|
||||
{
|
||||
|
||||
if(!checkCanOpen(world, x, y, z, player))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final int MAGIC_CONSTANT = 1003;
|
||||
|
||||
int metadata = this.getFullMetadata(world, x, y, z);
|
||||
|
@ -92,6 +98,7 @@ public abstract class BaseDimDoor extends BlockDoor implements IDimDoor, ITileEn
|
|||
}
|
||||
|
||||
world.playAuxSFXAtEntity(player, MAGIC_CONSTANT, x, y, z, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -188,21 +195,33 @@ public abstract class BaseDimDoor extends BlockDoor implements IDimDoor, ITileEn
|
|||
|
||||
public boolean isDoorOnRift(World world, int x, int y, int z)
|
||||
{
|
||||
if(this.isUpperDoorBlock( world.getBlockMetadata(x, y, z)))
|
||||
return this.getLink(world, x, y, z) != null;
|
||||
}
|
||||
public DimLink getLink(World world, int x, int y, int z)
|
||||
{
|
||||
DimLink link= PocketManager.getLink(x, y, z, world.provider.dimensionId);
|
||||
if(link!=null)
|
||||
{
|
||||
if(PocketManager.getLink(x, y, z, world.provider.dimensionId) != null||PocketManager.getLink(x, y-1, z, world.provider.dimensionId) != null)
|
||||
return link;
|
||||
}
|
||||
|
||||
if(isUpperDoorBlock( world.getBlockMetadata(x, y, z)))
|
||||
{
|
||||
link = PocketManager.getLink(x, y-1, z, world.provider.dimensionId);
|
||||
if(link!=null)
|
||||
{
|
||||
return true;
|
||||
return link;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(PocketManager.getLink(x, y, z, world.provider.dimensionId) != null||PocketManager.getLink(x, y+1, z, world.provider.dimensionId) != null)
|
||||
link = PocketManager.getLink(x, y+1, z, world.provider.dimensionId);
|
||||
if(link != null)
|
||||
{
|
||||
return true;
|
||||
return link;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -312,6 +331,10 @@ public abstract class BaseDimDoor extends BlockDoor implements IDimDoor, ITileEn
|
|||
@Override
|
||||
public void onNeighborBlockChange(World world, int x, int y, int z, int neighborID)
|
||||
{
|
||||
if(this.hasLock(world, x, y, z))
|
||||
{
|
||||
return;
|
||||
}
|
||||
int metadata = world.getBlockMetadata(x, y, z);
|
||||
if (isUpperDoorBlock(metadata))
|
||||
{
|
||||
|
@ -429,16 +452,63 @@ public abstract class BaseDimDoor extends BlockDoor implements IDimDoor, ITileEn
|
|||
}
|
||||
}
|
||||
|
||||
public static boolean isUpperDoorBlock(int metadata)
|
||||
public boolean isUpperDoorBlock(int metadata)
|
||||
{
|
||||
return (metadata & 8) != 0;
|
||||
}
|
||||
|
||||
public static boolean isDoorOpen(int metadata)
|
||||
public boolean isDoorOpen(int metadata)
|
||||
{
|
||||
return (metadata & 4) != 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasLock(World world, int x, int y, int z)
|
||||
{
|
||||
DimLink link = getLink(world, x, y, z);
|
||||
if(link!=null&&link.isLocked())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean checkCanOpen(World world, int x, int y, int z)
|
||||
{
|
||||
return this.checkCanOpen(world, x, y, z, null);
|
||||
}
|
||||
|
||||
public boolean checkCanOpen(World world, int x, int y, int z, EntityPlayer player)
|
||||
{
|
||||
if(!hasLock(world, x, y, z))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if(player == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
DimLink link = getLink(world, x, y, z);
|
||||
ItemStack itemStack;
|
||||
|
||||
for(ItemStack item : player.inventory.mainInventory)
|
||||
{
|
||||
if(item != null)
|
||||
{
|
||||
if(item.getItem() instanceof ItemDDKey)
|
||||
{
|
||||
if(ItemDDKey.getBoundLink(item)==link)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
protected static boolean isEntityFacingDoor(int metadata, EntityLivingBase entity)
|
||||
{
|
||||
// Although any entity has the proper fields for this check,
|
||||
|
|
|
@ -16,109 +16,25 @@ import net.minecraft.world.IBlockAccess;
|
|||
|
||||
public class BlockDoorGold extends BlockDoor
|
||||
{
|
||||
@SideOnly(Side.CLIENT)
|
||||
private Icon[] upperTextures;
|
||||
@SideOnly(Side.CLIENT)
|
||||
private Icon[] lowerTextures;
|
||||
|
||||
public BlockDoorGold(int par1, Material par2Material)
|
||||
{
|
||||
super(par1, par2Material);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IconRegister iconRegister)
|
||||
{
|
||||
upperTextures = new Icon[2];
|
||||
lowerTextures = new Icon[2];
|
||||
upperTextures[0] = iconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName() + "_upper");
|
||||
lowerTextures[0] = iconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName() + "_lower");
|
||||
upperTextures[1] = new IconFlipped(upperTextures[0], true, false);
|
||||
lowerTextures[1] = new IconFlipped(lowerTextures[0], true, false);
|
||||
}
|
||||
@SideOnly(Side.CLIENT)
|
||||
protected String getTextureName()
|
||||
{
|
||||
return mod_pocketDim.modid + ":" + this.getUnlocalizedName();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int idDropped(int par1, Random par2Random, int par3)
|
||||
{
|
||||
return (par1 & 8) != 0 ? 0 : mod_pocketDim.itemGoldenDoor.itemID;
|
||||
}
|
||||
|
||||
/**
|
||||
* From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
|
||||
*/
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public Icon getIcon(int side, int metadata)
|
||||
{
|
||||
return this.upperTextures[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side
|
||||
*/
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public Icon getBlockTexture(IBlockAccess blockAccess, int x, int y, int z, int side)
|
||||
{
|
||||
if (side != 1 && side != 0)
|
||||
{
|
||||
int fullMetadata = this.getFullMetadata(blockAccess, x, y, z);
|
||||
int orientation = fullMetadata & 3;
|
||||
boolean reversed = false;
|
||||
|
||||
if (BaseDimDoor.isDoorOpen(fullMetadata))
|
||||
{
|
||||
if (orientation == 0 && side == 2)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
else if (orientation == 1 && side == 5)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
else if (orientation == 2 && side == 3)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
else if (orientation == 3 && side == 4)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (orientation == 0 && side == 5)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
else if (orientation == 1 && side == 3)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
else if (orientation == 2 && side == 4)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
else if (orientation == 3 && side == 2)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
|
||||
if ((fullMetadata & 16) != 0)
|
||||
{
|
||||
reversed = !reversed;
|
||||
}
|
||||
}
|
||||
|
||||
if (BaseDimDoor.isUpperDoorBlock(fullMetadata))
|
||||
return this.upperTextures[reversed ? 1 : 0];
|
||||
else
|
||||
return this.lowerTextures[reversed ? 1 : 0];
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.lowerTextures[0];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,4 +13,7 @@ public interface IDimDoor
|
|||
public int getDrops();
|
||||
|
||||
public TileEntity initDoorTE(World world, int x, int y, int z);
|
||||
|
||||
public boolean isDoorOnRift(World world, int x, int y, int z);
|
||||
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
|||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.tileentities.TileEntityTransTrapdoor;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class TransTrapdoor extends BlockTrapDoor implements IDimDoor, ITileEntityProvider
|
||||
{
|
||||
|
||||
|
@ -126,4 +125,10 @@ public class TransTrapdoor extends BlockTrapDoor implements IDimDoor, ITileEntit
|
|||
world.setBlockTileEntity(x, y, z, te);
|
||||
return te;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDoorOnRift(World world, int x, int y, int z)
|
||||
{
|
||||
return PocketManager.getLink(x, y, z, world)!=null;
|
||||
}
|
||||
}
|
|
@ -62,11 +62,11 @@ public class CommandResetDungeons extends DDCommandBase
|
|||
{
|
||||
if(link.linkType()==LinkTypes.REVERSE)
|
||||
{
|
||||
data.createLink(link.source(), LinkTypes.DUNGEON_EXIT, link.orientation());
|
||||
data.createLink(link.source(), LinkTypes.DUNGEON_EXIT, link.orientation(), false);
|
||||
}
|
||||
if(link.linkType()==LinkTypes.DUNGEON)
|
||||
{
|
||||
data.createLink(link.source(), LinkTypes.DUNGEON, link.orientation());
|
||||
data.createLink(link.source(), LinkTypes.DUNGEON, link.orientation(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,6 +46,8 @@ public class DDProperties
|
|||
public final int UnstableDoorItemID;
|
||||
public final int WarpDoorItemID;
|
||||
public final int WorldThreadItemID;
|
||||
public final int DDKeyItemID;
|
||||
public final int DDLockCreatorItemID;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -204,6 +206,8 @@ public class DDProperties
|
|||
GoldenDoorItemID = config.getItem("Gold Door Item ID", 5678).getInt();
|
||||
GoldenDimensionalDoorItemID = config.getItem("Gold Dim Door Item ID", 5679).getInt();
|
||||
WorldThreadItemID = config.getItem("World Thread Item ID", 5680).getInt();
|
||||
DDKeyItemID = config.getItem("Rift Key Item ID", 5681).getInt();
|
||||
DDLockCreatorItemID = config.getItem("Rift Interlock Item ID", 5682).getInt();
|
||||
|
||||
LimboBlockID = config.getTerrainBlock("World Generation Block IDs - must be less than 256", "Limbo Block ID", 217,
|
||||
"Blocks used for the terrain in Limbo").getInt();
|
||||
|
|
|
@ -485,7 +485,7 @@ public class DDTeleporter
|
|||
{
|
||||
if(PocketManager.isBlackListed(link.destination().getDimension()))
|
||||
{
|
||||
link=PocketManager.getDimensionData(link.source().getDimension()).createLink(link.link.point,LinkTypes.SAFE_EXIT,link.link.orientation);
|
||||
link=PocketManager.getDimensionData(link.source().getDimension()).createLink(link.point,LinkTypes.SAFE_EXIT,link.orientation, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -561,7 +561,7 @@ public class DDTeleporter
|
|||
// To avoid loops, don't generate a destination if the player is
|
||||
// already in a non-pocket dimension.
|
||||
|
||||
NewDimData current = PocketManager.getDimensionData(link.link.point.getDimension());
|
||||
NewDimData current = PocketManager.getDimensionData(link.point.getDimension());
|
||||
if (current.isPocketDimension())
|
||||
{
|
||||
Point4D source = link.source();
|
||||
|
@ -585,7 +585,7 @@ public class DDTeleporter
|
|||
{
|
||||
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.link.point.getZ());
|
||||
TileEntity doorTE = startWorld.getBlockTileEntity(link.source().getX(), link.source().getY(), link.point.getZ());
|
||||
if(doorTE instanceof TileEntityDimDoor)
|
||||
{
|
||||
if((TileEntityDimDoor.class.cast(doorTE).hasGennedPair))
|
||||
|
@ -617,7 +617,7 @@ public class DDTeleporter
|
|||
}
|
||||
private static boolean generateSafeExit(DimLink link, DDProperties properties)
|
||||
{
|
||||
NewDimData current = PocketManager.getDimensionData(link.link.point.getDimension());
|
||||
NewDimData current = PocketManager.getDimensionData(link.point.getDimension());
|
||||
return generateSafeExit(current.root(), link, properties);
|
||||
}
|
||||
|
||||
|
@ -628,7 +628,7 @@ public class DDTeleporter
|
|||
// There is a chance of choosing the Nether first before other root dimensions
|
||||
// to compensate for servers with many Mystcraft ages or other worlds.
|
||||
|
||||
NewDimData current = PocketManager.getDimensionData(link.link.point.getDimension());
|
||||
NewDimData current = PocketManager.getDimensionData(link.point.getDimension());
|
||||
ArrayList<NewDimData> roots = PocketManager.getRootDimensions();
|
||||
int shiftChance = START_ROOT_SHIFT_CHANCE + ROOT_SHIFT_CHANCE_PER_LEVEL * (current.packDepth() - 1);
|
||||
|
||||
|
|
|
@ -8,27 +8,31 @@ import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData;
|
|||
|
||||
public abstract class DimLink
|
||||
{
|
||||
protected ClientLinkData link;
|
||||
protected Point4D point;
|
||||
protected int orientation;
|
||||
protected boolean isLocked;
|
||||
protected DimLink parent;
|
||||
protected LinkTail tail;
|
||||
protected List<DimLink> children;
|
||||
|
||||
protected DimLink(ClientLinkData link, DimLink parent)
|
||||
protected DimLink(Point4D point, int orientation, boolean locked, DimLink parent)
|
||||
{
|
||||
|
||||
if (parent.link.point.getDimension() != link.point.getDimension())
|
||||
if (parent.point.getDimension() != point.getDimension())
|
||||
{
|
||||
// Ban having children in other dimensions to avoid serialization issues with cross-dimensional tails
|
||||
throw new IllegalArgumentException("source and parent.source must have the same dimension.");
|
||||
}
|
||||
this.parent = parent;
|
||||
this.link = link;
|
||||
this.point = point;
|
||||
this.tail = parent.tail;
|
||||
this.orientation = orientation;
|
||||
this.isLocked = locked;
|
||||
this.children = new LinkedList<DimLink>();
|
||||
parent.children.add(this);
|
||||
}
|
||||
|
||||
protected DimLink(ClientLinkData link, int linkType)
|
||||
protected DimLink(Point4D point, int orientation, boolean locked, int linkType)
|
||||
{
|
||||
if ((linkType < LinkTypes.ENUM_MIN || linkType > LinkTypes.ENUM_MAX) && linkType != LinkTypes.CLIENT_SIDE)
|
||||
{
|
||||
|
@ -36,24 +40,41 @@ public abstract class DimLink
|
|||
}
|
||||
|
||||
this.parent = null;
|
||||
this.link = link;
|
||||
this.point = point;
|
||||
this.orientation = orientation;
|
||||
this.isLocked = locked;
|
||||
this.tail = new LinkTail(linkType, null);
|
||||
this.children = new LinkedList<DimLink>();
|
||||
}
|
||||
|
||||
public Point4D source()
|
||||
{
|
||||
return link.point;
|
||||
return point;
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
//Release children
|
||||
for (DimLink child : children)
|
||||
{
|
||||
child.parent = null;
|
||||
}
|
||||
children.clear();
|
||||
|
||||
//Release parent
|
||||
if (parent != null)
|
||||
{
|
||||
parent.children.remove(this);
|
||||
}
|
||||
|
||||
parent = null;
|
||||
point = null;
|
||||
tail = new LinkTail(0, null);
|
||||
}
|
||||
|
||||
public int orientation()
|
||||
{
|
||||
return link.orientation;
|
||||
}
|
||||
|
||||
public ClientLinkData link()
|
||||
{
|
||||
return link;
|
||||
return orientation;
|
||||
}
|
||||
|
||||
public Point4D destination()
|
||||
|
@ -93,9 +114,19 @@ public abstract class DimLink
|
|||
{
|
||||
return tail.getLinkType();
|
||||
}
|
||||
|
||||
public boolean isLocked()
|
||||
{
|
||||
return isLocked;
|
||||
}
|
||||
|
||||
public void setLocked(boolean bol)
|
||||
{
|
||||
isLocked = bol;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return link.point + " -> " + (hasDestination() ? destination() : "");
|
||||
return point + " -> " + (hasDestination() ? destination() : "");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,5 +28,4 @@ class LinkTail
|
|||
public void setLinkType(int linkType) {
|
||||
this.linkType = linkType;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,21 +12,26 @@ import StevenDimDoors.mod_pocketDim.Point3D;
|
|||
import StevenDimDoors.mod_pocketDim.config.DDProperties;
|
||||
import StevenDimDoors.mod_pocketDim.dungeon.DungeonData;
|
||||
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
||||
import StevenDimDoors.mod_pocketDim.saving.IPackable;
|
||||
import StevenDimDoors.mod_pocketDim.saving.PackedDimData;
|
||||
import StevenDimDoors.mod_pocketDim.saving.PackedDungeonData;
|
||||
import StevenDimDoors.mod_pocketDim.saving.PackedLinkData;
|
||||
import StevenDimDoors.mod_pocketDim.saving.PackedLinkTail;
|
||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||
import StevenDimDoors.mod_pocketDim.watcher.IUpdateWatcher;
|
||||
|
||||
public abstract class NewDimData
|
||||
public abstract class NewDimData implements IPackable<PackedDimData>
|
||||
{
|
||||
private static class InnerDimLink extends DimLink
|
||||
{
|
||||
public InnerDimLink(Point4D source, DimLink parent, int orientation)
|
||||
public InnerDimLink(Point4D source, DimLink parent, int orientation, boolean isLocked)
|
||||
{
|
||||
super(new ClientLinkData(source, orientation), parent);
|
||||
super(source, orientation, isLocked, parent);
|
||||
}
|
||||
|
||||
public InnerDimLink(Point4D source, int linkType, int orientation)
|
||||
public InnerDimLink(Point4D source, int linkType, int orientation, boolean isLocked)
|
||||
{
|
||||
super(new ClientLinkData(source, orientation), linkType);
|
||||
super(source, orientation, isLocked, linkType);
|
||||
}
|
||||
|
||||
public void setDestination(int x, int y, int z, NewDimData dimension)
|
||||
|
@ -34,26 +39,6 @@ public abstract class NewDimData
|
|||
tail.setDestination(new Point4D(x, y, z, dimension.id()));
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
//Release children
|
||||
for (DimLink child : children)
|
||||
{
|
||||
((InnerDimLink) child).parent = null;
|
||||
}
|
||||
children.clear();
|
||||
|
||||
//Release parent
|
||||
if (parent != null)
|
||||
{
|
||||
parent.children.remove(this);
|
||||
}
|
||||
|
||||
parent = null;
|
||||
link = null;
|
||||
tail = new LinkTail(0, null);
|
||||
}
|
||||
|
||||
public boolean overwrite(InnerDimLink nextParent,int orientation)
|
||||
{
|
||||
if (nextParent == null)
|
||||
|
@ -65,7 +50,7 @@ public abstract class NewDimData
|
|||
//Ignore this request silently
|
||||
return false;
|
||||
}
|
||||
if (nextParent.link.point.getDimension() != link.point.getDimension())
|
||||
if (nextParent.point.getDimension() != point.getDimension())
|
||||
{
|
||||
// Ban having children in other dimensions to avoid serialization issues with cross-dimensional tails
|
||||
throw new IllegalArgumentException("source and parent.source must have the same dimension.");
|
||||
|
@ -88,7 +73,7 @@ public abstract class NewDimData
|
|||
parent = nextParent;
|
||||
tail = nextParent.tail;
|
||||
nextParent.children.add(this);
|
||||
this.link.orientation=orientation;
|
||||
this.orientation=orientation;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -111,7 +96,7 @@ public abstract class NewDimData
|
|||
parent = null;
|
||||
tail = new LinkTail(linkType, null);
|
||||
//Set new orientation
|
||||
this.link.orientation=orientation;
|
||||
this.orientation=orientation;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -294,16 +279,16 @@ public abstract class NewDimData
|
|||
|
||||
public DimLink createLink(int x, int y, int z, int linkType, int orientation)
|
||||
{
|
||||
return createLink(new Point4D(x, y, z, id), linkType, orientation);
|
||||
return createLink(new Point4D(x, y, z, id), linkType, orientation, false);
|
||||
}
|
||||
|
||||
public DimLink createLink(Point4D source, int linkType, int orientation)
|
||||
public DimLink createLink(Point4D source, int linkType, int orientation, boolean locked)
|
||||
{
|
||||
//Return an existing link if there is one to avoid creating multiple links starting at the same point.
|
||||
InnerDimLink link = linkMapping.get(source);
|
||||
if (link == null)
|
||||
{
|
||||
link = new InnerDimLink(source, linkType, orientation);
|
||||
link = new InnerDimLink(source, linkType, orientation, locked);
|
||||
linkMapping.put(source, link);
|
||||
linkList.add(link);
|
||||
}
|
||||
|
@ -316,42 +301,41 @@ public abstract class NewDimData
|
|||
//Link created!
|
||||
if (linkType != LinkTypes.CLIENT_SIDE)
|
||||
{
|
||||
linkWatcher.onCreated(link.link);
|
||||
linkWatcher.onCreated(new ClientLinkData(link));
|
||||
}
|
||||
return link;
|
||||
}
|
||||
|
||||
public DimLink createChildLink(int x, int y, int z, DimLink parent)
|
||||
{
|
||||
if (parent == null)
|
||||
{
|
||||
throw new IllegalArgumentException("parent cannot be null.");
|
||||
}
|
||||
|
||||
return createChildLink(new Point4D(x, y, z, id), (InnerDimLink) parent);
|
||||
return createChildLink(new Point4D(x, y, z, id), (InnerDimLink) parent, false);
|
||||
}
|
||||
|
||||
private DimLink createChildLink(Point4D source, InnerDimLink parent)
|
||||
public DimLink createChildLink(Point4D source, DimLink parent, boolean locked)
|
||||
{
|
||||
//To avoid having multiple links at a single point, if we find an existing link then we overwrite
|
||||
//its destination data instead of creating a new instance.
|
||||
|
||||
if (parent == null)
|
||||
{
|
||||
throw new IllegalArgumentException("parent cannot be null.");
|
||||
}
|
||||
InnerDimLink link = linkMapping.get(source);
|
||||
if (link == null)
|
||||
{
|
||||
link = new InnerDimLink(source, parent, parent.link.orientation);
|
||||
link = new InnerDimLink(source, parent, parent.orientation, locked);
|
||||
linkMapping.put(source, link);
|
||||
linkList.add(link);
|
||||
|
||||
//Link created!
|
||||
linkWatcher.onCreated(link.link);
|
||||
linkWatcher.onCreated(new ClientLinkData(link));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (link.overwrite(parent, parent.link.orientation))
|
||||
if (link.overwrite((InnerDimLink) parent, parent.orientation))
|
||||
{
|
||||
//Link created!
|
||||
linkWatcher.onCreated(link.link);
|
||||
linkWatcher.onCreated(new ClientLinkData(link));
|
||||
}
|
||||
}
|
||||
modified = true;
|
||||
|
@ -369,7 +353,7 @@ public abstract class NewDimData
|
|||
{
|
||||
linkList.remove(target);
|
||||
//Raise deletion event
|
||||
linkWatcher.onDeleted(target.link);
|
||||
linkWatcher.onDeleted(new ClientLinkData(link));
|
||||
target.clear();
|
||||
modified = true;
|
||||
}
|
||||
|
@ -605,6 +589,102 @@ public abstract class NewDimData
|
|||
this.modified = false;
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
// If this dimension has a parent, remove it from its parent's list of children
|
||||
if (parent != null)
|
||||
{
|
||||
parent.children.remove(this);
|
||||
}
|
||||
// Remove this dimension as the parent of its children
|
||||
for (NewDimData child : children)
|
||||
{
|
||||
child.parent = null;
|
||||
}
|
||||
// Clear all fields
|
||||
id = Integer.MIN_VALUE;
|
||||
linkMapping.clear();
|
||||
linkMapping = null;
|
||||
linkList.clear();
|
||||
linkList = null;
|
||||
children.clear();
|
||||
children = null;
|
||||
isDungeon = false;
|
||||
isFilled = false;
|
||||
depth = Integer.MIN_VALUE;
|
||||
packDepth = Integer.MIN_VALUE;
|
||||
origin = null;
|
||||
orientation = Integer.MIN_VALUE;
|
||||
dungeon = null;
|
||||
linkWatcher = null;
|
||||
}
|
||||
|
||||
public PackedDimData pack()
|
||||
{
|
||||
ArrayList<Integer> ChildIDs = new ArrayList<Integer>();
|
||||
ArrayList<PackedLinkData> Links = new ArrayList<PackedLinkData>();
|
||||
ArrayList<PackedLinkTail> Tails = new ArrayList<PackedLinkTail>();
|
||||
PackedDungeonData packedDungeon=null;
|
||||
|
||||
if(this.dungeon!=null)
|
||||
{
|
||||
packedDungeon= new PackedDungeonData(dungeon.weight(), dungeon.isOpen(), dungeon.isInternal(),
|
||||
dungeon.schematicPath(), dungeon.schematicName(), dungeon.dungeonType().Name,
|
||||
dungeon.dungeonType().Owner.getName());
|
||||
}
|
||||
//Make a list of children
|
||||
for(NewDimData data : this.children)
|
||||
{
|
||||
ChildIDs.add(data.id);
|
||||
}
|
||||
for(DimLink link:this.links())
|
||||
{
|
||||
ArrayList<Point3D> children = new ArrayList<Point3D>();
|
||||
Point3D parentPoint = new Point3D(-1,-1,-1);
|
||||
if(link.parent!=null)
|
||||
{
|
||||
parentPoint=link.parent.point.toPoint3D();
|
||||
}
|
||||
|
||||
for(DimLink childLink : link.children)
|
||||
{
|
||||
children.add(childLink.source().toPoint3D());
|
||||
}
|
||||
PackedLinkTail tail = new PackedLinkTail(link.tail.getDestination(),link.tail.getLinkType());
|
||||
Links.add(new PackedLinkData(link.point,parentPoint,tail,link.orientation,children,link.isLocked()));
|
||||
|
||||
PackedLinkTail tempTail = new PackedLinkTail(link.tail.getDestination(),link.tail.getLinkType());
|
||||
if(Tails.contains(tempTail))
|
||||
{
|
||||
Tails.add(tempTail);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
int parentID=this.id;
|
||||
Point3D originPoint=new Point3D(0,0,0);
|
||||
if(this.parent!=null)
|
||||
{
|
||||
parentID = this.parent.id;
|
||||
}
|
||||
if(this.origin!=null)
|
||||
{
|
||||
originPoint=this.origin.toPoint3D();
|
||||
}
|
||||
return new PackedDimData(this.id, depth, this.packDepth, parentID, this.root().id(), orientation,
|
||||
isDungeon, isFilled,packedDungeon, originPoint, ChildIDs, Links, Tails);
|
||||
// FIXME: IMPLEMENTATION PLZTHX
|
||||
//I tried
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name()
|
||||
{
|
||||
return String.valueOf(id);
|
||||
}
|
||||
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return "DimID= " + this.id;
|
||||
|
|
|
@ -41,7 +41,7 @@ import StevenDimDoors.mod_pocketDim.watcher.UpdateWatcherProxy;
|
|||
*/
|
||||
public class PocketManager
|
||||
{
|
||||
private static class InnerDimData extends NewDimData implements IPackable<PackedDimData>
|
||||
private static class InnerDimData extends NewDimData
|
||||
{
|
||||
// This class allows us to instantiate NewDimData indirectly without exposing
|
||||
// a public constructor from NewDimData. It's meant to stop us from constructing
|
||||
|
@ -59,102 +59,7 @@ public class PocketManager
|
|||
// This constructor is meant for client-side code only
|
||||
super(id, root);
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
// If this dimension has a parent, remove it from its parent's list of children
|
||||
if (parent != null)
|
||||
{
|
||||
parent.children.remove(this);
|
||||
}
|
||||
// Remove this dimension as the parent of its children
|
||||
for (NewDimData child : children)
|
||||
{
|
||||
child.parent = null;
|
||||
}
|
||||
// Clear all fields
|
||||
id = Integer.MIN_VALUE;
|
||||
linkMapping.clear();
|
||||
linkMapping = null;
|
||||
linkList.clear();
|
||||
linkList = null;
|
||||
children.clear();
|
||||
children = null;
|
||||
isDungeon = false;
|
||||
isFilled = false;
|
||||
depth = Integer.MIN_VALUE;
|
||||
packDepth = Integer.MIN_VALUE;
|
||||
origin = null;
|
||||
orientation = Integer.MIN_VALUE;
|
||||
dungeon = null;
|
||||
linkWatcher = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name()
|
||||
{
|
||||
return String.valueOf(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PackedDimData pack()
|
||||
{
|
||||
ArrayList<Integer> ChildIDs = new ArrayList<Integer>();
|
||||
ArrayList<PackedLinkData> Links = new ArrayList<PackedLinkData>();
|
||||
ArrayList<PackedLinkTail> Tails = new ArrayList<PackedLinkTail>();
|
||||
PackedDungeonData packedDungeon=null;
|
||||
|
||||
if(this.dungeon!=null)
|
||||
{
|
||||
packedDungeon= new PackedDungeonData(dungeon.weight(), dungeon.isOpen(), dungeon.isInternal(),
|
||||
dungeon.schematicPath(), dungeon.schematicName(), dungeon.dungeonType().Name,
|
||||
dungeon.dungeonType().Owner.getName());
|
||||
}
|
||||
//Make a list of children
|
||||
for(NewDimData data : this.children)
|
||||
{
|
||||
ChildIDs.add(data.id);
|
||||
}
|
||||
for(DimLink link:this.links())
|
||||
{
|
||||
ArrayList<Point3D> children = new ArrayList<Point3D>();
|
||||
Point3D parentPoint = new Point3D(-1,-1,-1);
|
||||
if(link.parent!=null)
|
||||
{
|
||||
parentPoint=link.parent.link.point.toPoint3D();
|
||||
}
|
||||
|
||||
for(DimLink childLink : link.children)
|
||||
{
|
||||
children.add(childLink.source().toPoint3D());
|
||||
}
|
||||
PackedLinkTail tail = new PackedLinkTail(link.tail.getDestination(),link.tail.getLinkType());
|
||||
Links.add(new PackedLinkData(link.link.point,parentPoint,tail,link.link.orientation,children));
|
||||
|
||||
PackedLinkTail tempTail = new PackedLinkTail(link.tail.getDestination(),link.tail.getLinkType());
|
||||
if(Tails.contains(tempTail))
|
||||
{
|
||||
Tails.add(tempTail);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
int parentID=this.id;
|
||||
Point3D originPoint=new Point3D(0,0,0);
|
||||
if(this.parent!=null)
|
||||
{
|
||||
parentID = this.parent.id;
|
||||
}
|
||||
if(this.origin!=null)
|
||||
{
|
||||
originPoint=this.origin.toPoint3D();
|
||||
}
|
||||
return new PackedDimData(this.id, depth, this.packDepth, parentID, this.root().id(), orientation,
|
||||
isDungeon, isFilled,packedDungeon, originPoint, ChildIDs, Links, Tails);
|
||||
// FIXME: IMPLEMENTATION PLZTHX
|
||||
//I tried
|
||||
}
|
||||
}
|
||||
|
||||
private static class ClientLinkWatcher implements IUpdateWatcher<ClientLinkData>
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
package StevenDimDoors.mod_pocketDim.items;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.renderer.texture.IconRegister;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
|
||||
public class ItemDDKey extends Item
|
||||
{
|
||||
public ItemDDKey(int itemID)
|
||||
{
|
||||
super(itemID);
|
||||
this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerIcons(IconRegister par1IconRegister)
|
||||
{
|
||||
this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", ""));
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean hasEffect(ItemStack par1ItemStack)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void setBoundDoor(ItemStack itemStack, DimLink link)
|
||||
{
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
|
||||
int x = link.source().getX();
|
||||
int y = link.source().getY();
|
||||
int z = link.source().getZ();
|
||||
|
||||
tag.setInteger("linkX", x);
|
||||
tag.setInteger("linkY", y);
|
||||
tag.setInteger("linkZ", z);
|
||||
tag.setInteger("linkDimID", link.source().getDimension());
|
||||
|
||||
itemStack.setTagCompound(tag);
|
||||
itemStack.setItemDamage(1);
|
||||
}
|
||||
|
||||
public static DimLink getBoundLink(ItemStack itemStack)
|
||||
{
|
||||
if (itemStack.hasTagCompound())
|
||||
{
|
||||
NBTTagCompound tag = itemStack.getTagCompound();
|
||||
|
||||
Integer x = tag.getInteger("linkX");
|
||||
Integer y = tag.getInteger("linkY");
|
||||
Integer z = tag.getInteger("linkZ");
|
||||
Integer dimID = tag.getInteger("linkDimID");
|
||||
|
||||
if (x != null && y != null && z != null && dimID != null)
|
||||
{
|
||||
return PocketManager.getLink(x, y, z, dimID);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
package StevenDimDoors.mod_pocketDim.items;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.texture.IconRegister;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import net.minecraft.world.World;
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
||||
import StevenDimDoors.mod_pocketDim.core.DimLink;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemRiftSignature.Point4DOrientation;
|
||||
|
||||
public class ItemDDLockCreator extends Item
|
||||
{
|
||||
public ItemDDLockCreator(int itemID)
|
||||
{
|
||||
super(itemID);
|
||||
this.setCreativeTab(mod_pocketDim.dimDoorsCreativeTab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerIcons(IconRegister par1IconRegister)
|
||||
{
|
||||
this.itemIcon = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName().replace("item.", ""));
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean hasEffect(ItemStack itemStack)
|
||||
{
|
||||
return itemStack.hasTagCompound();
|
||||
}
|
||||
|
||||
public boolean onItemUseFirst(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side, float playerX, float playerY, float playerZ)
|
||||
{
|
||||
|
||||
int blockID = world.getBlockId(x, y, z);
|
||||
if(!(Block.blocksList[blockID] instanceof IDimDoor))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
DimLink link = PocketManager.getLink(x, y, z, world);
|
||||
if(link==null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(itemStack.hasTagCompound())
|
||||
{
|
||||
if(link == getBoundLink(itemStack))
|
||||
{
|
||||
link.setLocked(!link.isLocked());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
setBoundDoor(itemStack,link);
|
||||
link.setLocked(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void setBoundDoor(ItemStack itemStack, DimLink link)
|
||||
{
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
|
||||
int x = link.source().getX();
|
||||
int y = link.source().getY();
|
||||
int z = link.source().getZ();
|
||||
|
||||
|
||||
tag.setInteger("linkX", x);
|
||||
tag.setInteger("linkY", y);
|
||||
tag.setInteger("linkZ", z);
|
||||
tag.setInteger("linkDimID", link.source().getDimension());
|
||||
|
||||
itemStack.setTagCompound(tag);
|
||||
itemStack.setItemDamage(1);
|
||||
}
|
||||
|
||||
public DimLink getBoundLink(ItemStack itemStack)
|
||||
{
|
||||
if (itemStack.hasTagCompound())
|
||||
{
|
||||
NBTTagCompound tag = itemStack.getTagCompound();
|
||||
|
||||
Integer x = tag.getInteger("linkX");
|
||||
Integer y = tag.getInteger("linkY");
|
||||
Integer z = tag.getInteger("linkZ");
|
||||
Integer dimID = tag.getInteger("linkDimID");
|
||||
|
||||
if (x != null && y != null && z != null && dimID != null)
|
||||
{
|
||||
return PocketManager.getLink(x, y, z, dimID);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getItemStackDisplayName(ItemStack par1ItemStack)
|
||||
{
|
||||
return StatCollector.translateToLocal(this.getUnlocalizedName(par1ItemStack) + ".name");
|
||||
}
|
||||
|
||||
}
|
|
@ -42,6 +42,8 @@ import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
|||
import StevenDimDoors.mod_pocketDim.helpers.ChunkLoaderHelper;
|
||||
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemBlockDimWall;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemDDKey;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemDDLockCreator;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemGoldDimDoor;
|
||||
import StevenDimDoors.mod_pocketDim.items.ItemGoldDoor;
|
||||
|
@ -136,6 +138,8 @@ public class mod_pocketDim
|
|||
public static Item itemStableFabric;
|
||||
public static Item itemUnstableDoor;
|
||||
public static Item itemStabilizedLinkSignature;
|
||||
public static Item itemDDKey;
|
||||
public static Item itemDDLockCreator;
|
||||
|
||||
public static BiomeGenBase limboBiome;
|
||||
public static BiomeGenBase pocketBiome;
|
||||
|
@ -209,6 +213,8 @@ public class mod_pocketDim
|
|||
dimensionalDoor = (DimensionalDoor) (new DimensionalDoor(properties.DimensionalDoorID, Material.iron, properties).setHardness(1.0F).setResistance(2000.0F) .setUnlocalizedName("dimDoor"));
|
||||
transTrapdoor = (TransTrapdoor) (new TransTrapdoor(properties.TransTrapdoorID, Material.wood).setHardness(1.0F) .setUnlocalizedName("dimHatch"));
|
||||
|
||||
itemDDKey = (new ItemDDKey(properties.DDKeyItemID)).setUnlocalizedName("itemDDKey");
|
||||
itemDDLockCreator = (new ItemDDLockCreator(properties.DDLockCreatorItemID)).setUnlocalizedName("itemDDLockCreator");
|
||||
itemGoldenDoor = (new ItemGoldDoor(properties.GoldenDoorItemID, Material.wood)).setUnlocalizedName("itemGoldDoor");
|
||||
itemGoldenDimensionalDoor = (new ItemGoldDimDoor(properties.GoldenDimensionalDoorItemID, Material.iron, (ItemDoor)this.itemGoldenDoor)).setUnlocalizedName("itemGoldDimDoor");
|
||||
itemDimensionalDoor = (ItemDimensionalDoor) (new ItemDimensionalDoor(properties.DimensionalDoorItemID, Material.iron, (ItemDoor)Item.doorIron)).setUnlocalizedName("itemDimDoor");
|
||||
|
@ -272,6 +278,8 @@ public class mod_pocketDim
|
|||
LanguageRegistry.addName(itemDimensionalDoor, "Dimensional Door");
|
||||
LanguageRegistry.addName(itemRiftBlade, "Rift Blade");
|
||||
LanguageRegistry.addName(itemWorldThread, "World Thread");
|
||||
LanguageRegistry.addName(itemDDKey, "Unbound Rift Key");
|
||||
LanguageRegistry.addName(itemDDLockCreator, "Unbound Rift Interlock");
|
||||
|
||||
/**
|
||||
* Add names for multiblock inventory item
|
||||
|
|
|
@ -197,7 +197,7 @@ public class DDSaveHandler
|
|||
linkType = LinkTypes.NORMAL;
|
||||
}
|
||||
|
||||
DimLink link = data.createLink(packedLink.source, linkType, packedLink.orientation);
|
||||
DimLink link = data.createLink(packedLink.source, linkType, packedLink.orientation, packedLink.locked);
|
||||
Point4D destination = packedLink.tail.destination;
|
||||
if(destination!=null)
|
||||
{
|
||||
|
@ -216,7 +216,7 @@ public class DDSaveHandler
|
|||
NewDimData data = PocketManager.getDimensionData(packedLink.source.getDimension());
|
||||
if(data.getLink(packedLink.parent)!=null)
|
||||
{
|
||||
data.createChildLink(packedLink.source.getX(), packedLink.source.getY(), packedLink.source.getZ(), data.getLink(packedLink.parent));
|
||||
data.createChildLink(packedLink.source, data.getLink(packedLink.parent), packedLink.locked);
|
||||
}
|
||||
unpackedLinks.add(packedLink);
|
||||
}
|
||||
|
|
|
@ -202,6 +202,8 @@ public class DimDataProcessor extends BaseConfigurationProcessor<PackedDimData>
|
|||
|
||||
private PackedLinkData createLinkDataFromJson(JsonReader reader) throws IOException
|
||||
{
|
||||
boolean locked = false;
|
||||
|
||||
Point4D source;
|
||||
Point3D parent;
|
||||
PackedLinkTail tail;
|
||||
|
@ -230,9 +232,16 @@ public class DimDataProcessor extends BaseConfigurationProcessor<PackedDimData>
|
|||
children.add(this.createPointFromJson(reader));
|
||||
}
|
||||
reader.endArray();
|
||||
|
||||
if(reader.peek()== JsonToken.NAME)
|
||||
{
|
||||
reader.nextName();
|
||||
locked = reader.nextBoolean();
|
||||
|
||||
}
|
||||
reader.endObject();
|
||||
|
||||
return new PackedLinkData(source, parent, tail, orientation, children);
|
||||
return new PackedLinkData(source, parent, tail, orientation, children, locked);
|
||||
}
|
||||
private PackedDungeonData createDungeonDataFromJson(JsonReader reader) throws IOException
|
||||
{
|
||||
|
@ -293,6 +302,7 @@ public class DimDataProcessor extends BaseConfigurationProcessor<PackedDimData>
|
|||
}
|
||||
|
||||
linkType = reader.nextInt();
|
||||
|
||||
reader.endObject();
|
||||
|
||||
return new PackedLinkTail(destination, linkType);
|
||||
|
|
|
@ -80,7 +80,7 @@ public class OldSaveImporter
|
|||
PackedLinkTail tail = new PackedLinkTail(destintion, link.linkOrientation);
|
||||
List<Point3D> children = new ArrayList<Point3D>();
|
||||
|
||||
PackedLinkData newPackedLink = new PackedLinkData(source, new Point3D(-1,-1,-1), tail, link.linkOrientation,children);
|
||||
PackedLinkData newPackedLink = new PackedLinkData(source, new Point3D(-1,-1,-1), tail, link.linkOrientation,children, false);
|
||||
|
||||
newPackedLinkData.add(newPackedLink);
|
||||
allPackedLinks.add(newPackedLink);
|
||||
|
|
|
@ -12,13 +12,15 @@ public class PackedLinkData
|
|||
public final PackedLinkTail tail;
|
||||
public final int orientation;
|
||||
public final List<Point3D> children;
|
||||
public final boolean locked;
|
||||
|
||||
public PackedLinkData(Point4D source, Point3D parent, PackedLinkTail tail, int orientation, List<Point3D> children)
|
||||
public PackedLinkData(Point4D source, Point3D parent, PackedLinkTail tail, int orientation, List<Point3D> children, boolean locked)
|
||||
{
|
||||
this.source=source;
|
||||
this.parent=parent;
|
||||
this.tail=tail;
|
||||
this.orientation=orientation;
|
||||
this.children=children;
|
||||
this.locked = locked;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
|||
import StevenDimDoors.mod_pocketDim.blocks.IDimDoor;
|
||||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.packet.Packet;
|
||||
|
@ -32,7 +33,7 @@ public class TileEntityDimDoor extends DDTileEntityBase
|
|||
{
|
||||
if(PocketManager.getLink(xCoord, yCoord, zCoord, worldObj)!=null)
|
||||
{
|
||||
return ServerPacketHandler.createLinkPacket(PocketManager.getLink(xCoord, yCoord, zCoord, worldObj).link());
|
||||
return ServerPacketHandler.createLinkPacket(new ClientLinkData(PocketManager.getLink(xCoord, yCoord, zCoord, worldObj)));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ import StevenDimDoors.mod_pocketDim.core.DimLink;
|
|||
import StevenDimDoors.mod_pocketDim.core.NewDimData;
|
||||
import StevenDimDoors.mod_pocketDim.core.PocketManager;
|
||||
import StevenDimDoors.mod_pocketDim.util.Point4D;
|
||||
import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData;
|
||||
|
||||
public class TileEntityRift extends DDTileEntityBase
|
||||
{
|
||||
|
@ -375,7 +376,7 @@ public class TileEntityRift extends DDTileEntityBase
|
|||
{
|
||||
if (PocketManager.getLink(xCoord, yCoord, zCoord, worldObj) != null)
|
||||
{
|
||||
return ServerPacketHandler.createLinkPacket(PocketManager.getLink(xCoord, yCoord, zCoord, worldObj).link());
|
||||
return ServerPacketHandler.createLinkPacket(new ClientLinkData(PocketManager.getLink(xCoord, yCoord, zCoord, worldObj)));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -11,30 +11,35 @@ public class ClientLinkData
|
|||
{
|
||||
public Point4D point;
|
||||
public int orientation;
|
||||
public boolean isLocked;
|
||||
|
||||
public ClientLinkData(DimLink link)
|
||||
{
|
||||
this.point= link.source();
|
||||
this.orientation=link.orientation();
|
||||
this.isLocked = link.isLocked();
|
||||
}
|
||||
|
||||
public ClientLinkData(Point4D point, int orientation)
|
||||
public ClientLinkData(Point4D point, int orientation, boolean isLocked)
|
||||
{
|
||||
this.point = point;
|
||||
this.orientation=orientation;
|
||||
this.isLocked = isLocked;
|
||||
}
|
||||
|
||||
public void write(DataOutputStream output) throws IOException
|
||||
{
|
||||
Point4D.write(point, output);
|
||||
output.writeInt(orientation);
|
||||
output.writeBoolean(isLocked);
|
||||
}
|
||||
|
||||
public static ClientLinkData read(DataInputStream input) throws IOException
|
||||
{
|
||||
Point4D point = Point4D.read(input);
|
||||
int orientation = input.readInt();
|
||||
return new ClientLinkData(point, orientation);
|
||||
boolean isLocked = input.readBoolean();
|
||||
return new ClientLinkData(point, orientation, isLocked);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package StevenDimDoors.mod_pocketDim.world;
|
||||
|
||||
public interface ILockable
|
||||
{
|
||||
|
||||
}
|
|
@ -66,7 +66,7 @@ public class PocketBuilder
|
|||
if(originLink==null)
|
||||
{
|
||||
int orientation = linkIn.orientation();
|
||||
originLink=dimension.createLink(oldLinkPos, LinkTypes.SAFE_EXIT, (orientation+2)%4);
|
||||
originLink=dimension.createLink(oldLinkPos, LinkTypes.SAFE_EXIT, (orientation+2)%4, false);
|
||||
return false;
|
||||
}
|
||||
//The link that originally created the dungeon on the way in
|
||||
|
@ -75,7 +75,7 @@ public class PocketBuilder
|
|||
{
|
||||
int orientation = linkIn.orientation();
|
||||
dimension.deleteLink(originLink);
|
||||
dimension.createLink(oldLinkPos, LinkTypes.SAFE_EXIT, (orientation+2)%4);
|
||||
dimension.createLink(oldLinkPos, LinkTypes.SAFE_EXIT, (orientation+2)%4, false);
|
||||
return false;
|
||||
}
|
||||
NewDimData parent = PocketManager.getDimensionData(incomingLink.source().getDimension());
|
||||
|
|
Loading…
Reference in a new issue