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

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

源代码1 项目: 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);
}
 
源代码2 项目: 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();
}
 
源代码3 项目: 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);
            }
        }
    }
}
 
源代码4 项目: 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);
}
 
源代码5 项目: MyTown2   文件: TicketMap.java
@Override
public ForgeChunkManager.Ticket get(Object key) {
    if (key instanceof Integer) {
        if (super.get(key) == null) {
            World world = DimensionManager.getWorld((Integer) key);
            if (world == null) {
                return null;
            }

            ForgeChunkManager.Ticket ticket = ForgeChunkManager.requestTicket(MyTown.instance, world, ForgeChunkManager.Type.NORMAL);
            ticket.getModData().setString("townName", town.getName());
            ticket.getModData().setTag("chunkCoords", new NBTTagList());
            put((Integer) key, ticket);
            return ticket;
        } else {
            return super.get(key);
        }
    }
    return null;
}
 
源代码6 项目: MyTown2   文件: TicketMap.java
public void chunkUnload(TownBlock block) {
    ForgeChunkManager.Ticket ticket = get(block.getDim());
    ForgeChunkManager.unforceChunk(ticket, block.toChunkCoords());

    NBTTagList list = ticket.getModData().getTagList("chunkCoords", Constants.NBT.TAG_COMPOUND);
    for (int i = 0; i < list.tagCount(); i++) {
        NBTTagCompound chunkNBT = list.getCompoundTagAt(i);
        int x = chunkNBT.getInteger("x");
        int z = chunkNBT.getInteger("z");

        if (x == block.getX() && z == block.getZ()) {
            list.removeTag(i);
            break;
        }
    }
}
 
源代码7 项目: 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;
}
 
源代码8 项目: CommunityMod   文件: BlockyEntities.java
@Override
public void onPreInit(FMLPreInitializationEvent event) {
	PacketHandler.registerMessages("hyperstellar");
	EntityRegistry.registerModEntity(new ResourceLocation(CommunityGlobals.MOD_ID, "BaseVehicle"), BaseVehicleEntity.class, "BaseVehicle", 45, CommunityMod.INSTANCE, 64, 3, true);
	if (!ForgeChunkManager.getConfig().hasCategory(CommunityGlobals.MOD_ID)) {
		ForgeChunkManager.getConfig().get(CommunityGlobals.MOD_ID, "maximumChunksPerTicket", MaxRocketSize / 16)
				.setMinValue(0);
		ForgeChunkManager.getConfig().get(CommunityGlobals.MOD_ID, "maximumTicketCount", 10000).setMinValue(0);
		ForgeChunkManager.getConfig().save();
	}
	HDataSerializers.register();
}
 
源代码9 项目: 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;
    }
}
 
源代码10 项目: Signals   文件: ChunkLoadManager.java
public boolean update(){
    if(ticket.getEntity() == null || ticket.getEntity().isDead) {
        Log.warning("No or dead cart for chunkloading ticket found! Disposing...");
        dispose();
        return true;
    }

    ChunkPos newPos = new ChunkPos(ticket.getEntity().chunkCoordX, ticket.getEntity().chunkCoordZ);
    if(!newPos.equals(curPos)) { // When the cart changed from chunk

        //Select a 3x3 area centered around the cart.
        Set<ChunkPos> newForced = new HashSet<>();
        for(int x = newPos.x - 1; x <= newPos.x + 1; x++) {
            for(int z = newPos.z - 1; z <= newPos.z + 1; z++) {
                newForced.add(new ChunkPos(x, z));
            }
        }

        //Unforce chunks we don't need anymore
        curForced.stream().filter(pos -> !newForced.contains(pos)).forEach(pos -> {
            ForgeChunkManager.unforceChunk(ticket, pos);
        });

        //Force new chunks
        newForced.stream().filter(pos -> !curForced.contains(pos)).forEach(pos -> {
            ForgeChunkManager.forceChunk(ticket, pos);
        });

        curForced = newForced;
    }
    return false;
}
 
