diff --git a/StevenDimDoors/mod_pocketDim/ServerPacketHandler.java b/StevenDimDoors/mod_pocketDim/ServerPacketHandler.java index e8eb51a..4735712 100644 --- a/StevenDimDoors/mod_pocketDim/ServerPacketHandler.java +++ b/StevenDimDoors/mod_pocketDim/ServerPacketHandler.java @@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; +import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; import StevenDimDoors.mod_pocketDim.core.PocketManager; @@ -40,16 +41,16 @@ public class ServerPacketHandler implements IPacketHandler } } - private static class LinkWatcher implements IUpdateWatcher + private static class LinkWatcher implements IUpdateWatcher { @Override - public void onCreated(Point4D message) + public void onCreated(ClientLinkData message) { sendLinkPacket(PacketConstants.CREATE_LINK_PACKET_ID, message); } @Override - public void onDeleted(Point4D message) + public void onDeleted(ClientLinkData message) { sendLinkPacket(PacketConstants.DELETE_LINK_PACKET_ID, message); } @@ -77,7 +78,7 @@ public class ServerPacketHandler implements IPacketHandler } } - private static void sendLinkPacket(byte id, Point4D data) + private static void sendLinkPacket(byte id, ClientLinkData message) { try { @@ -85,7 +86,7 @@ public class ServerPacketHandler implements IPacketHandler ByteArrayOutputStream buffer = new ByteArrayOutputStream(); DataOutputStream writer = new DataOutputStream(buffer); writer.writeByte(id); - Point4D.write(data, writer); + message.write(writer); writer.close(); packet.channel = PacketConstants.CHANNEL_NAME; packet.data = buffer.toByteArray(); diff --git a/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java b/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java index bd67f06..4d78abf 100644 --- a/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java +++ b/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java @@ -469,7 +469,7 @@ public class DDTeleporter { if(PocketManager.isBlackListed(link.destination().getDimension())) { - link=PocketManager.getDimensionData(link.source().getDimension()).createLink(link.source,LinkTypes.SAFE_EXIT,link.orientation); + link=PocketManager.getDimensionData(link.source().getDimension()).createLink(link.link.point,LinkTypes.SAFE_EXIT,link.link.orientation); } else { @@ -545,7 +545,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.source.getDimension()); + NewDimData current = PocketManager.getDimensionData(link.link.point.getDimension()); if (current.isPocketDimension()) { Point4D source = link.source(); @@ -569,7 +569,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.source.getZ()); + TileEntity doorTE = startWorld.getBlockTileEntity(link.source().getX(), link.source().getY(), link.link.point.getZ()); if(doorTE instanceof TileEntityDimDoor) { if((TileEntityDimDoor.class.cast(doorTE).hasGennedPair)) @@ -599,7 +599,7 @@ public class DDTeleporter } private static boolean generateSafeExit(DimLink link, DDProperties properties) { - NewDimData current = PocketManager.getDimensionData(link.source.getDimension()); + NewDimData current = PocketManager.getDimensionData(link.link.point.getDimension()); return generateSafeExit(current.root(), link, properties); } @@ -608,7 +608,7 @@ public class DDTeleporter // A dungeon exit acts the same as a safe exit, but has the chance of // taking the user to any non-pocket dimension, excluding Limbo and The End. - NewDimData current = PocketManager.getDimensionData(link.source.getDimension()); + NewDimData current = PocketManager.getDimensionData(link.link.point.getDimension()); ArrayList roots = PocketManager.getRootDimensions(); int shiftChance = START_ROOT_SHIFT_CHANCE + ROOT_SHIFT_CHANCE_PER_LEVEL * (current.packDepth() - 1); diff --git a/StevenDimDoors/mod_pocketDim/core/DimLink.java b/StevenDimDoors/mod_pocketDim/core/DimLink.java index 0b89b30..7b0d18a 100644 --- a/StevenDimDoors/mod_pocketDim/core/DimLink.java +++ b/StevenDimDoors/mod_pocketDim/core/DimLink.java @@ -4,46 +4,56 @@ import java.util.LinkedList; import java.util.List; import StevenDimDoors.mod_pocketDim.util.Point4D; +import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData; + public abstract class DimLink { - protected Point4D source; + protected ClientLinkData link; protected DimLink parent; protected LinkTail tail; - protected int orientation; protected List children; - protected DimLink(Point4D source, DimLink parent, int orientation) + protected DimLink(ClientLinkData link, DimLink parent) { - if (parent.source.getDimension() != source.getDimension()) + if (parent.link.point.getDimension() != link.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.orientation=orientation; this.parent = parent; - this.source = source; + this.link = link; this.tail = parent.tail; this.children = new LinkedList(); parent.children.add(this); } - protected DimLink(Point4D source, int linkType, int orientation) + protected DimLink(ClientLinkData link, int linkType) { if ((linkType < LinkTypes.ENUM_MIN || linkType > LinkTypes.ENUM_MAX) && linkType != LinkTypes.CLIENT_SIDE) { throw new IllegalArgumentException("The specified link type is invalid."); } - this.orientation = orientation; + this.parent = null; - this.source = source; + this.link = link; this.tail = new LinkTail(linkType, null); this.children = new LinkedList(); } public Point4D source() { - return source; + return link.point; + } + + public int orientation() + { + return link.orientation; + } + + public ClientLinkData link() + { + return link; } public Point4D destination() @@ -52,7 +62,7 @@ public abstract class DimLink } public int getDestinationOrientation() { - return PocketManager.getLink(source.getX(), source.getY(), source.getZ(), source.getDimension()).orientation(); + return PocketManager.getLink(link.point.getX(), link.point.getY(), link.point.getZ(), link.point.getDimension()).link().orientation; } public boolean hasDestination() { @@ -78,13 +88,9 @@ public abstract class DimLink { return tail.getLinkType(); } - public int orientation() - { - return orientation; - } public String toString() { - return source + " -> " + (hasDestination() ? destination() : ""); + return link.point + " -> " + (hasDestination() ? destination() : ""); } } diff --git a/StevenDimDoors/mod_pocketDim/core/NewDimData.java b/StevenDimDoors/mod_pocketDim/core/NewDimData.java index 8cf98a7..2311584 100644 --- a/StevenDimDoors/mod_pocketDim/core/NewDimData.java +++ b/StevenDimDoors/mod_pocketDim/core/NewDimData.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Random; import java.util.TreeMap; +import StevenDimDoors.mod_pocketDim.watcher.ClientLinkData; import net.minecraft.world.World; import StevenDimDoors.mod_pocketDim.DDProperties; import StevenDimDoors.mod_pocketDim.Point3D; @@ -21,12 +22,12 @@ public abstract class NewDimData { public InnerDimLink(Point4D source, DimLink parent,int orientation) { - super(source, parent,orientation); + super(new ClientLinkData(source, orientation), parent); } public InnerDimLink(Point4D source, int linkType, int orientation) { - super(source, linkType,orientation); + super(new ClientLinkData(source, orientation), linkType); } public void setDestination(int x, int y, int z, NewDimData dimension) @@ -50,7 +51,7 @@ public abstract class NewDimData } parent = null; - source = null; + link = null; tail = new LinkTail(0, null); } @@ -65,7 +66,7 @@ public abstract class NewDimData //Ignore this request silently return false; } - if (nextParent.source.getDimension() != source.getDimension()) + if (nextParent.link.point.getDimension() != link.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 +89,7 @@ public abstract class NewDimData parent = nextParent; tail = nextParent.tail; nextParent.children.add(this); - this.orientation=orientation; + this.link.orientation=orientation; return true; } @@ -111,7 +112,7 @@ public abstract class NewDimData parent = null; tail = new LinkTail(linkType, null); //Set new orientation - this.orientation=orientation; + this.link.orientation=orientation; } } @@ -130,10 +131,10 @@ public abstract class NewDimData protected Point4D origin; protected int orientation; protected DungeonData dungeon; - protected IUpdateWatcher linkWatcher; + protected IUpdateWatcher linkWatcher; protected NewDimData(int id, NewDimData parent, boolean isPocket, boolean isDungeon, - IUpdateWatcher linkWatcher) + IUpdateWatcher linkWatcher) { // The isPocket flag is redundant. It's meant as an integrity safeguard. if (isPocket && (parent == null)) @@ -267,7 +268,7 @@ public abstract class NewDimData //Link created! if(linkType!=LinkTypes.CLIENT_SIDE) { - linkWatcher.onCreated(link.source); + linkWatcher.onCreated(link.link); } return link; } @@ -290,19 +291,19 @@ public abstract class NewDimData InnerDimLink link = linkMapping.get(source); if (link == null) { - link = new InnerDimLink(source, parent, parent.orientation); + link = new InnerDimLink(source, parent, parent.link.orientation); linkMapping.put(source, link); linkList.add(link); //Link created! - linkWatcher.onCreated(link.source); + linkWatcher.onCreated(link.link); } else { - if (link.overwrite(parent, parent.orientation)) + if (link.overwrite(parent, parent.link.orientation)) { //Link created! - linkWatcher.onCreated(link.source); + linkWatcher.onCreated(link.link); } } return link; @@ -319,7 +320,7 @@ public abstract class NewDimData { linkList.remove(target); //Raise deletion event - linkWatcher.onDeleted(target.source); + linkWatcher.onDeleted(target.link); target.clear(); } return (target != null); @@ -334,9 +335,9 @@ public abstract class NewDimData linkList.remove(target); //Raise deletion event //TODO why is source null here? - if(target.source!=null) + if(target.link!=null) { - linkWatcher.onDeleted(target.source); + linkWatcher.onDeleted(target.link); } target.clear(); } diff --git a/StevenDimDoors/mod_pocketDim/core/PocketManager.java b/StevenDimDoors/mod_pocketDim/core/PocketManager.java index 4dd6c1c..f24e4f3 100644 --- a/StevenDimDoors/mod_pocketDim/core/PocketManager.java +++ b/StevenDimDoors/mod_pocketDim/core/PocketManager.java @@ -47,7 +47,7 @@ public class PocketManager // that any link destinations must be real dimensions controlled by PocketManager. public InnerDimData(int id, InnerDimData parent, boolean isPocket, boolean isDungeon, - IUpdateWatcher linkWatcher) + IUpdateWatcher linkWatcher) { super(id, parent, isPocket, isDungeon, linkWatcher); } @@ -119,7 +119,7 @@ public class PocketManager Point3D parentPoint = new Point3D(-1,-1,-1); if(link.parent!=null) { - parentPoint=link.parent.source.toPoint3D(); + parentPoint=link.parent.link.point.toPoint3D(); } for(DimLink childLink : link.children) @@ -127,7 +127,7 @@ public class PocketManager children.add(childLink.source().toPoint3D()); } PackedLinkTail tail = new PackedLinkTail(link.tail.getDestination(),link.tail.getLinkType()); - Links.add(new PackedLinkData(link.source,parentPoint,tail,link.orientation,children)); + 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)) @@ -212,7 +212,7 @@ public class PocketManager * Set as true if we are a client that has connected to a dedicated server */ public static volatile boolean isConnected = false; - private static final UpdateWatcherProxy linkWatcher = new UpdateWatcherProxy(); + private static final UpdateWatcherProxy linkWatcher = new UpdateWatcherProxy(); private static final UpdateWatcherProxy dimWatcher = new UpdateWatcherProxy(); private static ArrayList rootDimensions = null; @@ -650,12 +650,12 @@ public class PocketManager return dimWatcher.unregisterReceiver(watcher); } - public static void registerLinkWatcher(IUpdateWatcher watcher) + public static void registerLinkWatcher(IUpdateWatcher watcher) { linkWatcher.registerReceiver(watcher); } - public static boolean unregisterLinkWatcher(IUpdateWatcher watcher) + public static boolean unregisterLinkWatcher(IUpdateWatcher watcher) { return linkWatcher.unregisterReceiver(watcher); } diff --git a/StevenDimDoors/mod_pocketDim/watcher/ClientDimData.java b/StevenDimDoors/mod_pocketDim/watcher/ClientDimData.java index 7614a10..c0df886 100644 --- a/StevenDimDoors/mod_pocketDim/watcher/ClientDimData.java +++ b/StevenDimDoors/mod_pocketDim/watcher/ClientDimData.java @@ -32,6 +32,8 @@ public class ClientDimData public static ClientDimData read(DataInputStream input) throws IOException { - return new ClientDimData(input.readInt(), input.readInt()); + int id = input.readInt(); + int rootId = input.readInt(); + return new ClientDimData(id, rootId); } } diff --git a/StevenDimDoors/mod_pocketDim/watcher/ClientLinkData.java b/StevenDimDoors/mod_pocketDim/watcher/ClientLinkData.java index 1b9fac1..5670542 100644 --- a/StevenDimDoors/mod_pocketDim/watcher/ClientLinkData.java +++ b/StevenDimDoors/mod_pocketDim/watcher/ClientLinkData.java @@ -32,7 +32,9 @@ public class ClientLinkData public static ClientLinkData read(DataInputStream input) throws IOException { - return new ClientLinkData(Point4D.read(input), input.readInt()); + Point4D point = Point4D.read(input); + int orientation = input.readInt(); + return new ClientLinkData(point, orientation); } }