Teleporting works! Tomorrow I'll try and implement the Portable Teleporter.
This commit is contained in:
parent
cefd4ba107
commit
d16a6f06ee
3 changed files with 73 additions and 90 deletions
|
@ -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);
|
||||
|
|
|
@ -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<Entity> entitiesInPortal = getToTeleport();
|
||||
return 3;
|
||||
}
|
||||
|
||||
Coord4D closestCoords = null;
|
||||
List<Entity> 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<Entity> entitiesInPortal = getToTeleport();
|
||||
|
||||
Coord4D closestCoords = null;
|
||||
Coord4D closestCoords = getClosest();
|
||||
|
||||
/*for(Coord4D coords : Mekanism.teleporters.get(code))
|
||||
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));
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue