package lumaceon.mods.clockworkphase2.tile;
import com.google.common.collect.ImmutableSet;
import lumaceon.mods.clockworkphase2.api.timezone.ITimezone;
import lumaceon.mods.clockworkphase2.api.timezone.Timezone;
import lumaceon.mods.clockworkphase2.api.timezone.TimezoneHandler;
import lumaceon.mods.clockworkphase2.tile.generic.TileMod;
import net.minecraft.util.ITickable;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeChunkManager;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import java.util.HashMap;
public class TileTemporalZoningMachine extends TileMod implements ITickable
{
@CapabilityInject(ITimezone.class)
public static final Capability<ITimezone> TIMEZONE = null;
public static HashMap<World, ForgeChunkManager.Ticket> chunkloadingTickets = new HashMap<World, ForgeChunkManager.Ticket>();
boolean hasRegistedTimezone = false;
ITimezone timezone = new Timezone(this);
@Override
public void update()
{
if(!worldObj.isRemote)
{
ForgeChunkManager.Ticket ticket = chunkloadingTickets.get(worldObj);
if(ticket != null)
{
boolean chunkAlreadyLoaded = false;
ImmutableSet<ChunkPos> loadedChunks = ticket.getChunkList();
ChunkPos thisChunkPos = new ChunkPos(this.getPos());
if(loadedChunks != null)
{
for(ChunkPos c : loadedChunks)
{
if(c.chunkXPos == thisChunkPos.chunkXPos && c.chunkZPos == thisChunkPos.chunkZPos)
{
chunkAlreadyLoaded = true;
}
}
}
if(!chunkAlreadyLoaded)
{
ForgeChunkManager.forceChunk(ticket, thisChunkPos);
}
}
}
if(!hasRegistedTimezone)
{
hasRegistedTimezone = true;
TimezoneHandler.INTERNAL.registerTimezone(this);
}
}
@Override
public boolean hasCapability(net.minecraftforge.common.capabilities.Capability<?> capability, net.minecraft.util.EnumFacing facing) {
return capability != null && capability == TIMEZONE || super.hasCapability(capability, facing);
}
@Override
public <T> T getCapability(net.minecraftforge.common.capabilities.Capability<T> capability, net.minecraft.util.EnumFacing facing)
{
if(capability != null && capability == TIMEZONE)
return TIMEZONE.cast(timezone);
return super.getCapability(capability, facing);
}
}