From 1b2d4ad20ac20b13164d28a0a145356738fe18e2 Mon Sep 17 00:00:00 2001 From: Mathijs Riezebos Date: Thu, 12 Jan 2017 01:11:55 +0100 Subject: [PATCH] Implementing a way to handle rift-connections 001 Made a start It doesn't compile yet --- .nb-gradle-properties | 1 + .nb-gradle/profiles/private/aux-config | 13 +++++ .../tileentities/DDTileEntityBase.java | 31 ++++++++++ .../dimdoors/tileentities/TileEntityRift.java | 4 +- .../com/zixiken/dimdoors/world/Location.java | 30 ++++++++++ .../zixiken/dimdoors/world/RiftHandler.java | 57 +++++++++++++++++++ 6 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 .nb-gradle/profiles/private/aux-config create mode 100644 src/main/java/com/zixiken/dimdoors/world/Location.java create mode 100644 src/main/java/com/zixiken/dimdoors/world/RiftHandler.java 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..a983afe9 --- /dev/null +++ b/.nb-gradle/profiles/private/aux-config @@ -0,0 +1,13 @@ + + + + + + + + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/CommonProxy.java + file:/C:/Users/Gebruiker/Documents/GitHub/DimDoors/src/main/java/com/zixiken/dimdoors/ModelManager.java + + + + diff --git a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java index 3bb5e1af..f7c03f9f 100644 --- a/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java +++ b/src/main/java/com/zixiken/dimdoors/tileentities/DDTileEntityBase.java @@ -1,5 +1,6 @@ package com.zixiken.dimdoors.tileentities; +import com.zixiken.dimdoors.world.RiftHandler; import java.util.Random; import net.minecraft.block.state.IBlockState; @@ -9,6 +10,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 +24,30 @@ 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) { + RiftHandler rifthandler; + if (isPaired) { + if (otherRiftID == pairedRiftID) { + return; + } + else { + rifthandler.unpair(pairedRiftID); + } + } + pairedRiftID = otherRiftID; + rifthandler.pair(pairedRiftID, riftID); + isPaired = true; + } + + public void unpair() { + RiftHandler rifthandler; + if (!isPaired) { + return; + } + else { + isPaired = false; + rifthandler.unpair(pairedRiftID); + } + } } 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() { diff --git a/src/main/java/com/zixiken/dimdoors/world/Location.java b/src/main/java/com/zixiken/dimdoors/world/Location.java new file mode 100644 index 00000000..10fa2a72 --- /dev/null +++ b/src/main/java/com/zixiken/dimdoors/world/Location.java @@ -0,0 +1,30 @@ +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 new file mode 100644 index 00000000..735742ff --- /dev/null +++ b/src/main/java/com/zixiken/dimdoors/world/RiftHandler.java @@ -0,0 +1,57 @@ +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(); + } + } +}