From d16a6f06ee3f1f05958e504217fa7cb5e9af17b0 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Thu, 12 Mar 2015 01:32:24 -0500 Subject: [PATCH] Teleporting works! Tomorrow I'll try and implement the Portable Teleporter. --- .../mekanism/common/frequency/Frequency.java | 41 +++++++++++ .../common/tile/TileEntityTeleporter.java | 69 +++++++++---------- .../mekanism/common/util/MekanismUtils.java | 53 -------------- 3 files changed, 73 insertions(+), 90 deletions(-) diff --git a/src/main/java/mekanism/common/frequency/Frequency.java b/src/main/java/mekanism/common/frequency/Frequency.java index 063cc467a..cfedb1c8a 100644 --- a/src/main/java/mekanism/common/frequency/Frequency.java +++ b/src/main/java/mekanism/common/frequency/Frequency.java @@ -54,6 +54,47 @@ public class Frequency return !publicFreq; } + public Coord4D getClosestCoords(Coord4D coord) + { + Coord4D closest = null; + + for(Coord4D iterCoord : activeCoords) + { + if(iterCoord.equals(coord)) + { + continue; + } + + if(closest == null) + { + closest = iterCoord; + continue; + } + + if(coord.dimensionId != closest.dimensionId && coord.dimensionId == iterCoord.dimensionId) + { + closest = iterCoord; + continue; + } + else if(coord.dimensionId == closest.dimensionId && coord.dimensionId != iterCoord.dimensionId) + { + continue; + } + else { + if(coord.distanceTo(closest) > coord.distanceTo(iterCoord)) + { + closest = iterCoord; + continue; + } + else { + continue; + } + } + } + + return closest; + } + public void write(NBTTagCompound nbtTags) { nbtTags.setString("name", name); diff --git a/src/main/java/mekanism/common/tile/TileEntityTeleporter.java b/src/main/java/mekanism/common/tile/TileEntityTeleporter.java index cc0bcb209..16b520b55 100644 --- a/src/main/java/mekanism/common/tile/TileEntityTeleporter.java +++ b/src/main/java/mekanism/common/tile/TileEntityTeleporter.java @@ -16,6 +16,7 @@ import mekanism.common.PacketHandler; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.frequency.Frequency; import mekanism.common.frequency.FrequencyManager; +import mekanism.common.network.PacketPortalFX.PortalFXMessage; import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.util.ChargeUtils; import mekanism.common.util.MekanismUtils; @@ -126,6 +127,16 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe ChargeUtils.discharge(0, this); } + public Coord4D getClosest() + { + if(frequency != null) + { + return frequency.getClosestCoords(Coord4D.get(this)); + } + + return null; + } + public void setFrequency(String name, boolean publicFreq) { if(name.equals(frequency)) @@ -275,40 +286,28 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe return 2; } - //TODO if no link return 3 - - if(true/*TODO if has link*/) + if(getClosest() == null) { - List entitiesInPortal = getToTeleport(); + return 3; + } - Coord4D closestCoords = null; + List entitiesInPortal = getToTeleport(); + Coord4D closestCoords = getClosest(); - /*for(Coord4D coords : Mekanism.teleporters.get(code)) - { - if(!coords.equals(Coord4D.get(this))) - { - closestCoords = coords; - break; - } - }*/ + int electricityNeeded = 0; - int electricityNeeded = 0; + for(Entity entity : entitiesInPortal) + { + electricityNeeded += calculateEnergyCost(entity, closestCoords); + } - for(Entity entity : entitiesInPortal) - { - electricityNeeded += calculateEnergyCost(entity, closestCoords); - } - - if(getEnergy() < electricityNeeded) - { - return 4; - } - - return 1; + if(getEnergy() < electricityNeeded) + { + return 4; } return 1; - } +} public void teleport() { @@ -316,16 +315,12 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe List entitiesInPortal = getToTeleport(); - Coord4D closestCoords = null; - - /*for(Coord4D coords : Mekanism.teleporters.get(code)) + Coord4D closestCoords = getClosest(); + + if(closestCoords == null) { - if(!coords.equals(Coord4D.get(this))) - { - closestCoords = coords; - break; - } - }*/ + return; + } for(Entity entity : entitiesInPortal) { @@ -345,10 +340,10 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe teleportEntityTo(entity, closestCoords, teleporter); } - /*for(Coord4D coords : Mekanism.teleporters.get(code)) + for(Coord4D coords : frequency.activeCoords) { Mekanism.packetHandler.sendToAllAround(new PortalFXMessage(coords), coords.getTargetPoint(40D)); - }*/ + } setEnergy(getEnergy() - calculateEnergyCost(entity, closestCoords)); diff --git a/src/main/java/mekanism/common/util/MekanismUtils.java b/src/main/java/mekanism/common/util/MekanismUtils.java index e5c24e058..db63d14f9 100644 --- a/src/main/java/mekanism/common/util/MekanismUtils.java +++ b/src/main/java/mekanism/common/util/MekanismUtils.java @@ -230,59 +230,6 @@ public final class MekanismUtils return builder.toString(); } - /** - * Returns the closest teleporter between a selection of one or two. - */ - /*public static Coord4D getClosestCoords(Teleporter.Code teleCode, EntityPlayer player) - { - if(Mekanism.teleporters.get(teleCode).size() == 1) - { - return Mekanism.teleporters.get(teleCode).get(0); - } - else { - int dimensionId = player.worldObj.provider.dimensionId; - - Coord4D coords0 = Mekanism.teleporters.get(teleCode).get(0); - Coord4D coords1 = Mekanism.teleporters.get(teleCode).get(1); - - int distance0 = (int)player.getDistance(coords0.xCoord, coords0.yCoord, coords0.zCoord); - int distance1 = (int)player.getDistance(coords1.xCoord, coords1.yCoord, coords1.zCoord); - - if(dimensionId == coords0.dimensionId && dimensionId != coords1.dimensionId) - { - return coords0; - } - else if(dimensionId == coords1.dimensionId && dimensionId != coords0.dimensionId) - { - return coords1; - } - else if(dimensionId == coords0.dimensionId && dimensionId == coords1.dimensionId) - { - if(distance0 < distance1) - { - return coords0; - } - else if(distance0 > distance1) - { - return coords1; - } - } - else if(dimensionId != coords0.dimensionId && dimensionId != coords1.dimensionId) - { - if(distance0 < distance1) - { - return coords0; - } - else if(distance0 > distance1) - { - return coords1; - } - } - } - - return null; - }TODO*/ - /** * Checks if the mod doesn't need an update. * @return if mod doesn't need an update