FastAsyncWorldedit/src/main/java/com/boydti/fawe/object/FastWorldEditExtent.java

187 lines
4.7 KiB
Java

package com.boydti.fawe.object;
import java.util.List;
import com.boydti.fawe.util.SetBlockQueue;
import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.extent.AbstractDelegateExtent;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.biome.BaseBiome;
public class FastWorldEditExtent extends AbstractDelegateExtent {
private final String world;
private final Thread thread;
public FastWorldEditExtent(World world, Thread thread) {
super(world);
this.thread = thread;
this.world = world.getName();
}
@Override
public Entity createEntity(Location location, BaseEntity entity) {
synchronized (thread) {
return super.createEntity(location, entity);
}
}
@Override
public BaseBiome getBiome(Vector2D position) {
synchronized (thread) {
return super.getBiome(position);
}
}
private BaseBlock lastBlock;
private BlockVector lastVector;
@Override
public BaseBlock getLazyBlock(Vector position) {
if (lastBlock != null && lastVector.equals(position.toBlockVector())) {
return lastBlock;
}
synchronized (thread) {
lastVector = position.toBlockVector();
return lastBlock = super.getBlock(position);
}
}
@Override
public List<? extends Entity> getEntities() {
synchronized (thread) {
return super.getEntities();
}
}
@Override
public List<? extends Entity> getEntities(Region region) {
synchronized (thread) {
return super.getEntities(region);
}
}
@Override
public BaseBlock getBlock(Vector position) {
synchronized (thread) {
return super.getLazyBlock(position);
}
}
@Override
public boolean setBiome(Vector2D position, BaseBiome biome) {
SetBlockQueue.IMP.setBiome(world, position.getBlockX(), position.getBlockZ(), biome);
return true;
}
@Override
public boolean setBlock(Vector location, BaseBlock block) throws WorldEditException {
short id = (short) block.getId();
int x = location.getBlockX();
int y = location.getBlockY();
int z = location.getBlockZ();
switch (id) {
case 0:
case 2:
case 4:
case 13:
case 14:
case 15:
case 20:
case 21:
case 22:
case 25:
case 30:
case 32:
case 37:
case 39:
case 40:
case 41:
case 42:
case 45:
case 46:
case 47:
case 48:
case 49:
case 50:
case 51:
case 52:
case 54:
case 55:
case 56:
case 57:
case 58:
case 60:
case 61:
case 62:
case 7:
case 8:
case 9:
case 10:
case 11:
case 73:
case 74:
case 75:
case 76:
case 78:
case 79:
case 80:
case 81:
case 82:
case 83:
case 84:
case 85:
case 87:
case 88:
case 101:
case 102:
case 103:
case 110:
case 112:
case 113:
case 117:
case 121:
case 122:
case 123:
case 124:
case 129:
case 133:
case 138:
case 137:
case 140:
case 165:
case 166:
case 169:
case 170:
case 172:
case 173:
case 174:
case 176:
case 177:
case 181:
case 182:
case 188:
case 189:
case 190:
case 191:
case 192: {
SetBlockQueue.IMP.setBlock(world, x, y, z, id);
return true;
}
default: {
SetBlockQueue.IMP.setBlock(world, x, y, z, id, (byte) block.getData());
return true;
}
}
}
}