类net.minecraftforge.common.ForgeChunkManager.Ticket源码实例Demo

下面列出了怎么用net.minecraftforge.common.ForgeChunkManager.Ticket的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: ChickenChunks   文件: PlayerChunkViewerTracker.java
public void writeTicketToPacket(PacketCustom packet, Ticket ticket, Collection<ChunkCoordIntPair> chunkSet)
{
    packet.writeInt(manager.ticketIDs.get(ticket));
    packet.writeString(ticket.getModId());
    String player = ticket.getPlayerName();
    packet.writeBoolean(player != null);
    if(player != null)
        packet.writeString(player);
    packet.writeByte(ticket.getType().ordinal());
    Entity entity = ticket.getEntity();
    if(entity != null)
        packet.writeInt(entity.getEntityId());
    packet.writeShort(chunkSet.size());
    for(ChunkCoordIntPair chunk : chunkSet)
    {
        packet.writeInt(chunk.chunkXPos);
        packet.writeInt(chunk.chunkZPos);
    }
    
    knownTickets.add(manager.ticketIDs.get(ticket));
}
 
源代码2 项目: ChickenChunks   文件: PlayerChunkViewerTracker.java
@SuppressWarnings("unchecked")
public void loadDimension(WorldServer world)
{
    PacketCustom packet = new PacketCustom(channel, 2).compress();
    int dim = CommonUtils.getDimension(world);
    packet.writeInt(dim);
            
    List<Chunk> allchunks = world.theChunkProviderServer.loadedChunks;        
    packet.writeInt(allchunks.size());
    for(Chunk chunk : allchunks)
    {
        packet.writeInt(chunk.xPosition);
        packet.writeInt(chunk.zPosition);
    }
    
    Map<Ticket, Collection<ChunkCoordIntPair>> tickets = ForgeChunkManager.getPersistentChunksFor(world).inverse().asMap();
    packet.writeInt(tickets.size());
    for(Entry<Ticket, Collection<ChunkCoordIntPair>> entry : tickets.entrySet())
        writeTicketToPacket(packet, entry.getKey(), entry.getValue());
    
    packet.sendToPlayer(owner);
}
 
源代码3 项目: ChickenChunks   文件: ChunkLoaderManager.java
protected void addChunk(DimChunkCoord coord) {
    if (heldChunks.containsKey(coord))
        return;

    Stack<Ticket> freeTickets = ticketsWithSpace.get(coord.dimension);
    if (freeTickets == null)
        ticketsWithSpace.put(coord.dimension, freeTickets = new Stack<Ticket>());

    Ticket ticket;
    if (freeTickets.isEmpty())
        freeTickets.push(ticket = createTicket(coord.dimension));
    else
        ticket = freeTickets.peek();

    ForgeChunkManager.forceChunk(ticket, coord.getChunkCoord());
    heldChunks.put(coord, ticket);
    if (ticket.getChunkList().size() == ticket.getChunkListDepth() && !freeTickets.isEmpty())
        freeTickets.pop();
}
 
源代码4 项目: enderutilities   文件: ChunkLoading.java
@Override
public void ticketsLoaded(List<Ticket> tickets, World world)
{
    for (Ticket ticket : tickets)
    {
        //System.out.println("void ticketsLoaded(): looping tickets");
        if (ticket != null)
        {
            for (ChunkPos chunk : ticket.getChunkList())
            {
                //System.out.println("void ticketsLoaded(): forcing chunk: " + chunk + " in dimension: " + ticket.world.provider.getDimensionId());
                ForgeChunkManager.forceChunk(ticket, chunk);
            }
        }
    }
}
 
源代码5 项目: enderutilities   文件: ChunkLoading.java
public void removeTicket(Ticket ticket)
{
    if (ticket == null || ticket.world == null)
    {
        return;
    }

    if (ticket.isPlayerTicket())
    {
        UUID uuid = this.getPlayerUUIDFromTicket(ticket);
        if (ticket.world.provider != null && uuid != null)
        {
            this.playerTickets.get(uuid.toString() + "-" + ticket.world.provider.getDimension()).remove(ticket);
        }
    }
    else
    {
        this.modTickets.get(ticket.world).remove(ticket);
    }
}
 
