More teleporter work. Getting pretty complicated, hopefully I can pull this off

This commit is contained in:
Aidan C. Brady 2015-03-11 17:42:33 -05:00
parent 855a5acf1d
commit 76b93bec65
9 changed files with 259 additions and 177 deletions

View file

@ -123,6 +123,8 @@ public class GuiTeleporter extends GuiMekanism
{ {
super.updateScreen(); super.updateScreen();
updateButtons();
frequencyField.updateCursorCounter(); frequencyField.updateCursorCounter();
} }
@ -189,7 +191,7 @@ public class GuiTeleporter extends GuiMekanism
{ {
} }
else if(guibutton.id == 2) else if(guibutton.id == 3)
{ {
} }

View file

@ -39,7 +39,7 @@ public class CommonPlayerTickHandler
ItemPortableTeleporter item = (ItemPortableTeleporter)player.getCurrentEquippedItem().getItem(); ItemPortableTeleporter item = (ItemPortableTeleporter)player.getCurrentEquippedItem().getItem();
ItemStack itemstack = player.getCurrentEquippedItem(); ItemStack itemstack = player.getCurrentEquippedItem();
Teleporter.Code teleCode = new Teleporter.Code(item.getDigit(itemstack, 0), item.getDigit(itemstack, 1), item.getDigit(itemstack, 2), item.getDigit(itemstack, 3)); /*Teleporter.Code teleCode = new Teleporter.Code(item.getDigit(itemstack, 0), item.getDigit(itemstack, 1), item.getDigit(itemstack, 2), item.getDigit(itemstack, 3));
if(Mekanism.teleporters.containsKey(teleCode)) if(Mekanism.teleporters.containsKey(teleCode))
{ {
@ -85,7 +85,7 @@ public class CommonPlayerTickHandler
item.setStatus(itemstack, 4); item.setStatus(itemstack, 4);
Mekanism.packetHandler.sendTo(new StatusUpdateMessage(4), (EntityPlayerMP)player); Mekanism.packetHandler.sendTo(new StatusUpdateMessage(4), (EntityPlayerMP)player);
} }
} }TODO*/
} }
if(player.getEquipmentInSlot(1) != null && player.getEquipmentInSlot(1).getItem() instanceof ItemFreeRunners) if(player.getEquipmentInSlot(1) != null && player.getEquipmentInSlot(1).getItem() instanceof ItemFreeRunners)

View file

@ -163,9 +163,6 @@ public class Mekanism
/** Mekanism version number */ /** Mekanism version number */
public static Version versionNumber = new Version(8, 0, 0); public static Version versionNumber = new Version(8, 0, 0);
/** Map of Teleporters */
public static Map<Teleporter.Code, ArrayList<Coord4D>> teleporters = new HashMap<Teleporter.Code, ArrayList<Coord4D>>();
/** MultiblockManagers for various structrures */ /** MultiblockManagers for various structrures */
public static MultiblockManager<SynchronizedTankData> tankManager = new MultiblockManager<SynchronizedTankData>("dynamicTank", TankCache.class); public static MultiblockManager<SynchronizedTankData> tankManager = new MultiblockManager<SynchronizedTankData>("dynamicTank", TankCache.class);
public static MultiblockManager<SynchronizedMatrixData> matrixManager = new MultiblockManager<SynchronizedMatrixData>("inductionMatrix", MatrixCache.class); public static MultiblockManager<SynchronizedMatrixData> matrixManager = new MultiblockManager<SynchronizedMatrixData>("inductionMatrix", MatrixCache.class);
@ -173,7 +170,8 @@ public class Mekanism
public static MultiblockManager<SynchronizedBoilerData> boilerManager = new BoilerManager("thermoelectricBoiler"); public static MultiblockManager<SynchronizedBoilerData> boilerManager = new BoilerManager("thermoelectricBoiler");
/** FrequencyManagers for various networks */ /** FrequencyManagers for various networks */
public static FrequencyManager teleporterManager = new FrequencyManager(Frequency.class); public static FrequencyManager publicTeleporters = new FrequencyManager(Frequency.class);
public static Map<String, FrequencyManager> privateTeleporters = new HashMap<String, FrequencyManager>();
/** Mekanism creative tab */ /** Mekanism creative tab */
public static CreativeTabMekanism tabMekanism = new CreativeTabMekanism(); public static CreativeTabMekanism tabMekanism = new CreativeTabMekanism();
@ -1064,7 +1062,6 @@ public class Mekanism
} }
//Clear all cache data //Clear all cache data
teleporters.clear();
jetpackOn.clear(); jetpackOn.clear();
gasmaskOn.clear(); gasmaskOn.clear();
activeVibrators.clear(); activeVibrators.clear();
@ -1072,6 +1069,7 @@ public class Mekanism
//Reset consistent managers //Reset consistent managers
MultiblockManager.reset(); MultiblockManager.reset();
FrequencyManager.reset();
TransporterManager.reset(); TransporterManager.reset();
PathfinderCache.reset(); PathfinderCache.reset();
} }

