public override void OnHeldInteractStart(IItemSlot itemslot, IEntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel, ref EnumHandHandling handling) { if (byEntity.World.Side != EnumAppSide.Server) { handling = EnumHandHandling.PreventDefault; return; } IPlayer byPlayer = null; if (byEntity is IEntityPlayer) { byPlayer = byEntity.World.PlayerByUid(((IEntityPlayer)byEntity).PlayerUID); } if (!(byPlayer is IServerPlayer)) { return; } IServerPlayer serverplayer = byPlayer as IServerPlayer; TreeAttribute tree = new TreeAttribute(); tree.SetString("playeruid", byPlayer?.PlayerUID); tree.SetString("category", itemslot.Itemstack.Attributes.GetString("category")); tree.SetItemstack("itemstack", itemslot.Itemstack.Clone()); api.Event.PushEvent("loreDiscovery", tree); itemslot.TakeOut(1); itemslot.MarkDirty(); handling = EnumHandHandling.PreventDefault; }
/// <summary> /// Sets the tree attribute using the slots. /// </summary> /// <param name="slots"></param> /// <param name="tree"></param> public void SlotsToTreeAttributes(ItemSlot[] slots, ITreeAttribute tree) { tree.SetInt("qslots", slots.Length); TreeAttribute slotsTree = new TreeAttribute(); for (int i = 0; i < slots.Length; i++) { if (slots[i].Itemstack == null) { continue; } slotsTree.SetItemstack(i + "", slots[i].Itemstack.Clone()); } tree["slots"] = slotsTree; }