源代码6 项目: enderutilities   文件: ChunkLoading.java
public boolean loadChunkForcedWithPlayerTicket(EntityPlayer player, int dimension, int chunkX, int chunkZ, int unloadDelay)
{
    // If the target chunk is already being loaded by something, we don't need another ticket/forced load for it
    // We just refresh the timeout, if the previous one is shorter that the new request
    if (this.hasChunkTimeout(dimension, chunkX, chunkZ))
    {
        if (this.refreshChunkTimeout(dimension, chunkX, chunkZ, unloadDelay, true))
        {
            return true;
        }
    }

    Ticket ticket = this.requestPlayerTicket(player, dimension, unloadDelay != 0);

    return this.loadChunkForcedWithTicket(ticket, dimension, chunkX, chunkZ, unloadDelay);
}
 
源代码7 项目: enderutilities   文件: ChunkLoading.java
public boolean loadChunkForcedWithModTicket(int dimension, int chunkX, int chunkZ, int unloadDelay)
{
    // If the target chunk is already being loaded by something, we don't need another ticket/forced load for it
    // We just refresh the timeout, if the previous one is shorter that the new request
    if (this.hasChunkTimeout(dimension, chunkX, chunkZ))
    {
        if (this.refreshChunkTimeout(dimension, chunkX, chunkZ, unloadDelay, true))
        {
            return true;
        }
    }

    Ticket ticket = this.requestModTicket(dimension, unloadDelay != 0);

    return this.loadChunkForcedWithTicket(ticket, dimension, chunkX, chunkZ, unloadDelay);
}
 
源代码8 项目: enderutilities   文件: ChunkLoading.java
public boolean loadChunkForcedWithTicket(Ticket ticket, int dimension, int chunkX, int chunkZ, int unloadDelay)
{
    if (ticket == null)
    {
        EnderUtilities.logger.warn("loadChunkForcedWithTicket(): ticket == null");
        return false;
    }

    ForgeChunkManager.forceChunk(ticket, new ChunkPos(chunkX, chunkZ));
    if (unloadDelay > 0)
    {
        //System.out.println("loadChunkForcedWithTicket() adding timeout: " + unloadDelay);
        this.addChunkTimeout(ticket, dimension, chunkX, chunkZ, unloadDelay);
    }

    return this.loadChunkWithoutForce(dimension, chunkX, chunkZ);
}
 
源代码9 项目: enderutilities   文件: ChunkLoading.java
public void addChunkTimeout(Ticket ticket, int dimension, int chunkX, int chunkZ, int timeout)
{
    String s = dimChunkCoordsToString(dimension, chunkX, chunkZ);

    DimChunkCoordTimeout dcct = this.timeOuts.get(s);
    if (dcct != null)
    {
        //System.out.println("addChunkTimeout(): re-setting");
        dcct.setTimeout(timeout);
    }
    else if (ticket != null)
    {
        //System.out.println("addChunkTimeout(): adding");
        this.timeOuts.put(s, new DimChunkCoordTimeout(ticket, dimension, new ChunkPos(chunkX, chunkZ), timeout));
    }
}
 
源代码10 项目: CommunityMod   文件: BaseVehicleEntity.java
public BaseVehicleEntity(World worldIn) {
	super(worldIn);
	storage = new ShipStorage(getOffset(), worldIn);
	Ticket tic = ForgeChunkManager.requestTicket(CommunityMod.INSTANCE,
			DimensionManager.getWorld(StorageDimReg.storageDimensionType.getId()), Type.NORMAL);
	loadTicket = tic;
}
 
源代码11 项目: Signals   文件: ChunkLoadManager.java
private void add(Ticket ticket){
    Validate.notNull(ticket);
    ChunkLoadEntry oldEntry = entries.put(ticket.getEntity(), new ChunkLoadEntry(ticket));
    if(oldEntry != null) {
        oldEntry.dispose();
    }
}
 
源代码12 项目: Signals   文件: ChunkLoadManager.java
public boolean markAsChunkLoader(String chunkloadingPlayer, EntityMinecart cart){
    Ticket ticket = ForgeChunkManager.requestPlayerTicket(Signals.instance, chunkloadingPlayer, cart.world, Type.ENTITY);
    if(ticket != null) {
        ticket.bindEntity(cart);
        add(ticket);
        return true;
    } else {
        return false;
    }
}
 
源代码13 项目: Signals   文件: ChunkLoadManager.java
public ChunkLoadEntry(Ticket ticket){
    this.ticket = ticket;
    if(update()) {
        Log.warning("Chunkloading cart dead on init!");
    } else {
        Log.debug("Loaded chunkloader for cart at " + (ticket.getEntity() == null ? "[No entity]" : ticket.getEntity().getPosition().toString()));
    }
}
 