源代码11 项目: AdvancedRocketry   文件: TileRailgun.java
@Override
public void onLoad() {
	if(ticket == null) {
		ticket = ForgeChunkManager.requestTicket(AdvancedRocketry.instance, this.world, Type.NORMAL);
		if(ticket != null)
			ForgeChunkManager.forceChunk(ticket, new ChunkPos(getPos().getX() / 16 - (getPos().getX() < 0 ? 1 : 0), getPos().getZ() / 16 - (getPos().getZ() < 0 ? 1 : 0)));
	}
}
 
源代码12 项目: AdvancedRocketry   文件: TileSpaceLaser.java
/**
 * Checks to see if the situation for firing the laser exists... and changes the state accordingly
 */
public void checkCanRun() {
	//Laser requires lense, redstone power, not be jammed, and be in orbit and energy to function
	if(world.isBlockIndirectlyGettingPowered(getPos()) == 0 || !isAllowedToRun()) {
		if(laserSat.isAlive()) {
			laserSat.deactivateLaser();
		}

		setRunning(false);
	} else if(!laserSat.isAlive() && !finished && !laserSat.getJammed() && world.isBlockIndirectlyGettingPowered(getPos()) > 0 && canMachineSeeEarth()) {

		//Laser will be on at this point
		int orbitDimId = ((WorldProviderSpace)this.world.provider).getDimensionProperties(getPos()).getParentPlanet();
		if(orbitDimId == SpaceObjectManager.WARPDIMID)
			return;
		WorldServer orbitWorld = DimensionManager.getWorld(orbitDimId);

		if(orbitWorld == null) {
			DimensionManager.initDimension(orbitDimId);
			orbitWorld = DimensionManager.getWorld(orbitDimId);
			if(orbitWorld == null)
				return;
		}


		if(ticket == null) {
			ticket = ForgeChunkManager.requestTicket(AdvancedRocketry.instance, this.world, Type.NORMAL);
			if(ticket != null)
				ForgeChunkManager.forceChunk(ticket, new ChunkPos(getPos().getX() / 16 - (getPos().getX() < 0 ? 1 : 0), getPos().getZ() / 16 - (getPos().getZ() < 0 ? 1 : 0)));
		}

		setRunning(laserSat.activateLaser(orbitWorld, laserX, laserZ));
	}

	if(!this.world.isRemote)
		PacketHandler.sendToNearby(new PacketMachine(this, (byte)12), 128, pos, this.world.provider.getDimension());
}
 
源代码13 项目: AdvancedRocketry   文件: SatelliteLaser.java
public void deactivateLaser() {
	if(laser != null) {
		laser.setDead();
		laser = null;
	}
	
	if(ticketLaser != null)
		ForgeChunkManager.releaseTicket(ticketLaser);
	
	finished = false;
}
 
源代码14 项目: AdvancedRocketry   文件: SatelliteLaser.java
/**
 * creates the laser and begins mining.  This can
 * fail if the chunk cannot be force loaded
 * @param world world to spawn the laser into
 * @param x x coord
 * @param z z coord
 * @return whether creating the laser is successful
 */
public boolean activateLaser(World world, int x, int z) {
	ticketLaser = ForgeChunkManager.requestTicket(AdvancedRocketry.instance, world, Type.NORMAL);
	
	if(ticketLaser != null) {
		ForgeChunkManager.forceChunk(ticketLaser, new ChunkPos(x >> 4, z >> 4));
		
		int y = 64;
		
		if(world.getChunkFromChunkCoords(x >> 4, z >> 4).isLoaded()) {
			int current = 0;
			for(int i = 0; i < 9; i++) {
				current = world.getTopSolidOrLiquidBlock(new BlockPos(x + (i % 3) - 1, 0xFF, z + (i / 3) - 1)).getY();
				if(current > y)
					y = current;
			}
			if(y < 1)
				y = 255;
		}
		else
			y = 255;
		
		laser = new EntityLaserNode(world, x, y, z);
		laser.forceSpawn = true;
		world.spawnEntity(laser);
		return true;
	}
	return false;
}
 
