public override Result OnAreaValid(Player player, Vector3i position, Quaternion rotation) { // instead of placing as a world object, spawn blocks Vector3i placementDir = rotation.RotateVector(Vector3i.Left).Round; var blockTypes = GetBlockTypesForDirection(placementDir); foreach (var blockType in blockTypes) { UsableItemUtils.PlayerPlaceBlock(blockType, position, player, false); position += placementDir; } return(Result.Succeeded); }
public override void BlockInteraction(Vector3i pos, Quaternion rot, VehicleComponent vehicle, Inventory inv = null) { if (this.enabled) { foreach (var offset in area) { var targetPos = (rot.RotateVector(offset) + pos).XYZi; Result authResult = AuthManager.IsAuthorized(targetPos, vehicle.Driver.User); if (World.GetBlock(targetPos + Vector3i.Down).Is <Tillable>() && authResult.Success) { if (UsableItemUtils.TryDestroyPlant(vehicle.Driver, vehicle.Parent.Position3i).TryApply()) { World.SetBlock <TilledDirtBlock>(targetPos + Vector3i.Down); } } } } }
public override InteractResult OnActLeft(InteractionContext context) { if (context.HasBlock) { var abovePos = context.BlockPosition.Value + Vector3i.Up; var aboveBlock = World.GetBlock(abovePos); if (!aboveBlock.Is <Solid>() && context.Block.Is <Tillable>() && !(aboveBlock is TreeBlock)) { return((InteractResult)this.PlayerPlaceBlock <TilledDirtBlock>( context.BlockPosition.Value, context.Player, true, 1, UsableItemUtils.TryDestroyPlant(context.Player, abovePos))); } else { return(InteractResult.NoOp); } } return(base.OnActLeft(context)); }
public override InteractResult OnActLeft(InteractionContext context) { if (context.HasBlock) { if (context.Block is PlantBlock) { var plant = EcoSim.PlantSim.GetPlant(context.BlockPosition.Value); if (plant != null && plant is IHarvestable) { Result result = ((IHarvestable)plant).TryHarvest(context.Player, false); if (result.Success) { this.BurnCalories(context.Player); } return((InteractResult)result); } else { return((InteractResult)this.PlayerDeleteBlock(context.BlockPosition.Value, context.Player, false)); } } else if (context.Block.Is <Diggable>()) { if (TreeEntity.TreeRootsBlockDigging(context)) { return(InteractResult.Failure(Localizer.DoStr("You attempt to dig up the soil, but the roots are too strong!"))); } IAtomicAction destroyAction = UsableItemUtils.TryDestroyPlant(context.Player, context.BlockPosition.Value + Vector3i.Up); return((InteractResult)this.PlayerDeleteBlock( context.BlockPosition.Value, context.Player, true, 1, new DirtItem(), destroyAction)); } else { return(InteractResult.NoOp); } } else { return(InteractResult.NoOp); } }
public override InteractResult OnActLeft(InteractionContext context) { if (!context.HasBlock) { return(InteractResult.NoOp); } Type blockType = GetRoadBlock(context.Block); if (blockType != null) { IAtomicAction destroyAction = UsableItemUtils.TryDestroyPlant( context.Player, context.BlockPosition.Value + Vector3i.Up, DeathType.Construction); return((InteractResult)PlayerPlaceBlock(blockType, context.BlockPosition.Value, context.Player, true, 1, destroyAction)); } else { return(InteractResult.NoOp); } }
public override InteractResult OnActLeft(InteractionContext context) { if (!context.HasBlock) { return(InteractResult.NoOp); } Type blockType = this.GetRoadBlock(context.Block); if (blockType != null) { if (TreeEntity.TreeRootsBlockDigging(context)) { return(InteractResult.Failure(Localizer.DoStr("You attempt to make a road, but the roots are too strong!"))); } IAtomicAction destroyAction = UsableItemUtils.TryDestroyPlant( context.Player, context.BlockPosition.Value + Vector3i.Up, DeathType.Construction); return((InteractResult)this.PlayerPlaceBlock(blockType, context.BlockPosition.Value, context.Player, true, 1, destroyAction)); } else { return(InteractResult.NoOp); } }