diff --git a/.nb-gradle-properties b/.nb-gradle-properties index e9476996..f19514eb 100644 --- a/.nb-gradle-properties +++ b/.nb-gradle-properties @@ -1,6 +1,7 @@ + 1.8 run diff --git a/.nb-gradle/profiles/private/aux-config b/.nb-gradle/profiles/private/aux-config new file mode 100644 index 00000000..86847514 --- /dev/null +++ b/.nb-gradle/profiles/private/aux-config @@ -0,0 +1,21 @@ + + + + + + + + + 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/Rift.java b/src/main/java/com/zixiken/dimdoors/shared/Rift.java deleted file mode 100644 index a7e8281d..00000000 --- a/src/main/java/com/zixiken/dimdoors/shared/Rift.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package com.zixiken.dimdoors.shared; - -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; - -/** - * - * @author Robijnvogel - */ -class Rift { - - static Rift readFromNBT(int i, NBTTagCompound riftNBT) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - static NBTBase writeToNBT(Rift value) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - -} diff --git a/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java b/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java index 86e436b5..8aca806f 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java +++ b/src/main/java/com/zixiken/dimdoors/shared/RiftRegistry.java @@ -5,9 +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; /** @@ -19,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); - Rift rift = Rift.readFromNBT(i, riftNBT); - riftList.put(i, rift); + Location riftLocation = Location.readFromNBT(riftNBT); + riftList.put(i, riftLocation); i++; tag = "" + i; @@ -51,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(), Rift.writeToNBT(entry.getValue())); + for (Map.Entry entry : riftList.entrySet()) { + riftsNBT.setTag("" + entry.getKey(), Location.writeToNBT(entry.getValue())); } nbt.setTag("riftData", riftsNBT); } - public int registerNewRift(Rift 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 Rift 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 3bb5e1af..e2b90dae 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java @@ -1,7 +1,7 @@ package com.zixiken.dimdoors.tileentities; +import com.zixiken.dimdoors.shared.RiftRegistry; import java.util.Random; - import net.minecraft.block.state.IBlockState; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; @@ -9,6 +9,10 @@ import net.minecraft.world.World; public abstract class DDTileEntityBase extends TileEntity { + public boolean isPaired = false; + public int riftID; + public int pairedRiftID; + /** * * @return an array of floats representing RGBA color where 1.0 = 255. @@ -19,4 +23,32 @@ public abstract class DDTileEntityBase extends TileEntity public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) { return oldState.getBlock() != newSate.getBlock(); } + + public void pair(int otherRiftID) { + if (isPaired) { + if (otherRiftID == pairedRiftID) { + return; + } + else { + RiftRegistry.Instance.unpair(pairedRiftID); + } + } + pairedRiftID = otherRiftID; + RiftRegistry.Instance.pair(pairedRiftID, riftID); + isPaired = true; + } + + public void unpair() { + if (!isPaired) { + return; + } + else { + isPaired = false; + RiftRegistry.Instance.unpair(pairedRiftID); + } + } + + private void register() { + riftID = RiftRegistry.Instance.registerNewRift(this); + } } diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityRift.java b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityRift.java index 126e773a..5667c2a3 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityRift.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/TileEntityRift.java @@ -17,7 +17,7 @@ public class TileEntityRift extends DDTileEntityBase implements ITickable { private static final int MAX_ENDERMAN_SPAWNING_CHANCE = 32; private static final int HOSTILE_ENDERMAN_CHANCE = 1; private static final int MAX_HOSTILE_ENDERMAN_CHANCE = 3; - private static final int UPDATE_PERIOD = 200; + private static final int UPDATE_PERIOD = 200; //10 seconds private static Random random = new Random(); @@ -93,7 +93,7 @@ public class TileEntityRift extends DDTileEntityBase implements ITickable { private void closeRift() { world.setBlockToAir(pos); - growth--; + growth--; //@todo? } public boolean updateNearestRift() {