源代码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
/**
 * By doing this you are delegating all chunks from your mod to be handled by yours truly.
 */
public static void registerMod(Object mod) {
    ModContainer container = Loader.instance().getModObjectList().inverse().get(mod);
    if (container == null)
        throw new NullPointerException("Mod container not found for: " + mod);
    mods.put(mod, container);
    ForgeChunkManager.setForcedChunkLoadingCallback(mod, new DummyLoadingCallback());
}
 
源代码17 项目: enderutilities   文件: CommonProxy.java
public void registerEventHandlers()
{
    MinecraftForge.EVENT_BUS.register(new AnvilUpdateEventHandler());
    MinecraftForge.EVENT_BUS.register(new BlockEventHandler());
    MinecraftForge.EVENT_BUS.register(new EntityEventHandler());
    MinecraftForge.EVENT_BUS.register(new ItemPickupEventHandler());
    MinecraftForge.EVENT_BUS.register(new LivingDropsEventHandler());
    MinecraftForge.EVENT_BUS.register(new PlayerEventHandler());
    MinecraftForge.EVENT_BUS.register(new WorldEventHandler());
    MinecraftForge.EVENT_BUS.register(new TickHandler());

    MinecraftForge.EVENT_BUS.register(this);

    ForgeChunkManager.setForcedChunkLoadingCallback(EnderUtilities.instance, new ChunkLoading());
}
 
源代码18 项目: enderutilities   文件: ChunkLoading.java
public void tickChunkTimeouts()
{
    DimChunkCoordTimeout dcct;
    Iterator<Map.Entry<String, DimChunkCoordTimeout>> iterator = this.timeOuts.entrySet().iterator();

    //int j = 0; // FIXME debug
    while (iterator.hasNext())
    {
        dcct = iterator.next().getValue();
        //System.out.printf("tickChunkTimeouts(): loop %d, timeout: %d\n", j++, dcct.timeout);

        if (dcct != null && (this.playerTickets.containsValue(dcct.ticket) || this.modTickets.containsValue(dcct.ticket)))
        {
            if (dcct.tick() == 0)
            {
                //System.out.printf("tickChunkTimeouts(): unforcing, dim: %d, %s\n", dcct.dimension, dcct.chunkCoords.toString());
                ForgeChunkManager.unforceChunk(dcct.ticket, dcct.chunkCoords);

                if (dcct.ticket != null && dcct.ticket.getChunkList().size() == 0)
                {
                    this.removeTicket(dcct.ticket);
                    ForgeChunkManager.releaseTicket(dcct.ticket);
                }

                iterator.remove();
            }
        }
        // If this chunk doesn't have a valid ticket anymore, just remove the entry
        else
        {
            //System.out.println("tickChunkTimeouts(): invalid ticket, removing timeout entry");
            iterator.remove();
        }
    }
}
 
源代码19 项目: MyTown2   文件: MyTownDatasource.java
protected boolean loadTowns() {
    try {
        PreparedStatement loadTownsStatement = prepare("SELECT * FROM " + prefix + "Towns", true);
        ResultSet rs = loadTownsStatement.executeQuery();

        while (rs.next()) {
            Town town;
            if (rs.getBoolean("isAdminTown")) {
                town = new AdminTown(rs.getString("name"));
            } else {
                town = new Town(rs.getString("name"));
            }
            town.setSpawn(new Teleport(rs.getInt("spawnDim"), rs.getFloat("spawnX"), rs.getFloat("spawnY"), rs.getFloat("spawnZ"), rs.getFloat("cameraYaw"), rs.getFloat("cameraPitch")));
            town.townBlocksContainer.setExtraBlocks(rs.getInt("extraBlocks"));
            town.townBlocksContainer.setExtraFarClaims(rs.getInt("extraFarClaims"));
            town.plotsContainer.setMaxPlots(rs.getInt("maxPlots"));

            for (ForgeChunkManager.Ticket ticket : MyTownLoadingCallback.tickets) {
                if (ticket.getModData().getString("townName").equals(town.getName())) {
                    town.ticketMap.put(ticket.world.provider.dimensionId, ticket);
                }
            }

            MyTownUniverse.instance.addTown(town);
        }
    } catch (SQLException e) {
        LOG.error("Failed to load Towns!");
        LOG.error(ExceptionUtils.getStackTrace(e));
        return false;
    }

    return true;
}
 
