Removed the regeneration code for the Sponge platform

This commit is contained in:
Wyatt Childers 2016-03-22 00:45:54 -04:00
parent de0da7d3e9
commit 23f2930aad
2 changed files with 6 additions and 106 deletions

View File

@ -121,112 +121,6 @@ public class SpongeNMSWorld extends SpongeWorld {
return false;
}
private static <T, K> K getFieldValue(Class<T> clazz, T object, String feildName, Class<K> valueClazz) {
try {
Field field = clazz.getDeclaredField(feildName); // Found in the MCP Mappings
field.setAccessible(true);
return valueClazz.cast(field.get(object));
} catch (NoSuchFieldException | IllegalAccessException e) {
System.out.println("Exception while modifying inaccessible variable: " + e.getMessage());
}
throw new IllegalStateException("Invalid variable state");
}
@SuppressWarnings("unchecked")
@Override
public boolean regenerate(Region region, EditSession editSession) {
BaseBlock[] history = new BaseBlock[256 * (getMaxY() + 1)];
IChunkProvider provider = ((net.minecraft.world.World) getWorld()).getChunkProvider();
if (!(provider instanceof ChunkProviderServer)) {
return false;
}
ChunkProviderServer chunkServer = (ChunkProviderServer) provider;
IChunkProvider chunkProvider = getFieldValue(
ChunkProviderServer.class,
chunkServer,
"field_73246_d", // serverChunkGenerator
IChunkProvider.class
);
Set droppedChunksSet = getFieldValue(
ChunkProviderServer.class,
chunkServer,
"field_73248_b", // droppedChunksSet,
Set.class
);
LongHashMap id2ChunkMap = getFieldValue(
ChunkProviderServer.class,
chunkServer,
"field_73244_f", // id2ChunkMap
LongHashMap.class
);
List loadedChunks = getFieldValue(
ChunkProviderServer.class,
chunkServer,
"field_73245_g", // loadedChunks
List.class
);
for (Vector2D chunk : region.getChunks()) {
Vector min = new Vector(chunk.getBlockX() * 16, 0, chunk.getBlockZ() * 16);
for (int x = 0; x < 16; x++) {
for (int y = 0; y < getMaxY() + 1; y++) {
for (int z = 0; z < 16; z++) {
Vector pt = min.add(x, y, z);
int index = y * 16 * 16 + z * 16 + x;
history[index] = editSession.getBlock(pt);
}
}
}
try {
Set<Vector2D> chunks = region.getChunks();
for (Vector2D coord : chunks) {
long pos = ChunkCoordIntPair.chunkXZ2Int(coord.getBlockX(), coord.getBlockZ());
Chunk mcChunk;
if (chunkServer.chunkExists(coord.getBlockX(), coord.getBlockZ())) {
mcChunk = chunkServer.loadChunk(coord.getBlockX(), coord.getBlockZ());
mcChunk.onChunkUnload();
}
droppedChunksSet.remove(pos);
id2ChunkMap.remove(pos);
mcChunk = chunkProvider.provideChunk(coord.getBlockX(), coord.getBlockZ());
id2ChunkMap.add(pos, mcChunk);
loadedChunks.add(mcChunk);
if (mcChunk != null) {
mcChunk.onChunkLoad();
mcChunk.populateChunk(chunkProvider, chunkProvider, coord.getBlockX(), coord.getBlockZ());
}
}
} catch (Throwable t) {
logger.log(Level.WARNING, "Failed to generate chunk", t);
return false;
}
for (int x = 0; x < 16; x++) {
for (int y = 0; y < getMaxY() + 1; y++) {
for (int z = 0; z < 16; z++) {
Vector pt = min.add(x, y, z);
int index = y * 16 * 16 + z * 16 + x;
if (!region.contains(pt))
editSession.smartSetBlock(pt, history[index]);
else {
editSession.rememberChange(pt, history[index], editSession.rawGetBlock(pt));
}
}
}
}
}
return false;
}
@Nullable
private static WorldGenerator createWorldGenerator(TreeGenerator.TreeType type) {
switch (type) {

View File

@ -22,6 +22,7 @@ package com.sk89q.worldedit.sponge;
import com.flowpowered.math.vector.Vector3d;
import com.flowpowered.math.vector.Vector3i;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEditException;
@ -154,6 +155,11 @@ public abstract class SpongeWorld extends AbstractWorld {
return true;
}
@Override
public boolean regenerate(Region region, EditSession editSession) {
return false;
}
@Override
public int getBlockLightLevel(Vector position) {
checkNotNull(position);