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

70 lines
2.3 KiB
Java
Raw Normal View History

package com.boydti.fawe.object.extent;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.WorldEditException;
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;
2019-07-22 20:42:40 +00:00
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import java.util.Map;
import java.util.Set;
2019-07-22 20:42:40 +00:00
import javax.annotation.Nullable;
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);
2019-07-09 19:50:13 +00:00
this.strip = strip.toArray(new String[0]);
}
@Override
public <B extends BlockStateHolder<B>> boolean setBlock(BlockVector3 location, B block) throws WorldEditException {
return super.setBlock(location, stripBlockNBT(block));
}
@Override
public <B extends BlockStateHolder<B>> boolean setBlock(int x, int y, int z, B block) throws WorldEditException {
return super.setBlock(x, y, z, stripBlockNBT(block));
}
@Nullable
@Override
public Entity createEntity(Location location, BaseEntity entity) {
return super.createEntity(location, stripEntityNBT(entity));
}
public <B extends BlockStateHolder<B>> B stripBlockNBT(B block) {
2019-07-22 20:42:40 +00:00
if(!(block instanceof BaseBlock)) return block;
BaseBlock localBlock = (BaseBlock)block;
if (!localBlock.hasNbtData()) return block;
CompoundTag nbt = localBlock.getNbtData();
Map<String, Tag> value = nbt.getValue();
for (String key : strip) {
value.remove(key);
}
return (B) localBlock;
}
2019-07-09 19:50:13 +00:00
public <T extends NbtValued> T stripEntityNBT(T entity) {
if (!entity.hasNbtData()) return entity;
CompoundTag nbt = entity.getNbtData();
Map<String, Tag> value = nbt.getValue();
for (String key : strip) {
value.remove(key);
}
return entity;
}
}