源代码20 项目: MyTown2   文件: TicketMap.java
public void chunkLoad(TownBlock block) {
    ForgeChunkManager.Ticket ticket = get(block.getDim());
    NBTTagList list = ticket.getModData().getTagList("chunkCoords", Constants.NBT.TAG_COMPOUND);
    list.appendTag(block.toChunkPos().toNBTTagCompound());

    ForgeChunkManager.forceChunk(ticket, block.toChunkCoords());
}
 
源代码21 项目: MyTown2   文件: TicketMap.java
public int getChunkloadedAmount() {
    int size = 0;
    for (ForgeChunkManager.Ticket ticket : values()) {
        size += ticket.getChunkList().size();
    }
    return size;
}
 
源代码22 项目: MyTown2   文件: MyTownLoadingCallback.java
@Override
public void ticketsLoaded(List<ForgeChunkManager.Ticket> tickets, World world) {
    for (ForgeChunkManager.Ticket ticket : tickets) {
        NBTTagList list = ticket.getModData().getTagList("chunkCoords", Constants.NBT.TAG_COMPOUND);
        for (int i = 0; i < list.tagCount(); i++) {
            NBTTagCompound chunkNBT = list.getCompoundTagAt(i);
            ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(chunkNBT.getInteger("x"), chunkNBT.getInteger("z")));
        }
    }
    MyTownLoadingCallback.tickets.addAll(tickets);
}
 
源代码23 项目: CommunityMod   文件: BaseVehicleEntity.java
@Override
public void setDead() {
	ForgeChunkManager.releaseTicket(loadTicket);
	super.setDead();
}
 
源代码24 项目: CommunityMod   文件: BlockyEntities.java
@Override
public void onInit(FMLInitializationEvent event) {
	StorageDimReg.regStorageDim();
	ForgeChunkManager.setForcedChunkLoadingCallback(CommunityMod.INSTANCE, new ChunkCallback());
}
 
源代码25 项目: Signals   文件: ChunkLoadManager.java
public void dispose(){
    ForgeChunkManager.releaseTicket(ticket);
}
 
@Override
public void setDead() {
	super.setDead();
	if(ticket != null)
		ForgeChunkManager.releaseTicket(ticket);
}
 
源代码27 项目: AdvancedRocketry   文件: TileRailgun.java
@Override
public void invalidate() {
	super.invalidate();
	ForgeChunkManager.releaseTicket(ticket);
}
 
源代码28 项目: AdvancedRocketry   文件: TileSpaceLaser.java
public void onDestroy() {
	if(laserSat != null) {
		laserSat.deactivateLaser();
	}
	ForgeChunkManager.releaseTicket(ticket);
}
 
源代码29 项目: ChickenChunks   文件: ChunkLoaderManager.java
public boolean canForceNewChunks(int required, int dim) {
    return required + numLoadedChunks() < getPlayerChunkLimit(username) && required < ForgeChunkManager.ticketCountAvailableFor(username) * ForgeChunkManager.getMaxChunkDepthFor("ChickenChunks");
}
 
源代码30 项目: ChickenChunks   文件: ChunkLoaderManager.java
@Override
public Ticket createTicket(int dimension) {
    return ForgeChunkManager.requestPlayerTicket(ChickenChunks.instance, username, DimensionManager.getWorld(dimension), Type.NORMAL);
}
 
 类方法
 同包方法