源代码14 项目: ChickenChunks   文件: PlayerChunkViewerTracker.java
public void addTicket(int dimension, Ticket ticket)
{
    PacketCustom packet = new PacketCustom(channel, 8);
    packet.writeInt(dimension);
    writeTicketToPacket(packet, ticket, ticket.getChunkList());
    
    packet.sendToPlayer(owner);
}
 
源代码15 项目: ChickenChunks   文件: ChunkLoaderManager.java
protected void remChunk(DimChunkCoord coord) {
    Ticket ticket = heldChunks.remove(coord);
    if (ticket == null)
        return;

    ForgeChunkManager.unforceChunk(ticket, coord.getChunkCoord());

    if (ticket.getChunkList().size() == ticket.getChunkListDepth() - 1) {
        Stack<Ticket> freeTickets = ticketsWithSpace.get(coord.dimension);
        if (freeTickets == null)
            ticketsWithSpace.put(coord.dimension, freeTickets = new Stack<Ticket>());
        freeTickets.push(ticket);
    }
}
 
源代码16 项目: ChickenChunks   文件: ChunkLoaderManager.java
@SuppressWarnings("unchecked")
public static void cleanChunks(WorldServer world) {
    int dim = CommonUtils.getDimension(world);
    int viewdist = ServerUtils.mc().getConfigurationManager().getViewDistance();

    HashSet<ChunkCoordIntPair> loadedChunks = new HashSet<ChunkCoordIntPair>();
    for (EntityPlayer player : ServerUtils.getPlayersInDimension(dim)) {
        int playerChunkX = (int) player.posX >> 4;
        int playerChunkZ = (int) player.posZ >> 4;

        for (int cx = playerChunkX - viewdist; cx <= playerChunkX + viewdist; cx++)
            for (int cz = playerChunkZ - viewdist; cz <= playerChunkZ + viewdist; cz++)
                loadedChunks.add(new ChunkCoordIntPair(cx, cz));
    }

    ImmutableSetMultimap<ChunkCoordIntPair, Ticket> persistantChunks = world.getPersistentChunks();
    PlayerManager manager = world.getPlayerManager();

    for (Chunk chunk : (List<Chunk>) world.theChunkProviderServer.loadedChunks) {
        ChunkCoordIntPair coord = chunk.getChunkCoordIntPair();
        if (!loadedChunks.contains(coord) && !persistantChunks.containsKey(coord) && world.theChunkProviderServer.chunkExists(coord.chunkXPos, coord.chunkZPos)) {
            PlayerInstance instance = manager.getOrCreateChunkWatcher(coord.chunkXPos, coord.chunkZPos, false);
            if (instance == null) {
                world.theChunkProviderServer.unloadChunksIfNotNearSpawn(coord.chunkXPos, coord.chunkZPos);
            } else {
                while (instance.playersWatchingChunk.size() > 0)
                    instance.removePlayer((EntityPlayerMP) instance.playersWatchingChunk.get(0));
            }
        }
    }

    if (ServerUtils.getPlayersInDimension(dim).isEmpty() && world.getPersistentChunks().isEmpty() && !DimensionManager.shouldLoadSpawn(dim)) {
        DimensionManager.unloadWorld(dim);
    }
}
 
源代码17 项目: ChickenChunks   文件: PlayerChunkViewerManager.java
public TicketChange(Ticket ticket, ChunkCoordIntPair chunk, boolean force)
{
    this.ticket = ticket;
    this.dimension = CommonUtils.getDimension(ticket.world);
    this.chunk = chunk;
    this.force = force;
}
 
源代码18 项目: enderutilities   文件: ChunkLoading.java
@Override
public List<Ticket> ticketsLoaded(List<Ticket> tickets, World world, int maxTicketCount)
{
    Set<Ticket> persistentTickets = new HashSet<Ticket>();
    LinkedList<Ticket> claimedTickets = new LinkedList<Ticket>();

    //int i = 0;
    for (Ticket ticket : tickets)
    {
        if (ticket == null)
        {
            continue;
        }

        /*
        if (ticket.world != null && ticket.world.provider != null)
        {
            System.out.println("List<Ticket> ticketsLoaded(): looping: " + i + " world: " + world + " dim: " + ticket.world.provider.getDimensionId());
        }
        else
        {
            System.out.println("List<Ticket> ticketsLoaded(): looping: " + i + " world: " + world);
        }
        i++;
        */

        NBTTagCompound nbt = ticket.getModData();

        // Only claim tickets that are used for persistent chunk loading
        if (nbt != null && nbt.getBoolean("Persistent"))
        {
            persistentTickets.add(ticket);
        }
    }

    claimedTickets.addAll(persistentTickets);

    return claimedTickets;
}
 
