public override bool OnBlockInteractStart(IWorldAccessor world, IPlayer byPlayer, BlockSelection blockSel,
                                                  ref EnumHandling handling)
        {
            handling = EnumHandling.PreventSubsequent;

            BlockEntity entity = world.BlockAccessor.GetBlockEntity(blockSel.Position);

            if (entity is BlockEntityResinVessel)
            {
                BlockEntityResinVessel vessel = (BlockEntityResinVessel)entity;

                if (!vessel.Inventory.Empty)
                {
                    ItemStack stack = vessel.Inventory[0].TakeOutWhole();
                    if (!byPlayer.InventoryManager.TryGiveItemstack(stack))
                    {
                        world.SpawnItemEntity(stack, blockSel.Position.ToVec3d().Add(0.5, 0.5, 0.5));
                    }

                    vessel.UpdateAsset();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            return(false);
        }
        public override void OnBlockRemoved(IWorldAccessor world, BlockPos pos, ref EnumHandling handling)
        {
            handling = EnumHandling.PassThrough;

            BlockEntity entity = world.BlockAccessor.GetBlockEntity(pos);

            if (entity is BlockEntityResinVessel)
            {
                BlockEntityResinVessel vessel = (BlockEntityResinVessel)entity;

                IPlayer[] players = world.AllOnlinePlayers;
                for (int i = 0; i < players.Length; i++)
                {
                    if (players[i].InventoryManager.HasInventory(vessel.Inventory))
                    {
                        players[i].InventoryManager.CloseInventory(vessel.Inventory);
                    }
                }
            }
        }