diff --git a/src/main/java/net/coreprotect/worldedit/CoreProtectLogger.java b/src/main/java/net/coreprotect/worldedit/CoreProtectLogger.java index 1cab14def..85245cc5c 100755 --- a/src/main/java/net/coreprotect/worldedit/CoreProtectLogger.java +++ b/src/main/java/net/coreprotect/worldedit/CoreProtectLogger.java @@ -1,5 +1,7 @@ package net.coreprotect.worldedit; +import java.util.Set; + import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -83,10 +85,15 @@ public int replaceBlocks(final Region region, final Mask mask, final Pattern pat if (!Config.getConfig(world).WORLDEDIT) { return eventExtent.replaceBlocks(region, mask, pattern); } - processPatternToBlocks(world, region, pattern); + processPatternToBlocks(world, region, mask, pattern); return eventExtent.replaceBlocks(region, mask, pattern); } + @Override + public > int setBlocks(Region region, B block) throws MaxChangedBlocksException { + return this.setBlocks(region, (Pattern) block); + } + @Override public int setBlocks(Region region, Pattern pattern) throws MaxChangedBlocksException { org.bukkit.World world = BukkitAdapter.adapt(eventWorld); @@ -97,6 +104,49 @@ public int setBlocks(Region region, Pattern pattern) throws MaxChangedBlocksExce return eventExtent.setBlocks(region, pattern); } + @Override + public int setBlocks(Set vset, Pattern pattern) { + org.bukkit.World world = BukkitAdapter.adapt(eventWorld); + if (!Config.getConfig(world).WORLDEDIT) { + return eventExtent.setBlocks(vset, pattern); + } + processPatternToBlocks(world, vset, pattern); + return eventExtent.setBlocks(vset, pattern); + } + + private void processPatternToBlocks(org.bukkit.World world, Set vset, Pattern pattern) { + for (BlockVector3 position : vset) { + BlockState oldBlock = eventExtent.getBlock(position); + Material oldType = BukkitAdapter.adapt(oldBlock.getBlockType()); + Location location = new Location(world, position.getBlockX(), position.getBlockY(), position.getBlockZ()); + BaseBlock baseBlock = WorldEditLogger.getBaseBlock(eventExtent, position, location, oldType, oldBlock); + + // No clear way to get container content data from within the WorldEdit API + // Data may be available by converting oldBlock.toBaseBlock().getNbtData() + // e.g. BaseBlock block = eventWorld.getBlock(position); + ItemStack[] containerData = CoreProtectEditSessionEvent.isFAWE() ? null : ItemUtils.getContainerContents(oldType, null, location); + WorldEditLogger.postProcess(eventExtent, eventActor, position, location, pattern.applyBlock(position), baseBlock, oldType, oldBlock, containerData); + } + } + + private void processPatternToBlocks(org.bukkit.World world, Region region, Mask mask, Pattern pattern) { + for (BlockVector3 position : region.clone()) { + if (!mask.test(position)) { + continue; + } + BlockState oldBlock = eventExtent.getBlock(position); + Material oldType = BukkitAdapter.adapt(oldBlock.getBlockType()); + Location location = new Location(world, position.getBlockX(), position.getBlockY(), position.getBlockZ()); + BaseBlock baseBlock = WorldEditLogger.getBaseBlock(eventExtent, position, location, oldType, oldBlock); + + // No clear way to get container content data from within the WorldEdit API + // Data may be available by converting oldBlock.toBaseBlock().getNbtData() + // e.g. BaseBlock block = eventWorld.getBlock(position); + ItemStack[] containerData = CoreProtectEditSessionEvent.isFAWE() ? null : ItemUtils.getContainerContents(oldType, null, location); + WorldEditLogger.postProcess(eventExtent, eventActor, position, location, pattern.applyBlock(position), baseBlock, oldType, oldBlock, containerData); + } + } + private void processPatternToBlocks(org.bukkit.World world, Region region, Pattern pattern) { for (BlockVector3 position : region.clone()) { BlockState oldBlock = eventExtent.getBlock(position);