コード例 #1
0
        private void OnPlayerJoin(IPlayer player)
        {
            fromPlayer = player as IServerPlayer;

            WorldEditWorkspace workspace = GetOrCreateWorkSpace(player);

            IBlockAccessorRevertable revertableBlockAccess = sapi.World.GetBlockAccessorRevertable(true, true);

            // Initialize all tools once to build up the workspace for the client gui tool options
            foreach (var val in ToolRegistry.ToolTypes)
            {
                ToolRegistry.InstanceFromType(val.Key, workspace, revertableBlockAccess);
            }


            if (workspace.ToolsEnabled)
            {
                if (workspace.ToolInstance != null)
                {
                    EnumHighlightBlocksMode mode = EnumHighlightBlocksMode.CenteredToSelectedBlock;
                    if (workspace.ToolOffsetMode == EnumToolOffsetMode.Attach)
                    {
                        mode = EnumHighlightBlocksMode.AttachedToSelectedBlock;
                    }

                    sapi.World.HighlightBlocks(player, (int)EnumHighlightSlot.Brush, workspace.ToolInstance.GetBlockHighlights(this), workspace.ToolInstance.GetBlockHighlightColors(this), mode);
                }
            }
            else
            {
                workspace.HighlightSelectedArea();
            }
        }
コード例 #2
0
 public HeightmapImporterTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
     if (!workspace.StringValues.ContainsKey("std.heightmapImportToolFilename"))
     {
         Filename = null;
     }
 }
コード例 #3
0
        private void OnLoad()
        {
            byte[] data = sapi.WorldManager.SaveGame.GetData("worldeditworkspaces");
            if (data == null || data.Length == 0)
            {
                return;
            }

            try
            {
                using (MemoryStream ms = new MemoryStream(data))
                {
                    BinaryReader reader = new BinaryReader(ms);
                    int          count  = reader.ReadInt32();

                    while (count-- > 0)
                    {
                        IBlockAccessorRevertable revertableBlockAccess = sapi.World.GetBlockAccessorRevertable(true, true);
                        WorldEditWorkspace       workspace             = new WorldEditWorkspace(sapi.World, revertableBlockAccess);
                        workspace.FromBytes(reader);
                        if (workspace.PlayerUID == null)
                        {
                            continue;
                        }

                        workspaces[workspace.PlayerUID] = workspace;
                    }
                }
            }
            catch (Exception)
            {
                sapi.Server.LogEvent("Exception thrown when trying to load worldedit workspaces. Will ignore.");
            }
        }
コード例 #4
0
        public WorldEditWorkspace(IWorldAccessor world, IBlockAccessorRevertable blockAccessor)
        {
            this.revertableBlockAccess = blockAccessor;
            this.world = world;

            blockAccessor.OnStoreHistoryState   += BlockAccessor_OnStoreHistoryState;
            blockAccessor.OnRestoreHistoryState += BlockAccessor_OnRestoreHistoryState;
        }
コード例 #5
0
 public MoveTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
     if (!workspace.IntValues.ContainsKey(Prefix + "Mode"))
     {
         MoveRepeatMode = EnumMoveToolMode.MoveBlocks;
     }
     if (!workspace.IntValues.ContainsKey(Prefix + "Amount"))
     {
         Amount = 1;
     }
 }
コード例 #6
0
 public LineTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
     if (!workspace.IntValues.ContainsKey("std.lineStartPoint"))
     {
         LineMode = EnumLineStartPoint.LineStrip;
     }
     if (!workspace.IntValues.ContainsKey("std.lineRemove"))
     {
         PlaceMode = false;
     }
 }
コード例 #7
0
 public GrowShrinkTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
     if (!workspace.FloatValues.ContainsKey("std.growShrinkRadius"))
     {
         BrushRadius = 10;
     }
     if (!workspace.IntValues.ContainsKey("std.growShrinkMode"))
     {
         GrowShrinkMode = EnumGrowShrinkMode.Any;
     }
 }
コード例 #8
0
 public SelectTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
     if (!workspace.IntValues.ContainsKey(Prefix + "magicSelect"))
     {
         MagicSelect = false;
     }
     if (!workspace.StringValues.ContainsKey(Prefix + "magicEdgeBlocks"))
     {
         SetEdgeBlocks(workspace.world, new string[] { "air", "soil-*" });
     }
     else
     {
         SetEdgeBlocks(workspace.world, EdgeBlocks);
     }
 }
コード例 #9
0
 public RaiseLowerTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccessor) : base(workspace, blockAccessor)
 {
     if (!workspace.FloatValues.ContainsKey("std.raiseLowerRadius"))
     {
         Radius = 4;
     }
     if (!workspace.FloatValues.ContainsKey("std.raiseLowerDepth"))
     {
         Depth = 3;
     }
     if (!workspace.IntValues.ContainsKey("std.raiseLowerMode"))
     {
         Mode = EnumHeightToolMode.Uniform;
     }
 }
コード例 #10
0
 public TreeGenTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
     if (!workspace.FloatValues.ContainsKey("std.treeToolMinTreeSize"))
     {
         MinTreeSize = 0.7f;
     }
     if (!workspace.FloatValues.ContainsKey("std.treeToolMaxTreeSize"))
     {
         MaxTreeSize = 1.3f;
     }
     if (!workspace.StringValues.ContainsKey("std.treeToolTreeVariant"))
     {
         TreeVariant = null;
     }
 }
