public bool PerformBrushAction(WorldEdit worldEdit, Block placedBlock, int oldBlockId, BlockSelection blockSel, BlockPos targetPos, ItemStack withItemStack) { if (BrushDim1 <= 0) { return(false); } Block selectedBlock = blockSel.DidOffset ? blockAccessRev.GetBlock(blockSel.Position.AddCopy(blockSel.Face.Opposite)) : blockAccessRev.GetBlock(blockSel.Position); int selectedBlockId = selectedBlock.BlockId; if (oldBlockId >= 0) { worldEdit.sapi.World.BlockAccessor.SetBlock(oldBlockId, blockSel.Position); } EnumBrushMode brushMode = BrushMode; int blockId = placedBlock.BlockId; if (!worldEdit.MayPlace(blockAccessRev.GetBlock(blockId), brushPositions.Length)) { return(false); } EnumDepthLimit depthLimit = DepthLimit; for (int i = 0; i < brushPositions.Length; i++) { BlockPos dpos = targetPos.AddCopy(brushPositions[i].X, brushPositions[i].Y, brushPositions[i].Z); bool skip = false; switch (depthLimit) { case EnumDepthLimit.Top1: skip = blockAccessRev.GetBlockId(dpos) == 0 || blockAccessRev.GetBlockId(dpos.X, dpos.Y + 1, dpos.Z) != 0; break; case EnumDepthLimit.Top2: skip = blockAccessRev.GetBlockId(dpos) == 0 || (blockAccessRev.GetBlockId(dpos.X, dpos.Y + 1, dpos.Z) != 0 && blockAccessRev.GetBlockId(dpos.X, dpos.Y + 2, dpos.Z) != 0); break; case EnumDepthLimit.Top3: skip = blockAccessRev.GetBlockId(dpos) == 0 || (blockAccessRev.GetBlockId(dpos.X, dpos.Y + 1, dpos.Z) != 0 && blockAccessRev.GetBlockId(dpos.X, dpos.Y + 2, dpos.Z) != 0 && blockAccessRev.GetBlockId(dpos.X, dpos.Y + 3, dpos.Z) != 0); break; case EnumDepthLimit.Top4: skip = blockAccessRev.GetBlockId(dpos) == 0 || (blockAccessRev.GetBlockId(dpos.X, dpos.Y + 1, dpos.Z) != 0 && blockAccessRev.GetBlockId(dpos.X, dpos.Y + 2, dpos.Z) != 0 && blockAccessRev.GetBlockId(dpos.X, dpos.Y + 3, dpos.Z) != 0 && blockAccessRev.GetBlockId(dpos.X, dpos.Y + 4, dpos.Z) != 0); break; } if (skip) { continue; } switch (brushMode) { case EnumBrushMode.ReplaceAir: if (blockAccessRev.GetBlockId(dpos) == 0) { blockAccessRev.SetBlock(blockId, dpos, withItemStack); } break; case EnumBrushMode.ReplaceNonAir: if (blockAccessRev.GetBlockId(dpos) != 0) { blockAccessRev.SetBlock(blockId, dpos, withItemStack); } break; case EnumBrushMode.ReplaceSelected: if (blockAccessRev.GetBlockId(dpos) == selectedBlockId) { blockAccessRev.SetBlock(blockId, dpos, withItemStack); } break; default: blockAccessRev.SetBlock(blockId, dpos, withItemStack); break; } } return(true); }
public override bool OnWorldEditCommand(WorldEdit worldEdit, CmdArgs args) { switch (args[0]) { case "tm": EnumBrushMode brushMode = EnumBrushMode.Fill; if (args.Length > 1) { int index; int.TryParse(args[1], out index); if (Enum.IsDefined(typeof(EnumBrushMode), index)) { brushMode = (EnumBrushMode)index; } } BrushMode = brushMode; worldEdit.Good(workspace.ToolName + " mode " + brushMode + " set."); workspace.ResendBlockHighlights(worldEdit); return(true); case "tdl": EnumDepthLimit depthLimit = EnumDepthLimit.NoLimit; if (args.Length > 1) { int index; int.TryParse(args[1], out index); if (Enum.IsDefined(typeof(EnumDepthLimit), index)) { depthLimit = (EnumDepthLimit)index; } } DepthLimit = depthLimit; worldEdit.Good(workspace.ToolName + " depth limit set to " + depthLimit); workspace.ResendBlockHighlights(worldEdit); return(true); case "ts": EnumBrushShape shape = EnumBrushShape.Ball; if (args.Length > 1) { int index; int.TryParse(args[1], out index); if (Enum.IsDefined(typeof(EnumBrushShape), index)) { shape = (EnumBrushShape)index; } } BrushShape = shape; worldEdit.Good(workspace.ToolName + " shape " + BrushShape + " set."); GenBrush(); workspace.ResendBlockHighlights(worldEdit); return(true); case "tsx": case "tsy": case "tsz": { float size = 0; if (args.Length > 1) { float.TryParse(args[1], out size); } if (args[0] == "tsx") { BrushDim1 = size; } if (args[0] == "tsy") { BrushDim2 = size; } if (args[0] == "tsz") { BrushDim3 = size; } string text = dimensionNames[(int)BrushShape][0] + "=" + BrushDim1; text += ", " + dimensionNames[(int)BrushShape][1] + "=" + BrushDim2; text += ", " + dimensionNames[(int)BrushShape][2] + "=" + BrushDim3; worldEdit.Good(workspace.ToolName + " dimensions " + text + " set."); GenBrush(); workspace.ResendBlockHighlights(worldEdit); return(true); } case "tr": { BrushDim1 = 0; float size; if (args.Length > 1 && float.TryParse(args[1], out size)) { BrushDim1 = size; } if (args.Length > 2 && float.TryParse(args[2], out size)) { BrushDim2 = size; } else { BrushDim2 = BrushDim1; } if (args.Length > 3 && float.TryParse(args[3], out size)) { BrushDim3 = size; } else { BrushDim3 = BrushDim2; } string text = dimensionNames[(int)BrushShape][0] + "=" + BrushDim1; text += ", " + dimensionNames[(int)BrushShape][1] + "=" + BrushDim2; text += ", " + dimensionNames[(int)BrushShape][2] + "=" + BrushDim3; worldEdit.Good(workspace.ToolName + " dimensions " + text + " set."); GenBrush(); workspace.ResendBlockHighlights(worldEdit); } return(true); case "tcx": case "tcy": case "tcz": { float size = 0; if (args.Length > 1) { float.TryParse(args[1], out size); } if (args[0] == "tcx") { CutoutDim1 = size; } if (args[0] == "tcy") { CutoutDim2 = size; } if (args[0] == "tcz") { CutoutDim3 = size; } string text = dimensionNames[(int)BrushShape][0] + "=" + CutoutDim1; text += ", " + dimensionNames[(int)BrushShape][1] + "=" + CutoutDim2; text += ", " + dimensionNames[(int)BrushShape][2] + "=" + CutoutDim3; worldEdit.Good(workspace.ToolName + " cutout dimensions " + text + " set."); GenBrush(); workspace.ResendBlockHighlights(worldEdit); return(true); } case "tcr": { CutoutDim1 = 0; float size; if (args.Length > 1 && float.TryParse(args[1], out size)) { CutoutDim1 = size; } if (args.Length > 2 && float.TryParse(args[2], out size)) { CutoutDim2 = size; } else { CutoutDim2 = CutoutDim1; } if (args.Length > 3 && float.TryParse(args[3], out size)) { CutoutDim3 = size; } else { CutoutDim3 = CutoutDim2; } string text = dimensionNames[(int)BrushShape][0] + "=" + CutoutDim1; text += ", " + dimensionNames[(int)BrushShape][1] + "=" + CutoutDim2; text += ", " + dimensionNames[(int)BrushShape][2] + "=" + CutoutDim3; worldEdit.Good("Cutout " + workspace.ToolName + " dimensions " + text + " set."); GenBrush(); workspace.ResendBlockHighlights(worldEdit); } return(true); case "tgr": { BrushDim1++; BrushDim2++; BrushDim3++; string text = dimensionNames[(int)BrushShape][0] + "=" + BrushDim1; text += ", " + dimensionNames[(int)BrushShape][1] + "=" + BrushDim2; text += ", " + dimensionNames[(int)BrushShape][2] + "=" + BrushDim3; worldEdit.Good(workspace.ToolName + " dimensions " + text + " set."); GenBrush(); workspace.ResendBlockHighlights(worldEdit); } return(true); case "tsr": { BrushDim1 = Math.Max(0, BrushDim1 - 1); BrushDim2 = Math.Max(0, BrushDim2 - 1); BrushDim3 = Math.Max(0, BrushDim3 - 1); string text = dimensionNames[(int)BrushShape][0] + "=" + BrushDim1; text += ", " + dimensionNames[(int)BrushShape][1] + "=" + BrushDim2; text += ", " + dimensionNames[(int)BrushShape][2] + "=" + BrushDim3; worldEdit.Good(workspace.ToolName + " dimensions " + text + " set."); GenBrush(); workspace.ResendBlockHighlights(worldEdit); } return(true); } return(false); }