mirror of
https://github.com/boy0001/FastAsyncWorldedit.git
synced 2024-11-28 21:56:33 +01:00
parent
8b9c1b7563
commit
b3e0125c71
@ -85,13 +85,13 @@ public class BukkitQueue_All extends BukkitQueue_0<ChunkSnapshot, ChunkSnapshot,
|
|||||||
keepLoaded.put(pair, Long.MAX_VALUE);
|
keepLoaded.put(pair, Long.MAX_VALUE);
|
||||||
if (world.isChunkLoaded(cx, cz)) {
|
if (world.isChunkLoaded(cx, cz)) {
|
||||||
Chunk chunk = world.getChunkAt(cx, cz);
|
Chunk chunk = world.getChunkAt(cx, cz);
|
||||||
|
ChunkSnapshot snapshot = chunk.getChunkSnapshot(false, true, false);
|
||||||
if (originalKeep != null) {
|
if (originalKeep != null) {
|
||||||
keepLoaded.put(pair, originalKeep);
|
keepLoaded.put(pair, originalKeep);
|
||||||
} else {
|
} else {
|
||||||
keepLoaded.remove(pair);
|
keepLoaded.remove(pair);
|
||||||
}
|
}
|
||||||
return chunk.getChunkSnapshot(false, true, false);
|
return snapshot;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
keepLoaded.remove(pair);
|
keepLoaded.remove(pair);
|
||||||
return null;
|
return null;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.boydti.fawe.bukkit.wrapper;
|
package com.boydti.fawe.bukkit.wrapper;
|
||||||
|
|
||||||
|
import com.boydti.fawe.FaweCache;
|
||||||
import com.boydti.fawe.object.FaweQueue;
|
import com.boydti.fawe.object.FaweQueue;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -22,9 +23,9 @@ public class AsyncBlock implements Block {
|
|||||||
public final int y;
|
public final int y;
|
||||||
public final int x;
|
public final int x;
|
||||||
public final FaweQueue queue;
|
public final FaweQueue queue;
|
||||||
public final World world;
|
public final AsyncWorld world;
|
||||||
|
|
||||||
public AsyncBlock(World world, FaweQueue queue, int x, int y, int z) {
|
public AsyncBlock(AsyncWorld world, FaweQueue queue, int x, int y, int z) {
|
||||||
this.world = world;
|
this.world = world;
|
||||||
this.queue = queue;
|
this.queue = queue;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
@ -64,17 +65,17 @@ public class AsyncBlock implements Block {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte getLightLevel() {
|
public byte getLightLevel() {
|
||||||
throw new UnsupportedOperationException("Not implemented yet");
|
return (byte) queue.getLight(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte getLightFromSky() {
|
public byte getLightFromSky() {
|
||||||
throw new UnsupportedOperationException("Not implemented yet");
|
return (byte) queue.getSkyLight(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte getLightFromBlocks() {
|
public byte getLightFromBlocks() {
|
||||||
throw new UnsupportedOperationException("Not implemented yet");
|
return (byte) queue.getEmmittedLight(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -172,12 +173,13 @@ public class AsyncBlock implements Block {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Biome getBiome() {
|
public Biome getBiome() {
|
||||||
throw new UnsupportedOperationException("NOT IMPLEMENTED");
|
return world.getAdapter().getBiome(queue.getBiomeId(x, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setBiome(Biome bio) {
|
public void setBiome(Biome bio) {
|
||||||
|
int id = world.getAdapter().getBiomeId(bio);
|
||||||
|
queue.setBiome(x, z, FaweCache.getBiome(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -217,7 +219,7 @@ public class AsyncBlock implements Block {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLiquid() {
|
public boolean isLiquid() {
|
||||||
return false;
|
return FaweCache.isLiquid(getTypeId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package com.boydti.fawe.bukkit.wrapper;
|
package com.boydti.fawe.bukkit.wrapper;
|
||||||
|
|
||||||
import com.boydti.fawe.object.RunnableVal;
|
import com.boydti.fawe.Fawe;
|
||||||
|
import com.boydti.fawe.bukkit.v0.BukkitQueue_0;
|
||||||
import com.boydti.fawe.object.FaweQueue;
|
import com.boydti.fawe.object.FaweQueue;
|
||||||
|
import com.boydti.fawe.object.RunnableVal;
|
||||||
import com.boydti.fawe.util.MathMan;
|
import com.boydti.fawe.util.MathMan;
|
||||||
import com.boydti.fawe.util.TaskManager;
|
import com.boydti.fawe.util.TaskManager;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
@ -13,13 +15,13 @@ import org.bukkit.entity.Entity;
|
|||||||
|
|
||||||
public class AsyncChunk implements Chunk {
|
public class AsyncChunk implements Chunk {
|
||||||
|
|
||||||
private final World world;
|
private final AsyncWorld world;
|
||||||
private final int z;
|
private final int z;
|
||||||
private final int x;
|
private final int x;
|
||||||
private final FaweQueue queue;
|
private final FaweQueue queue;
|
||||||
|
|
||||||
public AsyncChunk(World world, FaweQueue queue, int x, int z) {
|
public AsyncChunk(World world, FaweQueue queue, int x, int z) {
|
||||||
this.world = world instanceof AsyncWorld ? world : new AsyncWorld(world, true);
|
this.world = world instanceof AsyncWorld ? (AsyncWorld) world : new AsyncWorld(world, true);
|
||||||
this.queue = queue;
|
this.queue = queue;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
@ -61,22 +63,71 @@ public class AsyncChunk implements Chunk {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChunkSnapshot getChunkSnapshot() {
|
public ChunkSnapshot getChunkSnapshot() {
|
||||||
throw new UnsupportedOperationException("NOT IMPLEMENTED");
|
return getChunkSnapshot(false, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChunkSnapshot getChunkSnapshot(boolean includeMaxblocky, boolean includeBiome, boolean includeBiomeTempRain) {
|
public ChunkSnapshot getChunkSnapshot(boolean includeMaxblocky, boolean includeBiome, boolean includeBiomeTempRain) {
|
||||||
throw new UnsupportedOperationException("NOT IMPLEMENTED");
|
if (Thread.currentThread() == Fawe.get().getMainThread()) {
|
||||||
|
return world.getChunkAt(x, z).getChunkSnapshot(includeMaxblocky, includeBiome, includeBiomeTempRain);
|
||||||
|
}
|
||||||
|
return whenLoaded(new RunnableVal<ChunkSnapshot>() {
|
||||||
|
@Override
|
||||||
|
public void run(ChunkSnapshot value) {
|
||||||
|
this.value = world.getChunkAt(x, z).getChunkSnapshot(includeBiome, includeBiome, includeBiomeTempRain);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> T whenLoaded(RunnableVal<T> task) {
|
||||||
|
if (Thread.currentThread() == Fawe.get().getMainThread()) {
|
||||||
|
task.run();
|
||||||
|
return task.value;
|
||||||
|
}
|
||||||
|
if (queue instanceof BukkitQueue_0) {
|
||||||
|
BukkitQueue_0 bq = (BukkitQueue_0) queue;
|
||||||
|
if (world.isChunkLoaded(x, z)) {
|
||||||
|
long pair = MathMan.pairInt(x, z);
|
||||||
|
Long originalKeep = bq.keepLoaded.get(pair);
|
||||||
|
bq.keepLoaded.put(pair, Long.MAX_VALUE);
|
||||||
|
if (world.isChunkLoaded(x, z)) {
|
||||||
|
task.run();
|
||||||
|
if (originalKeep != null) {
|
||||||
|
bq.keepLoaded.put(pair, originalKeep);
|
||||||
|
} else {
|
||||||
|
bq.keepLoaded.remove(pair);
|
||||||
|
}
|
||||||
|
return task.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TaskManager.IMP.sync(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Entity[] getEntities() {
|
public Entity[] getEntities() {
|
||||||
throw new UnsupportedOperationException("NOT IMPLEMENTED");
|
if (!isLoaded()) {
|
||||||
|
return new Entity[0];
|
||||||
|
}
|
||||||
|
return whenLoaded(new RunnableVal<Entity[]>() {
|
||||||
|
@Override
|
||||||
|
public void run(Entity[] value) {
|
||||||
|
world.getChunkAt(x, z).getEntities();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState[] getTileEntities() {
|
public BlockState[] getTileEntities() {
|
||||||
throw new UnsupportedOperationException("NOT IMPLEMENTED");
|
if (!isLoaded()) {
|
||||||
|
return new BlockState[0];
|
||||||
|
}
|
||||||
|
return TaskManager.IMP.sync(new RunnableVal<BlockState[]>() {
|
||||||
|
@Override
|
||||||
|
public void run(BlockState[] value) {
|
||||||
|
this.value = world.getChunkAt(x, z).getTileEntities();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1043,4 +1043,8 @@ public class AsyncWorld extends DelegateFaweQueue implements World, HasFaweQueue
|
|||||||
public Set<String> getListeningPluginChannels() {
|
public Set<String> getListeningPluginChannels() {
|
||||||
return parent.getListeningPluginChannels();
|
return parent.getListeningPluginChannels();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BukkitImplAdapter getAdapter() {
|
||||||
|
return adapter;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -295,6 +295,18 @@ public class FaweCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isLiquid(int id) {
|
||||||
|
switch (id) {
|
||||||
|
case 8:
|
||||||
|
case 9:
|
||||||
|
case 10:
|
||||||
|
case 11:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static LightType getLight(int id) {
|
public static LightType getLight(int id) {
|
||||||
switch (id) { // Lighting
|
switch (id) { // Lighting
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -11,6 +11,7 @@ import com.boydti.fawe.object.FawePlayer;
|
|||||||
import com.boydti.fawe.object.FaweQueue;
|
import com.boydti.fawe.object.FaweQueue;
|
||||||
import com.boydti.fawe.object.MaskedFaweQueue;
|
import com.boydti.fawe.object.MaskedFaweQueue;
|
||||||
import com.boydti.fawe.object.RegionWrapper;
|
import com.boydti.fawe.object.RegionWrapper;
|
||||||
|
import com.boydti.fawe.object.RunnableVal;
|
||||||
import com.boydti.fawe.object.changeset.FaweChangeSet;
|
import com.boydti.fawe.object.changeset.FaweChangeSet;
|
||||||
import com.boydti.fawe.util.SetQueue;
|
import com.boydti.fawe.util.SetQueue;
|
||||||
import com.boydti.fawe.util.TaskManager;
|
import com.boydti.fawe.util.TaskManager;
|
||||||
@ -325,7 +326,19 @@ public class Sniper {
|
|||||||
performerBrush.initP(snipeData);
|
performerBrush.initP(snipeData);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean result = brush.perform(snipeAction, snipeData, targetBlock, lastBlock);
|
switch (brush.getClass().getSimpleName()) {
|
||||||
|
case "JockeyBrush":
|
||||||
|
TaskManager.IMP.sync(new RunnableVal<Object>() {
|
||||||
|
@Override
|
||||||
|
public void run(Object value) {
|
||||||
|
brush.perform(snipeAction, snipeData, targetBlock, lastBlock);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
brush.perform(snipeAction, snipeData, targetBlock, lastBlock);
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (Fawe.isMainThread()) {
|
if (Fawe.isMainThread()) {
|
||||||
SetQueue.IMP.flush(changeQueue);
|
SetQueue.IMP.flush(changeQueue);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user