コード例 #11
0
 public RepeatTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
     if (!workspace.IntValues.ContainsKey(Prefix + "Mode"))
     {
         RepeatMode = EnumRepeatToolMode.Repeat;
     }
     if (!workspace.IntValues.ContainsKey(Prefix + "Amount"))
     {
         Amount = 1;
     }
     if (!workspace.IntValues.ContainsKey(Prefix + "SelectionMode"))
     {
         SelectionMode = EnumRepeatSelectionMode.Keep;
     }
 }
コード例 #12
0
        WorldEditWorkspace GetOrCreateWorkSpace(IPlayer player)
        {
            string playeruid = player.PlayerUID;

            if (workspaces.ContainsKey(playeruid))
            {
                return(workspaces[playeruid]);
            }
            else
            {
                IBlockAccessorRevertable revertableBlockAccess = sapi.World.GetBlockAccessorRevertable(true, true);
                workspaces[playeruid]           = new WorldEditWorkspace(sapi.World, revertableBlockAccess);
                workspaces[playeruid].PlayerUID = playeruid;
                return(workspaces[playeruid]);
            }
        }
コード例 #13
0
 public FloodFillTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
     if (!workspace.IntValues.ContainsKey("std.floodFillSearchRadius"))
     {
         SearchRadius = 32;
     }
     if (!workspace.IntValues.ContainsKey("std.checkEnclosure"))
     {
         CheckEnclosure = true;
     }
     ;
     if (!workspace.IntValues.ContainsKey("std.mode"))
     {
         Mode = 2;
     }
 }
コード例 #14
0
        public PaintBrushTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccessor) : base(workspace, blockAccessor)
        {
            if (!workspace.FloatValues.ContainsKey(Prefix + "Dim1"))
            {
                BrushDim1 = 4;
            }
            if (!workspace.FloatValues.ContainsKey(Prefix + "Dim2"))
            {
                BrushDim2 = 4;
            }
            if (!workspace.FloatValues.ContainsKey(Prefix + "Dim3"))
            {
                BrushDim3 = 4;
            }

            if (!workspace.FloatValues.ContainsKey(Prefix + "cutoutDim1"))
            {
                CutoutDim1 = 0;
            }
            if (!workspace.FloatValues.ContainsKey(Prefix + "cutoutDim2"))
            {
                CutoutDim2 = 0;
            }
            if (!workspace.FloatValues.ContainsKey(Prefix + "cutoutDim3"))
            {
                CutoutDim3 = 0;
            }

            if (!workspace.IntValues.ContainsKey(Prefix + "previewMode"))
            {
                PreviewMode = true;
            }
            if (!workspace.IntValues.ContainsKey(Prefix + "Mode"))
            {
                BrushMode = EnumBrushMode.Fill;
            }
            if (!workspace.IntValues.ContainsKey(Prefix + "Shape"))
            {
                BrushShape = EnumBrushShape.Ball;
            }
            if (!workspace.IntValues.ContainsKey(Prefix + "DepthLimit"))
            {
                DepthLimit = EnumDepthLimit.NoLimit;
            }

            GenBrush();
        }
コード例 #15
0
 public ImportTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccessor) : base(workspace, blockAccessor)
 {
     if (!workspace.StringValues.ContainsKey("std.pasteToolFilenames"))
     {
         BlockDataFilenames = null;
     }
     if (!workspace.IntValues.ContainsKey("std.pasteToolOrigin"))
     {
         Origin = EnumOrigin.BottomCenter;
     }
     if (!workspace.IntValues.ContainsKey("std.importReplaceMode"))
     {
         ReplaceMode = EnumReplaceMode.Replaceable;
     }
     if (!workspace.IntValues.ContainsKey("std.pasteToolRandomRotate"))
     {
         RandomRotate = false;
     }
 }
コード例 #16
0
        public AirBrushTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccessor) : base(workspace, blockAccessor)
        {
            if (!workspace.FloatValues.ContainsKey("std.airBrushRadius"))
            {
                Radius = 8;
            }
            if (!workspace.FloatValues.ContainsKey("std.airBrushQuantity"))
            {
                Quantity = 10;
            }
            if (!workspace.IntValues.ContainsKey("std.airBrushApply"))
            {
                Apply = EnumAirBrushApply.AnyFace;
            }
            if (!workspace.IntValues.ContainsKey("std.airBrushMode"))
            {
                Mode = EnumAirBrushMode.Add;
            }

            lcgRand = new LCGRandom(workspace.world.Seed);
        }
コード例 #17
0
        public ErodeTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccessor) : base(workspace, blockAccessor)
        {
            if (!workspace.FloatValues.ContainsKey("std.erodeToolBrushRadius"))
            {
                BrushRadius = 10;
            }
            if (!workspace.FloatValues.ContainsKey("std.erodeToolKernelRadius"))
            {
                KernelRadius = 2;
            }
            if (!workspace.IntValues.ContainsKey("std.erodeToolIterations"))
            {
                Iterations = 1;
            }
            if (!workspace.IntValues.ContainsKey("std.useSelectedBlock"))
            {
                UseSelectedBlock = false;
            }

            PrecalcKernel();
        }
コード例 #18
0
 public WorldEditWorkspace(IWorldAccessor world, IBlockAccessorRevertable blockAccessor)
 {
     this.revertableBlockAccess = blockAccessor;
     this.world = world;
 }
コード例 #19
0
ファイル: ToolBase.cs プロジェクト: valipopescu/vscreativemod
 public ToolBase(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess)
 {
     this.blockAccessRev = blockAccess;
     this.workspace      = workspace;
 }
コード例 #20
0
 public AutoSelectTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccess) : base(workspace, blockAccess)
 {
 }
コード例 #21
0
 public EraserTool(WorldEditWorkspace workspace, IBlockAccessorRevertable blockAccessor) : base(workspace, blockAccessor)
 {
 }