Another try at 1.9 chunk freeze workaround - avoid unloadChunk API
This commit is contained in:
parent
9e82613d75
commit
b420e091a1
3 changed files with 18 additions and 1 deletions
|
|
@ -144,4 +144,8 @@ public abstract class BukkitVersionHelper {
|
||||||
* Get world border
|
* Get world border
|
||||||
*/
|
*/
|
||||||
public Polygon getWorldBorder(World world) { return null; }
|
public Polygon getWorldBorder(World world) { return null; }
|
||||||
|
/**
|
||||||
|
* Test if broken unloadChunk
|
||||||
|
*/
|
||||||
|
public boolean isUnloadChunkBroken() { return false; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,10 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||||
private Method worldbordermaxz;
|
private Method worldbordermaxz;
|
||||||
private Method getbiomebyid;
|
private Method getbiomebyid;
|
||||||
private Method getidbybiome;
|
private Method getidbybiome;
|
||||||
|
private boolean isBadUnload = false;
|
||||||
|
|
||||||
BukkitVersionHelperCB() {
|
BukkitVersionHelperCB() {
|
||||||
|
isBadUnload = Bukkit.getServer().getBukkitVersion().contains("1.9");
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected String getNMSPackage() {
|
protected String getNMSPackage() {
|
||||||
|
|
@ -314,5 +316,10 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||||
}
|
}
|
||||||
return super.getBiomeBaseID(bb);
|
return super.getBiomeBaseID(bb);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Test if broken unloadChunk
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean isUnloadChunkBroken() { return isBadUnload; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -878,7 +878,13 @@ public class NewMapChunkCache extends MapChunkCache {
|
||||||
* by the MC base server is 21x21 (or about a 160 block radius).
|
* by the MC base server is 21x21 (or about a 160 block radius).
|
||||||
* Also, if we did generate it, need to save it */
|
* Also, if we did generate it, need to save it */
|
||||||
if (w.isChunkInUse(chunk.x, chunk.z) == false) {
|
if (w.isChunkInUse(chunk.x, chunk.z) == false) {
|
||||||
helper.unloadChunkNoSave(w, c, chunk.x, chunk.z);
|
if (helper.isUnloadChunkBroken()) {
|
||||||
|
// Give up on broken unloadChunk API - lets see if this works
|
||||||
|
w.unloadChunkRequest(chunk.x, chunk.z);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
helper.unloadChunkNoSave(w, c, chunk.x, chunk.z);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
endChunkLoad(startTime, ChunkStats.UNLOADED_CHUNKS);
|
endChunkLoad(startTime, ChunkStats.UNLOADED_CHUNKS);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue