3
0
Mirror von https://github.com/IntellectualSites/FastAsyncWorldEdit.git synchronisiert 2024-11-02 17:40:09 +01:00
Dieser Commit ist enthalten in:
Jesse Boyd 2019-11-25 23:49:16 +00:00
Ursprung ed8d1849d4
Commit 34afc03443
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 59F1DE6293AF6E1F
4 geänderte Dateien mit 64 neuen und 18 gelöschten Zeilen

Datei anzeigen

@ -316,10 +316,10 @@ public class ChunkHolder<T extends Future<T>> implements IQueueChunk {
final IChunkGet get = getOrCreateGet(); final IChunkGet get = getOrCreateGet();
final IChunkSet set = getOrCreateSet(); final IChunkSet set = getOrCreateSet();
try { try {
block = block.init(chunkX, chunkZ, get);
if (region != null) { if (region != null) {
region.filter(this, filter, block, get, set, full); region.filter(this, filter, block, get, set, full);
} else { } else {
block = block.init(chunkX, chunkZ, get);
for (int layer = 0; layer < 16; layer++) { for (int layer = 0; layer < 16; layer++) {
if ((!full && !get.hasSection(layer)) || !filter.appliesLayer(this, layer)) { if ((!full && !get.hasSection(layer)) || !filter.appliesLayer(this, layer)) {
continue; continue;

Datei anzeigen

@ -19,6 +19,7 @@
package com.sk89q.worldedit.regions; package com.sk89q.worldedit.regions;
import com.boydti.fawe.FaweCache;
import com.boydti.fawe.object.collection.BlockVectorSet; import com.boydti.fawe.object.collection.BlockVectorSet;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
@ -169,21 +170,14 @@ public abstract class AbstractRegion extends AbstractSet<BlockVector3> implement
public Set<BlockVector2> getChunks() { public Set<BlockVector2> getChunks() {
final Set<BlockVector2> chunks = new HashSet<>(); final Set<BlockVector2> chunks = new HashSet<>();
final BlockVector3 min = getMinimumPoint(); final BlockVector3 min = getMinimumPoint().divide(16);
final BlockVector3 max = getMaximumPoint(); final BlockVector3 max = getMaximumPoint().divide(16);
final int minY = min.getBlockY(); for (int X = min.getBlockX(); X <= max.getBlockX(); ++X) {
for (int Z = min.getBlockZ(); Z <= max.getBlockZ(); ++Z) {
for (int x = min.getBlockX(); x <= max.getBlockX(); ++x) { if (containsChunk(X, Z)) {
for (int z = min.getBlockZ(); z <= max.getBlockZ(); ++z) { chunks.add(BlockVector2.at(X, Z));
if (!contains(BlockVector3.at(x, minY, z))) {
continue;
} }
chunks.add(BlockVector2.at(
x >> ChunkStore.CHUNK_SHIFTS,
z >> ChunkStore.CHUNK_SHIFTS
));
} }
} }

Datei anzeigen

@ -148,7 +148,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
* *
* @return a new complex region * @return a new complex region
*/ */
public Region getFaces() { public RegionIntersection getFaces() {
BlockVector3 min = getMinimumPoint(); BlockVector3 min = getMinimumPoint();
BlockVector3 max = getMaximumPoint(); BlockVector3 max = getMaximumPoint();
@ -172,7 +172,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
* *
* @return a new complex region * @return a new complex region
*/ */
public Region getWalls() { public RegionIntersection getWalls() {
BlockVector3 min = getMinimumPoint(); BlockVector3 min = getMinimumPoint();
BlockVector3 max = getMaximumPoint(); BlockVector3 max = getMaximumPoint();
@ -182,8 +182,8 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion {
new CuboidRegion(pos1.withX(max.getX()), pos2.withX(max.getX())), new CuboidRegion(pos1.withX(max.getX()), pos2.withX(max.getX())),
// Project to X-Y plane // Project to X-Y plane
new CuboidRegion(pos1.withZ(min.getZ()), pos2.withZ(min.getZ())), new CuboidRegion(pos1.withZ(min.getZ()).add(BlockVector3.UNIT_X), pos2.withZ(min.getZ()).subtract(BlockVector3.UNIT_X)),
new CuboidRegion(pos1.withZ(max.getZ()), pos2.withZ(max.getZ()))); new CuboidRegion(pos1.withZ(max.getZ()).add(BlockVector3.UNIT_X), pos2.withZ(max.getZ()).subtract(BlockVector3.UNIT_X)));
} }
@Override @Override

Datei anzeigen

@ -23,13 +23,17 @@ import com.boydti.fawe.beta.IChunk;
import com.boydti.fawe.beta.IChunkGet; import com.boydti.fawe.beta.IChunkGet;
import com.boydti.fawe.beta.IChunkSet; import com.boydti.fawe.beta.IChunkSet;
import com.google.common.collect.Iterators; import com.google.common.collect.Iterators;
import com.google.common.collect.Sets;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Set;
import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
@ -169,4 +173,52 @@ public class RegionIntersection extends AbstractRegion {
} }
return null; return null;
} }
public List<Region> getRegions() {
return regions;
}
@Override
public Set<BlockVector2> getChunks() {
Set<BlockVector2> set = null;
for (Region region : regions) {
if (set == null) {
set = region.getChunks();
} else {
set = Sets.union(set, region.getChunks());
}
}
return set;
}
@Override
public Set<BlockVector3> getChunkCubes() {
Set<BlockVector3> set = null;
for (Region region : regions) {
if (set == null) {
set = region.getChunkCubes();
} else {
set = Sets.union(set, region.getChunkCubes());
}
}
return set;
}
@Override
public boolean containsChunk(int chunkX, int chunkZ) {
for (Region region : regions) if (region.containsChunk(chunkX, chunkZ)) return true;
return false;
}
@Override
public boolean contains(int x, int z) {
for (Region region : regions) if (region.contains(x, z)) return true;
return false;
}
@Override
public boolean contains(int x, int y, int z) {
for (Region region : regions) if (region.contains(x, y, z)) return true;
return false;
}
} }