start reimplementing entities

This commit is contained in:
Aurora 2020-06-25 22:13:34 +02:00
parent 3d40336045
commit aac02ceea1
No known key found for this signature in database
GPG Key ID: 89839F67B53656AD
10 changed files with 101 additions and 67 deletions

View File

@ -89,7 +89,7 @@ public class BukkitEntity implements Entity {
@Override
public com.sk89q.worldedit.world.entity.EntityType getType() {
return EntityTypes.get(type.getName().toUpperCase(Locale.ROOT));
return EntityTypes.get(type.getName().toLowerCase(Locale.ROOT));
}
@Override

View File

@ -92,7 +92,6 @@ public class BukkitWorld extends AbstractWorld {
@Override
public List<com.sk89q.worldedit.entity.Entity> getEntities(Region region) {
World world = getWorld();
List<Entity> ents = world.getEntities();
List<com.sk89q.worldedit.entity.Entity> entities = new ArrayList<>();
for (Entity ent : ents) {

View File

@ -63,4 +63,9 @@ public class WorldCopyClipboard extends ReadOnlyClipboard {
return hasBiomes;
}
@Override
public List<? extends Entity> getEntities(Region region) {
return getExtent().getEntities(region);
}
}

View File

@ -46,6 +46,8 @@ import com.boydti.fawe.util.ExtentTraverser;
import com.boydti.fawe.util.MaskTraverser;
import com.boydti.fawe.util.MathMan;
import com.boydti.fawe.util.TaskManager;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.event.extent.EditSessionEvent;
import com.sk89q.worldedit.extent.AbstractDelegateExtent;
@ -117,6 +119,7 @@ import com.sk89q.worldedit.regions.shape.RegionShape;
import com.sk89q.worldedit.regions.shape.WorldEditExpressionEnvironment;
import com.sk89q.worldedit.util.Countable;
import com.sk89q.worldedit.util.Direction;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.util.TreeGenerator;
import com.sk89q.worldedit.util.eventbus.EventBus;
import com.sk89q.worldedit.util.formatting.text.TranslatableComponent;
@ -3039,4 +3042,20 @@ public class EditSession extends PassthroughExtent implements AutoCloseable {
}
return false;
}
@Override
public List<? extends Entity> getEntities(Region region) {
return world.getEntities(region);
}
@Override
public List<? extends Entity> getEntities() {
System.out.println("editsession");
return world.getEntities();
}
@Override
public Entity createEntity(Location location, BaseEntity entity) {
return world.createEntity(location, entity);
}
}

View File

@ -132,6 +132,7 @@ public interface Extent extends InputExtent, OutputExtent {
* @return a list of entities
*/
default List<? extends Entity> getEntities() {
System.out.println("el");
return Collections.emptyList();
}

View File

@ -195,11 +195,19 @@ public class BlockArrayClipboard implements Clipboard {
@Override
public List<? extends Entity> getEntities(Region region) {
System.out.println("blockarrayclipboard");
region = region.clone();
region.shift(BlockVector3.ZERO.subtract(origin));
return getParent().getEntities(region);
}
@Override
public List<? extends Entity> getEntities() {
System.out.println("blockarrayall");
return getParent().getEntities();
}
@Override
@Nullable
public Entity createEntity(Location location, BaseEntity entity) {

View File

@ -397,7 +397,7 @@ public class ForwardExtentCopy implements Operation {
Operations.completeBlindly(blockCopy);
if (!entities.isEmpty()) {
ExtentEntityCopy entityCopy = new ExtentEntityCopy(from.toVector3(), destination, to.toVector3(), currentTransform);
ExtentEntityCopy entityCopy = new ExtentEntityCopy(from.toVector3(), finalDest, to.toVector3(), currentTransform);
entityCopy.setRemoving(removingEntities);
List<? extends Entity> entities2 = Lists.newArrayList(source.getEntities(region));
entities2.removeIf(entity -> {
@ -406,6 +406,7 @@ public class ForwardExtentCopy implements Operation {
});
EntityVisitor entityVisitor = new EntityVisitor(entities.iterator(), entityCopy);
Operations.completeBlindly(entityVisitor);
affectedEntities += entityVisitor.getAffected();
}
if (transExt != null) {
@ -427,8 +428,8 @@ public class ForwardExtentCopy implements Operation {
return ImmutableList.of(
TranslatableComponent.of("worldedit.operation.affected.block",
TextComponent.of(affectedBlocks)).color(TextColor.LIGHT_PURPLE),
TranslatableComponent.of("worldedit.operation.affected.biome",
TextComponent.of(affectedBiomeCols)).color(TextColor.LIGHT_PURPLE),
//TranslatableComponent.of("worldedit.operation.affected.biome",
// TextComponent.of(affectedBiomeCols)).color(TextColor.LIGHT_PURPLE),
TranslatableComponent.of("worldedit.operation.affected.entity",
TextComponent.of(affectedEntities)).color(TextColor.LIGHT_PURPLE)
);

View File

@ -18,16 +18,16 @@
*/
package com.sk89q.worldedit.util.io.file;
import java.io.Closeable;
import java.nio.file.Path;
/**
* Represents an archive opened as a directory. This must be closed after work on the Path is
* done.
*/
public interface ArchiveDir extends Closeable {
Path getPath();
}
import java.io.Closeable;
import java.nio.file.Path;
/**
* Represents an archive opened as a directory. This must be closed after work on the Path is
* done.
*/
public interface ArchiveDir extends Closeable {
Path getPath();
}

View File

@ -18,52 +18,52 @@
*/
package com.sk89q.worldedit.util.io.file;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SafeFiles {
/**
* A version of {@link Files#list(Path)} that won't leak resources.
*
* <p>
* Instead, it immediately consumes the entire listing into a {@link List} and
* calls {@link List#stream()}.
* </p>
*
* @param dir the directory to list
* @return an I/O-resource-free stream of the files in the directory
* @throws IOException if an I/O error occurs
*/
public static Stream<Path> noLeakFileList(Path dir) throws IOException {
try (Stream<Path> stream = Files.list(dir)) {
return stream.collect(Collectors.toList()).stream();
}
}
/**
* {@link Path#getFileName()} includes a slash sometimes for some reason.
* This will get rid of it.
*
* @param path the path to get the file name for
* @return the file name of the given path
*/
public static String canonicalFileName(Path path) {
return dropSlash(path.getFileName().toString());
}
private static String dropSlash(String name) {
if (name.isEmpty() || name.codePointBefore(name.length()) != '/') {
return name;
}
return name.substring(0, name.length() - 1);
}
private SafeFiles() {
}
}
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SafeFiles {
/**
* A version of {@link Files#list(Path)} that won't leak resources.
*
* <p>
* Instead, it immediately consumes the entire listing into a {@link List} and
* calls {@link List#stream()}.
* </p>
*
* @param dir the directory to list
* @return an I/O-resource-free stream of the files in the directory
* @throws IOException if an I/O error occurs
*/
public static Stream<Path> noLeakFileList(Path dir) throws IOException {
try (Stream<Path> stream = Files.list(dir)) {
return stream.collect(Collectors.toList()).stream();
}
}
/**
* {@link Path#getFileName()} includes a slash sometimes for some reason.
* This will get rid of it.
*
* @param path the path to get the file name for
* @return the file name of the given path
*/
public static String canonicalFileName(Path path) {
return dropSlash(path.getFileName().toString());
}
private static String dropSlash(String name) {
if (name.isEmpty() || name.codePointBefore(name.length()) != '/') {
return name;
}
return name.substring(0, name.length() - 1);
}
private SafeFiles() {
}
}

View File

@ -187,6 +187,7 @@ public class NullWorld extends AbstractWorld {
@Override
public List<Entity> getEntities(Region region) {
System.out.println("nullworld");
return Collections.emptyList();
}