public override void OnHeldInteractStop(float secondsUsed, ItemSlot slot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel) { if (blockSel == null) { return; } if (secondsUsed < 1.9f) { return; } IWorldAccessor world = byEntity.World; Block block = byEntity.World.BlockAccessor.GetBlock(blockSel.Position); if (!CanSqueezeInto(block)) { return; } BlockBucket blockbucket = block as BlockBucket; if (blockbucket != null) { if (blockbucket.TryPutContent(world, blockSel.Position, new ItemStack(world.GetItem(new AssetLocation("honeyportion"))), 1) == 0) { return; } } else { AssetLocation loc = new AssetLocation(block.Attributes["contentItem2BlockCodes"]["honeyportion"].AsString()); world.BlockAccessor.SetBlock(world.GetBlock(loc).BlockId, blockSel.Position); } slot.TakeOut(1); slot.MarkDirty(); IPlayer byPlayer = null; if (byEntity is EntityPlayer) { byPlayer = world.PlayerByUid(((EntityPlayer)byEntity).PlayerUID); } ItemStack stack = new ItemStack(world.GetItem(new AssetLocation("beeswax"))); if (byPlayer?.InventoryManager.TryGiveItemstack(stack) == false) { byEntity.World.SpawnItemEntity(stack, byEntity.SidedPos.XYZ); } }
public override void OnHeldInteractStart(ItemSlot itemslot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel, bool firstEvent, ref EnumHandHandling handHandling) { if (blockSel == null || byEntity.Controls.Sneak) { base.OnHeldInteractStart(itemslot, byEntity, blockSel, entitySel, firstEvent, ref handHandling); return; } IPlayer byPlayer = (byEntity as EntityPlayer)?.Player; ItemStack contentStack = GetContent(byEntity.World, itemslot.Itemstack); Block targetedBlock = byEntity.World.BlockAccessor.GetBlock(blockSel.Position); if (!byEntity.World.Claims.TryAccess(byPlayer, blockSel.Position, EnumBlockAccessFlags.BuildOrBreak)) { byEntity.World.BlockAccessor.MarkBlockDirty(blockSel.Position.AddCopy(blockSel.Face)); byPlayer?.InventoryManager.ActiveHotbarSlot?.MarkDirty(); return; } if (!TryFillFromBlock(itemslot, byEntity, blockSel.Position)) { BlockBucket targetBucket = targetedBlock as BlockBucket; if (targetBucket != null) { WaterTightContainableProps props = GetContentProps(byEntity.World, itemslot.Itemstack); if (targetBucket.TryPutContent(byEntity.World, blockSel.Position, contentStack, 1) > 0) { TryTakeContent(byEntity.World, itemslot.Itemstack, 1); byEntity.World.PlaySoundAt(props.FillSpillSound, blockSel.Position.X, blockSel.Position.Y, blockSel.Position.Z, byPlayer); } } else { if (byEntity.Controls.Sprint) { SpillContents(itemslot, byEntity, blockSel); } } } // Prevent placing on normal use handHandling = EnumHandHandling.PreventDefaultAction; }
protected override void ActivateSlotRightClick(ItemSlot sourceSlot, ref ItemStackMoveOperation op) { IWorldAccessor world = inventory.Api.World; BlockBucket bucketblock = sourceSlot.Itemstack?.Block as BlockBucket; if (bucketblock != null) { if (Empty) { return; } ItemStack bucketContents = bucketblock.GetContent(world, sourceSlot.Itemstack); if (bucketContents == null) { TakeOut(bucketblock.TryPutContent(world, sourceSlot.Itemstack, Itemstack, 1)); MarkDirty(); } else { if (itemstack.Equals(world, bucketContents, GlobalConstants.IgnoredStackAttributes)) { TakeOut(bucketblock.TryPutContent(world, sourceSlot.Itemstack, bucketblock.GetContent(world, sourceSlot.Itemstack), 1)); MarkDirty(); return; } } return; } if (itemstack != null && sourceSlot.Itemstack?.ItemAttributes?["contentItem2BlockCodes"].Exists == true) { string outBlockCode = sourceSlot.Itemstack.ItemAttributes["contentItem2BlockCodes"][itemstack.Collectible.Code.ToShortString()].AsString(); if (outBlockCode != null) { ItemStack outBlockStack = new ItemStack(world.GetBlock(AssetLocation.Create(outBlockCode, sourceSlot.Itemstack.Collectible.Code.Domain))); if (sourceSlot.StackSize == 1) { sourceSlot.Itemstack = outBlockStack; } else { sourceSlot.Itemstack.StackSize--; if (!op.ActingPlayer.InventoryManager.TryGiveItemstack(outBlockStack)) { world.SpawnItemEntity(outBlockStack, op.ActingPlayer.Entity.Pos.XYZ); } } sourceSlot.MarkDirty(); TakeOut(1); } return; } if (sourceSlot.Itemstack?.ItemAttributes?["contentItem2BlockCodes"].Exists == true || sourceSlot.Itemstack?.ItemAttributes?["contentItemCode"].AsString() != null) { return; } base.ActivateSlotRightClick(sourceSlot, ref op); }