/// <summary> /// Attempts to get this player to place down its /// <see cref="CarriedBlock"/> (if any) at the specified /// selection, returning whether it was successful. /// </summary> /// <example cref="ArgumentNullException"> Thrown if player or selection is null. </exception> public static bool PlaceCarried(this IPlayer player, BlockSelection selection, CarrySlot slot) { if (player == null) { throw new ArgumentNullException(nameof(player)); } if (selection == null) { throw new ArgumentNullException(nameof(selection)); } if (!player.Entity.World.Claims.TryAccess( player, selection.Position, EnumBlockAccessFlags.BuildOrBreak)) { return(false); } var carried = CarriedBlock.Get(player.Entity, slot); if (carried == null) { return(false); } return(carried.PlaceDown(player.Entity.World, selection, player.Entity)); }
/// <summary> /// Attempts to swap the <see cref="CarriedBlock"/>s currently carried in the /// entity's <paramref name="first"/> and <paramref name="second"/> slots. /// </summary> /// <example cref="ArgumentNullException"> Thrown if entity is null. </exception> public static bool Swap(this Entity entity, CarrySlot first, CarrySlot second) { if (first == second) { throw new ArgumentException("Slots can't be the same"); } var carriedFirst = CarriedBlock.Get(entity, first); var carriedSecond = CarriedBlock.Get(entity, second); if ((carriedFirst == null) && (carriedSecond == null)) { return(false); } CarriedBlock.Remove(entity, first); CarriedBlock.Remove(entity, second); if (carriedFirst != null) { carriedFirst.Set(entity, second); } if (carriedSecond != null) { carriedSecond.Set(entity, first); } return(true); }
/// <summary> /// Attempts to get this entity to pick up the block the /// specified position as a <see cref="CarriedBlock"/>, /// returning whether it was successful. /// </summary> /// <example cref="ArgumentNullException"> Thrown if entity or pos is null. </exception> public static bool Carry(this Entity entity, BlockPos pos, CarrySlot slot, bool checkIsCarryable = true) { if (CarriedBlock.Get(entity, slot) != null) { return(false); } var carried = CarriedBlock.PickUp(entity.World, pos, slot, checkIsCarryable); if (carried == null) { return(false); } carried.Set(entity, slot); carried.PlaySound(pos, entity.World, (entity as EntityPlayer)); return(true); }
/// <summary> /// Attempts to get this player to place down its /// <see cref="CarriedBlock"/> (if any) at the specified /// selection, returning whether it was successful. /// </summary> /// <example cref="ArgumentNullException"> Thrown if player or selection is null. </exception> public static bool PlaceCarried(this IPlayer player, BlockSelection selection, CarrySlot slot) { if (player == null) { throw new ArgumentNullException(nameof(player)); } if (selection == null) { throw new ArgumentNullException(nameof(selection)); } var carried = CarriedBlock.Get(player.Entity, slot); if (carried == null) { return(false); } return(carried.PlaceDown(player.Entity.World, selection, player.Entity)); }
/// <summary> /// Attempts to make this entity drop its <see cref="CarriedBlock"/> /// (if any) at the specified position, returning whether it was successful. /// </summary> /// <example cref="ArgumentNullException"> Thrown if entity or pos is null. </exception> public static bool DropCarried(this IEntity entity, BlockPos pos) { if (pos == null) { throw new ArgumentNullException(nameof(pos)); } var carried = CarriedBlock.Get(entity); if (carried == null) { return(false); } var selection = new BlockSelection { Position = pos, Face = BlockFacing.UP, HitPosition = new Vec3d(0.5, 0.5, 0.5), }; return(carried.PlaceDown(entity.World, selection, entity)); }
/// <summary> Returns the <see cref="CarriedBlock"/> this entity /// is carrying in the specified slot, or null of none. </summary> /// <example cref="ArgumentNullException"> Thrown if entity or pos is null. </exception> public static CarriedBlock GetCarried(this Entity entity, CarrySlot slot) => CarriedBlock.Get(entity, slot);
/// <summary> Returns the <see cref="CarriedBlock"/> /// this entity is carrying, or null of none. </summary> /// <example cref="ArgumentNullException"> Thrown if entity or pos is null. </exception> public static CarriedBlock GetCarried(this IEntity entity) => CarriedBlock.Get(entity);