示例#1
0
        private void CheckValidToggleAndNotObstructed()
        {
            targetAnvil = Api.World.BlockAccessor.GetBlockEntity(anvilPos) as BlockEntityAnvil;

            obstructed = false;
            if (renderer != null)
            {
                renderer.Obstructed = false;
            }

            mptoggle = Api.World.BlockAccessor.GetBlockEntity(togglePos)?.GetBehavior <BEBehaviorMPToggle>();
            if (mptoggle?.ValidHammerBase(Pos) == false)
            {
                mptoggle   = null;
                obstructed = true;
                if (renderer != null)
                {
                    renderer.Obstructed = true;
                }
                return;
            }

            BlockPos npos = Pos.AddCopy(0, 1, 0);

            for (int i = 0; i < 3; i++)
            {
                Block     block     = Api.World.BlockAccessor.GetBlock(npos);
                Cuboidf[] collboxes = block.GetCollisionBoxes(Api.World.BlockAccessor, npos);
                if (collboxes != null && collboxes.Length > 0)
                {
                    obstructed = true;
                    if (renderer != null)
                    {
                        renderer.Obstructed = true;
                    }
                    break;
                }

                npos.Add(facing.Normali);
            }
        }
示例#2
0
        public override void OnNeighbourBlockChange(IWorldAccessor world, BlockPos pos, BlockPos neibpos)
        {
            BEBehaviorMPToggle bemptoggle = world.BlockAccessor.GetBlockEntity(pos)?.GetBehavior <BEBehaviorMPToggle>();

            if (bemptoggle != null && !bemptoggle.IsAttachedToBlock())
            {
                foreach (BlockFacing face in BlockFacing.HORIZONTALS)
                {
                    BlockPos         npos        = pos.AddCopy(face);
                    BlockAngledGears blockagears = world.BlockAccessor.GetBlock(npos) as BlockAngledGears;
                    if (blockagears == null)
                    {
                        continue;
                    }
                    if (blockagears.Facings.Contains(face.Opposite) && blockagears.Facings.Length == 1)
                    {
                        world.BlockAccessor.BreakBlock(npos, null);
                    }
                }
            }

            base.OnNeighbourBlockChange(world, pos, neibpos);
        }