mirror of
https://github.com/Thorfusion/Mekanism-Community-Edition.git
synced 2026-11-13 16:54:16 +00:00
237 lines
4.5 KiB
Java
237 lines
4.5 KiB
Java
package mekanism.common.tile.component;
|
|
|
|
import io.netty.buffer.ByteBuf;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import mekanism.api.Coord4D;
|
|
import mekanism.api.MekanismConfig.general;
|
|
import mekanism.common.Mekanism;
|
|
import mekanism.common.PacketHandler;
|
|
import mekanism.common.base.ITileComponent;
|
|
import mekanism.common.frequency.Frequency;
|
|
import mekanism.common.frequency.FrequencyManager;
|
|
import mekanism.common.security.ISecurityTile.SecurityMode;
|
|
import mekanism.common.security.SecurityFrequency;
|
|
import mekanism.common.tile.TileEntityContainerBlock;
|
|
import mekanism.common.util.MekanismUtils;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
public class TileComponentSecurity implements ITileComponent
|
|
{
|
|
/** TileEntity implementing this component. */
|
|
public TileEntityContainerBlock tileEntity;
|
|
|
|
private String owner;
|
|
|
|
private SecurityMode securityMode = SecurityMode.PUBLIC;
|
|
|
|
private SecurityFrequency frequency;
|
|
|
|
public TileComponentSecurity(TileEntityContainerBlock tile)
|
|
{
|
|
tileEntity = tile;
|
|
|
|
tile.components.add(this);
|
|
}
|
|
|
|
public void readFrom(TileComponentSecurity security)
|
|
{
|
|
owner = security.owner;
|
|
securityMode = security.securityMode;
|
|
}
|
|
|
|
public SecurityFrequency getFrequency()
|
|
{
|
|
return frequency;
|
|
}
|
|
|
|
public String getOwner()
|
|
{
|
|
return owner;
|
|
}
|
|
|
|
public void setOwner(String o)
|
|
{
|
|
frequency = null;
|
|
owner = o;
|
|
}
|
|
|
|
public SecurityMode getMode()
|
|
{
|
|
if(general.allowProtection) {
|
|
return securityMode;
|
|
} else {
|
|
return SecurityMode.PUBLIC;
|
|
}
|
|
}
|
|
|
|
public void setMode(SecurityMode mode)
|
|
{
|
|
securityMode = mode;
|
|
}
|
|
|
|
public FrequencyManager getManager(Frequency freq)
|
|
{
|
|
if(owner == null || freq == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return Mekanism.securityFrequencies;
|
|
}
|
|
|
|
public void setFrequency(String owner)
|
|
{
|
|
FrequencyManager manager = Mekanism.securityFrequencies;
|
|
manager.deactivate(Coord4D.get(tileEntity));
|
|
|
|
for(Frequency freq : manager.getFrequencies())
|
|
{
|
|
if(freq.owner.equals(owner))
|
|
{
|
|
frequency = (SecurityFrequency)freq;
|
|
frequency.activeCoords.add(Coord4D.get(tileEntity));
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
Frequency freq = new SecurityFrequency(owner).setAccess(SecurityMode.PUBLIC);
|
|
freq.activeCoords.add(Coord4D.get(tileEntity));
|
|
manager.addFrequency(freq);
|
|
frequency = (SecurityFrequency)freq;
|
|
|
|
MekanismUtils.saveChunk(tileEntity);
|
|
tileEntity.markDirty();
|
|
}
|
|
|
|
@Override
|
|
public void tick()
|
|
{
|
|
if(!tileEntity.getWorldObj().isRemote)
|
|
{
|
|
if(frequency == null && owner != null)
|
|
{
|
|
setFrequency(owner);
|
|
}
|
|
|
|
FrequencyManager manager = getManager(frequency);
|
|
|
|
if(manager != null)
|
|
{
|
|
if(frequency != null && !frequency.valid)
|
|
{
|
|
frequency = (SecurityFrequency)manager.validateFrequency(owner, Coord4D.get(tileEntity), frequency);
|
|
}
|
|
|
|
if(frequency != null)
|
|
{
|
|
frequency = (SecurityFrequency)manager.update(owner, Coord4D.get(tileEntity), frequency);
|
|
}
|
|
}
|
|
else {
|
|
frequency = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void read(NBTTagCompound nbtTags)
|
|
{
|
|
securityMode = SecurityMode.values()[nbtTags.getInteger("securityMode")];
|
|
|
|
if(nbtTags.hasKey("owner"))
|
|
{
|
|
owner = nbtTags.getString("owner");
|
|
}
|
|
|
|
if(nbtTags.hasKey("securityFreq"))
|
|
{
|
|
frequency = new SecurityFrequency(nbtTags.getCompoundTag("securityFreq"));
|
|
frequency.valid = false;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void read(ByteBuf dataStream)
|
|
{
|
|
securityMode = SecurityMode.values()[dataStream.readInt()];
|
|
|
|
if(dataStream.readBoolean())
|
|
{
|
|
owner = PacketHandler.readString(dataStream);
|
|
}
|
|
else {
|
|
owner = null;
|
|
}
|
|
|
|
if(dataStream.readBoolean())
|
|
{
|
|
frequency = new SecurityFrequency(dataStream);
|
|
}
|
|
else {
|
|
frequency = null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void write(NBTTagCompound nbtTags)
|
|
{
|
|
nbtTags.setInteger("securityMode", securityMode.ordinal());
|
|
|
|
if(owner != null)
|
|
{
|
|
nbtTags.setString("owner", owner);
|
|
}
|
|
|
|
if(frequency != null)
|
|
{
|
|
NBTTagCompound frequencyTag = new NBTTagCompound();
|
|
frequency.write(frequencyTag);
|
|
nbtTags.setTag("securityFreq", frequencyTag);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void write(ArrayList data)
|
|
{
|
|
data.add(securityMode.ordinal());
|
|
|
|
if(owner != null)
|
|
{
|
|
data.add(true);
|
|
data.add(owner);
|
|
}
|
|
else {
|
|
data.add(false);
|
|
}
|
|
|
|
if(frequency != null)
|
|
{
|
|
data.add(true);
|
|
frequency.write(data);
|
|
}
|
|
else {
|
|
data.add(false);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void invalidate()
|
|
{
|
|
if(!tileEntity.getWorldObj().isRemote)
|
|
{
|
|
if(frequency != null)
|
|
{
|
|
FrequencyManager manager = getManager(frequency);
|
|
|
|
if(manager != null)
|
|
{
|
|
manager.deactivate(Coord4D.get(tileEntity));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|