Java 类net.minecraft.world.chunk.storage.AnvilChunkLoader 实例源码
项目:CustomWorldGen
文件:ChunkIOExecutor.java
public static void queueChunkLoad(World world, AnvilChunkLoader loader, ChunkProviderServer provider, int x, int z, Runnable runnable)
{
QueuedChunk key = new QueuedChunk(x, z, world);
ChunkIOProvider task = tasks.get(key);
if (task == null)
{
task = new ChunkIOProvider(key, loader, provider);
task.addCallback(runnable); // Add before calling execute for thread safety
tasks.put(key, task);
pool.execute(task);
}
else
{
task.addCallback(runnable);
}
}
项目:Jiffy
文件:ChunkIOProvider.java
public Chunk callStage1(QueuedChunk queuedChunk) throws RuntimeException {
AnvilChunkLoader loader = queuedChunk.loader;
Object[] data = null;
try {
data = loader.loadChunk__Async(queuedChunk.world, queuedChunk.x, queuedChunk.z);
} catch (IOException e) {
e.printStackTrace();
}
if (data != null) {
queuedChunk.compound = (net.minecraft.nbt.NBTTagCompound) data[1];
return (net.minecraft.world.chunk.Chunk) data[0];
}
return null;
}
项目:ElConQore
文件:EQSaveHandler.java
public File getSaveFile(ISaveHandler saveHandler, World world, String name, boolean backup) {
File worldDir = new File(saveHandler.getWorldDirectoryName());
IChunkLoader loader = saveHandler.getChunkLoader(world.provider);
if((loader instanceof AnvilChunkLoader)) {
worldDir = ((AnvilChunkLoader) loader).chunkSaveLocation;
}
File file = new File(worldDir, name + (backup ? ".bak" : ""));
if(!file.exists()) {
try {
file.createNewFile();
} catch(Exception e) {
e.printStackTrace();
}
}
return file;
}
项目:Backmemed
文件:MobSpawnerBaseLogic.java
public Entity getCachedEntity()
{
if (this.cachedEntity == null)
{
this.cachedEntity = AnvilChunkLoader.readWorldEntity(this.randomEntity.getNbt(), this.getSpawnerWorld(), false);
if (this.randomEntity.getNbt().getSize() == 1 && this.randomEntity.getNbt().hasKey("id", 8) && this.cachedEntity instanceof EntityLiving)
{
((EntityLiving)this.cachedEntity).onInitialSpawn(this.getSpawnerWorld().getDifficultyForLocation(new BlockPos(this.cachedEntity)), (IEntityLivingData)null);
}
}
return this.cachedEntity;
}
项目:CustomWorldGen
文件:ChunkIOExecutor.java
public static Chunk syncChunkLoad(World world, AnvilChunkLoader loader, ChunkProviderServer provider, int x, int z)
{
QueuedChunk key = new QueuedChunk(x, z, world);
ChunkIOProvider task = tasks.remove(key); // Remove task because we will call the sync callbacks directly
if (task != null)
{
if (!pool.remove(task)) // If it wasn't in the pool, and run hasn't finished, then wait for the async thread.
{
synchronized(task)
{
while (!task.runFinished())
{
try
{
task.wait();
}
catch (InterruptedException e)
{
e.printStackTrace(); // Something happened? Log it?
}
}
}
}
else
{
// If the task was not run yet we still need to load the chunk
task.run();
}
}
else
{
task = new ChunkIOProvider(key, loader, provider);
task.run();
}
task.syncCallback();
return task.getChunk();
}
项目:CustomWorldGen
文件:MobSpawnerBaseLogic.java
@SideOnly(Side.CLIENT)
public Entity getCachedEntity()
{
if (this.cachedEntity == null)
{
this.cachedEntity = AnvilChunkLoader.readWorldEntity(this.randomEntity.getNbt(), this.getSpawnerWorld(), false);
if (this.randomEntity.getNbt().getSize() == 1 && this.randomEntity.getNbt().hasKey("id", 8) && this.cachedEntity instanceof EntityLiving)
{
((EntityLiving)this.cachedEntity).onInitialSpawn(this.getSpawnerWorld().getDifficultyForLocation(new BlockPos(this.cachedEntity)), (IEntityLivingData)null);
}
}
return this.cachedEntity;
}
项目:justenoughdimensions
文件:WorldFileUtils.java
@Nullable
public static File getWorldDirectory(World world)
{
IChunkProvider chunkProvider = world.getChunkProvider();
if (chunkProvider instanceof ChunkProviderServer)
{
ChunkProviderServer chunkProviderServer = (ChunkProviderServer) chunkProvider;
IChunkLoader chunkLoader = chunkProviderServer.chunkLoader;
if (chunkLoader instanceof AnvilChunkLoader)
{
return ((AnvilChunkLoader) chunkLoader).chunkSaveLocation;
}
return null;
}
// If this method gets called before ChunkProviderServer has been set yet,
// then we mimic the vanilla code in AnvilSaveHandler#getChunkLoader() to get the directory.
else
{
File mainWorldDir = world.getSaveHandler().getWorldDirectory();
String dimensionDir = world.provider.getSaveFolder();
if (dimensionDir != null)
{
mainWorldDir = new File(mainWorldDir, dimensionDir);
mainWorldDir.mkdirs();
}
return mainWorldDir;
}
}
项目:Jiffy
文件:QueuedChunk.java
public QueuedChunk(int x, int z, AnvilChunkLoader loader, World world, ChunkProviderServer provider) {
this.x = x;
this.z = z;
this.loader = loader;
this.world = world;
this.provider = provider;
}
项目:NeptuneMod
文件:MixinAnvilSaveHandler.java
/**
* @author jamierocks - 30th October 2016
* @reason Use the Canary directory structure
*/
@Overwrite
public IChunkLoader getChunkLoader(WorldProvider provider) {
if (provider instanceof WorldProviderHell) {
return new AnvilChunkLoader(new File(this.getWorldDirectory(), this.getWorldDirectoryName() + "_" + DimensionType.NETHER.getName()));
} else if (provider instanceof WorldProviderEnd) {
return new AnvilChunkLoader(new File(this.getWorldDirectory(), this.getWorldDirectoryName() + "_" + DimensionType.END.getName()));
} else {
return new AnvilChunkLoader(new File(this.getWorldDirectory(), this.getWorldDirectoryName() + "_" + DimensionType.NORMAL.getName()));
}
}
项目:forge_world_downloader
文件:WDL.java
/** Load the previously saved TileEntities and add them to the Chunk **/
public static void importTileEntities( Chunk chunk )
{
File chunkSaveLocation = (File) Reflexion.stealField( AnvilChunkLoader.class, File.class ).get(chunkLoader);
DataInputStream dis = RegionFileCache.getChunkInputStream( chunkSaveLocation, chunk.xPosition, chunk.zPosition );
try
{
NBTTagCompound chunkNBT = CompressedStreamTools.read( dis );
NBTTagCompound levelNBT = chunkNBT.getCompoundTag( "Level" );
// The official code checks if the chunk is in the right location. Should I too?.
NBTTagList tileEntitiesNBT = levelNBT.getTagList( "TileEntities" );
for( int i = 0; i < tileEntitiesNBT.tagCount(); i++ )
{
NBTTagCompound tileEntityNBT = (NBTTagCompound) tileEntitiesNBT.tagAt( i );
TileEntity te = TileEntity.createAndLoadEntity( tileEntityNBT );
String entityType = getTEName(te);
if(( isImportableTileEntity( te ) ))
{
if( ! newTileEntities.contains( new ChunkPosition( te.xCoord, te.yCoord, te.zCoord ) ) )
{
wc.setBlockTileEntity( te.xCoord, te.yCoord, te.zCoord, te );
chatDebug("Loaded TE: " + entityType + " at " + te.xCoord + " " + te.yCoord + " " + te.zCoord );
}
else
{
chatDebug( "Dropping old TE: " + entityType + " at " + te.xCoord + " " + te.yCoord + " " + te.zCoord );
}
}
else
{
chatDebug( "TE is not importable: " + entityType + " at " + te.xCoord + " " + te.yCoord + " " + te.zCoord );
}
}
}
catch ( Exception e ) { } // Couldn't load the old chunk. Nothing unusual. Happens with every not downloaded chunk.
}
项目:RuneCraftery
文件:AnvilSaveHandler.java
public IChunkLoader func_75763_a(WorldProvider p_75763_1_) {
File var2 = this.func_75765_b();
File var3;
if(p_75763_1_ instanceof WorldProviderHell) {
var3 = new File(var2, "DIM-1");
var3.mkdirs();
return new AnvilChunkLoader(var3);
} else if(p_75763_1_ instanceof WorldProviderEnd) {
var3 = new File(var2, "DIM1");
var3.mkdirs();
return new AnvilChunkLoader(var3);
} else {
return new AnvilChunkLoader(var2);
}
}
项目:Generatormods
文件:BuildingExplorationHandler.java
protected static File getWorldSaveDir(World world) {
ISaveHandler worldSaver = world.getSaveHandler();
if (worldSaver.getChunkLoader(world.provider) instanceof AnvilChunkLoader) {
return ((AnvilChunkLoader) worldSaver.getChunkLoader(world.provider)).chunkSaveLocation;
}
return null;
}
项目:CustomOreGen
文件:ServerState.java
private static boolean chunkIsSaved(World world, int chunkX, int chunkZ) {
if (world.getChunkProvider() instanceof ChunkProviderServer) {
IChunkLoader loader = ((ChunkProviderServer)world.getChunkProvider()).chunkLoader;
if (loader instanceof AnvilChunkLoader) {
//if (((AnvilChunkLoader) loader).chunkExists(world, chunkX, chunkZ))
// CustomOreGenBase.log.info("[" + chunkX + "," + chunkZ + "]: saved on disk");
return ((AnvilChunkLoader) loader).chunkExists(world, chunkX, chunkZ);
}
}
return false;
}
项目:CustomWorldGen
文件:ChunkIOProvider.java
ChunkIOProvider(QueuedChunk chunk, AnvilChunkLoader loader, ChunkProviderServer provider)
{
this.chunkInfo = chunk;
this.loader = loader;
this.provider = provider;
}
项目:CustomWorldGen
文件:DataFixesManager.java
public static DataFixer createFixer()
{
DataFixer datafixer = new DataFixer(512);
WorldInfo.registerFixes(datafixer);
EntityPlayer.registerFixesPlayer(datafixer);
AnvilChunkLoader.registerFixes(datafixer);
ItemStack.registerFixes(datafixer);
EntityArmorStand.registerFixesArmorStand(datafixer);
EntityArrow.registerFixesArrow(datafixer);
EntityBat.registerFixesBat(datafixer);
EntityBlaze.registerFixesBlaze(datafixer);
EntityCaveSpider.registerFixesCaveSpider(datafixer);
EntityChicken.registerFixesChicken(datafixer);
EntityCow.registerFixesCow(datafixer);
EntityCreeper.registerFixesCreeper(datafixer);
EntityDragonFireball.registerFixesDragonFireball(datafixer);
EntityDragon.registerFixesDragon(datafixer);
EntityEnderman.registerFixesEnderman(datafixer);
EntityEndermite.registerFixesEndermite(datafixer);
EntityFallingBlock.registerFixesFallingBlock(datafixer);
EntityLargeFireball.registerFixesLargeFireball(datafixer);
EntityFireworkRocket.registerFixesFireworkRocket(datafixer);
EntityGhast.registerFixesGhast(datafixer);
EntityGiantZombie.registerFixesGiantZombie(datafixer);
EntityGuardian.registerFixesGuardian(datafixer);
EntityHorse.registerFixesHorse(datafixer);
EntityItem.registerFixesItem(datafixer);
EntityItemFrame.registerFixesItemFrame(datafixer);
EntityMagmaCube.registerFixesMagmaCube(datafixer);
EntityMinecartChest.registerFixesMinecartChest(datafixer);
EntityMinecartCommandBlock.registerFixesMinecartCommand(datafixer);
EntityMinecartFurnace.registerFixesMinecartFurnace(datafixer);
EntityMinecartHopper.registerFixesMinecartHopper(datafixer);
EntityMinecartEmpty.registerFixesMinecartEmpty(datafixer);
EntityMinecartMobSpawner.registerFixesMinecartMobSpawner(datafixer);
EntityMinecartTNT.registerFixesMinecartTNT(datafixer);
EntityLiving.registerFixesMob(datafixer);
EntityMob.registerFixesMonster(datafixer);
EntityMooshroom.registerFixesMooshroom(datafixer);
EntityOcelot.registerFixesOcelot(datafixer);
EntityPig.registerFixesPig(datafixer);
EntityPigZombie.registerFixesPigZombie(datafixer);
EntityRabbit.registerFixesRabbit(datafixer);
EntitySheep.registerFixesSheep(datafixer);
EntityShulker.registerFixesShulker(datafixer);
EntitySilverfish.registerFixesSilverfish(datafixer);
EntitySkeleton.registerFixesSkeleton(datafixer);
EntitySlime.registerFixesSlime(datafixer);
EntitySmallFireball.registerFixesSmallFireball(datafixer);
EntitySnowman.registerFixesSnowman(datafixer);
EntitySnowball.registerFixesSnowball(datafixer);
EntitySpectralArrow.registerFixesSpectralArrow(datafixer);
EntitySpider.registerFixesSpider(datafixer);
EntitySquid.registerFixesSquid(datafixer);
EntityEgg.registerFixesEgg(datafixer);
EntityEnderPearl.registerFixesEnderPearl(datafixer);
EntityExpBottle.registerFixesExpBottle(datafixer);
EntityPotion.registerFixesPotion(datafixer);
EntityTippedArrow.registerFixesTippedArrow(datafixer);
EntityVillager.registerFixesVillager(datafixer);
EntityIronGolem.registerFixesIronGolem(datafixer);
EntityWitch.registerFixesWitch(datafixer);
EntityWither.registerFixesWither(datafixer);
EntityWitherSkull.registerFixesWitherSkull(datafixer);
EntityWolf.registerFixesWolf(datafixer);
EntityZombie.registerFixesZombie(datafixer);
TileEntityPiston.registerFixesPiston(datafixer);
TileEntityFlowerPot.registerFixesFlowerPot(datafixer);
TileEntityFurnace.registerFixesFurnace(datafixer);
TileEntityChest.registerFixesChest(datafixer);
TileEntityDispenser.registerFixes(datafixer);
TileEntityDropper.registerFixesDropper(datafixer);
TileEntityBrewingStand.registerFixesBrewingStand(datafixer);
TileEntityHopper.registerFixesHopper(datafixer);
BlockJukebox.registerFixesJukebox(datafixer);
TileEntityMobSpawner.registerFixesMobSpawner(datafixer);
registerFixes(datafixer);
return datafixer;
}
项目:DynmapCanary
文件:CanaryModMapChunkCache.java
public static void init() {
if (!init)
{
Field[] f = ChunkProviderServer.class.getDeclaredFields();
for(int i = 0; i < f.length; i++) {
if((unloadqueue == null) && f[i].getType().isAssignableFrom(java.util.Set.class)) {
unloadqueue = f[i];
//Log.info("Found unloadqueue - " + f[i].getName());
unloadqueue.setAccessible(true);
}
else if((currentchunkloader == null) && f[i].getType().isAssignableFrom(IChunkLoader.class)) {
currentchunkloader = f[i];
//Log.info("Found currentchunkprovider - " + f[i].getName());
currentchunkloader.setAccessible(true);
}
}
f = WorldServer.class.getDeclaredFields();
for(int i = 0; i < f.length; i++) {
if((updateEntityTick == null) && f[i].getType().isAssignableFrom(int.class)) {
updateEntityTick = f[i];
//Log.info("Found updateEntityTick - " + f[i].getName());
updateEntityTick.setAccessible(true);
}
}
f = AnvilChunkLoader.class.getDeclaredFields();
for(int i = 0; i < f.length; i++) {
if((chunksToRemove == null) && (f[i].getType().equals(List.class))) {
chunksToRemove = f[i];
chunksToRemove.setAccessible(true);
}
else if((pendingAnvilChunksCoordinates == null) && (f[i].getType().equals(Set.class))) {
pendingAnvilChunksCoordinates = f[i];
pendingAnvilChunksCoordinates.setAccessible(true);
}
else if((syncLockObject == null) && (f[i].getType().equals(Object.class))) {
syncLockObject = f[i];
syncLockObject.setAccessible(true);
}
else if((chunkSaveLocation == null) && (f[i].getType().equals(File.class))) {
chunkSaveLocation = f[i];
chunkSaveLocation.setAccessible(true);
}
}
// Get writeChunkToNBT method
Method[] ma = AnvilChunkLoader.class.getDeclaredMethods();
for (Method m : ma) {
Class<?>[] p = m.getParameterTypes();
if ((p.length == 3) && (p[0].equals(Chunk.class)) && (p[1].equals(World.class)) && (p[2].equals(NBTTagCompound.class))) {
writechunktonbt = m;
m.setAccessible(true);
break;
}
}
if ((unloadqueue == null) || (currentchunkloader == null) || (writechunktonbt == null))
{
Log.severe("ERROR: cannot find unload queue or chunk provider field - dynmap cannot load chunks");
}
if (updateEntityTick == null) {
Log.severe("ERROR: cannot find updateEntityTick - dynmap cannot drive entity cleanup when no players are active");
}
init = true;
}
}
项目:Jiffy
文件:WorldServer.java
public File getChunkSaveLocation() {
return ((AnvilChunkLoader) theChunkProviderServer.currentChunkLoader).chunkSaveLocation;
}
项目:Jiffy
文件:ChunkIOExecutor.java
public static Chunk syncChunkLoad(World world, AnvilChunkLoader loader, ChunkProviderServer provider, int x, int z) {
return instance.getSkipQueue(new QueuedChunk(x, z, loader, world, provider));
}
项目:Jiffy
文件:ChunkIOExecutor.java
public static void queueChunkLoad(World world, AnvilChunkLoader loader, ChunkProviderServer provider, int x, int z, Runnable runnable) {
instance.add(new QueuedChunk(x, z, loader, world, provider), runnable);
}
项目:ExpandedRailsMod
文件:CommandSummon.java
/**
* Callback for when the command is executed
*/
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException
{
if (args.length < 1)
{
throw new WrongUsageException("commands.summon.usage", new Object[0]);
}
else
{
String s = args[0];
BlockPos blockpos = sender.getPosition();
Vec3d vec3d = sender.getPositionVector();
double d0 = vec3d.xCoord;
double d1 = vec3d.yCoord;
double d2 = vec3d.zCoord;
if (args.length >= 4)
{
d0 = parseDouble(d0, args[1], true);
d1 = parseDouble(d1, args[2], false);
d2 = parseDouble(d2, args[3], true);
blockpos = new BlockPos(d0, d1, d2);
}
World world = sender.getEntityWorld();
if (!world.isBlockLoaded(blockpos))
{
throw new CommandException("commands.summon.outOfWorld", new Object[0]);
}
else if ("LightningBolt".equals(s))
{
world.addWeatherEffect(new EntityLightningBolt(world, d0, d1, d2, false));
notifyCommandListener(sender, this, "commands.summon.success", new Object[0]);
}
else
{
NBTTagCompound nbttagcompound = new NBTTagCompound();
boolean flag = false;
if (args.length >= 5)
{
ITextComponent itextcomponent = getChatComponentFromNthArg(sender, args, 4);
try
{
nbttagcompound = JsonToNBT.getTagFromJson(itextcomponent.getUnformattedText());
flag = true;
}
catch (NBTException nbtexception)
{
throw new CommandException("commands.summon.tagError", new Object[] {nbtexception.getMessage()});
}
}
nbttagcompound.setString("id", s);
Entity entity = AnvilChunkLoader.readWorldEntityPos(nbttagcompound, world, d0, d1, d2, true);
if (entity == null)
{
throw new CommandException("commands.summon.failed", new Object[0]);
}
else
{
entity.setLocationAndAngles(d0, d1, d2, entity.rotationYaw, entity.rotationPitch);
if (!flag && entity instanceof EntityLiving)
{
((EntityLiving)entity).onInitialSpawn(world.getDifficultyForLocation(new BlockPos(entity)), (IEntityLivingData)null);
}
notifyCommandListener(sender, this, "commands.summon.success", new Object[0]);
}
}
}
}
项目:Cauldron
文件:WorldServer.java
public File getChunkSaveLocation()
{
return ((AnvilChunkLoader)theChunkProviderServer.currentChunkLoader).chunkSaveLocation;
}
项目:Cauldron
文件:WorldServer.java
public File getChunkSaveLocation()
{
return ((AnvilChunkLoader)theChunkProviderServer.currentChunkLoader).chunkSaveLocation;
}
项目:ShadowsOfPhysis
文件:StructureGenerator.java
public void plan(IChunkProvider chunkProvider, World world, int chunkX, int chunkZ, Block[] blocks) {
if (!this.allowedInWorld(world)) {
//Physis.logger.info("NOT VALID DIM");
return;
}
if (!(world.getChunkProvider() instanceof ChunkProviderServer)) {
//Physis.logger.info("NOT CPS");
return;
}
ChunkProviderServer cps = (ChunkProviderServer)world.getChunkProvider();
if (!(cps.currentChunkLoader instanceof AnvilChunkLoader)) {
//Physis.logger.info("NOT ACL");
return;
}
AnvilChunkLoader acl = (AnvilChunkLoader)cps.currentChunkLoader;
// check around this chunk
for (int rx=-this.radius; rx<=this.radius; rx++) {
scan:
for (int rz=-this.radius; rz<=this.radius; rz++) {
long coordhash = StructureData.idFromCoords(chunkX+rx, chunkZ+rz);
if (!this.structureMap.containsKey(world)) {
this.structureMap.put(world, new HashMap<Long, StructureData>());
}
if (this.structureMap.get(world).containsKey(coordhash)) {
//Physis.logger.info("Duplicate");
continue;
}
if (this.canGenerateInChunk(world, chunkX + rx, chunkZ + rz)) {
// ok, we can generate in the found chunk - find out if only the source chunk was generated
for (int sx=-this.radius; sx<=this.radius; sx++) {
for (int sz=-this.radius; sz<=this.radius; sz++) {
int checkX = chunkX + rx + sx;
int checkZ = chunkZ + rz + sz;
if (checkX == chunkX || checkZ == chunkZ) { continue; }
if (acl.chunkExists(world, checkX, checkZ)) {
//Physis.logger.info("Rejected structure at "+(chunkX + rx)+","+(chunkZ + rz)+" due to generated chunk at "+checkX+","+checkZ);
continue scan;
}
}
}
StructureData sdata = this.createStructureInChunk(world, chunkX + rx, chunkZ + rz);
if (!this.structureMap.containsKey(world)) {
this.structureMap.put(world, new HashMap<Long, StructureData>());
}
this.structureMap.get(world).put(sdata.id, sdata);
//Physis.logger.info("Generating a new structure at chunk "+sdata.x+","+sdata.z);
//saveGeneratorsToWorldData();
}
}
}
}
项目:RuneCraftery
文件:WorldServer.java
public File getChunkSaveLocation()
{
return ((AnvilChunkLoader)theChunkProviderServer.currentChunkLoader).chunkSaveLocation;
}
项目:BetterNutritionMod
文件:WorldServer.java
public File getChunkSaveLocation()
{
return ((AnvilChunkLoader)theChunkProviderServer.currentChunkLoader).chunkSaveLocation;
}