View file

@ -1,42 +0,0 @@
package mekanism.common;
public class Teleporter
{
/**
* Code -- a way for teleporters to manage frequencies.
* @author aidancbrady
*
*/
public static final class Code
{
public int digitOne;
public int digitTwo;
public int digitThree;
public int digitFour;
public Code(int one, int two, int three, int four)
{
digitOne = one;
digitTwo = two;
digitThree = three;
digitFour = four;
}
@Override
public int hashCode()
{
int code = 1;
code = 31 * code + digitOne;
code = 31 * code + digitTwo;
code = 31 * code + digitThree;
code = 31 * code + digitFour;
return code;
}
@Override
public boolean equals(Object code)
{
return code instanceof Code && ((Code)code).digitOne == digitOne && ((Code)code).digitTwo == digitTwo && ((Code)code).digitThree == digitThree && ((Code)code).digitFour == digitFour;
}
}
}

View file

@ -3,7 +3,10 @@ package mekanism.common.frequency;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import mekanism.api.Coord4D;
import mekanism.common.PacketHandler; import mekanism.common.PacketHandler;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
@ -12,6 +15,12 @@ public class Frequency
public String name; public String name;
public String owner; public String owner;
public boolean valid = true;
public boolean publicFreq;
public Set<Coord4D> activeCoords = new HashSet<Coord4D>();
public Frequency(String n, String o) public Frequency(String n, String o)
{ {
name = n; name = n;
@ -28,28 +37,49 @@ public class Frequency
read(dataStream); read(dataStream);
} }
public Frequency setPublic(boolean isPublic)
{
publicFreq = isPublic;
return this;
}
public boolean isPublic()
{
return publicFreq;
}
public boolean isPrivate()
{
return !publicFreq;
}
public void write(NBTTagCompound nbtTags) public void write(NBTTagCompound nbtTags)
{ {
nbtTags.setString("name", name); nbtTags.setString("name", name);
nbtTags.setString("owner", owner); nbtTags.setString("owner", owner);
nbtTags.setBoolean("publicFreq", publicFreq);
} }
protected void read(NBTTagCompound nbtTags) protected void read(NBTTagCompound nbtTags)
{ {
name = nbtTags.getString("name"); name = nbtTags.getString("name");
owner = nbtTags.getString("owner"); owner = nbtTags.getString("owner");
publicFreq = nbtTags.getBoolean("publicFreq");
} }
public void write(ArrayList data) public void write(ArrayList data)
{ {
data.add(name); data.add(name);
data.add(owner); data.add(owner);
data.add(publicFreq);
} }
protected void read(ByteBuf dataStream) protected void read(ByteBuf dataStream)
{ {
name = PacketHandler.readString(dataStream); name = PacketHandler.readString(dataStream);
owner = PacketHandler.readString(dataStream); owner = PacketHandler.readString(dataStream);
publicFreq = dataStream.readBoolean();
} }
@Override @Override
@ -57,12 +87,15 @@ public class Frequency
{ {
int code = 1; int code = 1;
code = 31 * code + name.hashCode(); code = 31 * code + name.hashCode();
code = 31 * code + owner.hashCode();
code = 31 * code + (publicFreq ? 1 : 0);
return code; return code;
} }
@Override @Override
public boolean equals(Object obj) public boolean equals(Object obj)
{ {
return obj instanceof Frequency && ((Frequency)obj).name.equals(name); return obj instanceof Frequency && ((Frequency)obj).name.equals(name)
&& ((Frequency)obj).owner.equals(owner) && ((Frequency)obj).publicFreq == publicFreq;
} }
} }

