Plex-FAWE/worldedit-core/src/main/java/com/boydti/fawe/object/extent/StripNBTExtent.java

62 lines
1.9 KiB
Java
Raw Normal View History

package com.boydti.fawe.object.extent;
import com.boydti.fawe.util.ReflectionUtils;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.extent.AbstractDelegateExtent;
import com.sk89q.worldedit.extent.Extent;
2018-12-23 16:19:33 +00:00
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.NbtValued;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import javax.annotation.Nullable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class StripNBTExtent extends AbstractDelegateExtent {
private final String[] strip;
/**
* Create a new instance.
*
* @param extent the extent
*/
public StripNBTExtent(Extent extent, Set<String> strip) {
super(extent);
this.strip = strip.toArray(new String[strip.size()]);
}
@Override
2018-12-23 16:19:33 +00:00
public boolean setBlock(BlockVector3 location, BlockStateHolder block) throws WorldEditException {
return super.setBlock(location, stripNBT(block));
}
@Override
public boolean setBlock(int x, int y, int z, BlockStateHolder block) throws WorldEditException {
return super.setBlock(x, y, z, stripNBT(block));
}
@Nullable
@Override
public Entity createEntity(Location location, BaseEntity entity) {
return super.createEntity(location, stripNBT(entity));
}
public <T extends NbtValued> T stripNBT(T block) {
if (!block.hasNbtData()) return block;
CompoundTag nbt = block.getNbtData();
Map<String, Tag> value = nbt.getValue();
for (String key : strip) {
value.remove(key);
}
return block;
}
}