From f68c9ec4a2c7fa136ed11390883b13401d92c497 Mon Sep 17 00:00:00 2001 From: Mathijs Riezebos Date: Fri, 13 Jan 2017 01:08:21 +0100 Subject: [PATCH] Connected Rift-Link system to rift registry- and saving- system Merged functionality of "RiftHandler" class into "RiftRegistry" class Moved the "Location" class Why the RiftRegistry couples the Rift ID to the Rift **location** and the PocketRegistry couples the Pocket ID to the actual Pocket **instance**: -Each Rift is a Tile-Entity, which means that it has its infromation can be stored using the Tile-Entitiy's information saving system. -Each Pocket is barely more than an information storage container, which depends on having an external information saving system, which the PocketRegistry provides for it. --- .nb-gradle/profiles/private/aux-config | 14 +++++ .../zixiken/dimdoors/shared/DDSavedData.java | 2 - .../com/zixiken/dimdoors/shared/Location.java | 60 +++++++++++++++++++ .../zixiken/dimdoors/shared/RiftRegistry.java | 54 +++++++++++------ .../dimdoors/shared/RiftSavedData.java | 1 - .../tileentities/DDTileEntityBase.java | 20 ++----- .../com/zixiken/dimdoors/world/Location.java | 30 ---------- .../zixiken/dimdoors/world/RiftHandler.java | 57 ------------------ 8 files changed, 117 insertions(+), 121 deletions(-) create mode 100644 src/main/java/com/zixiken/dimdoors/shared/Location.java delete mode 100644 src/main/java/com/zixiken/dimdoors/world/Location.java delete mode 100644 src/main/java/com/zixiken/dimdoors/world/RiftHandler.java diff --git a/.nb-gradle/profiles/private/aux-config b/.nb-gradle/profiles/private/aux-config index 87245d6c..86847514 100644 --- a/.nb-gradle/profiles/private/aux-config +++ b/.nb-gradle/profiles/private/aux-config @@ -2,6 +2,20 @@ + + + + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/shared/DDSavedData.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/DimDoors.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/server/DDProxyServer.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/shared/Pocket.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/DDProxyCommon.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/shared/RiftSavedData.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/shared/Location.java + + diff --git a/src/main/java/com/zixiken/dimdoors/shared/DDSavedData.java b/src/main/java/com/zixiken/dimdoors/shared/DDSavedData.java index 7f56fb7b..4eca4cc2 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/DDSavedData.java +++ b/src/main/java/com/zixiken/dimdoors/shared/DDSavedData.java @@ -5,11 +5,9 @@ */ package com.zixiken.dimdoors.shared; -import com.zixiken.dimdoors.DimDoors; import java.io.File; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; -import net.minecraftforge.fml.common.FMLCommonHandler; /** * diff --git a/src/main/java/com/zixiken/dimdoors/shared/Location.java b/src/main/java/com/zixiken/dimdoors/shared/Location.java new file mode 100644 index 00000000..58adecb0 --- /dev/null +++ b/src/main/java/com/zixiken/dimdoors/shared/Location.java @@ -0,0 +1,60 @@ +package com.zixiken.dimdoors.shared; + +import com.zixiken.dimdoors.tileentities.DDTileEntityBase; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +/** + * + * @author Robijnvogel + */ +public class Location { + + public int dimensionID; + public BlockPos pos; + + Location(int dimID, int x, int y, int z) { + this.dimensionID = dimID; + pos = new BlockPos(x, y, z); + } + + Location(int dimID, BlockPos pos) { + this.dimensionID = dimID; + this.pos = pos.up(0); //copyOf + } + + public TileEntity getTileEntity() { + World world = DimensionManager.getWorld(dimensionID); //@todo HOW? + return world.getTileEntity(pos); + } + + static Location getLocation(TileEntity tileEntity) { + World world = tileEntity.getWorld(); + int dimID = world.provider.getDimension(); + BlockPos blockPos = tileEntity.getPos(); + return new Location(dimID, blockPos); + } + + static NBTBase writeToNBT(Location location) { + NBTTagCompound locationNBT = new NBTTagCompound(); + locationNBT.setInteger("worldID", location.dimensionID); + locationNBT.setInteger("x", location.pos.getX()); + locationNBT.setInteger("y", location.pos.getY()); + locationNBT.setInteger("z", location.pos.getZ()); + return locationNBT; + } + + static Location readFromNBT(NBTTagCompound locationNBT) { + int worldID = locationNBT.getInteger("worldID"); + int x = locationNBT.getInteger("x"); + int y = locationNBT.getInteger("y"); + int z = locationNBT.getInteger("z"); + BlockPos blockPos = new BlockPos(x, y, z); + return new Location(worldID, blockPos); + } + +} diff --git a/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java b/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java index d07afd77..8aca806f 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java +++ b/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java @@ -5,10 +5,12 @@ */ package com.zixiken.dimdoors.shared; +import com.zixiken.dimdoors.DimDoors; import com.zixiken.dimdoors.tileentities.DDTileEntityBase; import java.util.HashMap; import java.util.Map; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; /** @@ -20,30 +22,30 @@ public class RiftRegistry { public static final RiftRegistry Instance = new RiftRegistry(); // Privates - private int nextUnusedID; - private final Map riftList; + private int nextRiftID; + private final Map riftList; // Methods public RiftRegistry() { - nextUnusedID = 0; + nextRiftID = 0; riftList = new HashMap(); } public void reset() { - nextUnusedID = 0; + nextRiftID = 0; riftList.clear(); } public void readFromNBT(NBTTagCompound nbt) { - nextUnusedID = nbt.getInteger("nextUnusedID"); + nextRiftID = nbt.getInteger("nextUnusedID"); if (nbt.hasKey("riftData")) { NBTTagCompound riftsNBT = nbt.getCompoundTag("riftData"); int i = 1; String tag = "" + i; while (riftsNBT.hasKey(tag)) { NBTTagCompound riftNBT = riftsNBT.getCompoundTag(tag); - DDTileEntityBase rift = DDTileEntityBase.readFromNBT(i, riftNBT); - riftList.put(i, rift); + Location riftLocation = Location.readFromNBT(riftNBT); + riftList.put(i, riftLocation); i++; tag = "" + i; @@ -52,30 +54,48 @@ public class RiftRegistry { } public void writeToNBT(NBTTagCompound nbt) { - nbt.setInteger("nextUnusedID", nextUnusedID); + nbt.setInteger("nextUnusedID", nextRiftID); NBTTagCompound riftsNBT = new NBTTagCompound(); - for (Map.Entry entry : riftList.entrySet()) { - riftsNBT.setTag("" + entry.getKey(), DDTileEntityBase.writeToNBT(entry.getValue())); + for (Map.Entry entry : riftList.entrySet()) { + riftsNBT.setTag("" + entry.getKey(), Location.writeToNBT(entry.getValue())); } nbt.setTag("riftData", riftsNBT); } - public int registerNewRift(DDTileEntityBase rift, World world) { - riftList.put(nextUnusedID, rift); + public int registerNewRift(DDTileEntityBase rift) { + riftList.put(nextRiftID, Location.getLocation(rift)); - nextUnusedID++; - RiftSavedData.get(world).markDirty(); //Notify that this needs to be saved on world save - return nextUnusedID -1; + nextRiftID++; + RiftSavedData.get(DimDoors.getDefWorld()).markDirty(); //Notify that this needs to be saved on world save + return nextRiftID -1; } public void removeRift(int riftID, World world) { if (riftList.containsKey(riftID)) { riftList.remove(riftID); - RiftSavedData.get(world).markDirty(); //Notify that this needs to be saved on world save + RiftSavedData.get(DimDoors.getDefWorld()).markDirty(); //Notify that this needs to be saved on world save } } - public DDTileEntityBase getRift(int ID) { + public Location getRiftLocation(int ID) { return riftList.get(ID); } + + public void pair(int riftID, int riftID2) { + Location location = riftList.get(riftID); + TileEntity tileEntity = location.getTileEntity(); //@todo this method might need to be in another class? + if (tileEntity != null && tileEntity instanceof DDTileEntityBase) { + DDTileEntityBase rift = (DDTileEntityBase) tileEntity; + rift.pair(riftID2); + } + } + + public void unpair(int riftID) { + Location location = riftList.get(riftID); + TileEntity tileEntity = location.getTileEntity(); + if (tileEntity != null && tileEntity instanceof DDTileEntityBase) { + DDTileEntityBase rift = (DDTileEntityBase) tileEntity; + rift.unpair(); + } + } } diff --git a/src/main/java/com/zixiken/dimdoors/shared/RiftSavedData.java b/src/main/java/com/zixiken/dimdoors/shared/RiftSavedData.java index 34ffbeca..84060c73 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/RiftSavedData.java +++ b/src/main/java/com/zixiken/dimdoors/shared/RiftSavedData.java @@ -5,7 +5,6 @@ */ package com.zixiken.dimdoors.shared; -import com.zixiken.dimdoors.DimDoors; import java.io.File; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java index 10321252..e2b90dae 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java @@ -1,10 +1,8 @@ package com.zixiken.dimdoors.tileentities; -import com.zixiken.dimdoors.world.RiftHandler; +import com.zixiken.dimdoors.shared.RiftRegistry; import java.util.Random; - import net.minecraft.block.state.IBlockState; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -27,36 +25,30 @@ public abstract class DDTileEntityBase extends TileEntity } public void pair(int otherRiftID) { - RiftHandler rifthandler; if (isPaired) { if (otherRiftID == pairedRiftID) { return; } else { - rifthandler.unpair(pairedRiftID); + RiftRegistry.Instance.unpair(pairedRiftID); } } pairedRiftID = otherRiftID; - rifthandler.pair(pairedRiftID, riftID); + RiftRegistry.Instance.pair(pairedRiftID, riftID); isPaired = true; } public void unpair() { - RiftHandler rifthandler; if (!isPaired) { return; } else { isPaired = false; - rifthandler.unpair(pairedRiftID); + RiftRegistry.Instance.unpair(pairedRiftID); } } - public static NBTTagCompound writeToNBT(DDTileEntityBase rift) { - - } - - public static DDTileEntityBase readFromNBT(int dim, NBTTagCompound riftNBT) { - + private void register() { + riftID = RiftRegistry.Instance.registerNewRift(this); } } diff --git a/src/main/java/com/zixiken/dimdoors/world/Location.java b/src/main/java/com/zixiken/dimdoors/world/Location.java deleted file mode 100644 index 10fa2a72..00000000 --- a/src/main/java/com/zixiken/dimdoors/world/Location.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.zixiken.dimdoors.world; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -/** - * - * @author Robijnvogel - */ -public class Location { - public String dimensionUID; - public BlockPos pos; - - Location(String dimUID, int x, int y, int z) { - this.dimensionUID = dimUID; - pos = new BlockPos(x, y, z); - } - - Location(String dimUID, BlockPos pos) { - this.dimensionUID = dimUID; - this.pos = pos.up(0); //copyOf - } - - TileEntity getTileEntity() { - World world = getWorld(dimensionUID); //@todo HOW? - return world.getTileEntity(pos); - } - -} diff --git a/src/main/java/com/zixiken/dimdoors/world/RiftHandler.java b/src/main/java/com/zixiken/dimdoors/world/RiftHandler.java deleted file mode 100644 index 735742ff..00000000 --- a/src/main/java/com/zixiken/dimdoors/world/RiftHandler.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.zixiken.dimdoors.world; - -import com.zixiken.dimdoors.tileentities.DDTileEntityBase; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import net.minecraft.tileentity.TileEntity; - -/** - * - * @author Robijnvogel - */ -public class RiftHandler { - private Map riftLocations; //it needs to be a Map if we want to be able to remove rifts without the IDs shifting (as would happen in a List - private int nextRiftID; - - RiftHandler() { //@todo don't forget to create one object of this class at world-load - riftLocations = new HashMap<>(); - nextRiftID = 0; - readfromNBT(); //and also add a method to write to NBT - } - - public int addRift(Location location) { - int riftID = nextRiftID; - nextRiftID++; - riftLocations.put(riftID, location); - return riftID; - } - - public void removeRift(int riftID, Location location) { - riftLocations.remove(riftID); - } - - public Location getLocation(int riftID) { - Location location = riftLocations.get(riftID); - return location; - } - - public void pair(int riftID, int riftID2) { - Location location = riftLocations.get(riftID); - TileEntity tileEntity = location.getTileEntity(); //@todo this method might need to be in another class? - if (tileEntity != null && tileEntity instanceof DDTileEntityBase) { - DDTileEntityBase rift = (DDTileEntityBase) tileEntity; - rift.pair(riftID2); - } - } - - public void unpair(int riftID) { - Location location = riftLocations.get(riftID); - TileEntity tileEntity = location.getTileEntity(); - if (tileEntity != null && tileEntity instanceof DDTileEntityBase) { - DDTileEntityBase rift = (DDTileEntityBase) tileEntity; - rift.unpair(); - } - } -}