5858import com .sk89q .worldedit .extent .clipboard .io .ClipboardFormats ;
5959import com .sk89q .worldedit .extent .clipboard .io .ClipboardWriter ;
6060import com .sk89q .worldedit .function .block .BlockReplace ;
61+ import com .sk89q .worldedit .function .mask .InverseSingleBlockTypeMask ;
6162import com .sk89q .worldedit .function .mask .Mask ;
6263import com .sk89q .worldedit .function .mask .MaskIntersection ;
6364import com .sk89q .worldedit .function .mask .Masks ;
8586import com .sk89q .worldedit .util .formatting .text .TextComponent ;
8687import com .sk89q .worldedit .util .formatting .text .event .ClickEvent ;
8788import com .sk89q .worldedit .world .World ;
89+ import com .sk89q .worldedit .world .block .BlockTypes ;
8890import org .enginehub .piston .annotation .Command ;
8991import org .enginehub .piston .annotation .CommandContainer ;
9092import org .enginehub .piston .annotation .param .Arg ;
@@ -526,14 +528,15 @@ public void paste(
526528 Mask sourceMask ,
527529 //FAWE start - entity removal
528530 @ Switch (name = 'x' , desc = "Remove existing entities in the affected region" )
529- boolean removeEntities
531+ boolean removeEntities ,
532+ @ Switch (name = 'v' , desc = "Don't paste structure void blocks and keep the target block state" )
533+ boolean ignoreStructureVoidBlocks
530534 //FAWE end
531-
532535 ) throws WorldEditException {
533536
534537 ClipboardHolder holder = session .getClipboard ();
535538 //FAWE start - use place
536- if (holder .getTransform ().isIdentity () && sourceMask == null ) {
539+ if (holder .getTransform ().isIdentity () && sourceMask == null && ! ignoreStructureVoidBlocks ) {
537540 place (actor , world , session , editSession , ignoreAirBlocks , atOrigin , selectPasted , onlySelect ,
538541 pasteEntities , pasteBiomes , removeEntities
539542 );
@@ -550,13 +553,16 @@ public void paste(
550553 //FAWE end
551554
552555 if (!onlySelect ) {
556+ final Mask finalSourceMask = ignoreStructureVoidBlocks ?
557+ MaskIntersection .of (sourceMask , new InverseSingleBlockTypeMask (clipboard , BlockTypes .STRUCTURE_VOID )) :
558+ sourceMask ;
553559 Operation operation = holder
554560 .createPaste (editSession )
555561 .to (to )
556562 .ignoreAirBlocks (ignoreAirBlocks )
557563 .copyBiomes (pasteBiomes )
558564 .copyEntities (pasteEntities )
559- .maskSource (sourceMask )
565+ .maskSource (finalSourceMask )
560566 .build ();
561567 Operations .completeLegacy (operation );
562568 messages .addAll (Lists .newArrayList (operation .getStatusMessages ()));
0 commit comments