Increase chunk-wait
Sync packet sending
Allow up outside region
This commit is contained in:
Jesse Boyd 2016-09-27 02:58:16 +10:00
parent 27149ed67a
commit 8090bf9f1d
5 changed files with 38 additions and 11 deletions

View File

@ -142,7 +142,7 @@ public class Settings extends Config {
" or increase chunk-wait-ms.",
"A value of 0 is faster simply because it doesn't bother loading the chunks or waiting.",
})
public static int CHUNK_WAIT_MS = 100;
public static int CHUNK_WAIT_MS = 1000;
@Comment("Delete history on disk after a number of days")
public static int DELETE_AFTER_DAYS = 7;
@Comment("Delete history in memory on logout (does not effect disk) (BROKEN, USE DISK INSTEAD)")

View File

@ -1,9 +1,11 @@
package com.boydti.fawe.example;
import com.boydti.fawe.Fawe;
import com.boydti.fawe.FaweCache;
import com.boydti.fawe.config.Settings;
import com.boydti.fawe.object.FaweChunk;
import com.boydti.fawe.object.exception.FaweException;
import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.world.World;
@ -56,7 +58,7 @@ public abstract class NMSMappedFaweQueue<WORLD, CHUNK, CHUNKSECTION, SECTION> ex
public void end(FaweChunk chunk) {
super.end(chunk);
if (Settings.LIGHTING.MODE == 0) {
refreshChunk(chunk);
sendChunk(chunk);
return;
}
if (relighter == null) {
@ -79,13 +81,22 @@ public abstract class NMSMappedFaweQueue<WORLD, CHUNK, CHUNKSECTION, SECTION> ex
if (relight) {
relighter.addChunk(chunk.getX(), chunk.getZ(), fix, chunk.getBitMask());
} else {
refreshChunk(chunk);
sendChunk(chunk);
}
}
@Override
public void sendChunk(final FaweChunk fc) {
refreshChunk(fc);
if (Fawe.get().isMainThread()) {
refreshChunk(fc);
} else {
SetQueue.IMP.addTask(new Runnable() {
@Override
public void run() {
refreshChunk(fc);
}
});
}
}
public abstract void setFullbright(CHUNKSECTION sections);

View File

@ -210,7 +210,7 @@ public class MCAQueue extends NMSMappedFaweQueue<FaweQueue, FaweChunk, FaweChunk
@Override
public void refreshChunk(FaweChunk fs) {
if (fs.getClass() != MCAChunk.class) {
parentNMS.refreshChunk(fs);
parentNMS.sendChunk(fs);
}
}

View File

@ -295,6 +295,14 @@ public abstract class TaskManager {
return syncWhenFree(function, Integer.MAX_VALUE);
}
public void taskWhenFree(Runnable run) {
if (Fawe.get().isMainThread()) {
run.run();
} else {
SetQueue.IMP.addTask(run);
}
}
/**
* Run a task on the main thread when the TPS is high enough, and wait for execution to finish:<br>
* - Useful if you need to access something from the Bukkit API from another thread<br>

View File

@ -199,19 +199,27 @@ public class PlayerWrapper implements Player {
@Override
public void floatAt(final int x, final int y, final int z, final boolean alwaysGlass) {
EditSessionFactory factory = WorldEdit.getInstance().getEditSessionFactory();
final EditSession edit = factory.getEditSession(parent.getWorld(), -1, null, this);
edit.setBlockFast(new Vector(x, y - 1, z), new BaseBlock( BlockType.GLASS.getID()));
LocalSession session = Fawe.get().getWorldEdit().getSession(this);
if (session != null) {
session.remember(edit, true, false, FawePlayer.wrap(this).getLimit().MAX_HISTORY);
RuntimeException caught = null;
try {
final EditSession edit = factory.getEditSession(parent.getWorld(), -1, null, this);
edit.setBlockFast(new Vector(x, y - 1, z), new BaseBlock(BlockType.GLASS.getID()));
edit.flushQueue();
LocalSession session = Fawe.get().getWorldEdit().getSession(this);
if (session != null) {
session.remember(edit, true, false, FawePlayer.wrap(this).getLimit().MAX_HISTORY);
}
} catch (RuntimeException e) {
caught = e;
}
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
edit.getQueue().flush();
setPosition(new Vector(x + 0.5, y, z + 0.5));
}
});
if (caught != null) {
throw caught;
}
}
@Override