View file

@ -4,8 +4,10 @@ import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.Set; import java.util.Set;
import mekanism.api.Coord4D;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -49,14 +51,47 @@ public class FrequencyManager
} }
} }
public void validateFrequency(Frequency freq) public Frequency update(String user, Coord4D coord, Frequency freq)
{ {
if(frequencies.contains(freq)) for(Frequency iterFreq : frequencies)
{ {
return; if(freq.equals(iterFreq))
{
iterFreq.activeCoords.add(coord);
return iterFreq;
}
} }
return null;
}
public void deactivate(Coord4D coord)
{
for(Frequency freq : frequencies)
{
freq.activeCoords.remove(coord);
}
}
public Frequency validateFrequency(String user, Coord4D coord, Frequency freq)
{
for(Frequency iterFreq : frequencies)
{
if(freq.equals(iterFreq))
{
iterFreq.activeCoords.add(coord);
return iterFreq;
}
}
if(user.equals(freq.owner))
{
freq.activeCoords.add(coord);
frequencies.add(freq);
return freq;
}
return null;
} }
public void createOrLoad(World world) public void createOrLoad(World world)
@ -127,6 +162,17 @@ public class FrequencyManager
return owner != null ? owner + "FrequencyHandler" : "FrequencyHandler"; return owner != null ? owner + "FrequencyHandler" : "FrequencyHandler";
} }
public static void reset()
{
for(FrequencyManager manager : managers)
{
manager.frequencies.clear();
manager.dataHandler = null;
}
loaded = false;
}
public static class FrequencyDataHandler extends WorldSavedData public static class FrequencyDataHandler extends WorldSavedData
{ {
public FrequencyManager manager; public FrequencyManager manager;

View file

@ -1,29 +1,27 @@
package mekanism.common.network; package mekanism.common.network;
import io.netty.buffer.ByteBuf;
import mekanism.api.Coord4D; import mekanism.api.Coord4D;
import mekanism.api.Range4D; import mekanism.api.Range4D;
import mekanism.common.Mekanism; import mekanism.common.Mekanism;
import mekanism.common.ObfuscatedNames; import mekanism.common.ObfuscatedNames;
import mekanism.common.PacketHandler; import mekanism.common.PacketHandler;
import mekanism.common.Teleporter;
import mekanism.common.item.ItemPortableTeleporter; import mekanism.common.item.ItemPortableTeleporter;
import mekanism.common.network.PacketPortableTeleport.PortableTeleportMessage; import mekanism.common.network.PacketPortableTeleport.PortableTeleportMessage;
import mekanism.common.network.PacketPortalFX.PortalFXMessage; import mekanism.common.network.PacketPortalFX.PortalFXMessage;
import mekanism.common.tile.TileEntityTeleporter; import mekanism.common.tile.TileEntityTeleporter;
import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.NetHandlerPlayServer;
import net.minecraft.world.Teleporter;
import net.minecraft.world.World; import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
public class PacketPortableTeleport implements IMessageHandler<PortableTeleportMessage, IMessage> public class PacketPortableTeleport implements IMessageHandler<PortableTeleportMessage, IMessage>
{ {
@Override @Override
@ -39,7 +37,7 @@ public class PacketPortableTeleport implements IMessageHandler<PortableTeleportM
if(item.getStatus(itemstack) == 1) if(item.getStatus(itemstack) == 1)
{ {
Coord4D coords = MekanismUtils.getClosestCoords(new Teleporter.Code(item.getDigit(itemstack, 0), item.getDigit(itemstack, 1), item.getDigit(itemstack, 2), item.getDigit(itemstack, 3)), player); Coord4D coords = null;//TODO MekanismUtils.getClosestCoords(new Teleporter.Code(item.getDigit(itemstack, 0), item.getDigit(itemstack, 1), item.getDigit(itemstack, 2), item.getDigit(itemstack, 3)), player);
World teleWorld = FMLCommonHandler.instance().getMinecraftServerInstance().worldServerForDimension(coords.dimensionId); World teleWorld = FMLCommonHandler.instance().getMinecraftServerInstance().worldServerForDimension(coords.dimensionId);
TileEntityTeleporter teleporter = (TileEntityTeleporter)coords.getTileEntity(teleWorld); TileEntityTeleporter teleporter = (TileEntityTeleporter)coords.getTileEntity(teleWorld);

View file

@ -13,10 +13,9 @@ import mekanism.api.EnumColor;
import mekanism.common.Mekanism; import mekanism.common.Mekanism;
import mekanism.common.MekanismBlocks; import mekanism.common.MekanismBlocks;
import mekanism.common.PacketHandler; import mekanism.common.PacketHandler;
import mekanism.common.Teleporter;
import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.block.BlockMachine.MachineType;
import mekanism.common.frequency.Frequency; import mekanism.common.frequency.Frequency;
import mekanism.common.network.PacketPortalFX.PortalFXMessage; import mekanism.common.frequency.FrequencyManager;
import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.network.PacketTileEntity.TileEntityMessage;
import mekanism.common.util.ChargeUtils; import mekanism.common.util.ChargeUtils;
import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils;
@ -47,9 +46,6 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
{ {
private MinecraftServer server = MinecraftServer.getServer(); private MinecraftServer server = MinecraftServer.getServer();
/** This teleporter's frequency. */
public Teleporter.Code code;
public AxisAlignedBB teleportBounds = null; public AxisAlignedBB teleportBounds = null;
public Set<Entity> didTeleport = new HashSet<Entity>(); public Set<Entity> didTeleport = new HashSet<Entity>();
@ -64,6 +60,9 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
public Frequency frequency; public Frequency frequency;
public List<Frequency> publicCache = new ArrayList<Frequency>();
public List<Frequency> privateCache = new ArrayList<Frequency>();
/** This teleporter's current status. */ /** This teleporter's current status. */
public byte status = 0; public byte status = 0;
@ -71,7 +70,6 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
{ {
super("Teleporter", MachineType.TELEPORTER.baseEnergy); super("Teleporter", MachineType.TELEPORTER.baseEnergy);
inventory = new ItemStack[1]; inventory = new ItemStack[1];
code = new Teleporter.Code(0, 0, 0, 0);
} }
@Override @Override
@ -86,22 +84,19 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
if(!worldObj.isRemote) if(!worldObj.isRemote)
{ {
if(Mekanism.teleporters.containsKey(code)) FrequencyManager manager = getManager(frequency);
if(manager != null)
{ {
if(!Mekanism.teleporters.get(code).contains(Coord4D.get(this)) && hasFrame()) if(frequency != null && !frequency.valid)
{ {
Mekanism.teleporters.get(code).add(Coord4D.get(this)); frequency = manager.validateFrequency(owner, Coord4D.get(this), frequency);
} }
else if(Mekanism.teleporters.get(code).contains(Coord4D.get(this)) && !hasFrame())
{ frequency = manager.update(owner, Coord4D.get(this), frequency);
Mekanism.teleporters.get(code).remove(Coord4D.get(this));
} }
} else {
else if(hasFrame()) frequency = null;
{
ArrayList<Coord4D> newCoords = new ArrayList<Coord4D>();
newCoords.add(Coord4D.get(this));
Mekanism.teleporters.put(code, newCoords);
} }
status = canTeleport(); status = canTeleport();
@ -131,6 +126,51 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
ChargeUtils.discharge(0, this); ChargeUtils.discharge(0, this);
} }
public void setFrequency(String name, boolean publicFreq)
{
FrequencyManager manager = getManager(new Frequency(name, null).setPublic(publicFreq));
for(Frequency freq : manager.getFrequencies())
{
if(freq.equals(frequency))
{
return;
}
else if(freq.name.equals(name))
{
frequency = freq;
return;
}
}
Frequency freq = new Frequency(name, owner).setPublic(publicFreq);
freq.activeCoords.add(Coord4D.get(this));
manager.addFrequency(freq);
}
public FrequencyManager getManager(Frequency freq)
{
if(owner == null)
{
return null;
}
if(freq.isPublic())
{
return Mekanism.publicTeleporters;
}
else {
if(!Mekanism.privateTeleporters.containsKey(owner))
{
FrequencyManager manager = new FrequencyManager(Frequency.class, owner);
Mekanism.privateTeleporters.put(owner, manager);
manager.createOrLoad(worldObj);
}
return Mekanism.privateTeleporters.get(owner);
}
}
public String getStatusDisplay() public String getStatusDisplay()
{ {
switch(status) switch(status)
@ -148,6 +188,38 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
return EnumColor.DARK_RED + MekanismUtils.localize("gui.teleporter.noLink"); return EnumColor.DARK_RED + MekanismUtils.localize("gui.teleporter.noLink");
} }
@Override
public void onChunkUnload()
{
super.onChunkUnload();
if(!worldObj.isRemote && frequency != null)
{
FrequencyManager manager = getManager(frequency);
if(manager != null)
{
manager.deactivate(Coord4D.get(this));
}
}
}
@Override
public void invalidate()
{
super.invalidate();
if(!worldObj.isRemote && frequency != null)
{
FrequencyManager manager = getManager(frequency);
if(manager != null)
{
manager.deactivate(Coord4D.get(this));
}
}
}
public void cleanTeleportCache() public void cleanTeleportCache()
{ {
List<Entity> list = worldObj.getEntitiesWithinAABB(Entity.class, teleportBounds); List<Entity> list = worldObj.getEntitiesWithinAABB(Entity.class, teleportBounds);
@ -198,25 +270,22 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
return 2; return 2;
} }
if(!Mekanism.teleporters.containsKey(code) || Mekanism.teleporters.get(code).isEmpty()) //TODO if no link return 3
{
return 3;
}
if(Mekanism.teleporters.get(code).size() == 2) if(true/*TODO if has link*/)
{ {
List<Entity> entitiesInPortal = getToTeleport(); List<Entity> entitiesInPortal = getToTeleport();
Coord4D closestCoords = null; Coord4D closestCoords = null;
for(Coord4D coords : Mekanism.teleporters.get(code)) /*for(Coord4D coords : Mekanism.teleporters.get(code))
{ {
if(!coords.equals(Coord4D.get(this))) if(!coords.equals(Coord4D.get(this)))
{ {
closestCoords = coords; closestCoords = coords;
break; break;
} }
} }*/
int electricityNeeded = 0; int electricityNeeded = 0;
@ -244,14 +313,14 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
Coord4D closestCoords = null; Coord4D closestCoords = null;
for(Coord4D coords : Mekanism.teleporters.get(code)) /*for(Coord4D coords : Mekanism.teleporters.get(code))
{ {
if(!coords.equals(Coord4D.get(this))) if(!coords.equals(Coord4D.get(this)))
{ {
closestCoords = coords; closestCoords = coords;
break; break;
} }
} }*/
for(Entity entity : entitiesInPortal) for(Entity entity : entitiesInPortal)
{ {
@ -271,10 +340,10 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
teleportEntityTo(entity, closestCoords, teleporter); teleportEntityTo(entity, closestCoords, teleporter);
} }
for(Coord4D coords : Mekanism.teleporters.get(code)) /*for(Coord4D coords : Mekanism.teleporters.get(code))
{ {
Mekanism.packetHandler.sendToAllAround(new PortalFXMessage(coords), coords.getTargetPoint(40D)); Mekanism.packetHandler.sendToAllAround(new PortalFXMessage(coords), coords.getTargetPoint(40D));
} }*/
setEnergy(getEnergy() - calculateEnergyCost(entity, closestCoords)); setEnergy(getEnergy() - calculateEnergyCost(entity, closestCoords));
@ -367,28 +436,6 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
return ret; return ret;
} }
@Override
public void invalidate()
{
super.invalidate();
if(!worldObj.isRemote)
{
if(Mekanism.teleporters.containsKey(code))
{
if(Mekanism.teleporters.get(code).contains(Coord4D.get(this)))
{
Mekanism.teleporters.get(code).remove(Coord4D.get(this));
}
if(Mekanism.teleporters.get(code).isEmpty())
{
Mekanism.teleporters.remove(code);
}
}
}
}
public int calculateEnergyCost(Entity entity, Coord4D coords) public int calculateEnergyCost(Entity entity, Coord4D coords)
{ {
int energyCost = 1000; int energyCost = 1000;
@ -429,11 +476,6 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
{ {
super.readFromNBT(nbtTags); super.readFromNBT(nbtTags);
code.digitOne = nbtTags.getInteger("digitOne");
code.digitTwo = nbtTags.getInteger("digitTwo");
code.digitThree = nbtTags.getInteger("digitThree");
code.digitFour = nbtTags.getInteger("digitFour");
if(nbtTags.hasKey("owner")) if(nbtTags.hasKey("owner"))
{ {
owner = nbtTags.getString("owner"); owner = nbtTags.getString("owner");
@ -442,6 +484,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
if(nbtTags.hasKey("frequency")) if(nbtTags.hasKey("frequency"))
{ {
frequency = new Frequency(nbtTags); frequency = new Frequency(nbtTags);
frequency.valid = false;
} }
} }
@ -450,11 +493,6 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
{ {
super.writeToNBT(nbtTags); super.writeToNBT(nbtTags);
nbtTags.setInteger("digitOne", code.digitOne);
nbtTags.setInteger("digitTwo", code.digitTwo);
nbtTags.setInteger("digitThree", code.digitThree);
nbtTags.setInteger("digitFour", code.digitFour);
if(owner != null) if(owner != null)
{ {
nbtTags.setString("owner", owner); nbtTags.setString("owner", owner);
@ -471,33 +509,34 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
{ {
if(!worldObj.isRemote) if(!worldObj.isRemote)
{ {
if(Mekanism.teleporters.containsKey(code))
{
if(Mekanism.teleporters.get(code).contains(Coord4D.get(this)))
{
Mekanism.teleporters.get(code).remove(Coord4D.get(this));
}
if(Mekanism.teleporters.get(code).isEmpty()) Mekanism.teleporters.remove(code);
}
int type = dataStream.readInt(); int type = dataStream.readInt();
if(type == 0) if(type == 0)
{ {
code.digitOne = dataStream.readInt(); String name = PacketHandler.readString(dataStream);
boolean isPublic = dataStream.readBoolean();
setFrequency(name, isPublic);
} }
else if(type == 1) else if(type == 1)
{ {
code.digitTwo = dataStream.readInt(); String freq = PacketHandler.readString(dataStream);
} boolean isPublic = dataStream.readBoolean();
else if(type == 2)
FrequencyManager manager = getManager(new Frequency(freq, null).setPublic(isPublic));
if(manager != null)
{ {
code.digitThree = dataStream.readInt(); for(Iterator<Frequency> iter = manager.getFrequencies().iterator(); iter.hasNext();)
}
else if(type == 3)
{ {
code.digitFour = dataStream.readInt(); Frequency iterFreq = iter.next();
if(iterFreq.name.equals(freq) && iterFreq.owner.equals(owner))
{
iter.remove();
}
}
}
} }
return; return;
@ -522,11 +561,24 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
} }
status = dataStream.readByte(); status = dataStream.readByte();
code.digitOne = dataStream.readInt();
code.digitTwo = dataStream.readInt();
code.digitThree = dataStream.readInt();
code.digitFour = dataStream.readInt();
shouldRender = dataStream.readBoolean(); shouldRender = dataStream.readBoolean();
publicCache.clear();
privateCache.clear();
int amount = dataStream.readInt();
for(int i = 0; i < amount; i++)
{
publicCache.add(new Frequency(dataStream));
}
amount = dataStream.readInt();
for(int i = 0; i < amount; i++)
{
privateCache.add(new Frequency(dataStream));
}
} }
@Override @Override
@ -553,12 +605,24 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
} }
data.add(status); data.add(status);
data.add(code.digitOne);
data.add(code.digitTwo);
data.add(code.digitThree);
data.add(code.digitFour);
data.add(shouldRender); data.add(shouldRender);
data.add(Mekanism.publicTeleporters.getFrequencies().size());
for(Frequency freq : Mekanism.publicTeleporters.getFrequencies())
{
freq.write(data);
}
FrequencyManager manager = getManager(new Frequency(null, null).setPublic(false));
data.add(manager.getFrequencies().size());
for(Frequency freq : manager.getFrequencies())
{
freq.write(data);
}
return data; return data;
} }
@ -600,31 +664,17 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements IPe
teleport(); teleport();
return new Object[] {"Attempted to teleport."}; return new Object[] {"Attempted to teleport."};
case 5: case 5:
if(!(arguments[0] instanceof Double) || !(arguments[1] instanceof Double)) if(!(arguments[0] instanceof String) || !(arguments[1] instanceof Boolean))
{ {
return new Object[] {"Invalid parameters."}; return new Object[] {"Invalid parameters."};
} }
int digit = ((Double)arguments[0]).intValue(); String freq = ((String)arguments[0]).trim();
int newDigit = ((Double)arguments[1]).intValue(); boolean isPublic = (Boolean)arguments[1];
switch(digit) setFrequency(freq, isPublic);
{
case 0: return new Object[] {"Frequency set."};
code.digitOne = newDigit;
break;
case 1:
code.digitTwo = newDigit;
break;
case 2:
code.digitThree = newDigit;
break;
case 3:
code.digitFour = newDigit;
break;
default:
return new Object[] {"No digit found."};
}
default: default:
Mekanism.logger.error("Attempted to call unknown method with computer ID " + computer.getID()); Mekanism.logger.error("Attempted to call unknown method with computer ID " + computer.getID());
return new Object[] {"Unknown command."}; return new Object[] {"Unknown command."};

View file

@ -15,8 +15,6 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.mojang.authlib.GameProfile;
import mekanism.api.Chunk3D; import mekanism.api.Chunk3D;
import mekanism.api.Coord4D; import mekanism.api.Coord4D;
import mekanism.api.EnumColor; import mekanism.api.EnumColor;
@ -32,7 +30,6 @@ import mekanism.api.util.UnitDisplayUtils.TemperatureUnit;
import mekanism.common.Mekanism; import mekanism.common.Mekanism;
import mekanism.common.MekanismBlocks; import mekanism.common.MekanismBlocks;
import mekanism.common.OreDictCache; import mekanism.common.OreDictCache;
import mekanism.common.Teleporter;
import mekanism.common.Tier.EnergyCubeTier; import mekanism.common.Tier.EnergyCubeTier;
import mekanism.common.Tier.FactoryTier; import mekanism.common.Tier.FactoryTier;
import mekanism.common.Tier.InductionCellTier; import mekanism.common.Tier.InductionCellTier;
@ -236,7 +233,7 @@ public final class MekanismUtils
/** /**
* Returns the closest teleporter between a selection of one or two. * Returns the closest teleporter between a selection of one or two.
*/ */
public static Coord4D getClosestCoords(Teleporter.Code teleCode, EntityPlayer player) /*public static Coord4D getClosestCoords(Teleporter.Code teleCode, EntityPlayer player)
{ {
if(Mekanism.teleporters.get(teleCode).size() == 1) if(Mekanism.teleporters.get(teleCode).size() == 1)
{ {
@ -284,7 +281,7 @@ public final class MekanismUtils
} }
return null; return null;
} }TODO*/
/** /**
* Checks if the mod doesn't need an update. * Checks if the mod doesn't need an update.