源代码19 项目: enderutilities   文件: ChunkLoading.java
@Override
public ListMultimap<String, Ticket> playerTicketsLoaded(ListMultimap<String, Ticket> tickets, World world)
{
    Multimap<String, Ticket> persistentPlayerTickets = HashMultimap.create();
    LinkedListMultimap<String, Ticket> claimedTickets = LinkedListMultimap.create();

    //int i = 0;
    for (String player : tickets.keys())
    {
        //System.out.println("playerTicketsLoaded(): looping outer start: " + i);
        for (Ticket ticket : tickets.get(player))
        {
            if (ticket != null)
            {
                /*if (ticket.world != null && ticket.world.provider != null) { System.out.println("playerTicketsLoaded(): looping: " + i + " world: " + world + " dim: " + ticket.world.provider.getDimensionId()); }
                else { System.out.println("playerTicketsLoaded(): looping: " + i + " world: " + world); }
                ++i;*/

                NBTTagCompound nbt = ticket.getModData();

                // Only claim tickets that are used for persistent chunk loading
                if (nbt != null && nbt.getBoolean("Persistent"))
                {
                    //System.out.println("playerTicketsLoaded(): found persistent ticket");
                    persistentPlayerTickets.put(player, ticket);
                }
            }
        }
    }

    claimedTickets.putAll(persistentPlayerTickets);

    return claimedTickets;
}
 
源代码20 项目: enderutilities   文件: ChunkLoading.java
public UUID getPlayerUUIDFromTicket(Ticket ticket)
{
    if (ticket == null)
    {
        return null;
    }

    OwnerData playerData = OwnerData.getOwnerDataFromNBT(ticket.getModData());
    if (playerData != null)
    {
        return playerData.getOwnerUUID();
    }

    return null;
}
 
源代码21 项目: enderutilities   文件: ChunkLoading.java
public DimChunkCoordTimeout(Ticket ticket, int dimension, ChunkPos cc, int timeout)
{
    this.ticket = ticket;
    this.dimension = dimension;
    this.chunkCoords = cc;
    this.timeout = timeout;
    this.timeoutFresh = timeout;
}
 
源代码22 项目: ChickenChunks   文件: ChunkLoaderManager.java
@Override
public Ticket createTicket(int dimension) {
    return ForgeChunkManager.requestPlayerTicket(ChickenChunks.instance, username, DimensionManager.getWorld(dimension), Type.NORMAL);
}
 
源代码23 项目: ChickenChunks   文件: ChunkLoaderManager.java
@Override
protected Ticket createTicket(int dimension) {
    return ForgeChunkManager.requestTicket(mod, DimensionManager.getWorld(dimension), Type.NORMAL);
}
 
源代码24 项目: ChickenChunks   文件: ChunkLoaderManager.java
@Override
public void ticketsLoaded(List<Ticket> tickets, World world) {
}
 
源代码25 项目: ChickenChunks   文件: ChunkLoaderManager.java
@Override
public List<Ticket> ticketsLoaded(List<Ticket> tickets, World world, int maxTicketCount) {
    return new LinkedList<Ticket>();
}
 
源代码26 项目: ChickenChunks   文件: ChunkLoaderManager.java
@Override
public ListMultimap<String, Ticket> playerTicketsLoaded(ListMultimap<String, Ticket> tickets, World world) {
    return LinkedListMultimap.create();
}
 
源代码27 项目: CommunityMod   文件: BlockyEntities.java
@Override
public void ticketsLoaded(List<Ticket> tickets, World world) {
	
}
 
源代码28 项目: AdvancedRocketry   文件: WorldEvents.java
@Override
public void ticketsLoaded(List<Ticket> tickets, World world) {
	
}
 
源代码29 项目: ChickenChunks   文件: ChunkLoaderManager.java
protected abstract Ticket createTicket(int dimension); 
 类方法
 同包方法